機械学習 で 株価分析 にチャレンジ Part3

machine-learning-part5

これまでの記事はこちら

machine-learning-part5
machine-learning-part5

前回までで機械学習に使用する各指標を紹介していきました。今回は目的変数(ターゲット)の設計について記事を書いていきます。

3.1 なぜターゲット設計が重要なのか?

機械学習モデルを構築するにあたって、最も基本的かつ重要なことは「何を予測するか?」です。これは特徴量(input)がどうあるべきか以上に、結果(output)がどう定義されているかがモデルの性能・意味合いを左右します。
株価を例に取ると、「明日の終値そのものを予想する」「翌営業日のリターン(変化率)を予想する」「5日後の終値を予想する」など、目的変数の設計によってモデルの学習対象・難易度・解釈が大きく変わります。

※「どれくらい先を予測するか」を意味する単語として「地平」を導入します。

誤ったターゲットを選ぶと、以下のような問題が起きます:

  • 価格そのものを予測すると銘柄のスケール(数千円〜数万円)に影響されてしまう
  • 短すぎる地平(Horizon)だとノイズばかりモデルが学んでしまう
  • 長すぎる地平だと“未来の情報”(ニュース・イベント等)が介入しすぎて過学習になりやすい


3.2 ターゲットの候補とその比較

まず、株価予測でよく用いられるターゲットの種類を整理します。そして、それぞれのメリット/デメリットを考えていきましょう。

3.2.1 終値そのもの

終値とは、「その日の取引が全て終わったあとの価格」を意味します。

メリット

  • 直感的に「この株はあといくらになるか」がわかる
  • モデル出力が直接価格なので、運用への落とし込みがシンプル

デメリット

  • 銘柄ごとに価格のスケールが異なる(100円株と10000円株でモデルが共通化しづらい)
  • モデルが価格そのものの大きさを学習し、変動率よりもスケールバイアスが出やすい
  • 地平Hによって価格水準が異なるため、学習が直感的でなくなる

3.2.2 リターン(変化率)

リターンとは、「ある時点から次の時点までに価格がどれくらい増減したか」を割合で表したものです。

メリット

  • 銘柄スケールに依存せず、「何%変化したか」という共通尺度で比較可能
  • モデルが“どれだけ伸びたか/下がったか”を捉えやすい
  • 運用での収益率やリスク管理に直結しやすい

デメリット

  • 価格そのものに戻すには「元本(始値)×(1 + リターン)」の変換が必要
  • リターンを直接使うと、ゼロ近傍や極端値で学習が不安定になることがある

3.2.3 対数リターン(Log Return)

対数リターンとは「株価などの時系列データの変化率を自然対数(log)で表したものです。

メリット

  • リターンが小さい場合、対数リターン ≈ リターン で直感的にも使いやすい
  • 上昇/下落の対称性が保たれやすい(例:+10%と−9.09%が同じ対数変化)
  • 分布が正規分布に近づきやすく、学習が安定するケースが多い

デメリット

  • 直感的には「%」ではなく「log比率」なので解釈が少し難しい
  • 出力を価格に戻すためには eを用いたの変換が必要

3.2.4 補足:平滑化・フィルタリングを加えることも

機械学習では特に「ノイズを少なくし、有効信号を残す」ことが重要です。そのために、対数リターンなどを移動平均で平滑化したり、外れ値をクリップしたりする設計もよくあります。


3.3 ターゲット設計の流れ

今回の株価分析においては、次のような流れでターゲットを設計しています:
なお、t:日, H:比較する日数を意味します。

  1. 終値から 対数リターン を計算

    $$y_{t,H} = \ln\left( Close_{t+H} \right) – \ln\left( Close_t \right)$$
  2. さらに 3日移動平均(軽く平滑化) をかける
    _$$\hat{y}_{t,H} = \frac{1}{3} \sum_{i=0}^{2} y_{t-i,H}$$
  3. モデルは HH ∈ {3,5,10} のそれぞれを学習対象とし、最終的に H=5 に換算して予測
  4. 予測リターンを終値に戻して「価格」の予測も可能にする
    $$\hat{P}_{t+H} = Close_t \times e^{\hat{y}_{t,H}}$$

3.3.1 なぜ「対数リターン+平滑化」を採用しているか?

  • 対数変換により、変化が大きいときの影響を抑えつつ、上昇・下落を対称に扱える
  • 平滑化(3日移動平均)により、直近1日のノイズ(例:出来高急増・ニュース反応)にモデルが反応し過ぎることを防ぐ
  • 複数の地平 H を用いることで「短期・中期・やや長期」の視点をモデルに持たせ、「H=5」等に補正して最終的な予測に活かす
  • 終値そのものではなくリターンを学習対象にすることで、銘柄スケールに依存せず、特徴量の抽出がしやすくなる

3.3.2 実装対応

def make_target(df, H):
    y = (np.log(df['Close'].shift(-H)) - np.log(df['Close']))
    y_smooth = y.rolling(3, min_periods=1).mean()
    return y_smooth

この関数を用して、各 H におけるターゲットを生成しています。


3.4 地平(Horizon)設計:なぜ H∈{3,5,10}?

ターゲットの“何日先を予測するか”=地平 H(Horizon) の選び方も重要です。

3.4.1 短期(H=3)

  • 数日以内の予測:直近の勢いやモメンタムを捉えやすい
  • ただしノイズも多く、誤差幅が大きくなりやすい

3.4.2 標準(H=5)

  • 1週間程度先を想定:運用の時間軸として現実的
  • ノイズ・短期的な揺れの影響が少し薄まり、トレンドが少し見え始める

