動いた。でも、それで終わっていた
以前 gwaw.jp で、TensorFlow.js の教科書的なデモを2つ作りました。 AutoEncoder による時系列の異常検知と、 LSTM による USD/JPY 短期予測です。 どちらも学習曲線はきれいに下がり、それらしい結果を出しました。
ですが、どちらも動かしていたのは合成データ(自分で作った疑似データ)でした。 「これ、実際の為替で使えるの?」——そう問い直した瞬間、足りないものが一気に見えてきます。 教科書デモは入口であって、ゴールではなかった。
この記事は、その教科書デモから実用ツールへ進むために越えるべき 3つの壁——実データ・時系列・不確実性——を見取り図として示します。 シリーズ全体の地図だと思ってください。
教科書デモと実用ツールの断層
入門で誰もが通る MNIST(手書き数字の分類)は、実はとても恵まれた課題です。 為替予測と並べると、その「恵まれ方」がくっきり見えます。
| 観点 | MNIST(分類) | 為替予測(時系列) |
|---|---|---|
| データ | 最初から手元に揃っている | 自分で取りに行く |
| 入力 | 固定サイズの1枚 | 過去の並び(時系列) |
| 正解 | 明確・すでにある | 未来にしかない |
| 順序 | 無関係(並べ替え可) | 命(並べ替え不可) |
| 外れ | ただの間違い | 意味を持つ(異常の兆候) |
この表の差が、そのまま3つの壁になります。まずは「順序」の違いを、手を動かして掴んでみてください。 下のデモは、同じ「シャッフル」操作を分類と時系列の両方にかけます。
左(分類)は無害。並べ替えても、各画像とラベルの対応は正しいまま。 右(時系列)は致命的。並びを壊した瞬間、なめらかだった折れ線はノイズになり、 過去の窓から翌日を読む、という予測そのものが成り立たなくなります。
サンプルは、誰かが用意してくれていた
MNIST は数行でロードできます。tf.data を呼べば、綺麗に整えられた数万枚が手に入る。
でもそれは、誰かがすでに集めて整えてくれていたからです。
実データはそうはいきません。為替の値を使いたければ、自分で取りに行く必要がある。 しかもブラウザから外部APIを直接叩くと、CORS の壁で弾かれます。 「データを手に入れる」こと自体が、最初の技術課題になるのです。
この壁は、VPS側に小さな中継役(プロキシ)を置き、さらに「取れなかったとき」に備えた多段の逃げ道で越えます。詳しくは2本目で。
順番に、意味がある
§1のデモで見たとおり、時系列は順序が命です。MNIST の画像はシャッフルして学習できますが、 為替は昨日の終値が今日に効く。並べ替えたら情報が壊れます。
では、順序をどうモデルに伝えるか。答えが「窓(ウィンドウ)」で過去N日を束ねて1つの入力にするという発想で、 その並びを扱うのに向いたネットワークが LSTM です。入力の形からして、分類とは別物になります。
1枚 → 1ラベルだった入力が、過去N日 → 翌日1点に変わる。 この構造の転換こそ、LSTM が要る理由です。
外れることに、意味がある
MNIST で 7 を 1 と読んだら、それは単なる誤分類です。直すべき「間違い」でしかありません。
ところが為替予測の「外れ」は違います。予測が大きく外れた点は、市場に何か異常が起きた点かもしれない。 外れが、消すべきノイズではなく、拾うべきシグナルになるのです。
3つの壁を、どう越えるか
3つの壁は、それぞれ次の記事で越えていきます。
この3つを越えた先に、実在する本番ツール—— iseeit.jp の「為替 LSTM 予測 & アノマリー検出デモ」があります。 教科書デモから、そこまでの道のりを辿るのがこのシリーズです。
この記事のまとめ
- 教科書デモ(MNIST)は恵まれた課題。データが揃い、順序が無関係で、外れはただの間違い。
- 実用ツール(為替予測)は逆。データを取りに行き・順序が命・外れに意味がある。
- この差が3つの壁:実データ・時系列・不確実性。
- 同じシャッフルが分類には無害・時系列には致命的 → 時系列は順序が情報そのもの → LSTM が要る。