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

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