🕣

自作AIに特徴量を与えられるだけ与えてみたら、予想外の”アレ”を重要視していた…

に公開

本記事は研究内容の変更により
👉XGBoostを用いた株価予測AIの特徴量分析:研究の土台と背景 こちらに移行したしました。

この記事のねらい

株価予測にAIを使ってみたい――。
でも、「どれくらい当たるか」よりも大事なのは、"なぜそう予測したのか"ではないでしょうか。

今回は XGBoost を使って株価予測モデルを構築し、信頼できそうな特徴量を手当たり次第にすべて与えてみました(これをVAR1と呼びます)。

予想範囲は総合しては悪くなかったのですが、それ以上に驚いたのは、AIが「何を根拠に予測していたのか」でした。

本記事では SHAP(SHapley Additive exPlanations)や特徴量重要度を使って、AIが株価をどう”理解”しているのかを可視化・分析していきます。

(この研究の詳細説明においては研究の土台と背景を参照ください。)


特徴量の重要度を見てみる (GAIN)

まずは、モデルがどの特徴量にどれだけ依存しているのかを XGBoost の「Feature Importance (Gain)」で見てみましょう。

見えてきた働き

  • 最も支配的だったのは、なんと Year(年)

    • 予測対象の日付を示すだけの変数で、株価と直接的な関係は言い難いのに、その他の特徴量を打ち込むほどのGainを持っていました
  • 続いて多かったのは High(当日高値)や AverageVolume10D(出来高の10日移動平均)などの 価格系・ボリューム系 指標。

  • 一方、MA_50MACD_Signal といった トレンド系指標は思ったより少なく、モデル内での影響力は限定的でした。

なにが分かったか

この結果から見えるのは、XGBoost モデルが「まず時系列的な流れ年(年数)」を手がかりにしつつ、価格水準や出来高といった”量的”特徴量に強く反応しているという構造です。

しかし同時に、 Year の極端な重要度は、

「このモデル、時間が進むこと自体を手がかりに予測してないか?」

という疑念も喚起します。
このままでは、将来の予測には対応できないかもしれません。


モデルの予測精度はどうだった?

次に、実際の予測結果を3つの異なる条件で比較してみました:

テスト名 モード種別 MAE RMSE MAPE
test_single_ticker_latest 単一銘柄・最新日 78.38 78.38 2.87% NaN
test_multi_ticker_latest 複数銘柄・最新日 2166.54 5133.50 6.76% 0.8093
test_single_ticker_multi_rows 単一銘柄・複数日 75.49 110.72 2.95% 0.5158

精度グラフもチェック!

単一銘柄・単一日(single-latest)


複数銘柄・単一日(multi-latest)


単一銘柄・複数日(single-multi)


全体的に「単一銘柄・複数日」が最も安定しており、マルチティッカー(複数銘柄)では一部外れ値の影響で誤差が拡大していますが、決定係数(R²)が0.8超えと、全体の傾向はよく掴めているようです。


SHAPで「因果的影響」を見ると…

では、モデルが「どの特徴量がどんな風に予測に効いたのか?」をもう少し具体的に見るため、SHAP値で解釈してみましょう。

SHAP summary(複数モード比較)

単一銘柄・単一日

複数銘柄・単一日

単一銘柄・複数日

  • FiftyTwoWeekLowOpen, High など価格系指標が負のSHAP値を強く持ちやすく、予測を抑制方向に動かしていた
  • Year も一定の正負バラつきをもって効いていたが、Gainの支配性ほどのSHAP貢献は見られない
  • 出来高・トレンド系(MACD_Signal など)は予測への寄与が安定せず、状況依存的に使われている印象

まとめ:SHAPから見ると…

  • Year は確かに使われてはいるが、その影響力は限定的
  • 実際にモデルが予測時に強く反応していたのは、価格水準(高値・安値)や52週ボトムなど

Gainでは「Yearの一強」に見えたが、実際の因果的判断には多面的な特徴量が効いていたことが可視化できました。


今回の発見と反省

  • モデル精度は全体として安定しており、特に単一銘柄・複数日では現実的に使える性能が見られた
  • ただし Year に構造的に依存しすぎる危険があり、未来予測では破綻する可能性
  • SHAPで見ると、実際の出力判断は多様な特徴量をバランスよく使っていた

次回予告:時系列系を外してみたらどうなる?

次の検証(VAR2)では、この Year のような 時系列的な特徴量を除去し、価格やトレンド系だけでどれだけ予測・説明ができるかを検証していきます。

モデルは果たして「意味ある構造」を残せるのか?
SHAPはそのとき何を語るのか?

次回をお楽しみに!

Discussion