근데 대부분의 경우, 단지 차트를 이용해서 그 동안의 주가 변동을 통해 앞으로의 주가변동을 예상하는데, 사실 가치투자가 아니니까 의심이 드는 것은 사실이다. 그래서 일단은 특정 주식 종목이 어떤 데이터(지수, 물가, 금리)에 영향을 미치는지 확인해보고 이 데이터들의 변동이 생겼을 떄 어떻게 대응할지를 알아보면 좋을듯!! 나중에 머신러닝을 이용해 차트 분석을 해서 단타를 하는 것도 재밌을 듯? TQQQ와의 상관관계
배경지식
- training data를 3:3:4로 나눠 각 부분마다 training-validation 진행하여 변동률 학습을 진행
- 양뱡향 LSTM 순환 신경망 + 다른 알고리즘을 통해 성능 향상 가능
-
실제 가격과 예측 가격이 하루 정도 이동한 듯한 모습을 보임: 컴퓨터가 학습을 통해 “내일 주식가격은 오늘 주식가격과 똑같을 것”이라고 예측을 함(loss를 최소로 하지만 의미가 없어보임) 실제로 주식 데이터는 무작위하다고 말하는 경우가 많으며 (random walk) 일일 종가 변화율이 정규분포를 따른다는 것을 알 수 있다. 게다가 correlogram으로 데이터간의 자기상관(autocorrelation)을 확인했을 때 패턴이 보이지 않아 random walk일 가능성이 놓다. 그렇기 떄문에 명확한 패턴을 찾지 못해 평균값 근처에서 예측을 하게 됨 ⇒ 가격이 아닌return혹은buy/sell로 하여 x데이터를 20일간의 sequence로, y데이터를 +,-인지 라벨링 / 시간의 흐름에 관련이 있으며 무작위성이 약한 농산물 가격 데이터를 분석하는 것이 더 효과적일 수 있음(LSTM 농산물 가격 예측 모델) + 결국 관건은 모델이 패턴을 찾아야하는데 주식 데이터는 너무 random함! -
복잡한 layer을 구성하기 위해서 Function API 사용? -
stationary된 데이터를 사용: 시계열 데이터를 분석하거나 예측모델을 만들고 싶을 때는 데이터가 stationary 데이터인지 확인해야하며, 그렇지 않으면 너무 무작위하여 예측 모델을 만들 수 없다고 판단 ⇒ 종가가 아닌 주식가격 변화량 으로 변환 (Dickey-Fuller 검증?)
논문
양방향 LSTM 순환신경망 기반 주가예측 모델 LSTM 네트워크를 활용한 농산물 가격 예측 모델
LSTM을 이용하여 주가 예측하기
현재 상황
현재까지 문제점 : time shift 현상이 계속 발생되며, 정확하게 학습이 되었는지 확인이 어려움 앞으로 추가해야할 것 : training data 분할 및, 양방향 LSTM 적용, training data를 stationary않는 데이터를 사용, 주식데이터가 random하지 않아 모델이 패턴을 찾을 수 있어야함(이렇게 하기 위해서 random하지 않는 주식을 찾아야할지, 주식 데이터 안에서 random하지 않는 feature을 찾아 그것을 예측해야할지!)
한계
- Time shift 현상 해소 ⇒ 양방향 LSTM(미래 정보 같이 사용)으로 어느정도 해결이 가능?
- Attention의 경우 1차원만 적용 가능하며, 연산 시간이 많이 들기 떄문에 BI-LSTM을 구성하는 것이 가장 합리적인 Forecasting 방법으로 생각
- 무작위한 주식 데이터(high noise to ratio : 유용한 신호보다 잡음이 더많이 포함됨) → 모델이 학습하지 못함
결국 유용한 신호가 많은 종목, 주식, 분야를 선정해서 모델이 학습할 수 있도록 만들고 양방향 LSTM을 통해 time shift 현상을 해소해야할 듯 함!
개선해야할 사항
- 여러가지 feature들을 학습시키기 → 각 column이 되는 feature들을 함수화시키고, for문을 돌면서 각 회사의 정보를 dataframe
data의 저장시키고 이를 이용해 predict를 진행 - 다중 시계열 예측을 해야하나? (종가만 예측되어서 종가가 자꾸 하락함)
- 어떤 feature들이 가장 괜찮은지 최적화시키기
- hyperparmeter 최적화시키기
- LSTM 학습시, 얼마동안의 기간을 학습시킬지, 며칠까지 예측할지 알아보기
- 1. feature engineering으로 가능?
- 3. ACF(자기 상관 함수), Unit Root Test(단위근 검정: 주식 데이터가 랜덤 워크인지 검정하는 방법으로
ADF:Dickey-Fuller 테스트 사용 가능) ⇒ 그럼 여기서 random walk가 아닌 종목이 무엇인지 확인해서 그 종목들을 예측해야하지 않을까?
다중 시계열 예측
여러가지 feature들을 예측하여 다시 feature로 만들었지만 (feature update) 일반적인 방법이 아닐 뿐더러 정확도도 높지 않은 듯함
loading_data: 데이터들을 불러오는 함수
Visualizing_Close: 종가를 시각화하는 함수
Visualizing_Returns: Return을 시각화하는 함수
Shift_Lag_Volume / Shift_Lag_Close: 인덱스를 이동시켜 과거와 비교하는 함수
SMA /EMA: Simple Moving Average와 Exponential Moving Average를 새로운 feature로 만드는 함수
RSI /MACD: Relative Strength Index와 Moving Average Convergence Divergence를 새로운 feature로 만드는 함수
difference: 차이를 이용해 새로운 feature을 만드는 함수
predict_next_30days:
종가만을 이용하여 예측
LSTM: 데이터 정규화 → 시퀀스 데이터 생성 → 데이터 분할 후 hyperparameter 최적화 → 최종 모델 학습 → 테스트 데이터에 대해 예측 → 향후 30일 예측
- 테슬라 주식 예측을 하기 위해서 학습 데이터를 테슬라만 가지고 해야할까 아님 다른 주식들의 학습 데이터도 사용해야할까? ⇒ 상관관계가 높은 주식들끼리 학습을 시켜야하나?
- 1시간 간격으로 가능한가?