파이썬과 케라스를 이용한 딥러닝/강화학습 주식투자

퀀트 투자, 알고리즘 트레이딩을 위한 최첨단 해법 입문

강화학습은 스스로 학습하는 머신러닝 기법으로서 주식 데이터 학습에 잘 적용되는 기법입니다. 이 책은 파이썬을 이용한 강화학습 기반의 주식투자 시뮬레이션 프로그램을 개발하는 방법을 설명합니다. 이를 위해 이론과 코드 수준에서 상세한 설명을 덧붙였습니다. 이 책을 통해 딥러닝과 강화학습을 이해하고 이를 주식투자를 비롯한 다양한 도메인에서 활용할 수 있을 것입니다.

★ 이 책에서 다루는 내용 ★

  • 딥러닝과 강화학습 이론
  • 주식투자에 강화학습을 적용하는 법
  • 강화학습 기반의 주식투자 시스템 개발
  • 강화학습을 위한 실제 주식 데이터 획득 및 처리
  • 강화학습으로 주식 데이터를 학습하는 법
  • 학습한 강화학습 모델을 활용하는 법
  • 강화학습 기반의 주식투자 시스템을 커스터마이징하는 법

 

도서 상세 이미지

김문권

10년이 넘게 소프트웨어 개발을 해왔습니다. 파이썬, 자바를 포함한 다양한 언어를 익혔으며 안드로이드 앱 개발, 웹 프로그래밍, 데이터 분석, 머신러닝, 딥러닝, 빅데이터 분석을 포함하여 그동안 주목을 받아 온 다양한 기술을 익혀왔습니다.

숭실대학교에서 소프트웨어 공학 전공으로 석사 학위를 취득하고 박사 과정을 수료했습니다. 그 과정에서 국내외 저명 학회와 학술지에 수십 편의 논문을 발표했으며 우수 논문상도 여러 번 수상했습니다. 현재는 네이버에서 검색 기술을 개발하고 있습니다.

