근데 대부분의 경우, 단지 차트를 이용해서 그 동안의 주가 변동을 통해 앞으로의 주가변동을 예상하는데, 사실 가치투자가 아니니까 의심이 드는 것은 사실이다. 그래서 일단은 특정 주식 종목이 어떤 데이터(지수, 물가, 금리)에 영향을 미치는지 확인해보고 이 데이터들의 변동이 생겼을 떄 어떻게 대응할지를 알아보면 좋을듯!! 나중에 머신러닝을 이용해 차트 분석을 해서 단타를 하는 것도 재밌을 듯? 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을 찾아 그것을 예측해야할지!)

한계

  1. Time shift 현상 해소 양방향 LSTM(미래 정보 같이 사용)으로 어느정도 해결이 가능?
  2. Attention의 경우 1차원만 적용 가능하며, 연산 시간이 많이 들기 떄문에 BI-LSTM을 구성하는 것이 가장 합리적인 Forecasting 방법으로 생각
  3. 무작위한 주식 데이터(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시간 간격으로 가능한가?

강화학습을 이용하여 주가 예측하기