3.4.3 中期(H=10)

  • 2週間前後先を想定:変動の方向性を捉えやすい半面、未知のイベントや変化が入り込みやすい
  • 学習対象としては少し「未来の情報に近づく」リスクも高まる

3.4.4 なぜ3つの H を使うのか?

  • 単一の H に頼ると、その地平に特化した“過去特有”のパターンを拾ってしまう(過学習)
  • 複数の H を学習し、それらを「H=5」に補正/ブレンドすることで、短期の勢い+中期の方向性+メイン地平というバランスを取れる
  • このブレンドにより、1つのモデルでは捉えづらかった“時間スケールのズレ”を補正できる

3.4.5 補正方法

コードでは、H=3、5、10で予測を出してから、次のように補正・ブレンドしています:
$$y_3′ = \hat{y}_3 \times \frac{5}{3}$$
$$y_{10}’ = \hat{y}_{10} \times \frac{5}{10}$$
$$\hat{y}_{ens} = w_5 \hat{y}_5 + w_3 y_3′ + w_{10} y_{10}’$$

wは重みをかける係数で、値が1に近づくほど、その係数がかかっている変数が重要視されると理解してください。今回の株価予測では、重み w5=0.6, w3=0.25, w10​=0.15 が設定されており、H=5への“スケーリング補正”後にブレンドしています。


3.5 モデル出力を価格に戻す(復元)

ターゲットを対数リターンにした場合、モデルが出力する値は “リターン(log scale)” です。これを 価格予測 に変換するには以下の式を使います:
$$\hat{P}_{t+H} = Close_t \times e^{\hat{y}_{t,H}}$$

ここで

  • Closet​ は予測基準日の終値
  • $\hat{y}_{t,H}$ は対数リターン予測値

この変換により、「5営業日後にこの株の終値は〇〇円になるだろう」という直感的な予測値が得られます。


3.6 評価指標とターゲット設計の関係

ターゲット設計は、評価指標とも強く結びついています。あなたのコードでは MAE(平均絶対誤差) と MAPE(平均絶対誤差率) を用しています。ターゲットをどのように設計するかで、これらの指標の意味合いも変わってきます。

3.6.1 MAE(価格MAE)

終値予測を価格に戻して、誤差を「円」で評価しています。
$$MAE_{price}= \frac{1}{N} \sum_{t=1}^{N}\left|\, \hat{P}_{t+H} – P_{t+H} \,\right|$$

ここで、$P_{t+H}$は実際のH日後の終値を指します。ターゲットが対数リターンであっても、最後に価格に復元すればMAEは価格ベースのズレとして解釈できます。

3.6.2 MAPE(%誤差)


MAPEは下式で定義されます。
$$MAPE_{price}= \frac{100}{N} \sum_{t=1}^{N}\left|\, \frac{\hat{P}{t+H} – P{t+H}}{P_{t+H}} \,\right|$$

こちらに関しては、価格そのものではスケールが異なる複数銘柄を比較する際に便利です。リターンをターゲットにしておけば、この誤差率の解釈がより自然になります。

3.6.3 ターゲット設計とのリンク

  • 終値そのものを予測:MAEはそのままズレ(円)として意味を持つが、MAPEは価格が異なる銘柄間で比較するとバイアスあり
  • リターン/対数リターンを予測:MAPEの意味が直感的で、MAEを価格に戻してから評価するとスケール依存を減らせる
  • 複数Hを学習・ブレンドする場合:地平の違いによるズレを補正し、ターゲットの整合性を保つ必要あり

3.7 初心者が気を付けたいポイント

A. 地平Hと期待期間を一致させる

「5営業日先」を予想するなら、評価にも5営業日先の実績値を使う。逆に「翌日予想モデル」で5日先を評価するとズレる。

B. 対数変換は外れ値に強いが直感が少し難しい

「%」で語りたい場合はリターンで良いが、学習的には対数リターンが安定する。結果を価格に戻す変換を忘れずに。

C. 平滑化の有無を意識する

3日移動平均で平滑化したターゲットは、ノイズを除く分モデルが捉えやすいが「直近1日の急変」は弱めてしまう。用途に応じて使い分け。

D. 複数地平を使ったブレンドは「時間スケールのズレ」を補正する工夫

短期指標、標準指標、中期指標を一つにまとめてH=5に整えた本設計は、汎用性・安定性を両立しており、初心者でも実戦的な設計です。

E. ターゲットの欠損(NaN)への配慮

未来の値を利用するため、終端の数日分はターゲットが作れません。学習データから除外するか、将来予測用に予約しておく必要があります(shift(-H) を使う時)。


3.9 ターゲット設計の工夫がモデル精度に与える影響

  • リターン/対数リターンで学習すると、損益率のイメージが取り込みやすく、モデルの出力解釈も運用に近づく
  • 複数地平のブレンドを入れることで、短期ノイズを抑えつつ中期方向を活かすハイブリッド構造が成り立つ
  • 評価指標(MAE/MAPE)との整合性が取れ、過学習防止+運用的意味の両立が図れる

たとえば、「地平Hを10にしてしまうと、モデルが10日先に発生するイベント(決算・政策発表)を学習してしまい、現実の運用開始時にはそのイベントが既に終わっている」ような“未来リーク”が発生しやすいです。逆に「地平Hを1にしてしまうと、ノイズが支配し、翌日の偶然上昇を“必勝パターン”と誤学習”することもあります。

shota_py

メーカー勤務のエンジニアです。 自分の趣味である、「電気回路」、「ガジェット」「株式投資」、「Python」に関する記事をつらつらと書いています

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


ABOUT US
shota_py
メーカー勤務のエンジニアです。 自分の趣味である、「電気回路」、「ガジェット」「株式投資」、「Python」に関する記事をつらつらと書いています