株価予測【3】短期予測と長期予測

金融データ解析

またまた、少し間が空いてしまいました。今日は前回のインデックス予測の簡単な分析の続きです。

やっぱりコーディングミスみっけた

さて悪い予感が的中ですが、前回のコード内にミスを見つけました。下で赤字で示した部分ですね。

Accuracyに関わる部分です。ここでは予測値が入ったリスト(=pred)と、正解値のリスト(=test_y)とで、符号が一致する要素数を全体の要素数で割って正解率を算出しています。しかし、ミスにより分母が全体の要素数となっていなかったため、正解率が少しおかしなことになっていました。上記を修正した上で改めてグリッドサーチを再度行った結果、以下の表のようになりました。

まずは上位10位。

86%!これは最高のモデルが出来たのか?機械学習様様やで〜!
といえば、もちろんそんな訳ではありませんw
その理由は後ほど考えて見ます。まずはその前に下位10位を。

最下位は正解率18%でした。これは一体どのように考えれば良いのでしょうか。。

短期予測と長期予測の違いと留意点

まずは今回のタスクを図にすると、以下のようになります。縦軸はTOPIXの値動きです。

上のように、過去Window日分のデータから、Lag日後の基準日対比の正負を予測します。
ここで、lag=1のように小さい場合、基準日と予測対象日の間隔が短いために中長期のトレンドが織り込まれず、結果として基準日に対する値動きの正負は大きく変動します。

この変動は、モデルに学習を行う上で問題となりそうです。
つまり、Windowはほとんど変わらない=モデルへの入力はほとんど変わらないにも関わらず、正解(正負の変動)が大きくブレるためです(=ボラティリティが高い)。結果として、入力に敏感すぎる安定性に欠けるモデルか、あるいはどのような入力に対しても平均を返すような実用性に欠けるモデルが出来てしまうことが予測できます。

では、lagを大きくした場合はどうなるでしょうか?


上図のように、lagを大きくすることで中長期のトレンドが加味されるため、基準日に対する値動きの正負の変動は小さくなることが予測できます。では、Lagは大きくとった方が良いのでしょうか?簡単にそうとは言い切れない理由が2つ挙げられます。それは、

  1. リスク(分散)は長期予測になればなるほど増大する
  2. 正解データがインバランスになる

まず最初のリスクの増大ですが、これはモデルの予測の精度のバラツキが、長期になるほど現れやすいことを意味します。これを図にすると以下のイメージです。

短期予測では先に述べたようなボラティリティの問題がありますが、モデルの精度のバラツキは50%付近に高い山を持つモデルが多くなることが予測されます。すなわち、モデルの精度のバラツキは小さくなります。

一方で長期予測の方はどうかというと、中長期トレンドを織り込んだ価格を予測するため、この中長期トレンドを正しく予測したモデルとできなかったモデルとで大きな差が生まれます。こうして、大勝ちするモデルと大負けするモデルが多く現れるため、結果として分散(リスク)が大きいと言えます。この点を念のためにデータから確認しておきます。

上記はLag別に、モデルの予測精度の統計を取ったものです。右に行くほど長期予測となります。
赤線で囲っているように、長期予測になるほど、分散が増大していることが確認できます。

さて、次に2つ目の注意点、すなわち「データのラベルがインバランスになる」点にも注意が必要です。どういうことかと言えば、基準日対比でLag日後の増減の割合を予測しますが、短期(例えば翌日)であればデータは概ね増加と下降の割合が50%となる一方で、長期になるとこの割合に変化が生じます。例えば増加の割合が70%、下降の割合が30%であるとき、「常に上がる」予測をすれば70%の精度が自動的に得られることになります。(とは言え、実際には「前もって」70%の割合が分かっている訳ではなく、あくまで過去を振り返って分かる統計であるため、これを持って「ベースラインを70%とする」のはやや厳しいように思えます。モデルのベースラインとしては、完全にランダムに予測するモデルなどを用いることが一般的です)。

とは言え、今回はLagの違いにより精度に大きな差が出ることが考えられるため、データの比率をBaselineとして算出することにします。そして、(Accuracy – Baseline)で有用そうなモデルを探してみます。

結果としては、以下のようになりました。まずは上位から。

いい塩梅でLagが散らばりましたが、60~90日後くらいの予測が最も多い印象。
TOPに躍り出たのは精度80% (Baseline + 14pt)でSGDRegressorとなりました。
そして2位以降はElasticNetの躍進が目立ちます。試しに2位の予測と、正解をプロットした図がこちら。青線がモデルの予測(数値は左軸)、黄線が正解(右軸)。概ね上手く予測できていそうです。

ちなみに、この記事の序盤でちらっと触れた「なんちゃって」上位陣モデル。種明かしをすると、以下のようにBaselineとの差が見事にゼロでした。。

これは単純に、比率が大きい方(当たり)を選んでいることを意味しています。
グラフを見てみると。。

左軸に注目。見事に全て負であると予測しています。。なかなかの適当っぷりっすねw

さて、概ねTopix予測の土台は出来上がったと思うので、次回から、実際に毎日の値動きを予測していきたいと思います!お楽しみに。

コメント

タイトルとURLをコピーしました