機械学習:sklearnで30日間の株価予測をやってみる

前回、pandas_datareaderで株価を取得してpandasで統計処理してmatplotlibで可視化するということをやりました。

今回は機械学習をやっていきましょう。

Contents

理屈:

ある1日の株価データのうち、High Low Open Close Volume AdjClose の6データと、さらにOpen Close から算出されるエンジニアリングデータ change を含めて、計7つのデータを入力データとします。(ここまでは前回の話)

その正解データとして、30日後の終値Closeを定義します。

数学モデルは線形回帰モデルを使います。複数の入力データがあるので重回帰分析と呼ばれています。

  • y : 正解データ
  • x1~x7:入力データ
  • a1~a7:回帰パラメータ 偏回帰係数とも呼ばれます
  • error:入力データと正解データの差(誤差) 数学モデル上では切片に相当します

y = (a1*x1) + (a2*x2) + (a3*x3) + (a4*x4) + (a5*x5) + (a6*x6) + (a7*x7) + ierror

たくさんの入力データ(1日1データ)をこのモデルに入力して、正解データと入力データの Σ(ai*xi) の部分との差 errorがトータルでできるだけ小さくなるように、最小二乗法を使って ai を決めていきます。

その結果、予測モデルが確定しますので、30日前から現在までの入力データを代入すれば、それぞれの日に対して30日後の終値が予測されます。

 

# 終値を30日間前にずらしたcolumnを作成します。

ずらされた部分はNaNという値なしの状態で埋められます。

# 入力データを作成します

# 正解データを定義します

# データを訓練用と検証用に分割して、学習モデルを選択して、学習させて、検証します

精度:92% って出ています。(´・ω・`)

# 過去30日間の入力データ predict_data から、それぞれ30日後の未来終値データ predicted_dataを予測します。

# 可視化:予測結果

後ろの黄色いやつが未来の30日間の株価予想です。

Linear Regression でも まあまあそれっぽい答えは帰ってきますね。