"상스치콤조"의 두 판 사이의 차이
(→구성원 및 추진체계) |
(→개발 일정) |
||
(같은 사용자의 중간 판 33개는 보이지 않습니다) | |||
26번째 줄: | 26번째 줄: | ||
===개발 과제의 개요=== | ===개발 과제의 개요=== | ||
====개발 과제 요약==== | ====개발 과제 요약==== | ||
− | + | ◇ 12개의 경제 지표(MACD, EMA, Momentum, SlowK, SlowD, ROC, William_R, A/D, RSI, OBV, upperband, lowerband)를 기반으로 주가를 예측하는 인공지능 주가 예측 모델-1 | |
− | + | ||
+ | ◇ 경제 뉴스 요약문을 기반으로 주가를 예측하는 인공지능 주가 예측 모델-2 | ||
+ | |||
====개발 과제의 배경==== | ====개발 과제의 배경==== | ||
− | + | ◇ 인공지능 주가 예측 시스템의 실현 가능성 및 효과 검증 | |
− | + | ||
− | + | ◇ 주가 예측 방식에 따른 차이점, 한계 분석 결과 제공 | |
− | + | ||
+ | ◇ 주가 예측 대상(코스피, 특정 기업)에 따른 차이점 분석 결과 제공 | ||
+ | |||
+ | ◇ 자연어 상태의 뉴스를 이진 데이터로 임베딩하기 위한 방법론들의 결과와 효과 및 영향 비교 분석 | ||
+ | |||
====개발 과제의 목표 및 내용==== | ====개발 과제의 목표 및 내용==== | ||
− | + | * 경제 지표를 이용한 주가 예측 모델 제작 및 효과 검증 | |
− | + | ** 주가를 효과적으로 반영하는 경제 지표 식별 | |
− | + | ** 특정 주의 경제 지표에 해당 주의 최근 주가 정보를 labeling하여 데이터셋 가공 | |
− | + | ** 해당 데이터셋을 이용했을 때 주가를 효과적으로 예측할 수 있는 모델 구조 식별 및 익일의 주가또는 주가 등락 예측 | |
− | + | * 경제 뉴스를 이용한 주가 예측 모델 제작 및 효과 검증 | |
− | + | ** 경제 뉴스 수집 | |
− | + | ** 경제 뉴스 파싱 및 핵심 문장 추출 | |
− | + | ** 자연어 상태의 뉴스 데이터를 그 의미를 보존한 상태로 바이너리 데이터로 임베딩하기 위한 효과적인 방법 식별 및 임베딩 | |
− | + | ** 바이너리 뉴스 데이터에 최근 주가 정보를 labeling하여 데이터셋 가공 | |
− | + | ** 해당 데이터셋을 기반으로 주가를 효과적으로 예측할 수 있는 모델 구조 식별 및 익일 주가 등락 예측 | |
− | |||
− | |||
− | |||
===관련 기술의 현황=== | ===관련 기술의 현황=== | ||
====관련 기술의 현황 및 분석(State of art)==== | ====관련 기술의 현황 및 분석(State of art)==== | ||
− | + | ===== State of art ===== | |
− | + | ◇ Deep Learning for Stock Market Prediction Using Technical Indicators and Financial News Articles, Manuel R. Vargas,2018 IEEE | |
+ | |||
+ | LSTM 네트워크를 사용하였는데, 주가와 관련 있는 뉴스 제목을 감성분석을 이용하여 기술적 지표와 함께 주가 예측에 사용하였다. | ||
+ | |||
+ | |||
+ | ◇ Deep Learning Using Risk-Reward Function for Stock Market Prediction, Pisut Oncharoen, CSAI '18 | ||
+ | |||
+ | 새로운 손실함수인 Risk-Reward function을 사용하여 CNN과 LSTM을 학습시켜 주가를 예측하였다. | ||
+ | |||
+ | |||
+ | ◇ Is Deep Learning for Image Recognition Applicable to Stock Market Prediction?, Hyun Sik Sim, hindawai | ||
+ | |||
+ | 주가예측 방법으로 CNN을 사용하였다. 9가지 경제 지표를 사용하였는데, 이 지표들을 이미지로 변환 시켜 CNN에 입력하였다. 입력된 지표들은 특징이 추출되어 주가예측에 사용되었다. | ||
+ | |||
+ | |||
+ | ◇ Financial Trading Model with Stock Bar Chart Image Time Series with Deep Convolutional Neural Networks, Omer Berat Sezer, arXiv:1903.04610v1 | ||
− | + | 30일 동안의 주가 봉 이미지를 이용하여 2-D CNN을 학습시켜 주가를 예측하였다. | |
− | + | =====기술 로드맵===== | |
+ | * 경제 지표를 이용한 주가 예측 모델 | ||
+ | ** 경제 지표 및 주가 데이터 수집 기술 | ||
+ | ** 경제 지표를 기반으로 학습 및 예측하는 딥러닝 모델 개발 | ||
+ | * 경제 뉴스를 이용한 주가 예측 모델 제작 및 효과 검증 | ||
+ | ** 경제 뉴스 수집 기술 | ||
+ | ** 경제 뉴스 파싱 및 핵심 문장 추출 기술 | ||
+ | ** 자연어 뉴스 데이터에 대한 바이너리 임베딩 기술 | ||
+ | ** 바이너리 뉴스 데이터를 기반으로 학습 및 예측하는 딥러닝 모델 개발 | ||
− | + | =====특허조사===== | |
+ | ◇ 주가 등락 예측 방법 및 서버(STOCK FLUCTUATIION PREDICTION METHOD AND SERVER) / 1020150184916(2015.12.23.) | ||
+ | 뉴스와 KOSPI 데이터를 수집하는 데이터 수집기, 수집된 뉴스에서 불용어 제거 및 형태소 분석을 통해 단어를 추출하는 전처리기, 감성 단어들을 선정하고 감성 단어의 감성 수치를 계산하여 주가 예측을 위해 필요한 주식 도메인의 감성 사전을 구축하는 감성 사전 구축기 및 구축된 감성사전을 이용한 예측 모델 및 KOSPI 데이터를 이용한 ARIMA 예측 모델을 결합하여 당일 대비 익일 종가의 등락을 예측하는 주가 등락 예측 모델 구축기로 구성된다. 감성 단어의 극성은 특정 수학식을 이용해 계산하며 이를 Score로 환산한 다음 ARIMA 모형을 이용해 등락을 예측한다. | ||
− | |||
− | |||
− | + | ◇ 시가총액 분석을 통한 미래주가 예측시스템(Method for prediction of future stock price using analysis of aggregate market value of listed stock) / 1020130035884(2013.04.02.) | |
+ | 과거 일정 기간 동안의 시가총액정보와 재무정보를 비교하여 시가총액정보와 재무정보 간의 유사성을 판단하여 시가총액의 움직임에 연관성을 가진 재무지표를 식별하고 그 결과에 따라 재무정보에 부여할 가중치와 적용규칙을 설정하여 주가의 다면적 평가를 위한 기본 예측 모형을 결정하고, 상기 미래예측 질문에 응답할 가상의 시가총액정보를 기본 예측 모형을 통해 산출하는 미래예측 연산서버가 핵심이며 미래 예측에는 인공 신경망 등의 기계 학습이 사용된 것이 아니라, 유전적 알고리즘과 학습형 분류 시스템 등 진화 프로그래밍 기법이 사용되었다. | ||
− | |||
− | + | ◇ 인공 신경망 모형을 이용한 주가 등락 예측 시스템 및 주가 등락 예측 방법(SYSTEM AND METHOD FOR PREDICTING CHANGE OF STOCK PRICE USING ARTIFICIAL NEURAL NETWORK MODEL) / 1020130163585(2013.12.26.) | |
− | |||
− | |||
− | |||
− | |||
+ | 인공 신경망을 이용한 주가 등락 예측 시스템이며 복수의 증시 관련 데이터를 입력 데이터로 입력받는 입력부, 입력된 복수의 증시 관련 데이터를 제1 복수 노드에 할당하고, 제1 복수 노드에 할당된 데이터별로 제1 가중치를 적용하여 제2 복수 노드에 할당함으로써 인공 신경망 모형을 모델링하는 모델링부, 제2 복수 노드에 할당된 데이터들에 제2 가중치를 적용하여 가중합을 연산한 뒤 활성화 함수에 입력하여 싱글값으로 산출하고, 싱글값을 기 정의된 임계값과 비교하여 싱글값이 임계값보다 크면 출력값으로 하이 값을 출력하고 싱글값이 임계값보다 작으면 출력값으로 로우 값을 출력하는 출력부를 포함한다. 즉 입력층, 은닉층, 출력층으로 구성된 인공 신경망이며 각 층은 모두 전결합 층이다. 학습 및 예측에 사용되는 복수의 증시 관련 데이터는 KOSPI 200 index, KOSPI에 속하는 200개 및 코스닥(KOSDAQ)에 속하는 30개 개별 종목의 종가, 각종 업종지수 11개, 증시와 관련된 Social Media Data 등을 포함하는 다양한 증시와 관련된 데이터일 수 있다. 또한, 복수의 증시 관련 데이터는 증시와 관련된 소셜 미디어 데이터에 대한 감성 데이터를 포함할 수 있다. 오차 함수로는 y’(1-y’)(y-y’)을 사용했다. 감성 데이터에 대한 감성 지수 평가는 긍정, 중립, 부정에 대한 평가 및 이 평가와 연계된 스코어를 저장하는 감성 사전 데이터베이스를 참조하여 스코어링한다. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====시장상황에 대한 분석==== | ====시장상황에 대한 분석==== | ||
− | + | =====경쟁제품 조사 비교===== | |
− | + | ◇ 레이더스탁은 개인 투자자들이 주식투자를 좀 더 쉽게 이해하고 접근 할 수 있게 도와주고, 수익률을 높일 수 있도록 종목의 매수·매도시기를 알람을 통해 최적의 타이밍에 알려주도록 고안된 주식투자 어플리케이션이다. 사람의 결정 대신 여러 지표 데이터들을 기반으로 한 정량적인 분석을 통한 인공지능의 종목 추천을 활용한다. 변동하는 주식시장과 실시간 종목의 빅데이터를 통해 내부 알고리즘을 사용하여 종목을 추천하고, 매수·매도 알림을 보내주어 초보투자자들도 스스로 주식 거래를 할 수 있도록 도와준다. | |
− | + | ||
− | + | ◇ 로보어드바이저(RoboAdvisor)는 로봇(Robot)과 어드바이저(Advisor)의 합성어이다. 딥러닝, 알고리즘, 빅데이터 분석 등의 기술에 기반을 두고 개인의 투자 성향 또한 반영하여, 자동으로 주식투자를 위한 ‘포트폴리오를 구성’하고 그 포트폴리오를 ‘리밸런싱(재구성)’하며, 그 것을 바탕으로 주식 투자를 ‘운용’해주는 온라인상의 자산 관리 서비스이다. 로보어드바이저 서비스는 미국, 유럽 금융회사 중심으로 성장하고 있으며, 로보어드바이저의 대표주자로 미국의 Betterment사나 Wealthfront사가 있다. | |
− | + | ||
+ | ◇ '신한 쿼터백 글로벌 로보랩'은 기존 글로벌 주식 상품의 유사한 구조와 달리 새로운 형태를 가진 상품이다. 쿼터백자산운용의 로보어드바이저 시스템을 사용하여 얻어낸 투자 포트폴리오를 통해 객관적 지표인 정량적 수치를 바탕으로 운용되며 이러한 운용의 결과의 사후관리까지 지원한다. 미국에 상장된 ETF로 포트폴리오를 구성한 것을 기반을 두어 글로벌 투자를 실행한다. | ||
+ | |||
− | |||
− | |||
− | |||
===개발과제의 기대효과=== | ===개발과제의 기대효과=== | ||
====기술적 기대효과==== | ====기술적 기대효과==== | ||
− | + | ◇ 기존에 알려진 보편적인 딥러닝 모델(CNN, RNN)이 주가 예측에 실제로 잘 적용될 수 있는지 관측 | |
− | + | ||
− | + | ◇ 주가 예측 모델 선정, 데이터 가공, 임베딩 등 주가 예측 모델을 구성하기 위한 전 과정에서 마주치는 설계 결정 사항에 대해, 해당 조건 하에서 구성한 모델의 문제점 및 실행 결과 제공 | |
+ | |||
+ | ◇ 인공지능 주가 예측 시스템을 설계하면서 겪은 시행착오를 공유함으로써 이후 같은 분야 연구에 대한 사전 자료로 활용 가능 | ||
+ | |||
====경제적, 사회적 기대 및 파급효과==== | ====경제적, 사회적 기대 및 파급효과==== | ||
− | + | ◇ 인공지능 주가 예측 서비스의 기반 기술로 활용 가능하며, 이와 같은 서비스는 지나친 투기 목적의 투자를 억제할 수 있을 것으로 기대 | |
− | + | ||
− | + | ◇ 투기성 매매가 억제되면 주식 시장의 주가 변동이 상대적으로 안정화 될 것으로 기대 | |
+ | |||
+ | ◇ 투자 정보, 경제 정보에 접근하기 어려운 일반인들과 이와 같은 고급 정보를 가진 계층 사이의 간극을 줄여 줄 수 있을 것으로 기대 | ||
+ | |||
===기술개발 일정 및 추진체계=== | ===기술개발 일정 및 추진체계=== | ||
====개발 일정==== | ====개발 일정==== | ||
− | + | {| cellpadding="20" cellspacing="0" border="1" | |
+ | |- | ||
+ | ! rowspan="2" | 단계별 세부개발 내용 || rowspan="2" | 담당자 || colspan="4" | 개발기간(월단위) || rowspan="2" | 비고 | ||
+ | |- | ||
+ | ! 3 || 4 || 5 || 6 | ||
+ | |- | ||
+ | |경제 뉴스 RSS feed parsing 및 핵심 문장 추출 | ||
+ | |엄성범 | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |뉴스 데이터 가공(OpenIE, Word2vec, 번역 등) | ||
+ | |엄성범 | ||
+ | | | ||
+ | | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | |- | ||
+ | |기술적 지표 사용 딥러닝 네트워크 설계 및 구현 | ||
+ | |김주호 | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |뉴스 데이터 사용 RNN, CNN 딥러닝 네트워크 설계 및 구현 | ||
+ | |김주호 | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | |- | ||
+ | |뉴스 데이터 사용 NTN, CNN 딥러닝 네트워크 설계 및 구현 | ||
+ | |한강모 | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |BERT 모델 사용 모듈 구현 | ||
+ | |한강모 | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | style=";background-color:#878686;" | | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | |||
====구성원 및 추진체계==== | ====구성원 및 추진체계==== | ||
− | + | ◇엄성범: 웹 크롤링, 뉴스 데이터 가공 및 데이터 라벨링 | |
− | + | ||
− | + | ◇한강모: NTN X EB-CNN 신경망 및 BERT 모듈 구현 | |
+ | |||
+ | ◇김주호: 기술적 지표를 이용한 주가 예측 신경망 설계 및 학습 | ||
+ | |||
==설계== | ==설계== | ||
169번째 줄: | 246번째 줄: | ||
====설계 사양==== | ====설계 사양==== | ||
− | + | ◇ 뉴스 데이터에서 추출한 문장이 뉴스의 핵심 정보를 잘 반영해야 한다. | |
− | + | ||
− | + | ◇ 뉴스 문장에서 추출한 요소가 해당 단어의 문맥적 의미를 소실하지 않아야 한다. | |
− | + | ||
− | + | ◇ 뉴스 요소를 이진 데이터로 전사할 때, 벡터 스페이스에 전사된 요소들이 적절히 클러스터링 되어야한다. | |
− | + | ||
− | + | ◇ 이진 뉴스 데이터가 주가에 미치는 영향을 효과적으로 설명할 수 있어야 한다. | |
− | + | ||
+ | ◇ 학습에 사용할 기술적 지표가 현재 주가에 대한 정보를 얼마나 함축적으로 담고 있어야 한다. | ||
+ | |||
+ | ◇ 시계열 데이터를 학습할 때 네트워크가 정확하게 학습해야 한다. | ||
+ | |||
+ | ◇ 입력 데이터의 스케일이 학습 결과에 얼마나 영향을 끼치는지를 파악해야 한다. | ||
+ | |||
+ | ◇ 네트워크의 어떤 출력 방법이 실제 시스템 트레이딩에 효과적인지 파악해야 한다. | ||
+ | |||
===개념설계안=== | ===개념설계안=== | ||
− | 뉴스 데이터 수집 - 자체구현 | + | * 뉴스 데이터 수집 - 자체구현 |
− | 뉴스 데이터 전처리 - 자체구현 | + | * 뉴스 데이터 전처리 - 자체구현 |
− | 번역 - Google Translation API 오픈소스 | + | * 번역 - Google |
− | NLP processing : OpenIE 오픈소스 | + | * Translation API 오픈소스 |
− | word embedding : GloVe(또는 Word2Vec) 오픈소스 | + | * NLP processing : OpenIE 오픈소스 |
− | NTN 네트워크 구성 : 오픈소스 Keras 이용 자체구현 | + | * word embedding : |
− | CNN 네트워크 구성 : 오픈소스 Keras 이용 자체구현 | + | * GloVe(또는 Word2Vec) 오픈소스 |
− | 기술적 지표 수집 : 대신증권 오픈 API 이용 | + | * NTN 네트워크 구성 : 오픈소스 Keras 이용 자체구현 |
− | 기술적 지표 학습 네트워크 구성 : 오픈소스 Keras 이용 자체구현 | + | * CNN 네트워크 구성 : 오픈소스 Keras 이용 자체구현 |
− | 매매 알고리즘 : 자체구현 | + | * 기술적 지표 수집 : 대신증권 오픈 API 이용 |
+ | * 기술적 지표 학습 네트워크 구성 : 오픈소스 Keras 이용 자체구현 | ||
+ | * 매매 알고리즘 : 자체구현 | ||
+ | 각 개념설계안은 다음 항목들에서 한 가지씩 선택하여 구성할 수 있다. | ||
− | |||
(e.g., 핵심 문장, 주어;서술어;목적어, 번역-OpenIE, GloVe, NTN, EB-CNN) | (e.g., 핵심 문장, 주어;서술어;목적어, 번역-OpenIE, GloVe, NTN, EB-CNN) | ||
− | + | ||
− | + | ◇ 뉴스 데이터에서 (타이틀 | 핵심 문장)을 사용한다. | |
− | + | ||
− | + | ◇ 뉴스 문장을 이진 데이터로 전사하기 전, 복잡도를 줄이기 위해 (단어 | 주어;서술어;목적어)로 자른다. | |
+ | |||
+ | ◇ 주어, 서술어, 목적어로 나누고 번역하기 위해 (KoNLP - 번역 | 번역 – Stanford CoreNLP OpenIE) 순서로 진행한다. | ||
+ | |||
+ | ◇ 뉴스 문장에서 추출한 요소를 이진 데이터로 전사하기 위해 (Stanford GloVe | Google Word2Vec)을 사용한다. | ||
+ | |||
[[파일:10_개념1.png]] | [[파일:10_개념1.png]] | ||
− | + | ||
+ | ◇ 이진 데이터로 변환된 뉴스 데이터가 주가에 미치는 영향을 결정하기 위해 (감성 DB + EB-CNN | NTN x CNN)을 사용한다. | ||
+ | |||
[[파일:10_개념2.png]] | [[파일:10_개념2.png]] | ||
[[파일:10_개념3.png]] | [[파일:10_개념3.png]] | ||
− | + | ◇ 기술적 지표의 종류는 Overlap Sudies, Momentum Indicators, Volume Indicators를 사용한다. | |
− | + | ||
− | + | ◇ 기술적 지표를 학습 및 예측할 네트워크 모델로 (LSTM | GRU)를 사용한다. | |
+ | |||
+ | ◇ 기술적 지표를 네트워크에 입력할 때 (그대로 | 0-1 사이 범위로 데이터 스케일링 후) 입력한다. | ||
+ | |||
[[파일:10_개념4.png]] | [[파일:10_개념4.png]] | ||
− | + | ◇ 주가 예측 네트워크 출력을 (주가의 등락을 예측하는 binary classification으로 | 종가를 예측하는 linear regression으로) 구현한다. | |
+ | |||
[[파일:10_개념5.png]] | [[파일:10_개념5.png]] | ||
===상세설계 내용=== | ===상세설계 내용=== | ||
− | 1. 뉴스 데이터 | + | ====1. 뉴스 데이터 전처리==== |
+ | |||
+ | =====방법1 : Google Translation API + OpenIE + 영문 Word embedding===== | ||
[[파일:10_상세1.png]] | [[파일:10_상세1.png]] | ||
− | |||
− | 뉴스 | + | ======가. 뉴스 페이지 크롤링====== |
− | + | ◇ 뉴스 데이터를 확보하기 위해 뉴스 페이지를 크롤링해 html로 저장한다. 1994.01.01.부터 현재까지 총 681048건의 경제 뉴스를 확보했다. | |
+ | |||
+ | |||
+ | ======나. 뉴스 제목 및 요약문 추출 - 뉴스 페이지 HTML 파싱====== | ||
+ | |||
+ | ◇ 전체 뉴스 페이지 HTML에서 뉴스 데이터만을 추출하기 위해서, 뉴스 페이지 HTML을 파싱해 뉴스 날짜, 시간, 제목, 요약문만 추출하여 csv로 저장한다. | ||
− | |||
[[파일:10_상세2.png]] | [[파일:10_상세2.png]] | ||
− | + | ======다. 뉴스 핵심 문장 추출====== | |
+ | |||
+ | ◇ 제목 및 요약문을 하나의 핵심 문장으로 요약하기 위해 첫 번째 등장하는 문장만 추출한다. | ||
− | |||
[[파일:10_상세3.png]] | [[파일:10_상세3.png]] | ||
− | + | ======라. 뉴스 문장 전처리====== | |
+ | |||
+ | ◇ 문장 또는 단어의 의미와 무관하거나 혼란을 줄 수 있는 특수문자 혹은 부연설명 절을 제거한다. | ||
− | |||
[[파일:10_상세4.png]] | [[파일:10_상세4.png]] | ||
− | + | ======마. 뉴스 핵심 문장 번역====== | |
+ | |||
+ | ◇ Google Cloud Translation API를 이용하여 추출한 뉴스 문장을 번역한다. | ||
− | |||
[[파일:10_상세5.png]] | [[파일:10_상세5.png]] | ||
− | + | ======바. 뉴스 번역 결과로부터 문장 내 단어(주어, 행위, 대상) 추출====== | |
− | OpenIE를 이용하여 번역한 뉴스 문자열에서 주어, 행위, 대상에 해당하는 단어를 추출한다. | + | |
+ | ◇ OpenIE를 이용하여 번역한 뉴스 문자열에서 주어, 행위, 대상에 해당하는 단어를 추출한다. | ||
+ | |||
[[파일:10_상세6.png]] | [[파일:10_상세6.png]] | ||
− | + | ======사. Word embedidng - 단어(주어, 행위, 대상)를 이진 데이터(벡터)로 변환====== | |
− | GloVe를 이용하여 추출된 주어, 행위, 대상에 해당하는 단어를 vector space에 embedding하여 binary data로 변환한다. 이 때 단어의 의미를 소실하지 않도록 뉴스 데이터를 이용해 GloVe를 사전 학습시켜 단어들이 적절하게 클러스터링 되도록 한다. | + | ◇ GloVe를 이용하여 추출된 주어, 행위, 대상에 해당하는 단어를 vector space에 embedding하여 binary data로 변환한다. 이 때 단어의 의미를 소실하지 않도록 뉴스 데이터를 이용해 GloVe를 사전 학습시켜 단어들이 적절하게 클러스터링 되도록 한다. |
+ | ======아. 문제점====== | ||
− | + | ◇ 핵심 문장 추출을 위해 첫 문장을 읽어오는 방식은 제대로 핵심 문장을 추출하지 못해 손실되는 뉴스의 비율이 꽤 높다. | |
− | + | ◇ 번역 뉴스 문장이 매끄럽지 않아 이벤트 추출이 어렵거나, 의미가 왜곡되는 경우가 있다. 또한 Google Translation API를 사용하면서 발생하는 비용 문제도 있다. | |
+ | |||
+ | ◇ OpenIE에서 한 뉴스 문장에 대해서 핵심 (주어/목적어/서술어) 한 이벤트만 반환하는게 아니라 문장 내 fact라고 생각되는 모든 구성을 반환한다. 따라서 한 뉴스에서 추출되는 (주어/목적어/서술어) 이벤트의 수가 제각각이어서, 주가 예측에서 추출되는 벡터가 여러 개다.(이벤트가 여러 개 추출되는 뉴스가 비교적 덜 중요한 내용이더라도, 여러 이벤트가 추출되면 중요한 뉴스보다 큰 영향을 미칠 가능성이 있다.) | ||
+ | |||
+ | ◇ Word embedding 시 Google News로 pretrained된 모델을 사용했으나 하나의 word vector의 차원이 300(벡터의 원소 수가 300개)으로 너무 높다. (300, 300, 300)으로 이루어진 이벤트를 NTN에 넣고 학습을 시키면 NTN의 총 가중치 벡터 원소 수가 8000만개가 되어 NTN이 너무 deep해져 학습이 제대로 이루어지지 않고 속도가 너무 느려 합리적인 시간 내에 연산을 끝낼 수 없다. | ||
+ | |||
+ | |||
+ | |||
+ | =====방법2 : BERT : Sentence embedding===== | ||
+ | 상기한 문제점들을 개선한 뉴스 데이터 전처리 방법은 다음과 같다. | ||
+ | |||
+ | ◇ 별도의 뉴스 요약 방법을 사용하여 핵심 문장 추출의 신뢰도를 높인다. | ||
+ | |||
+ | ◇ 뉴스 문장을 OpenIE를 이용해서 (주어/목적어/서술어) 이벤트로 자른 다음 (주어/목적어/서술어)를 하나의 벡터로 합치기 위해서 NTN을 사용하는 기존의 방식을 사용하지 않고, 문장 전체를 한 번에 하나의 벡터로 embedding하는 BERT를 사용한다. 또한 뉴스를 번역하면서 문장이 매끄럽지 않거나 의미가 왜곡된다는 문제점 및 비용 문제를 해결할 수 있다. | ||
+ | |||
+ | |||
+ | [[파일:bert1.png|frame|none|BERT 사용전]] | ||
+ | |||
+ | [[파일:bert2.png|frame|none|BERT 사용후]] | ||
+ | |||
+ | |||
+ | |||
+ | '''BERT란''' | ||
+ | |||
+ | ◇ BERT(Bidirectional Encoder Representations from Transformers)은 2018년 10월에 논문이 공개 되었고, 2018년 11월에 오픈소스로 코드까지 공개된 구글의 새로운 Language Represeentation Model이다. | ||
+ | |||
+ | ◇ NLP 분야의 11개 테스크에 state-of-the-art를 기록하며 좋은 성능을 보이고 있다. | ||
+ | |||
+ | ◇ 대형 코퍼스에서 Unsupervised Learning으로 General-Purpose Language Understanding 모델을 구축하고pre-training Supervised Learning으로 Fine-tuning 해서 QA, STS등의 하위downstream NLP 태스크에 적용하는 Semi-supervised Learning 모델이다. | ||
+ | |||
+ | |||
+ | ====2. 뉴스 처리 신경망==== | ||
+ | |||
+ | =====가. NTN 기반 신경망===== | ||
+ | |||
+ | ◇ 이전 단계에서 Word Embedding을 통해 추출한 EVENT 튜플을 NTN 기반 신경망으로 Event Embedding한다. | ||
+ | |||
+ | ◇ NTN 기반 신경망은 T1, T2, T3의 NTN(Neural Tensor Network)을 [Socher et al., 2013] 응용한 신경망을 조합하여 구성된다. | ||
− | |||
− | |||
[[파일:10_상세7.png]] | [[파일:10_상세7.png]] | ||
− | + | ◇ 그림의 R1은 아래 식을 통해 T1 신경망을 거쳐 유도된다. | |
+ | |||
[[파일:10_상세8.png]] | [[파일:10_상세8.png]] | ||
− | + | ◇ R2와 U는 R1과 같은 방식으로 각각 T2, T3를 거쳐 유도된다. | |
− | + | ||
+ | ◇ loss 함수는 아래와 같이 구성되는데, | ||
+ | |||
[[파일:10_상세9.png]] | [[파일:10_상세9.png]] | ||
− | + | ◇ Socher가 고안한 Contrastive Max-margin Objective Function을 응용한 함수이다. 는 input으로 쓰인 EVENT 튜플을 뜻하고, 은 의미 없는 EVENT를 희석시키기 위한 랜덤으로 추려낸 오염된 EVENT 튜플이다. | |
+ | |||
280번째 줄: | 428번째 줄: | ||
− | + | ◇ 위의 출력 결과에서 u는 f(E) , ur은 f(E^r) 을 의미한다. | |
− | + | ||
+ | ◇ temp1은 max(0,1-f(E)+f(E^r)) 의 결과이다. | ||
+ | |||
[[파일:10_상세11.png]] | [[파일:10_상세11.png]] | ||
− | + | ◇ L2 정규화 항은로 구성되며 varis가 각각 파라미터를 의미한다. temp2는 L2 정규화 항의 결과이다. | |
− | + | ||
+ | ◇ 아래는 계산한 loss 값의 출력이다. | ||
+ | |||
[[파일:10_상세12.png]] | [[파일:10_상세12.png]] | ||
− | + | ◇ 학습 결과 출력 | |
+ | |||
[[파일:10_상세13.png]] | [[파일:10_상세13.png]] | ||
− | + | ◇ validation 결과 출력 | |
+ | |||
[[파일:10_상세14.png]] | [[파일:10_상세14.png]] | ||
− | + | ◇ 추출한 U – vector 파일 저장 | |
+ | |||
[[파일:10_상세15.png]] | [[파일:10_상세15.png]] | ||
− | + | =====나. EB-CNN 신경망===== | |
+ | |||
+ | ◇ NTN 기반 신경망으로부터 추출한 U – vector를 input으로 하여 convolutional 신경망을 통해 V-vector를 추출한다. | ||
− | |||
[[파일:10_상세16.png]] | [[파일:10_상세16.png]] | ||
− | + | ◇ sliding window 방식으로 U – vector를 convolution layer에 통과시키고 | |
− | + | ||
+ | |||
[[파일:10_상세17.png]] | [[파일:10_상세17.png]] | ||
− | + | ◇ polling layer를 통해 max polling 시킨다. | |
+ | |||
[[파일:10_상세18.png]] | [[파일:10_상세18.png]] | ||
− | + | ◇ 추출된 Long term, Mid term, Short term의 V – vector를 합친다. | |
+ | |||
[[파일:10_상세19.png]] | [[파일:10_상세19.png]] | ||
− | + | ◇ V – vector를 이용 Binary Classification하여 주가를 예측한다. | |
+ | |||
[[파일:10_상세20.png]] | [[파일:10_상세20.png]] | ||
◇ 아래는 학습 출력 결과이다. tp는 binary_crossentropy 함수 통과 결과, temp는 tp의 평균값이다. | ◇ 아래는 학습 출력 결과이다. tp는 binary_crossentropy 함수 통과 결과, temp는 tp의 평균값이다. | ||
+ | |||
[[파일:10_상세21.png]] | [[파일:10_상세21.png]] | ||
− | + | ◇ 아래는 validation 결과이다. | |
+ | |||
[[파일:10_상세22.png]] | [[파일:10_상세22.png]] | ||
− | + | ◇ Binary Classification 결과 파일 저장 | |
+ | |||
[[파일:10_상세24.png]] | [[파일:10_상세24.png]] | ||
− | + | ====3. 경제지표 추출부==== | |
− | + | =====가. 데이터 로드===== | |
− | + | ◇ 주가 정보를 얻기 위해 대신증권 API에 접속한다. | |
− | |||
− | |||
− | |||
− | + | ◇ 특정한 주가를 선택 후, API에서 제공하는 최대 기간인 1996년 12월 26일부터 현재까지 데이터를 가져온다. 시가, 고가, 저가, 종가, 거래량 정보를 받아온다, | |
− | + | ◇ 오픈 라이브러리 ta-lib을 사용하여 기술적 지표를 계산한다. 구체적으로 MACD, EMA, Momentum, Stochastic, ROC, william R, A/D, RSI, OBV, Bollinger Bands를 계산한다. | |
− | + | ◇ 주가 데이터 및 기술적 지표를 일자별로 엑셀로 저장한다. | |
− | |||
− | |||
− | |||
− | + | [[파일:10_상세25.png]] | |
− | + | =====나. 학습 및 검증 데이터 생성===== | |
− | |||
+ | ◇ 저장된 엑셀을 불러온다. | ||
− | + | ◇ MACD, EMA, Momentum, Stochastic, ROC, william R, A/D, RSI, OBV, Bollinger Bands는 기술적지표로서 학습에 사용될 X_label로 저장 | |
− | + | ◇ 전날대비증가량은 y_label로 저장한다, | |
− | + | ◇ 전체 데이터의 90%는 학습데이터로 사용하고 10%는 검증 데이터로 사용한다. | |
− | |||
− | + | =====다. 데이터 전처리===== | |
− | + | ◇ 각각의 기술적 지표는 스케일이 다르므로 바로 학습에 넣기 어렵다. | |
− | + | ◇ 기술적 지표마다 정규화를 적용 후 학습에 사용한다 | |
− | |||
− | |||
− | === | + | =====라. 예측 모델===== |
+ | a) 종가 예측 모델 | ||
− | + | [[파일:10_상세26.png]] | |
+ | b) 등락 예측 모델 | ||
− | + | [[파일:10_상세27.png]] | |
− | + | =====마. T-Vector===== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ◇ 출력층 직전의 Dense계층인 code layer가 T-Vector가 된다, T-Vector는 기술적 지표를 통해 주가의 특징을 추출한 벡터이다. | ||
− | + | ◇ 3가지 모델 중 가장 예측이 잘되는 모델을 사용하여 T-Vector를 추출한다, | |
− | + | ◇ 뉴스 데이터를 통해 추출한 V-Vector와 T-Vector를 최종 주가 예측 모델의 입력값으로 사용한다. | |
− | |||
==결과 및 평가== | ==결과 및 평가== | ||
413번째 줄: | 557번째 줄: | ||
− | + | ◇ 뉴스를 크롤링해서 HTML 뉴스 데이터를 확보하고, HTML파일을 파싱해 뉴스 문장만 추출해낸다. | |
+ | |||
419번째 줄: | 564번째 줄: | ||
− | + | ◇ 뉴스 요약문에서 핵심 문장만 잘라낸다. | |
+ | |||
425번째 줄: | 571번째 줄: | ||
− | + | ◇ 뉴스 핵심 문장에서 word embedding을 어렵게하는 특수문자들을 제거하는 전처리를 수행한다. | |
+ | |||
431번째 줄: | 578번째 줄: | ||
− | + | ◇ 뉴스 문장을 벡터로 임베딩하기 위해서 sentenceRepresenting.py를 실행한다. | |
+ | |||
439번째 줄: | 587번째 줄: | ||
====나. 뉴스를 이용한 주가 예측==== | ====나. 뉴스를 이용한 주가 예측==== | ||
− | + | ◇ Bert로 추출한 벡터를 CNN 학습 파이썬 모둘 실행 | |
+ | |||
445번째 줄: | 594번째 줄: | ||
− | + | ◇ 학습 과정 | |
+ | |||
451번째 줄: | 601번째 줄: | ||
− | + | ◇ Validation 결과 | |
+ | |||
460번째 줄: | 611번째 줄: | ||
− | + | ◇ 주가 데이터를 받아오기 위해 대신 증권 CyposPlus에 접속한 상태에서 01_get_data.py를 실행한다. | |
+ | |||
466번째 줄: | 618번째 줄: | ||
− | + | ◇ 예측할 주식의 종목코드를 입력한다. | |
+ | |||
472번째 줄: | 625번째 줄: | ||
− | + | ◇ 주가 정보를 통해 기술적 지표를 계산한다. | |
+ | |||
478번째 줄: | 632번째 줄: | ||
− | + | ◇ 데이터를 엑셀로 저장한다. | |
+ | |||
484번째 줄: | 639번째 줄: | ||
− | + | ◇ 종가 정보를 예측하는 모델을 학습시킨다. | |
+ | |||
490번째 줄: | 646번째 줄: | ||
− | + | ◇ 주가의 등락을 예측 하는 모델을 학습시킨다. | |
+ | |||
496번째 줄: | 653번째 줄: | ||
− | + | ◇ 종가 예측 결과 | |
+ | |||
502번째 줄: | 660번째 줄: | ||
− | + | ◇ 등락 예측 결과 | |
+ | |||
566번째 줄: | 725번째 줄: | ||
====가. 어려웠던 내용들==== | ====가. 어려웠던 내용들==== | ||
− | + | ◇ 기술적 지표만으로 종가를 예측하는 경우 타임딜레이(이틀 전 종가 가격을 현재 종가 가격으로 예측)가 생긴다. | |
− | + | ◇ 하나의 주식 종목의 종가를 예측하는 모델 경우 학습 데이터가 작기 때문에 학습이 완벽하게 되지 않는다. | |
− | + | ◇ 여러 주식 종목의 기술적 지표 데이터를 정규화 과정을 거친 후 학습으로 사용하는 경우, 학습 데이터 수는 늘어났지만 하나의 주식의 종가를 예측하는 모델에 비해 예측 성능이 떨어진다. | |
− | + | ◇ 핵심 문장 추출을 위해 첫 문장을 읽어오는 방식은 제대로 핵심 문장을 추출하지 못해 손실되는 뉴스의 비율이 꽤 높다. | |
− | + | - 별도의 뉴스 요약 방법을 사용하여 핵심 문장 추출의 신뢰도를 높인다. | |
− | + | ◇ 번역 뉴스 문장이 매끄럽지 않아 이벤트 추출이 어렵거나, 의미가 왜곡되는 경우가 있다. 또한 Google Translation API를 사용하면서 발생하는 비용 문제도 있다. | |
− | |||
− | |||
− | + | ◇ OpenIE에서 한 뉴스 문장에 대해서 핵심 (주어/목적어/서술어) 한 이벤트만 반환하는게 아니라 문장 내 fact라고 생각되는 모든 구성을 반환한다. 따라서 한 뉴스에서 추출되는 (주어/목적어/서술어) 이벤트의 수가 제각각이어서, 주가 예측에서 추출되는 벡터가 여러 개다.(이벤트가 여러 개 추출되는 뉴스가 비교적 덜 중요한 내용이더라도, 여러 이벤트가 추출되면 중요한 뉴스보다 큰 영향을 미칠 가능성이 있다.) | |
− | + | ||
+ | - 뉴스 문장에서 (주어/목적어/서술어) 이벤트를 추출하기 위해서 OpenIE가 아니라 KoNLPy를 사용한다. KoNLPy를 사용하면 뉴스를 번역하면서 문장이 매끄럽지 않거나 의미가 왜곡되는 문제점 및 비용 문제를 해결할 수 있다. | ||
+ | |||
+ | ◇ Word embedding 시 Google News로 pretrained된 모델을 사용했으나 하나의 word vector의 차원이 300(벡터의 원소 수가 300개)으로 너무 높다. (300, 300, 300)으로 이루어진 이벤트를 NTN에 넣고 학습을 시키면 NTN의 총 가중치 벡터 원소 수가 8000만개가 되어 NTN이 너무 deep해져 학습이 제대로 이루어지지 않고 속도가 너무 느려 합리적인 시간 내에 연산을 끝낼 수 없다. | ||
+ | |||
+ | - 벡터의 차원이 100인 pretrained 모델을 사용하면 해결할 수 있으나, word space 내에 없는 단어가 많고 성능이 좋지 않고, 한글 corpus에 대해서 학습한 모델 자체가 존재하지 않는다. 더 좋은 성능의 word embedding model을 얻기 위해서 뉴스 문장을 통해서 만든 한글 corpus를 구성하고, Word2Vec을 학습시키며 이 때 차원을 적절히 조절할 수 있다. | ||
====나. 차후 구현할 내용==== | ====나. 차후 구현할 내용==== | ||
− | + | ◇ 비슷한 종목의 주식의 기술적 지표를 이용하여 모델을 구현한다. | |
− | + | ||
+ | ◇ 주가의 일 단위가 아닌 분 단위의 시가를 예측하는 모델을 구현한다. |
2019년 6월 22일 (토) 08:54 기준 최신판
프로젝트 개요
기술개발 과제
국문 : 기술 지표 및 경제 뉴스를 이용한 주가 등락 예측 딥러닝 시스템
영문 : Stock Prediction with Deep Learning System Using Technical Indicators and Financial News
과제 팀명
상스치콤
지도교수
홍의경 교수님
개발기간
2019년 3월 ~ 2019년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 2014920026 엄성범(팀장)
서울시립대학교 컴퓨터과학부 2014920005 김주호
서울시립대학교 컴퓨터과학부 2014920062 한강모
서론
개발 과제의 개요
개발 과제 요약
◇ 12개의 경제 지표(MACD, EMA, Momentum, SlowK, SlowD, ROC, William_R, A/D, RSI, OBV, upperband, lowerband)를 기반으로 주가를 예측하는 인공지능 주가 예측 모델-1
◇ 경제 뉴스 요약문을 기반으로 주가를 예측하는 인공지능 주가 예측 모델-2
개발 과제의 배경
◇ 인공지능 주가 예측 시스템의 실현 가능성 및 효과 검증
◇ 주가 예측 방식에 따른 차이점, 한계 분석 결과 제공
◇ 주가 예측 대상(코스피, 특정 기업)에 따른 차이점 분석 결과 제공
◇ 자연어 상태의 뉴스를 이진 데이터로 임베딩하기 위한 방법론들의 결과와 효과 및 영향 비교 분석
개발 과제의 목표 및 내용
- 경제 지표를 이용한 주가 예측 모델 제작 및 효과 검증
- 주가를 효과적으로 반영하는 경제 지표 식별
- 특정 주의 경제 지표에 해당 주의 최근 주가 정보를 labeling하여 데이터셋 가공
- 해당 데이터셋을 이용했을 때 주가를 효과적으로 예측할 수 있는 모델 구조 식별 및 익일의 주가또는 주가 등락 예측
- 경제 뉴스를 이용한 주가 예측 모델 제작 및 효과 검증
- 경제 뉴스 수집
- 경제 뉴스 파싱 및 핵심 문장 추출
- 자연어 상태의 뉴스 데이터를 그 의미를 보존한 상태로 바이너리 데이터로 임베딩하기 위한 효과적인 방법 식별 및 임베딩
- 바이너리 뉴스 데이터에 최근 주가 정보를 labeling하여 데이터셋 가공
- 해당 데이터셋을 기반으로 주가를 효과적으로 예측할 수 있는 모델 구조 식별 및 익일 주가 등락 예측
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
State of art
◇ Deep Learning for Stock Market Prediction Using Technical Indicators and Financial News Articles, Manuel R. Vargas,2018 IEEE
LSTM 네트워크를 사용하였는데, 주가와 관련 있는 뉴스 제목을 감성분석을 이용하여 기술적 지표와 함께 주가 예측에 사용하였다.
◇ Deep Learning Using Risk-Reward Function for Stock Market Prediction, Pisut Oncharoen, CSAI '18
새로운 손실함수인 Risk-Reward function을 사용하여 CNN과 LSTM을 학습시켜 주가를 예측하였다.
◇ Is Deep Learning for Image Recognition Applicable to Stock Market Prediction?, Hyun Sik Sim, hindawai
주가예측 방법으로 CNN을 사용하였다. 9가지 경제 지표를 사용하였는데, 이 지표들을 이미지로 변환 시켜 CNN에 입력하였다. 입력된 지표들은 특징이 추출되어 주가예측에 사용되었다.
◇ Financial Trading Model with Stock Bar Chart Image Time Series with Deep Convolutional Neural Networks, Omer Berat Sezer, arXiv:1903.04610v1
30일 동안의 주가 봉 이미지를 이용하여 2-D CNN을 학습시켜 주가를 예측하였다.
기술 로드맵
- 경제 지표를 이용한 주가 예측 모델
- 경제 지표 및 주가 데이터 수집 기술
- 경제 지표를 기반으로 학습 및 예측하는 딥러닝 모델 개발
- 경제 뉴스를 이용한 주가 예측 모델 제작 및 효과 검증
- 경제 뉴스 수집 기술
- 경제 뉴스 파싱 및 핵심 문장 추출 기술
- 자연어 뉴스 데이터에 대한 바이너리 임베딩 기술
- 바이너리 뉴스 데이터를 기반으로 학습 및 예측하는 딥러닝 모델 개발
특허조사
◇ 주가 등락 예측 방법 및 서버(STOCK FLUCTUATIION PREDICTION METHOD AND SERVER) / 1020150184916(2015.12.23.)
뉴스와 KOSPI 데이터를 수집하는 데이터 수집기, 수집된 뉴스에서 불용어 제거 및 형태소 분석을 통해 단어를 추출하는 전처리기, 감성 단어들을 선정하고 감성 단어의 감성 수치를 계산하여 주가 예측을 위해 필요한 주식 도메인의 감성 사전을 구축하는 감성 사전 구축기 및 구축된 감성사전을 이용한 예측 모델 및 KOSPI 데이터를 이용한 ARIMA 예측 모델을 결합하여 당일 대비 익일 종가의 등락을 예측하는 주가 등락 예측 모델 구축기로 구성된다. 감성 단어의 극성은 특정 수학식을 이용해 계산하며 이를 Score로 환산한 다음 ARIMA 모형을 이용해 등락을 예측한다.
◇ 시가총액 분석을 통한 미래주가 예측시스템(Method for prediction of future stock price using analysis of aggregate market value of listed stock) / 1020130035884(2013.04.02.)
과거 일정 기간 동안의 시가총액정보와 재무정보를 비교하여 시가총액정보와 재무정보 간의 유사성을 판단하여 시가총액의 움직임에 연관성을 가진 재무지표를 식별하고 그 결과에 따라 재무정보에 부여할 가중치와 적용규칙을 설정하여 주가의 다면적 평가를 위한 기본 예측 모형을 결정하고, 상기 미래예측 질문에 응답할 가상의 시가총액정보를 기본 예측 모형을 통해 산출하는 미래예측 연산서버가 핵심이며 미래 예측에는 인공 신경망 등의 기계 학습이 사용된 것이 아니라, 유전적 알고리즘과 학습형 분류 시스템 등 진화 프로그래밍 기법이 사용되었다.
◇ 인공 신경망 모형을 이용한 주가 등락 예측 시스템 및 주가 등락 예측 방법(SYSTEM AND METHOD FOR PREDICTING CHANGE OF STOCK PRICE USING ARTIFICIAL NEURAL NETWORK MODEL) / 1020130163585(2013.12.26.)
인공 신경망을 이용한 주가 등락 예측 시스템이며 복수의 증시 관련 데이터를 입력 데이터로 입력받는 입력부, 입력된 복수의 증시 관련 데이터를 제1 복수 노드에 할당하고, 제1 복수 노드에 할당된 데이터별로 제1 가중치를 적용하여 제2 복수 노드에 할당함으로써 인공 신경망 모형을 모델링하는 모델링부, 제2 복수 노드에 할당된 데이터들에 제2 가중치를 적용하여 가중합을 연산한 뒤 활성화 함수에 입력하여 싱글값으로 산출하고, 싱글값을 기 정의된 임계값과 비교하여 싱글값이 임계값보다 크면 출력값으로 하이 값을 출력하고 싱글값이 임계값보다 작으면 출력값으로 로우 값을 출력하는 출력부를 포함한다. 즉 입력층, 은닉층, 출력층으로 구성된 인공 신경망이며 각 층은 모두 전결합 층이다. 학습 및 예측에 사용되는 복수의 증시 관련 데이터는 KOSPI 200 index, KOSPI에 속하는 200개 및 코스닥(KOSDAQ)에 속하는 30개 개별 종목의 종가, 각종 업종지수 11개, 증시와 관련된 Social Media Data 등을 포함하는 다양한 증시와 관련된 데이터일 수 있다. 또한, 복수의 증시 관련 데이터는 증시와 관련된 소셜 미디어 데이터에 대한 감성 데이터를 포함할 수 있다. 오차 함수로는 y’(1-y’)(y-y’)을 사용했다. 감성 데이터에 대한 감성 지수 평가는 긍정, 중립, 부정에 대한 평가 및 이 평가와 연계된 스코어를 저장하는 감성 사전 데이터베이스를 참조하여 스코어링한다.
시장상황에 대한 분석
경쟁제품 조사 비교
◇ 레이더스탁은 개인 투자자들이 주식투자를 좀 더 쉽게 이해하고 접근 할 수 있게 도와주고, 수익률을 높일 수 있도록 종목의 매수·매도시기를 알람을 통해 최적의 타이밍에 알려주도록 고안된 주식투자 어플리케이션이다. 사람의 결정 대신 여러 지표 데이터들을 기반으로 한 정량적인 분석을 통한 인공지능의 종목 추천을 활용한다. 변동하는 주식시장과 실시간 종목의 빅데이터를 통해 내부 알고리즘을 사용하여 종목을 추천하고, 매수·매도 알림을 보내주어 초보투자자들도 스스로 주식 거래를 할 수 있도록 도와준다.
◇ 로보어드바이저(RoboAdvisor)는 로봇(Robot)과 어드바이저(Advisor)의 합성어이다. 딥러닝, 알고리즘, 빅데이터 분석 등의 기술에 기반을 두고 개인의 투자 성향 또한 반영하여, 자동으로 주식투자를 위한 ‘포트폴리오를 구성’하고 그 포트폴리오를 ‘리밸런싱(재구성)’하며, 그 것을 바탕으로 주식 투자를 ‘운용’해주는 온라인상의 자산 관리 서비스이다. 로보어드바이저 서비스는 미국, 유럽 금융회사 중심으로 성장하고 있으며, 로보어드바이저의 대표주자로 미국의 Betterment사나 Wealthfront사가 있다.
◇ '신한 쿼터백 글로벌 로보랩'은 기존 글로벌 주식 상품의 유사한 구조와 달리 새로운 형태를 가진 상품이다. 쿼터백자산운용의 로보어드바이저 시스템을 사용하여 얻어낸 투자 포트폴리오를 통해 객관적 지표인 정량적 수치를 바탕으로 운용되며 이러한 운용의 결과의 사후관리까지 지원한다. 미국에 상장된 ETF로 포트폴리오를 구성한 것을 기반을 두어 글로벌 투자를 실행한다.
개발과제의 기대효과
기술적 기대효과
◇ 기존에 알려진 보편적인 딥러닝 모델(CNN, RNN)이 주가 예측에 실제로 잘 적용될 수 있는지 관측
◇ 주가 예측 모델 선정, 데이터 가공, 임베딩 등 주가 예측 모델을 구성하기 위한 전 과정에서 마주치는 설계 결정 사항에 대해, 해당 조건 하에서 구성한 모델의 문제점 및 실행 결과 제공
◇ 인공지능 주가 예측 시스템을 설계하면서 겪은 시행착오를 공유함으로써 이후 같은 분야 연구에 대한 사전 자료로 활용 가능
경제적, 사회적 기대 및 파급효과
◇ 인공지능 주가 예측 서비스의 기반 기술로 활용 가능하며, 이와 같은 서비스는 지나친 투기 목적의 투자를 억제할 수 있을 것으로 기대
◇ 투기성 매매가 억제되면 주식 시장의 주가 변동이 상대적으로 안정화 될 것으로 기대
◇ 투자 정보, 경제 정보에 접근하기 어려운 일반인들과 이와 같은 고급 정보를 가진 계층 사이의 간극을 줄여 줄 수 있을 것으로 기대
기술개발 일정 및 추진체계
개발 일정
단계별 세부개발 내용 | 담당자 | 개발기간(월단위) | 비고 | |||
---|---|---|---|---|---|---|
3 | 4 | 5 | 6 | |||
경제 뉴스 RSS feed parsing 및 핵심 문장 추출 | 엄성범 | |||||
뉴스 데이터 가공(OpenIE, Word2vec, 번역 등) | 엄성범 | |||||
기술적 지표 사용 딥러닝 네트워크 설계 및 구현 | 김주호 | |||||
뉴스 데이터 사용 RNN, CNN 딥러닝 네트워크 설계 및 구현 | 김주호 | |||||
뉴스 데이터 사용 NTN, CNN 딥러닝 네트워크 설계 및 구현 | 한강모 | |||||
BERT 모델 사용 모듈 구현 | 한강모 |
구성원 및 추진체계
◇엄성범: 웹 크롤링, 뉴스 데이터 가공 및 데이터 라벨링
◇한강모: NTN X EB-CNN 신경망 및 BERT 모듈 구현
◇김주호: 기술적 지표를 이용한 주가 예측 신경망 설계 및 학습
설계
설계사양
제품의 요구사항
번호 | 요구사항 | D or W | 비고 |
---|---|---|---|
1 | 주가 예측에 뉴스 데이터를 사용한다. | D | |
2 | 주가 예측에 기술적 지표를 사용한다. | D | |
3 | 시스템의 성능을 학습을 통해 지속적으로 개선해나갈 수 있을 것 | D | |
4 | 한 주식 종목에 종속되지 않고 여러 종목에 보편적으로 적용할 수 있는 시스템일 것 | D | |
5 | 자본을 넣어두면 자동으로 트레이딩 할 것 | W | |
6 | 가진 자본이 일정 이하로 떨어지면 멈출 것 | W | |
7 | 주가 폭락 전에 앱으로 미리 알려줄 것 | W | |
8 | 현재 시스템의 수익률 및 현황 모니터링이 가능할 것 | W |
설계 사양
◇ 뉴스 데이터에서 추출한 문장이 뉴스의 핵심 정보를 잘 반영해야 한다.
◇ 뉴스 문장에서 추출한 요소가 해당 단어의 문맥적 의미를 소실하지 않아야 한다.
◇ 뉴스 요소를 이진 데이터로 전사할 때, 벡터 스페이스에 전사된 요소들이 적절히 클러스터링 되어야한다.
◇ 이진 뉴스 데이터가 주가에 미치는 영향을 효과적으로 설명할 수 있어야 한다.
◇ 학습에 사용할 기술적 지표가 현재 주가에 대한 정보를 얼마나 함축적으로 담고 있어야 한다.
◇ 시계열 데이터를 학습할 때 네트워크가 정확하게 학습해야 한다.
◇ 입력 데이터의 스케일이 학습 결과에 얼마나 영향을 끼치는지를 파악해야 한다.
◇ 네트워크의 어떤 출력 방법이 실제 시스템 트레이딩에 효과적인지 파악해야 한다.
개념설계안
- 뉴스 데이터 수집 - 자체구현
- 뉴스 데이터 전처리 - 자체구현
- 번역 - Google
- Translation API 오픈소스
- NLP processing : OpenIE 오픈소스
- word embedding :
- GloVe(또는 Word2Vec) 오픈소스
- NTN 네트워크 구성 : 오픈소스 Keras 이용 자체구현
- CNN 네트워크 구성 : 오픈소스 Keras 이용 자체구현
- 기술적 지표 수집 : 대신증권 오픈 API 이용
- 기술적 지표 학습 네트워크 구성 : 오픈소스 Keras 이용 자체구현
- 매매 알고리즘 : 자체구현
각 개념설계안은 다음 항목들에서 한 가지씩 선택하여 구성할 수 있다.
(e.g., 핵심 문장, 주어;서술어;목적어, 번역-OpenIE, GloVe, NTN, EB-CNN)
◇ 뉴스 데이터에서 (타이틀 | 핵심 문장)을 사용한다.
◇ 뉴스 문장을 이진 데이터로 전사하기 전, 복잡도를 줄이기 위해 (단어 | 주어;서술어;목적어)로 자른다.
◇ 주어, 서술어, 목적어로 나누고 번역하기 위해 (KoNLP - 번역 | 번역 – Stanford CoreNLP OpenIE) 순서로 진행한다.
◇ 뉴스 문장에서 추출한 요소를 이진 데이터로 전사하기 위해 (Stanford GloVe | Google Word2Vec)을 사용한다.
◇ 이진 데이터로 변환된 뉴스 데이터가 주가에 미치는 영향을 결정하기 위해 (감성 DB + EB-CNN | NTN x CNN)을 사용한다.
◇ 기술적 지표의 종류는 Overlap Sudies, Momentum Indicators, Volume Indicators를 사용한다.
◇ 기술적 지표를 학습 및 예측할 네트워크 모델로 (LSTM | GRU)를 사용한다.
◇ 기술적 지표를 네트워크에 입력할 때 (그대로 | 0-1 사이 범위로 데이터 스케일링 후) 입력한다.
◇ 주가 예측 네트워크 출력을 (주가의 등락을 예측하는 binary classification으로 | 종가를 예측하는 linear regression으로) 구현한다.
상세설계 내용
1. 뉴스 데이터 전처리
방법1 : Google Translation API + OpenIE + 영문 Word embedding
가. 뉴스 페이지 크롤링
◇ 뉴스 데이터를 확보하기 위해 뉴스 페이지를 크롤링해 html로 저장한다. 1994.01.01.부터 현재까지 총 681048건의 경제 뉴스를 확보했다.
나. 뉴스 제목 및 요약문 추출 - 뉴스 페이지 HTML 파싱
◇ 전체 뉴스 페이지 HTML에서 뉴스 데이터만을 추출하기 위해서, 뉴스 페이지 HTML을 파싱해 뉴스 날짜, 시간, 제목, 요약문만 추출하여 csv로 저장한다.
다. 뉴스 핵심 문장 추출
◇ 제목 및 요약문을 하나의 핵심 문장으로 요약하기 위해 첫 번째 등장하는 문장만 추출한다.
라. 뉴스 문장 전처리
◇ 문장 또는 단어의 의미와 무관하거나 혼란을 줄 수 있는 특수문자 혹은 부연설명 절을 제거한다.
마. 뉴스 핵심 문장 번역
◇ Google Cloud Translation API를 이용하여 추출한 뉴스 문장을 번역한다.
바. 뉴스 번역 결과로부터 문장 내 단어(주어, 행위, 대상) 추출
◇ OpenIE를 이용하여 번역한 뉴스 문자열에서 주어, 행위, 대상에 해당하는 단어를 추출한다.
사. Word embedidng - 단어(주어, 행위, 대상)를 이진 데이터(벡터)로 변환
◇ GloVe를 이용하여 추출된 주어, 행위, 대상에 해당하는 단어를 vector space에 embedding하여 binary data로 변환한다. 이 때 단어의 의미를 소실하지 않도록 뉴스 데이터를 이용해 GloVe를 사전 학습시켜 단어들이 적절하게 클러스터링 되도록 한다.
아. 문제점
◇ 핵심 문장 추출을 위해 첫 문장을 읽어오는 방식은 제대로 핵심 문장을 추출하지 못해 손실되는 뉴스의 비율이 꽤 높다.
◇ 번역 뉴스 문장이 매끄럽지 않아 이벤트 추출이 어렵거나, 의미가 왜곡되는 경우가 있다. 또한 Google Translation API를 사용하면서 발생하는 비용 문제도 있다.
◇ OpenIE에서 한 뉴스 문장에 대해서 핵심 (주어/목적어/서술어) 한 이벤트만 반환하는게 아니라 문장 내 fact라고 생각되는 모든 구성을 반환한다. 따라서 한 뉴스에서 추출되는 (주어/목적어/서술어) 이벤트의 수가 제각각이어서, 주가 예측에서 추출되는 벡터가 여러 개다.(이벤트가 여러 개 추출되는 뉴스가 비교적 덜 중요한 내용이더라도, 여러 이벤트가 추출되면 중요한 뉴스보다 큰 영향을 미칠 가능성이 있다.)
◇ Word embedding 시 Google News로 pretrained된 모델을 사용했으나 하나의 word vector의 차원이 300(벡터의 원소 수가 300개)으로 너무 높다. (300, 300, 300)으로 이루어진 이벤트를 NTN에 넣고 학습을 시키면 NTN의 총 가중치 벡터 원소 수가 8000만개가 되어 NTN이 너무 deep해져 학습이 제대로 이루어지지 않고 속도가 너무 느려 합리적인 시간 내에 연산을 끝낼 수 없다.
방법2 : BERT : Sentence embedding
상기한 문제점들을 개선한 뉴스 데이터 전처리 방법은 다음과 같다.
◇ 별도의 뉴스 요약 방법을 사용하여 핵심 문장 추출의 신뢰도를 높인다.
◇ 뉴스 문장을 OpenIE를 이용해서 (주어/목적어/서술어) 이벤트로 자른 다음 (주어/목적어/서술어)를 하나의 벡터로 합치기 위해서 NTN을 사용하는 기존의 방식을 사용하지 않고, 문장 전체를 한 번에 하나의 벡터로 embedding하는 BERT를 사용한다. 또한 뉴스를 번역하면서 문장이 매끄럽지 않거나 의미가 왜곡된다는 문제점 및 비용 문제를 해결할 수 있다.
BERT란
◇ BERT(Bidirectional Encoder Representations from Transformers)은 2018년 10월에 논문이 공개 되었고, 2018년 11월에 오픈소스로 코드까지 공개된 구글의 새로운 Language Represeentation Model이다.
◇ NLP 분야의 11개 테스크에 state-of-the-art를 기록하며 좋은 성능을 보이고 있다.
◇ 대형 코퍼스에서 Unsupervised Learning으로 General-Purpose Language Understanding 모델을 구축하고pre-training Supervised Learning으로 Fine-tuning 해서 QA, STS등의 하위downstream NLP 태스크에 적용하는 Semi-supervised Learning 모델이다.
2. 뉴스 처리 신경망
가. NTN 기반 신경망
◇ 이전 단계에서 Word Embedding을 통해 추출한 EVENT 튜플을 NTN 기반 신경망으로 Event Embedding한다.
◇ NTN 기반 신경망은 T1, T2, T3의 NTN(Neural Tensor Network)을 [Socher et al., 2013] 응용한 신경망을 조합하여 구성된다.
◇ 그림의 R1은 아래 식을 통해 T1 신경망을 거쳐 유도된다.
◇ R2와 U는 R1과 같은 방식으로 각각 T2, T3를 거쳐 유도된다.
◇ loss 함수는 아래와 같이 구성되는데,
◇ Socher가 고안한 Contrastive Max-margin Objective Function을 응용한 함수이다. 는 input으로 쓰인 EVENT 튜플을 뜻하고, 은 의미 없는 EVENT를 희석시키기 위한 랜덤으로 추려낸 오염된 EVENT 튜플이다.
◇ 위의 출력 결과에서 u는 f(E) , ur은 f(E^r) 을 의미한다.
◇ temp1은 max(0,1-f(E)+f(E^r)) 의 결과이다.
◇ L2 정규화 항은로 구성되며 varis가 각각 파라미터를 의미한다. temp2는 L2 정규화 항의 결과이다.
◇ 아래는 계산한 loss 값의 출력이다.
◇ 학습 결과 출력
◇ validation 결과 출력
◇ 추출한 U – vector 파일 저장
나. EB-CNN 신경망
◇ NTN 기반 신경망으로부터 추출한 U – vector를 input으로 하여 convolutional 신경망을 통해 V-vector를 추출한다.
◇ sliding window 방식으로 U – vector를 convolution layer에 통과시키고
◇ polling layer를 통해 max polling 시킨다.
◇ 추출된 Long term, Mid term, Short term의 V – vector를 합친다.
◇ V – vector를 이용 Binary Classification하여 주가를 예측한다.
◇ 아래는 학습 출력 결과이다. tp는 binary_crossentropy 함수 통과 결과, temp는 tp의 평균값이다.
◇ 아래는 validation 결과이다.
◇ Binary Classification 결과 파일 저장
3. 경제지표 추출부
가. 데이터 로드
◇ 주가 정보를 얻기 위해 대신증권 API에 접속한다.
◇ 특정한 주가를 선택 후, API에서 제공하는 최대 기간인 1996년 12월 26일부터 현재까지 데이터를 가져온다. 시가, 고가, 저가, 종가, 거래량 정보를 받아온다,
◇ 오픈 라이브러리 ta-lib을 사용하여 기술적 지표를 계산한다. 구체적으로 MACD, EMA, Momentum, Stochastic, ROC, william R, A/D, RSI, OBV, Bollinger Bands를 계산한다.
◇ 주가 데이터 및 기술적 지표를 일자별로 엑셀로 저장한다.
나. 학습 및 검증 데이터 생성
◇ 저장된 엑셀을 불러온다.
◇ MACD, EMA, Momentum, Stochastic, ROC, william R, A/D, RSI, OBV, Bollinger Bands는 기술적지표로서 학습에 사용될 X_label로 저장
◇ 전날대비증가량은 y_label로 저장한다,
◇ 전체 데이터의 90%는 학습데이터로 사용하고 10%는 검증 데이터로 사용한다.
다. 데이터 전처리
◇ 각각의 기술적 지표는 스케일이 다르므로 바로 학습에 넣기 어렵다.
◇ 기술적 지표마다 정규화를 적용 후 학습에 사용한다
라. 예측 모델
a) 종가 예측 모델
b) 등락 예측 모델
마. T-Vector
◇ 출력층 직전의 Dense계층인 code layer가 T-Vector가 된다, T-Vector는 기술적 지표를 통해 주가의 특징을 추출한 벡터이다.
◇ 3가지 모델 중 가장 예측이 잘되는 모델을 사용하여 T-Vector를 추출한다,
◇ 뉴스 데이터를 통해 추출한 V-Vector와 T-Vector를 최종 주가 예측 모델의 입력값으로 사용한다.
결과 및 평가
완료 작품의 소개
가. 뉴스 데이터 가공
◇ 뉴스를 크롤링해서 HTML 뉴스 데이터를 확보하고, HTML파일을 파싱해 뉴스 문장만 추출해낸다.
◇ 뉴스 요약문에서 핵심 문장만 잘라낸다.
◇ 뉴스 핵심 문장에서 word embedding을 어렵게하는 특수문자들을 제거하는 전처리를 수행한다.
◇ 뉴스 문장을 벡터로 임베딩하기 위해서 sentenceRepresenting.py를 실행한다.
나. 뉴스를 이용한 주가 예측
◇ Bert로 추출한 벡터를 CNN 학습 파이썬 모둘 실행
◇ 학습 과정
◇ Validation 결과
다. 기술 지표를 이용한 주가 예측
◇ 주가 데이터를 받아오기 위해 대신 증권 CyposPlus에 접속한 상태에서 01_get_data.py를 실행한다.
◇ 예측할 주식의 종목코드를 입력한다.
◇ 주가 정보를 통해 기술적 지표를 계산한다.
◇ 데이터를 엑셀로 저장한다.
◇ 종가 정보를 예측하는 모델을 학습시킨다.
◇ 주가의 등락을 예측 하는 모델을 학습시킨다.
◇ 종가 예측 결과
◇ 등락 예측 결과
관련사업비 내역서
항목(품명, 규격) | 수량 | 단가 | 금액 | 비고 | |||
---|---|---|---|---|---|---|---|
계 | 현금 | ||||||
직접개발비 | 없음 | 0 | 0 | 0 | 0 | ||
합계 | 0 | 0 | 0 | 0 |
완료작품의 평가
평가항목 | 평가방법 | 적용기준 | 개발 목표치 | 비중(%) | 평가결과 |
---|---|---|---|---|---|
1.경제 지표 모델
주가 예측 정확도 |
실제 주가를 얼마나 근접하게 예측하는지를 측정한다. | (일별 주가 오차의 평균)/(일별 주가의 평균) | 오차±20% 이내 | 10 | |
2.경제 지표 모델
등락 예측 정확도 |
실제 주가의 등락을 얼마나 맞췄는지를 측정한다. | (일치하는 경우)/(전체 경우) | 60% 이상 | 45 | 55% |
3.경제 뉴스 모델
등락 예측 정확도 |
실제 주가의 등락을 얼마나 맞췄는지를 측정한다. | (일치하는 경우)/(전체 경우) | 60% 이상 | 45 | 51% |
향후계획
가. 어려웠던 내용들
◇ 기술적 지표만으로 종가를 예측하는 경우 타임딜레이(이틀 전 종가 가격을 현재 종가 가격으로 예측)가 생긴다.
◇ 하나의 주식 종목의 종가를 예측하는 모델 경우 학습 데이터가 작기 때문에 학습이 완벽하게 되지 않는다.
◇ 여러 주식 종목의 기술적 지표 데이터를 정규화 과정을 거친 후 학습으로 사용하는 경우, 학습 데이터 수는 늘어났지만 하나의 주식의 종가를 예측하는 모델에 비해 예측 성능이 떨어진다.
◇ 핵심 문장 추출을 위해 첫 문장을 읽어오는 방식은 제대로 핵심 문장을 추출하지 못해 손실되는 뉴스의 비율이 꽤 높다. - 별도의 뉴스 요약 방법을 사용하여 핵심 문장 추출의 신뢰도를 높인다.
◇ 번역 뉴스 문장이 매끄럽지 않아 이벤트 추출이 어렵거나, 의미가 왜곡되는 경우가 있다. 또한 Google Translation API를 사용하면서 발생하는 비용 문제도 있다.
◇ OpenIE에서 한 뉴스 문장에 대해서 핵심 (주어/목적어/서술어) 한 이벤트만 반환하는게 아니라 문장 내 fact라고 생각되는 모든 구성을 반환한다. 따라서 한 뉴스에서 추출되는 (주어/목적어/서술어) 이벤트의 수가 제각각이어서, 주가 예측에서 추출되는 벡터가 여러 개다.(이벤트가 여러 개 추출되는 뉴스가 비교적 덜 중요한 내용이더라도, 여러 이벤트가 추출되면 중요한 뉴스보다 큰 영향을 미칠 가능성이 있다.)
- 뉴스 문장에서 (주어/목적어/서술어) 이벤트를 추출하기 위해서 OpenIE가 아니라 KoNLPy를 사용한다. KoNLPy를 사용하면 뉴스를 번역하면서 문장이 매끄럽지 않거나 의미가 왜곡되는 문제점 및 비용 문제를 해결할 수 있다.
◇ Word embedding 시 Google News로 pretrained된 모델을 사용했으나 하나의 word vector의 차원이 300(벡터의 원소 수가 300개)으로 너무 높다. (300, 300, 300)으로 이루어진 이벤트를 NTN에 넣고 학습을 시키면 NTN의 총 가중치 벡터 원소 수가 8000만개가 되어 NTN이 너무 deep해져 학습이 제대로 이루어지지 않고 속도가 너무 느려 합리적인 시간 내에 연산을 끝낼 수 없다.
- 벡터의 차원이 100인 pretrained 모델을 사용하면 해결할 수 있으나, word space 내에 없는 단어가 많고 성능이 좋지 않고, 한글 corpus에 대해서 학습한 모델 자체가 존재하지 않는다. 더 좋은 성능의 word embedding model을 얻기 위해서 뉴스 문장을 통해서 만든 한글 corpus를 구성하고, Word2Vec을 학습시키며 이 때 차원을 적절히 조절할 수 있다.
나. 차후 구현할 내용
◇ 비슷한 종목의 주식의 기술적 지표를 이용하여 모델을 구현한다.
◇ 주가의 일 단위가 아닌 분 단위의 시가를 예측하는 모델을 구현한다.