LoginSignup
9
3
お題は不問!Qiita Engineer Festa 2023で記事投稿!

Tensorflowで時系列データ(株価)を予測する解説

Last updated at Posted at 2023-06-28

はじめに

  • 私利私欲のために、機械学習を利用して株価を予測できないかなぁ~、と探していたところ、kaggle notebookで以下を発見。
  • LSTMを使った株価予測
  • 早速notebookをコピーして実行してみたものの、どういう処理をやっているのか理解に苦労したので、お絵描きしながら理解したことを共有したい。

trainデータとテストデータの作成

  • 簡易的に、時系列データが3,000日分あるとする。
  • それを、Trainデータとテストデータに分割する。簡易的に、2,500と500に分けたとする。
    • テストデータは、後に、モデルの精度検証を行うためのもの。
  • 考え方としては、直近過去60日のデータを元に61日目を予測する、という行為をめざすため、Trainデータの全区間を1日ずらしで60日ごとに区切る。
    • modelの作成のため、0 ~ 1 にスケーリングする。(該当期間の最安値を0, 最高値を1として、縮尺を変更する)
    • 各要素が60個の配列ができあがる。
  • 上記でできた配列の教師データとして、y_trainを作成する。過去60日のデータを元に61日目を予測したいわけだから、x_trainで切り取った各60日の要素に対応するかたちで、61日目のデータ、62日目のデータ、という配列を作成する

image.png

予測

  • 「過去60日のデータを元に61日目の株価を予測する」というモデルができあがったので、予測のためのINPUTとしては、60日分のデータを用意してあげる必要がある。

image.png

モデルの検証

  • kaggle notobookの例では、最後に予測データと実績データを並べて比較をしている。何をやっているか解説する。
  • テストデータとして切り出した500点を、まず予測で出力する
    • 予測の2,501点目は、実績の2,441~2,500点目から予測
    • 予測の2,502点目は、実績の2,442~2,501点目から予測
      • ※2,501点目は、予測ではなく実績を使う点に注意。
    • 以降も同様に「実績の過去60日」を元に次の1日を予測することを繰り返し、500点のデータを作成する
  • 作成された500点と、実績の500点のデータを比較し精度を出している。

image.png

10日後のデータは予測できるか

  • モデルの検証精度(rmse)は比較的高い値を出しているが、これはあくまで「実績を元にした翌日」という条件となる。
  • したがって、10日後ともなると、前9日は予測を使わざるを得ない。
  • これは、不確定な予測値を元にするわけだから、不確定要素が積み重なり、結論としては全くあてにならない、ということになる。

(参考) 10日後を予測するコード

# 最後の60日間のデータを取得
input_data = dataset[-60:]
# print(input_data)
    
# 未来10日分を予測
for _ in range(10):
    # スケーリング
    input_data_scaled = scaler.transform(input_data)
    
    # データを整形
    X_test = []
    X_test.append(input_data_scaled)
    X_test = np.array(X_test)
    X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
    
    # 予測
    pred_price = model.predict(X_test)
    
    # スケーリングを元に戻す
    pred_price_unscaled = scaler.inverse_transform(pred_price)
    print(pred_price_unscaled)
    
    # 予測結果を入力データに追加
    input_data = np.append(input_data, pred_price_unscaled.reshape(1, -1), axis=0)
    input_data = input_data[-60:]

まとめと感想

  • この例では過去の株価終値のみを使用した予測となっている。
  • 株価は、関連ファクターが多すぎて終値だけでは到底予測はできないと言える。
  • こんなことで株価が予測できたら、誰も苦労はしていない。甘い考えは捨てたほうがいいと思った。
9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3