퀀트투자 연구소(http://quantylab.com)를 운영하고 있으며, GitHub(https://github.com/quantylab)에서 퀀트투자 관련 프로젝트를 진행하고 있습니다.

  • ▣ 01장: 배경 이론 1 - 딥러닝이란?
    • 1.1 딥러닝 개요
      • 1.1.1 딥러닝의 정의와 역사
      • 1.1.2 딥러닝이 최근에 주목 받는 이유
      • 1.1.3 딥러닝으로 풀고자 하는 문제
    • 1.2 딥러닝의 발전 과정
      • 1.2.1 퍼셉트론
      • 1.2.2 인공 신경망
      • 1.2.3 심층 신경망
    • 1.3 딥러닝에 필요한 핵심 기술
      • 1.3.1 오차 역전파 기법
      • 1.3.2 최적해 탐색 기법
      • 1.3.3 과적합 해결 기법
    • 1.4 고급 인공 신경망 구조
      • 1.4.1 순환 신경망
      • 1.4.2 LSTM 신경망
      • 1.4.3 합성곱 신경망
    • 1.5 딥러닝 적용 사례
      • 1.5.1 기계 번역
      • 1.5.2 음성 인식
      • 1.5.3 이미지 인식
    • 1.6 이번 장의 요점
    •  
  • ▣ 02장: 배경 이론 2 - 강화학습이란?
    • 2.1 강화학습의 기초가 된 마르코프 의사결정 과정
      • 2.1.1 마르코프 가정
      • 2.1.2 마르코프 과정
      • 2.1.3 마르코프 의사결정 과정
    • 2.2 주요 강화학습 기법
      • 2.2.1 Q 러닝 강화학습
      • 2.2.2 정책 경사 강화학습
    • 2.3 강화학습 적용 사례
      • 2.3.1 벽돌 깨기
      • 2.3.2 알파고
    • 2.4 이번 장의 요점
    •  
  • ▣ 03장: 배경 이론 3 - 강화학습을 이용한 주식투자란?
    • 3.1 직관적으로 강화학습 전략 알아보기
      • 3.1.1 강화학습을 이용한 주식투자 구조
      • 3.1.2 차트 데이터 이해하기
      • 3.1.3 차트 데이터를 바탕으로 강화학습을 하는 방식
      • 3.1.4 거래 수수료와 거래세
      • 3.1.5 무작위 행동 결정(탐험)과 무작위 행동 결정 비율(엡실론)
    • 3.2 강화학습 효과를 차별화하는 요인들
      • 3.2.1 차별화 요인 1: 학습 데이터 구성
      • 3.2.2 차별화 요인 2: 보상 규칙
      • 3.2.3 차별화 요인 3: 행동 종류
      • 3.2.4 차별화 요인 4: 정책 신경망
      • 3.2.5 차별화 요인 5: 강화학습 기법인 Q 러닝과 정책 경사
    • 3.3 차트 데이터와 학습 데이터 살펴보기
      • 3.3.1 차트 데이터
      • 3.3.2 학습 데이터
    • 3.4 주식투자 강화학습 절차
      • 3.4.1 주식투자 강화학습 순서도
      • 3.4.2 행동 결정
      • 3.4.3 결정된 행동 수행
      • 3.4.4 배치 학습 데이터 생성 및 정책 신경망 업데이트
    • 3.5 주식투자 강화학습 과정 및 결과 확인 방법
      • 3.5.1 강화학습 과정 확인의 필요성
      • 3.5.2 강화학습 과정을 로그로 남기기
      • 3.5.3 강화학습 과정을 이미지로 가시화하기
    • 3.6 이번 장의 요점
    •  
  • ▣ 04장: 모듈 개발 - 강화학습 기반 주식투자 시스템 개발
    • 4.1 RLTrader 개발에 필요한 환경
      • 4.1.1 아나콘다 설치
      • 4.1.2 텐서플로와 케라스 설치
    • 4.2 RLTrader의 구조
      • 4.2.1 모듈 구조
      • 4.2.2 디렉터리 구조
      • 4.2.3 에이전트 모듈 개요
      • 4.2.4 환경 모듈 개요
      • 4.2.5 정책 신경망 모듈 개요
      • 4.2.6 가시화기 모듈 개요
      • 4.2.7 정책 학습기 모듈 개요
    • 4.3 환경 모듈 개발
      • 4.3.1 환경 모듈의 주요 속성과 함수
      • 4.3.2 코드 조각: 환경 클래스의 전체 소스코드
    • 4.4 에이전트 모듈 개발
      • 4.4.1 에이전트 모듈의 주요 속성과 함수
      • 4.4.2 코드 조각 1: 에이전트 클래스의 상수 선언 부분
      • 4.4.3 코드 조각 2: 에이전트 클래스의 생성자 부분
      • 4.4.4 코드 조각 3: 에이전트 클래스의 함수 부분
    • 4.5 정책 신경망 모듈 개발
      • 4.5.1 정책 신경망 모듈의 주요 속성과 함수
      • 4.5.2 정책 신경망에서 사용하는 LSTM 신경망의 구조
      • 4.5.3 코드 조각 1: 정책 신경망 클래스의 생성자 부분
      • 4.5.4 코드 조각 2: 정책 신경망 클래스의 함수 선언 부분
    • 4.6 가시화기 모듈 개발
      • 4.6.1 가시화기 모듈의 주요 속성과 함수
      • 4.6.2 가시화기 모듈이 만들어 내는 정보
      • 4.6.3 코드 조각 1: 가시화기 클래스의 생성자 부분
      • 4.6.4 코드 조각 2: 일봉 차트 가시화 함수 부분
      • 4.6.5 코드 조각 3: 전체 차트 가시화 함수 선언 부분
      • 4.6.6 코드 조각 4: 에이전트 상태 가시화 부분
      • 4.6.7 코드 조각 5: 정책 신경망 출력 결과 및 탐험 수행 가시화 부분
      • 4.6.8 코드 조각 6: 포트폴리오 가치 및 기타 정보 가시화 부분
      • 4.6.9 코드 조각 7: 차트 초기화 및 저장 함수 부분
    • 4.7 정책 학습기 모듈 개발
      • 4.7.1 코드 조각 1: 정책 학습기 모듈의 의존성 임포트 부분
      • 4.7.2 코드 조각 2: 정책 학습기 클래스의 생성자 부분
      • 4.7.3 코드 조각 3: 에포크 초기화 함수 부분
      • 4.7.4 코드 조각 4: 학습 함수 선언 부분
      • 4.7.5 코드 조각 5: 학습 함수 초반 부분
      • 4.7.6 코드 조각 6: 학습 함수의 로컬 변수 초기화 부분
      • 4.7.7 코드 조각 7: 학습 함수의 연관 객체 초기화 및 탐험 비율 설정 부분
      • 4.7.8 코드 조각 8: 학습 함수의 에포크 수행 while 문 초반부
      • 4.7.9 코드 조각 9: 학습 함수의 행동과 그 결과를 저장하는 부분
      • 4.7.10 코드 조각 10: 학습 함수의 반복 정보 갱신 부분
      • 4.7.11 코드 조각 11: 학습 함수의 정책 신경망 학습 부분
      • 4.7.12 코드 조각 12: 에포크 결과 가시화 부분
      • 4.7.13 코드 조각 13: 에포크 결과 로그 기록 부분
      • 4.7.14 코드 조각 14: 학습 통계 정보 갱신 부분
      • 4.7.15 코드 조각 15: 최종 학습 결과 통계 정보 로그 기록 부분
      • 4.7.16 코드 조각 16: 미니 배치 데이터 생성 함수 부분
      • 4.7.17 코드 조각 17: 학습 데이터 샘플 생성 부분
      • 4.7.18 코드 조각 18: 투자 시뮬레이션을 하는 trade() 함수 부분
    • 4.8 이번 장의 요점
    •  
  • ▣ 05장: 데이터 준비 - 주식 데이터 획득
    • 5.1 방법 1. 증권사 HTS 사용
      • 5.1.1 증권사 HTS 다운로드
      • 5.1.2 증권 계좌 개설
      • 5.1.3 종목 차트 데이터 확인
      • 5.1.4 일별 데이터 엑셀 파일 저장
    • 5.2 방법 2. 증권사 API 사용
      • 5.2.1 증권사 API 설치
      • 5.2.2 대신증권 크레온 API 사용 환경 준비
      • 5.2.3 대신증권 크레온 HTS 실행
      • 5.2.4 대신증권 크레온 API를 이용한 차트 데이터 획득 프로그램 작성
    • 5.3 방법 3. 포털 사이트 사용
      • 5.3.1 pandas-datareader, fix_yahoo_finance 설치하기
      • 5.3.2 Google Finance에서 주식 데이터 획득하기
      • 5.3.3 Yahoo Finance에서 주식 데이터 획득하기
    • 5.4 이번 장의 요점
    •  
  • ▣ 06장: 모델 구축 - 투자 시뮬레이션
    • 6.1 주식 데이터 전처리
      • 6.1.1 코드 조각 1: CSV 파일을 읽는 부분
      • 6.1.2 코드 조각 2: 종가와 거래량의 이동 평균 구하기
      • 6.1.3 코드 조각 3: 주가와 거래량의 비율 구하기
      • 6.1.4 코드 조각 4: 주가와 거래량의 이동 평균 비율 구하기
    • 6.2 주식 데이터 학습
      • 6.2.1 코드 조각 1: 강화학습을 실행하는 메인(main) 모듈
      • 6.2.2 코드 조각 2: 강화학습에 필요한 주식 데이터 준비 부분
      • 6.2.3 코드 조각 3: 데이터를 차트 데이터와 학습 데이터로 분리하는 부분
      • 6.2.4 코드 조각 4: 강화학습을 시작하는 부분
    • 6.3 학습 과정 및 결과 확인
      • 6.3.1 콘솔에 출력되는 로그의 의미
      • 6.3.2 가시화 결과가 저장되는 그림 파일
    • 6.4 이번 장의 요점
    •  
  • ▣ 07장: 모델 검증 - 투자 시뮬레이션
    • 7.1 투자 시뮬레이션 결과 1: 삼성전자(005930)
      • 7.1.1 종목의 개요
      • 7.1.2 주식 데이터 전처리
      • 7.1.3 학습 파라미터 설정
      • 7.1.4 에포크 10일 때의 결과
      • 7.1.5 에포크 200일 때의 결과
      • 7.1.6 에포크 600일 때의 결과
      • 7.1.7 에포크 1000일 때의 결과
      • 7.1.8 총평
    • 7.2 투자 시뮬레이션 결과 2: SK하이닉스(000660)
      • 7.2.1 종목의 개요
      • 7.2.2 주식 데이터 전처리
      • 7.2.3 학습 파라미터 설정
      • 7.2.4 에포크 10일 때의 결과
      • 7.2.5 에포크 200일 때의 결과
      • 7.2.6 에포크 600일 때의 결과
      • 7.2.7 에포크 1000일 때의 결과
      • 7.2.8 총평
    • 7.3 투자 시뮬레이션 결과 3: 현대차(005380)
      • 7.3.1 종목의 개요
      • 7.3.2 주식 데이터 전처리
      • 7.3.3 학습 파라미터 설정
      • 7.3.4 에포크 10일 때의 결과
      • 7.3.5 에포크 200일 때의 결과
      • 7.3.6 에포크 600일 때의 결과
      • 7.3.7 에포크 1000일 때의 결과
      • 7.3.8 총평
    • 7.4 투자 시뮬레이션 결과 4: LG화학(051910)
      • 7.4.1 종목의 개요
      • 7.4.2 주식 데이터 전처리
      • 7.4.3 학습 파라미터 설정
      • 7.4.4 에포크 10일 때의 결과
      • 7.4.5 에포크 200일 때의 결과
      • 7.4.6 에포크 600일 때의 결과
      • 7.4.7 에포크 1000일 때의 결과
      • 7.4.8 총평
    • 7.5 투자 시뮬레이션 결과 5: NAVER(035420)
      • 7.5.1 종목의 개요
      • 7.5.2 주식 데이터 전처리
      • 7.5.3 학습 파라미터 설정
      • 7.5.4 에포크 10일 때의 결과
      • 7.5.5 에포크 200일 때의 결과
      • 7.5.6 에포크 600일 때의 결과
      • 7.5.7 에포크 1000일 때의 결과
      • 7.5.8 총평
    • 7.6 투자 시뮬레이션 결과 6: KT(030200)
      • 7.6.1 종목의 개요
      • 7.6.2 주식 데이터 전처리
      • 7.6.3 학습 파라미터 설정
      • 7.6.4 에포크 10일 때의 결과
      • 7.6.5 에포크 200일 때의 결과
      • 7.6.6 에포크 600일 때의 결과
      • 7.6.7 에포크 1000일 때의 결과
      • 7.6.8 총평
      • 7.7 투자 시뮬레이션 결과 정리 및 원숭이 투자와의 비교
    • 7.8 이번 장의 요점
    •  
  • ▣ 08장: 모델 활용 - 학습된 정책 신경망 모델을 사용한 투자 시뮬레이션
    • 8.1 모델 학습과 모델 활용의 차이점
      • 8.1.1 시뮬레이션 과정 차이점
      • 8.1.2 소스코드의 차이점
    • 8.2 학습된 정책 신경망 모델을 사용한 투자 시뮬레이션
      • 8.2.1 학습된 모델 적용 1: 삼성전자(005930)
      • 8.2.2 학습된 모델 적용 2: SK하이닉스(000660)
      • 8.2.3 학습된 모델 적용 3: 현대차(005380)
      • 8.2.4 학습된 모델 적용 4: LG화학(051910)
      • 8.2.5 학습된 모델 적용 5: NAVER(035420)
      • 8.2.6 학습된 모델 적용 6: KT(030200)
      • 8.2.7 총평
    • 8.3 투자 시뮬레이션 결과 정리 및 원숭이 투자와의 비교
    • 8.4 이번 장의 요점
    •  
  • ▣ 부록A: 기본 용어 정리
    • A.1 파이썬 프로그래밍 기본 용어 정리
    • A.2 머신러닝 기본 용어 정리
    • A.3 주식 거래 기본 용어 정리
    •  
  • ▣ 부록B: RLTRAder 커스터마이징
    • B.1 에이전트 모듈 커스터마이징
      • B.1.1 커스터마이징 대상
      • B.1.2 매매수수료 및 세금 커스터마이징 방법
      • B.1.3 행동 결정 로직 커스터마이징 방법
    • B.2 정책 신경망 모듈 커스터마이징
      • B.2 1 커스터마이징 대상
      • B.2.2 레이어 차원이나 드롭아웃 확률 커스터마이징 방법
      • B.2.3 신경망 유형 커스터마이징 사례
    • B.3 학습 데이터 커스터마이징
      • B.3.1 커스터마이징 대상
      • B.3.2 ‘기관순매수’ 및 ‘외국인순매수’ 데이터 획득
      • B.3.3 코드 조각 1: 주식 데이터 읽기 커스터마이징
      • B.3.4 코드 조각 2: 주식 데이터 전처리 커스터마이징
      • B.3.5 코드 조각 3: 학습 데이터 생성 커스터마이징
      • B.3.6 코드 조각 4: 메인 모듈 커스터마이징 1
      • B.3.7 코드 조각 5: 메인 모듈 커스터마이징 2
    •  
  • ▣ 부록C: 딥러닝에서 GPU 사용하기
    • C.1 GPU 사용을 위한 하드웨어 준비
      • C.1.1 그래픽카드 인식 확인
      • C.1.2 호환되는 그래픽카드 확인
    • C.2 GPU 사용을 위한 소프트웨어 준비
      • C.2.1 CUDA 툴킷 설치
      • C.2.2 cuDNN 라이브러리 설치
      • C.2.3 텐서플로의 GPU 사용 최종 확인
  • FutureWarning 관련 오류

    실습 시 다음과 같은 내용이 출력될 경우

    FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'
    

    다음과 같이 Numpy 라이브러리 버전을 1.17 이하 버전으로 재설치해서 진행한다.

    pip uninstall numpy
    pip install "numpy<1.17"
    
  • 31쪽, 밑에서 3번째 줄

    어떠한 상태가 때 그 다음 상태가

    ==>

    어떠한 상태가 i일 때 그다음 상태가

  • 42쪽, 본문 3번째 줄

    4번 시점에서

    ==>

    4번 지점에서

  • 42쪽, 표 3.1을 다음 표로 대체

    그림 3.1

  • 42쪽, 표 3.2를 다음 표로 대체

    그림 3.2

  • 43쪽, 표 3.3을 다음 표로 대체

    그림 3.3

  • 76쪽, 예제 4.4의 61번째 줄

    self.ratio_hold = self.num_hold / int(
    

    ==>

    self.ratio_hold = self.num_stocks / int(
    
  • 78쪽, 예제 4.5의 79번째 줄

    confidence = 1 + probs[action]
    

    ==>

    confidence = probs[action]
    
  • 96쪽, 예제 4.15의 34번째 행

    outvals=None, exps=None,
    

    ==>

    outvals=None, exps=None, learning=None,
    
  • 241쪽, 예제 B.2의 79번째 줄

    confidence = 1 + probs[action]
    

    ==>

    confidence = probs[action]