作った本人が、確かめていなかった
このサイトでは、予測を扱うツールをいくつか公開しています。 株価のLSTM予測、 為替のLSTM予測、 モンテカルロによる区間推定。
どれも予測値をグラフに描きます。実測とよく重なります。 それを見て「動いている」と判断していました。
ただ、当たっているかどうかは、一度も測っていませんでした。 重なって見えることと、当たっていることは別です。 この記事では、その答え合わせをします。
誤差は、たしかに小さい
まず一般的な指標で測ります。翌日の終値を予測し、実測とのずれを集計する形です。
予測と実測のずれを、実測値に対する割合で表し、平均したもの。 1%なら「平均して1%ずれた」。単位に依存しないので、株価でも為替でも比べられます。
ずれを二乗して平均し、平方根を取ったもの。 大きく外した回を重く見る性質があります。単位は元データと同じです。
合成データ(500日分)で、3つの予測方法を比べます。
| 予測方法 | MAPE | RMSE |
|---|---|---|
| ナイーブ(前日と同じ) | 1.23 % | 593 |
| 移動平均の外挿(5日) | 1.35 % | 660 |
| トレンド外挿(10日回帰) | 1.30 % | 632 |
どれも 1%台。株価が3万円なら、誤差は平均400円弱です。 グラフに描けば、3本とも実測にぴったり沿います。
なぜナイーブが勝つのか
理由は単純です。翌日の株価は、前日とほとんど同じだからです。
// 前日比の絶対値 中央値 0.55 % 95%点 2.8 % 最大 7.1 %
半分の日は0.55%しか動きません。 「前日と同じ」と答えれば、その日の誤差は 0.55% で済む。 誤差の小ささは、予測能力ではなく変動の小ささを反映しています。
ここで扱った移動平均もトレンド外挿も、ナイーブを超えられませんでした。 LSTMのような複雑なモデルでも、同じ結果になることは珍しくありません。
方向は、当たっていない
投資の判断に使うなら、知りたいのは金額のずれではなく 「上がるか、下がるか」のはずです。そちらを測ります。
予測時点の値と比べて、予測が「上」と言ったときに実際も上がったか。 その一致した割合。50%ならコイン投げと同じです。
| 予測方法 | MAPE | 方向一致率 |
|---|---|---|
| ナイーブ(前日と同じ) | 1.23 % | 測定不能 |
| 移動平均の外挿 | 1.35 % | 50 % |
| トレンド外挿 | 1.30 % | 48 % |
50%と48%。コイン投げです。 MAPE では「1%台の高精度」に見えたものが、 方向で測ると何の情報も持っていないことになります。
ナイーブが「測定不能」な理由
ナイーブ予測は「前日と同じ」なので、上がるとも下がるとも言っていません。 予測値と予測時点の値の差がゼロなので、方向を判定できない。
指標を、切り替えてみる
合成データと、日経225などの実データで試せます。 指標を切り替えると、順位が入れ替わります。 評価する期間も動かせます。
MAPE と RMSE では、3つの手法に差がほとんどありません。 ところが方向一致率に切り替えると、ナイーブが測定不能になり、他も50%前後に落ちます。 実データでも同じことが起きるか、確かめてみてください。
期間を変えると、数字が3倍動く
もうひとつ、評価を難しくすることがあります。 いつを測るかで、精度が大きく変わります。
| 評価区間 | MAPE | RMSE | 方向一致率 |
|---|---|---|---|
| 穏やかな期間 | 0.65 % | 252 | 57 % |
| 変動の大きい期間 | 2.17 % | 936 | 43 % |
| 全期間の平均 | 1.35 % | 660 | 50 % |
RMSE は 3.7倍の開きがあります。同じ予測方法、同じデータです。 変えたのはどこを測るかだけ。
全期間の平均(1.35%)は、どちらの実態も表していません。 穏やかな期間の良い数字と、荒れた期間の悪い数字を混ぜた値です。
測り方を、私も間違えた
この記事を書く過程で、方向一致率を最初 75% と算出しました。 「意外と当たっている」と思いかけたのですが、計算が誤っていました。
// ✗ 誤り:前々日の値と比べていた const pd = Math.sign(pred[i] - P[i-1]); const ad = Math.sign(act[i] - P[i-1]); // ○ 正しい:予測時点の最新値と比べる const pd = Math.sign(pred[i] - P[i]); const ad = Math.sign(act[i] - P[i]);
基準を1日ずらすと、2日分の変化を見ることになります。 2日あれば動きが大きくなるぶん方向も揃いやすく、 実力より良い数字が出ます。
何を知りたいのか、から決める
指標に優劣があるわけではありません。目的が違えば、選ぶものも違います。
| 知りたいこと | 見るべき指標 |
|---|---|
| どれくらいの金額でずれるか | MAPE / MAE |
| 大きく外す危険がどれくらいか | RMSE |
| 売買の判断に使えるか | 方向一致率 |
| 学習に意味があったか | ナイーブとの差 |
| どの局面で使えるか | 期間ごとの数字 |
まとめ
自分で公開したツールを、自分で測り直した結果でした。 グラフが重なって見えることを、いつのまにか当たっている証拠だと思っていた。 測ってみれば、そうではありませんでした。
この記事のまとめ
- MAPE 1.2% でも、方向一致率は 50%。同じ予測の、同じ期間の数字。
- 誤差が小さいのは変動が小さいから。予測能力ではない。
- ナイーブ予測(前日と同じ)が最良になることがある。それを超えなければ学習の意味がない。
- ナイーブは方向を測定できない。上がるとも下がるとも言っていないため。
- 期間を変えると RMSE が 3.7倍動く。全期間の平均は実態を表さない。
- よく当たる期間ほど、予測が要らない。値が動いていないだけ。
- 測り方を間違えると良い数字が出る方向へ倒れる。期待どおりの結果ほど疑う。
- 「精度」の一語では何も決まらない。何を知りたいかで指標を選ぶ。
- 予測は、当たっているのか(この記事)
「精度」という言葉が隠すもの - 学習期間を変えると、答えが変わる
窓幅の選び方と、1行のリーク - 「異常」は、誰が決めたのか
閾値の恣意性




