株価をニューラルネットワークに入れるには、まずウィンドウで切り出し、未来の情報が混ざらないように正規化し、何を当てるか(目標値)を決めなければならない。この回では、実際のApple株価506取引日を使い、「明日 = 今日」という最も単純なベースライン、線形モデル、LSTMを同じ方法(ウォークフォワード)で競わせる。結果は良くても悪くてもそのまま載せる。教育用の例であり、投資助言ではない。
価格の列1本だけでは学習できない。「過去L日を見て翌日を当てる」という問題に変える必要がある。ウィンドウを1マスずつずらすと、(入力, 正解)のペアが1つずつできる。
価格は時期によって水準が違う(2015年は約120ドル、2016年は約90ドル)ため、学習時に見たことのない範囲がテスト時に現れる。そこで1日の変化率(対数収益率 = log(今日/昨日) × 100%)に変える。正規化(平均を引いて標準偏差で割る)の基準は学習区間だけで計算する。全期間の平均を使うと、テスト区間の情報が学習に漏れ込む(セクション4のリーク)。目標値も「翌日の収益率(数値)」「上がるか下がるか(方向)」「変動の大きさ」のうち何を当てるかを先に決めなければならない。
ニューラルネットワークは複数の信号の間の非線形な関係を自ら見つける。だから株価のように多くの要因が絡み合う問題で期待される。しかし、まずデータに尋ねるべきことがある。「昨日の収益率は今日の収益率と関係があるのか?」
大きな研究2つの結論が互いに異なる。どんな条件で改善し、どんな条件で改善しなかったのかを合わせて見る必要がある。
株価予測における「驚くべき成果」の大半は、この4つのうちどれかから生まれる。それぞれを実データの数字で見る。
実際に使うときとまったく同じように評価する。その日までの過去だけで学習し、次の数日を予測し、その日々が過ぎたらそれも加えて再び学習する。テスト区間は常に学習区間より後になければならない。
最後の200取引日(2016-05-04 ~ 2017-02-16)をウォークフォワードで予測した。戦略は「上がると見れば保有、下がると見れば現金」で、保有と現金を切り替えるたびに0.1%を差し引く。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
公開CSVをダウンロードし、ベースライン2つとリッジ線形モデルをウォークフォワードで評価し、取引コストを差し引いた戦略を「買って持ち続ける」と比較する。リークと過学習の落とし穴も数字で示す。自分のデータに替えるにはPRICEを替える。
過去20日の収益率から翌日を予測するLSTMを50日ごとに再学習する。シード2つの結果を別々に載せる。セクション6の表はこの出力から直接作られる。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトのあとに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明らかにする。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。ショウジョウバエ・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | ショウジョウバエ・脳のたとえ | たとえが外れるところ |
|---|---|---|---|
| 窓 | 過去1週間の天気を見て明日の天気を当てる | 部分的 ショウジョウバエも直近数秒のにおいの変化で方向を決める | 天気には物理法則があるが、株価は人々の予測そのものが価格を変える |
| ベースライン | 「明日も今日と同じ」と言う天気予報士 | なし | 単純に見えても勝つのは難しい。どんなモデルもまずこれに勝たなければならない |
| データリーク | 試験の前に解答用紙を見た学生の点数 | なし | 解答用紙を見たと気づかないまま見ている場合がほとんどだ。正規化や特徴の計算に潜り込む |
| 過学習(選択バイアス) | コインを100枚投げて、表が多く出たコインを「幸運のコイン」と呼ぶ | なし | 「幸運」は次の投げで消える。しかし実際の戦略では、これを見分けるのがはるかに難しい |
| 構造変化 | 夏服の販売記録で冬の売上を予測する | 部分的 環境が変わると、ショウジョウバエの学習した記憶も書き換えられる | 季節は予測できるが、市場の性質の変化はいつ来るかわからない |
| ウォークフォワード | 毎週、前週までの記録だけを見て次の週を予測する模擬試験 | なし | 模擬試験と違い、市場は自分の予測が当たっても外れても待ってはくれない |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図の参考資料
finance-charts-apple.csv(GitHub plotly/datasets)。配当調整後の終値(AAPL.Adjusted)を使った講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。この回は投資の勧誘と受け取られないよう、授業の始めと終わりに「教育用の例であり、投資助言ではない」とはっきり伝える。
| 対象 | 需要・売上・センサー・価格などの時系列を予測したい大学生・実務者、フィンテック入門者 |
|---|---|
| 前提知識 | 平均・標準偏差、3-2の過学習と検証、3-7のLSTM |
| 学習目標 | ① 時系列をウィンドウ・正規化・目標値によって学習問題に変える ② リーク・過学習・構造変化・取引コストを数字で説明する ③ ウォークフォワードでベースラインとモデルを同じ物差しで比較する |
| 所要時間の目安 | 読む 40~50分 · デモ 20分 · Colab実習 30分(コード1 10分、コード2 実行4分 + 解釈15分) |
導入5分(ヒーローの「LSTMがベースラインより悪い」)→ セクション1・2 15分 → セクション4 落とし穴4つ 15分 → セクション5・6 10分 → 確認問題 5分。
自チームの予測対象(需要・売上など)でベースラインを決める 15分 → セクション4を自社データのリーク点検表に作り替える 25分 → コード1に自社の時系列を入れる 35分 → 結果の報告方法の討論 15分。
入門者はセクション1・4・6のみ。中級者にはコード1のウォークフォワードのループを手で追わせ、標準化の基準を全期間に変えたときに数字がどう変わるかを自分で確かめさせる。
| セクション | 立ち止まって投げかける質問 | 操作のコツ |
|---|---|---|
| 1 ウィンドウ・目標値 | 「価格をそのまま入れると何が問題だろう?」 | 価格 → 収益率の順に押す |
| 2 期待と現実 | 「方向と変動の大きさ、どちらが予測しやすいだろう?」 | 収益率 → 絶対値の順に押して、帯を外れた棒の数を比べる |
| 3 研究事例 | 「2つの研究の結論はなぜ違うのだろう?」 | データの大きさと問題の種類の行を並べて比べる |
| 4 落とし穴 | 「100個を試して1つを選んだら、その成績は信じられるだろうか?」 | 過学習 → 取引コスト(0 → 0.3%)の順に見る |
| 5 ウォークフォワード | 「ランダムに混ぜて分けるとなぜいけないのだろう?」 | 2つの方法を交互に押す |
| 6 比較 | 「LSTMはベースラインより悪かった。何を変えてみられるだろう?」 | RMSE → 戦略リターンの順に見る |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| LSTMは時系列の専門だからベースラインより優れている | 手がかりの少ない問題では、ベースラインに勝つのは難しい。この実験でLSTMはベースラインより悪かった | セクション6 |
| 方向的中率が55%ならお金が儲かる | 外れたときに大きく失えば損になる。取引コストや「持ち続ける」との比較も必要だ | セクション6のベースラインの行(55.0%) |
| バックテストで良ければ実運用でも良い | 何度も試して選ぶと偶然が混ざる。市場の性質も変わる | セクション4 過学習・構造変化 |
| 正規化は全データで1回すればよい | 学習区間だけで基準を計算しなければならない。さもないと未来の情報が漏れる | セクション1、セクション4 リーク |
| ニューラルネットワークは株価予測には役に立たない | 大きなデータ・多くの信号・クロスセクションの問題では、改善した研究がある。条件が重要だ | セクション3 |
505 − 5 = 500個。
10回。最初の学習は 500 − 200 = 300ペア、最後は480ペアである。
40 × 0.1 = 4%p(対数リターン基準の近似)。
多く試して選んだ結果は偶然に合わせられたものなので、新しい区間では再現されない(過学習・選択バイアス)。テスト区間は最後に1回だけ使わなければならない。
結果をそのまま書く。「このデータ(銘柄1つ、506日、信号は過去の収益率)とこの設定(ウィンドウ20日、50日ごとに再学習、40エポック)では、LSTMはベースラインに勝てなかった(RMSE 1.462%・1.550% 対 1.209%)。」続けて、変えてみる条件と一般化の限界を明記する。
コード1のridge_fitで、標準化の基準(mu, sd)を全期間(X全体)に変えて再実行する。RMSEと戦略リターンがどう変わるかを記録し、なぜこれがリークなのかを2文で書く。
コード2の目標を「翌日の収益率」から「翌日の収益率の絶対値(変動の大きさ)」に変える。ベースラインは「過去20日の絶対値の平均」とする。セクション2の自己相関と結びつけて、変動の予測でLSTMがベースラインに勝つかどうかを、シード3つ以上で報告する。
| 入門者 | セクション2・3は飛ばしても流れは途切れない。セクション4の過学習とセクション6の表1つは必ず見る |
|---|---|
| 発展 | 何度も試したバックテストの成果をどう補正すべきか(多重検定)を調べさせる。調べた論文は原文で確認する |
| さらに学ぶ | Sangsun Ahn『ビジネスのためのデータサイエンス』講義案(データサイエンス全般) · STEP [K-デジタル] フィンテック・データ分析基礎(この回と直接つながる) · STEP [K-デジタル] 人工知能 自然言語処理(3-5・3-8とつながる) |
| 講師用資料 | 確認問題の採点基準と課題の解答例は教育者用解答ページ (3-6)で見られる |
「3-6 時系列・株価」の回を最後まで読みました。研究室のメンバーがひと言ずつまとめます。