精度を引き上げるLog変換の裏技:XGBoostと相性抜群な理由を数学で解剖する

に公開

1. 現場でよくある問題:「株価はバラつきすぎる」

  • 株価などの金融データは桁も動きも大きすぎる
  • XGBoostにそのまま突っ込むと、大きな値に引っ張られがちになる
  • ⇒ モデルが一部のスケールに過剰適合するリスク

2. 実はみんな使ってる「log変換」という裏技

  • よく見る処理:

    df["LogClose"] = np.log(df["Close"])
    df["Target"] = df["LogClose"].shift(-1) - df["LogClose"]
    
  • これ、ただの前処理じゃない

  • 学習の安定性と精度に効く「重要な変換」


3. Logの何がいいの?──ばらつきを均等化できる

大きい値も小さい値も「同じ倍率なら同じ差になる」

  • 例:100→200、1000→2000 の log差は同じ
  • XGBoostの分割にとって、全体をフラットに保つ効果

外れ値の影響を和らげる(=ロバスト性向上)

  • logは「スケール圧縮」を行うので、極端な値が滑らかに

4. 数学的な背景:なぜ自然対数(ln)なのか?

  • e の対数は、連続成長指数関数との整合性がある

  • log差:

    \ln(\text{Close}_{t+1}) - \ln(\text{Close}_t) = \ln\left(\frac{\text{Close}_{t+1}}{\text{Close}_t}\right)
  • 倍率の変化が加法的に扱える(複利に対応)


5. XGBoostとの相性の良さ

  • XGBoostは非線形分岐モデル

    • 特徴量を「分割しながら」学習
  • 分割は基本的に スカラーな数値スケール に依存

  • log変換で「分割しやすい形」にすることで:

    • 決定木が「同じ倍率での変化」を見逃さない
    • 学習の偏りを抑え、特徴量の公平性を保てる

6. 実例:変換前後の精度比較(任意でグラフ追加)

  • MAE or RMSE で log変換前後の誤差比較
  • ヒストグラムや散布図で視覚化

7. まとめ:「logは前処理じゃなく、性能ブースター」

メリット 内容
分布の圧縮 外れ値に強くなる
同倍率の変化を均等化 モデルが倍率の変化を学習しやすい
複利と整合 金融データとの相性がいい
数学的にスッキリ 微分・積分の性質も良い

Discussion