「いつもと違う」に、機械が気づく
相場が荒れ始めたとき、人が気づくのはたいてい動きが大きくなってからです。 ではルールで書けばいいかというと、これが難しい。「1日で2%下がったら警戒」のような閾値は、 静かに壊れていく異常を取り逃がします。値幅は小さいのに、動き方だけが普段と違う——そういう局面です。
そこで発想を変えます。異常の形を教えるのではなく、正常な形だけを覚えさせて、当てはまらなくなったら気づかせる。 これが AutoEncoder による異常検知です。この記事では、その仕組みを説明したうえで、 実際の為替データと擬似データの両方で検証します。
金融における「異常」とは何か
価格の異常と、パターンの異常
「大きく動いた」ことと「異常である」ことは、同じではありません。 決算発表の日に大きく動くのは想定内ですし、逆に値幅が小さいまま、動き方の質が変わることもあります。 ボラティリティが静かに上がり始める、上下動のリズムが崩れる——こうしたパターンの変化を捉えたい。
人間の目では、追いきれない
為替は24時間動き、通貨ペアは無数にあり、見るべき指標も多い。 すべてを人が監視するのは現実的ではありません。機械に「普段と違う」を見張らせたい理由は、まずここにあります。
「これが異常だ」と教えられない
機械学習で分類をやるなら、普通は「正常」「異常」のラベル付きデータが要ります。 ところが相場では、どこからが異常だったのかを誰も定義できません。 後から振り返れば「あれは危機だった」と言えても、事前にラベルは存在しない。
だから教師なしで行きます。異常を教えるのではなく、正常だけを大量に見せる。 これが、この後の設計すべての出発点です。
AutoEncoder の直感 — 狭い穴を通す
圧縮して、復元する装置
AutoEncoder は、入力を一度狭いところに押し込めてから、元に戻す装置です。 ここでは「直近10日ぶんの値動き」を入力し、いったん4つの数字にまで圧縮して、 そこからまた10日ぶんを復元させます。
10個の情報を4個に減らすので、途中で必ず何かが失われます。だから完璧な復元はできない。それでも「できるだけ元に近づけろ」と訓練するのが、この装置の学習です。
狭い穴には、よくある形しか通れない
重要なのは何を使って訓練するかです。平穏な期間の値動きだけを見せて訓練すると、 この装置は「平穏な値動きを4つの数字で表す方法」だけを身につけます。 逆に言えば、それ以外の形は上手に通せなくなる。
復元の失敗が、異常度
そこに普段と違う値動きを入れると、復元がうまくいきません。この元の形と復元した形のズレ—— 再構成誤差——が大きいほど「いつもと違う」ことを意味します。異常のラベルを一切使わずに、 異常度の目盛りが手に入るわけです。
USD/JPY で、検知が働くか確かめる
まず確かめたいのは「この手法は、本物の相場でも反応するのか」です。 擬似データでいくら綺麗に動いても、実データで無反応なら意味がありません。
前半だけで学習する
取得した期間の前半だけを使って AutoEncoder を訓練し、後半は一切見せません。 標準化に使う平均や標準偏差も、前半のデータだけから計算します。 これは未来の情報を使ってしまうことを防ぐためで、 検証では絶対に外せない約束事です。
下のデモは、その場でブラウザが AutoEncoder を訓練します。上段が実際のレート、下段が異常スコア。 値動きが荒れた時期に、スコアが跳ね上がるかを見てください。
レートが大きく振れた局面で、異常スコアが跳ねているのが見えるはずです。 正常だけを学ばせた装置が、教えていない異変に反応した——検知そのものは、実データでも働きます。
ただし、擬似データのように「ここが危機」と帯で示せるほど、きれいには分かれません。 スコアは全期間にわたって細かく上下し、閾値を超える日もあちこちに散らばります。 跳ねた日が本当に「異常」だったのか、それとも単なる一時的な荒れだったのか—— 画面を見ているだけでは、判定できないのです。この扱いにくさが、次の節の本題になります。
「正解」がない、という壁
検知が働いた。では次に「この異常スコアを使って資産配分を変えたら、成績は良くなるのか」を確かめたくなります。 ところがここで、実データは致命的に不利になります。
どこが異常だったのか、誰も知らない
実データには異常のラベルがありません。スコアが跳ねた日が「本当に異常だった」かを判定する基準がないので、 的中率も誤検知率も測れないのです。目で見て「それらしい」以上のことは言えません。
歴史は、1本しかない
さらに深刻なのがこちらです。実データで戦略を評価すると、得られるのはたった1つの結果です。 「この2年間ではこうなった」——それだけ。もう一度別の2年間をやり直すことはできません。
これは、検証において最も危うい状態です。1回の結果がたまたま良ければ「効く」と信じ、 たまたま悪ければ「効かない」と切り捨ててしまう。どちらも、根拠としては薄すぎます。
擬似データで、何十回も試す
ここからは擬似データです。リスク資産と安全資産の2つを用意し、途中に危機を2回、意図的に埋め込みます。 異常スコアの使い方は3通り。
| 戦略 | 配分の決め方 |
|---|---|
| 静的 60/40 | 何があってもリスク資産60%を維持 |
| 連続シフト | 異常度に比例して、毎日じりじり守りへ寄せる |
| 閾値+ヒステリシス | 閾値を超えたら守りへ。別の低い閾値を下回るまで戻さない |
配分の判断には前日までの情報しか使わず、売買のたびに取引コストを差し引きます。 現実に寄せた、意地の悪い条件です。
1回だけ見ると、勝者はばらばら
まず「1つの相場だけ」を見てください。次に「30相場」を回してください。 同じ手法なのに、見える景色がまるで変わります。
30回まわすと、構造が現れる
1相場だけ見ていると、静的が勝ったり連続シフトが勝ったりで、いかにも「運任せ」に見えます。 ところが30回まとめると、はっきりした順序が現れます。上のデモを2つのコストで押した結果が、これです。
| Sharpe が最良だった回数 | 静的 60/40 | 連続シフト | 閾値+ヒス |
|---|---|---|---|
| 取引コスト 0.1% | 2 / 30 | 4 / 30 | 24 / 30 |
| 取引コスト 0.5% | 6 / 30 | 0 / 30 | 24 / 30 |
閾値+ヒステリシスが、どちらの条件でも24勝。そして取引コストを上げると、 連続シフトは4勝から0勝へ消えました。毎日じりじり動かす設計は売買が多く、 コストに真っ先に食われるからです。逆に、一切売買しない静的は2勝から6勝へ増えました。 コストをさらに 0.6% まで上げると静的は10勝まで伸び、それでも閾値ルールが20勝で首位を保ちます。
デモの下段には DD圧縮・vol削減・回転比 も出ています。注目したいのは回転比が常に約3.7倍で動かないこと。コストを変えても、連続シフトが閾値ルールの3倍以上売買している事実は変わりません。一方 DD圧縮はコスト0.1%で50%、0.5%で33%と縮みます。守りの効果すら、コストに削られていくのです。
検知は入口、評価には反復が要る
AutoEncoder は「正常を学び、外れたら気づく」装置でした。アクセスログでも為替でも、原理は同じです。 そして実データは検知が働くことの証拠を、擬似データは戦略として使えるかの評価を、 それぞれ担当しました。どちらか一方では、片側しか分かりません。
この記事のまとめ
- 相場の異常は事前にラベルがない。だから正常だけを学ぶ教師なしが向く。
- AutoEncoder は 10→4→10 の狭い穴。復元の失敗が、そのまま異常度になる。
- 実データ(USD/JPY)でも検知は働く。ただし正解ラベルがなく、歴史は1本だけ。
- だから戦略の評価は擬似データで。危機を仕込め、何十通りも試せる。
- 30相場では閾値+ヒステリシスが24勝。コストを上げると連続シフトは0勝に、静的は2勝→6勝に。
- 少数の観測は構造を隠す。必要なのは良い1回ではなく、たくさんの回。
最後に、いちばん大切なことを。異常検知が答えてくれるのは「いつもと違う」までです。 そこから「では、どうするか」を決めるのは検知器ではなく、その後ろの設計——今回でいえば配分ルールでした。 同じスコアを使っても、動き方の設計だけで勝率がゼロになることもある。 気づくことと、うまくやることは、別の問題なのです。



