特徴量を増やしすぎるとAIは弱くなるのか|情報量とノイズの境界を考える

頭がパンクする様子 AI開発ログ

ぼくはまだ、競馬を完全には理解していません。

競馬AIを改善しようとすると、自然に考えることがあります。

もっと多くの情報を入れれば、予測も正確になるのではないか。

前走着順だけでなく、走破時計を入れる。
上がり3ハロンを入れる。
距離別成績、競馬場別成績、騎手成績、血統、調教、馬体重も入れる。

さらに細かく分けていけば、特徴量は次々に増えていきます。

  • 過去5走の平均着順
  • 過去5走の上がり順位
  • 前走からの距離変更
  • 芝・ダート替わり
  • 枠順別の成績
  • 騎手と厩舎の組み合わせ
  • 馬場状態別の成績
  • 休養日数
  • 斤量の増減
  • 4コーナーでの位置変化

競馬は複雑です。

それなら、できるだけ多くの情報をAIへ与えた方が、競馬を深く理解できるように思えます。

しかし、機械学習では、特徴量を増やすことが必ずしも性能向上につながるとは限りません。

場合によっては、情報を増やしたことで、AIが本番データに弱くなることもあります。

今回は、

特徴量を増やしすぎるとAIは弱くなるのか

という疑問を、競馬AIの運用に置き換えて考えてみます。

結論:特徴量の数ではなく、信号とノイズの割合が重要

最初に結論を書くと、特徴量が多いだけでAIが弱くなるわけではありません。

有効な情報が増えれば、予測性能が上がる可能性があります。

一方で、

  • 結果と関係の薄い情報
  • 同じ内容を重複して表した情報
  • 本番では安定しない情報
  • 未来の結果が混入した情報
  • 件数が少なすぎる細分化データ

を大量に追加すると、学習データには詳しいのに、未来のレースでは当たらないモデルになることがあります。

重要なのは、特徴量が100個か500個かという数字ではありません。

新しく追加した特徴量が、未来のレースでも再現する情報を持っているか

です。

特徴量とはAIが競馬を見るための材料

特徴量とは、AIが予測に使う情報です。

現在ぼくが使っている競馬AIでは、当日のレース条件、馬の基本属性、過去5走の要約統計などから、各馬が1着になる確率をp_winとして算出しています。

例えば、次のような情報が特徴量になります。

分類特徴量の例
馬の基本情報馬齢、性別、斤量、枠番、馬番
レース条件競馬場、芝・ダート、距離、クラス
近走成績着順、走破時計、着差、人気、上がり
脚質通過順位、先行率、4コーナー位置
適性距離別、馬場別、競馬場別成績
騎手情報騎手成績、乗り替わり、コース成績
ローテーション前走からの日数、距離変更、クラス変更

AIは、これらの情報と過去の結果を照らし合わせ、

「どのような条件の馬が勝ちやすかったか」

を学習します。

特徴量は、AIにとっての馬柱です。

ただし、馬柱の項目を増やせば増やすほど賢くなるとは限りません。

特徴量を増やすと何が起こるのか

人口知能を表現した絵

新しい特徴量を追加すると、AIはそれまで見えていなかった違いを学べるようになります。

例えば、過去着順だけを使っていたモデルに、距離変更を追加したとします。

すると、

  • 距離短縮で先行しやすくなる馬
  • 距離延長で追走が楽になる馬
  • 距離変更によって成績を落としやすい馬

といった関係を学べる可能性があります。

これは有効な追加です。

一方で、情報を細かくしすぎると、偶然のパターンも見つけやすくなります。

例えば、過去データの中で、

札幌芝1500メートル
4枠
4歳牡馬
前走函館芝1200メートル
中2週
馬体重480~489キロ

という条件の馬が、たまたま高い勝率を残していたとします。

AIはこの組み合わせを学習できるかもしれません。

しかし、その高成績が本当に再現する傾向なのか、少ない件数で偶然起きただけなのかは別です。

特徴量が増えるほど、AIは学習データの細かい違いを説明できます。

その反面、偶然まで規則として覚える危険も増えます。

AIが学習データを覚えすぎる「過学習」

特徴量を増やしたときに問題となるのが、過学習です。

過学習とは、過去の学習データには非常によく合うものの、新しいデータでは性能が落ちる状態です。

競馬に置き換えると、

  • 2015年から2024年のレースは高精度で説明できる
  • 2025年以降のレースでは当たらない
  • 学習データの回収率は高い
  • 実運用では回収率が下がる

という状態です。

例えば、次のような結果になったとします。

モデル特徴量数学習期間の精度未使用期間の精度
基本モデル607269
追加モデルA1207671
追加モデルB3508466

数値は説明用の例ですが、特徴量350個のモデルは学習データでは最も良く見えます。

しかし、未来のレースに近い検証期間では、基本モデルより悪化しています。

学習時の成績が良くなっただけでは、AIが強くなったとは言えません。

本当に見るべきなのは、モデルが一度も見ていない未来側のデータでの成績です。

競馬データは特に過学習が起きやすい

競馬ゲート

競馬には、特徴量を増やしたくなる材料が大量にあります。

競馬場、距離、クラス、馬場、枠順、騎手、厩舎、血統。

これらを掛け合わせれば、いくらでも細かい条件を作れます。

しかし、細分化するほど対象件数は減ります。

例えば、

「中京芝2000メートルにおける騎手成績」

であれば、一定の件数を確保できるかもしれません。

そこからさらに、

「中京芝2000メートル、重馬場、5番人気以下、4歳馬、内枠に騎乗したときの騎手成績」

まで分けると、該当レースが数件しかない可能性があります。

数件の結果から勝率50%と出ても、それを信頼してよいとは限りません。

競馬AIでは、条件を細かくするほど「詳しいデータ」になります。

同時に、「件数が少なく不安定なデータ」にもなります。

問題① 意味のない特徴量がノイズになる

特徴量の中には、結果とほとんど関係しないものもあります。

AIが十分なデータを持っていれば、無関係な特徴量を無視してくれる可能性があります。

ただし、限られたデータでは、偶然の相関を見つけることがあります。

例えば、本来は意味が薄い情報でも、学習期間中にたまたま勝ち馬と重なっていれば、モデルが利用するかもしれません。

競馬データで起こりそうな例としては、

  • 件数の少ない血統分類
  • 一時的な騎手成績
  • 細かすぎる馬体重区分
  • 特定期間だけ有効だった枠順傾向
  • 数レースしかない競馬場と距離の組み合わせ

などがあります。

特徴量を追加するときは、

「競馬的に意味がありそう」

だけでなく、

「十分な件数で安定しているか」

を確認する必要があります。

問題② 似た特徴量を大量に作ってしまう

特徴量を増やしていくと、同じ情報を少しずつ違う形で表すことがあります。

例えば、近走成績について、

  • 過去5走の平均着順
  • 過去3走の平均着順
  • 前走着順
  • 直近着順の加重平均
  • 過去5走の最高着順
  • 着順の中央値

を追加したとします。

それぞれ計算方法は違いますが、すべて近走の着順を表しています。

同じように、

  • 平均上がり順位
  • 最速上がり回数
  • 前走上がり順位
  • 上がり3ハロン平均
  • メンバー内上がり偏差

も、似た情報を含んでいる可能性があります。

LightGBMのような決定木系モデルは、似た特徴量が存在しても学習できます。

ただし、重複する情報が増えると、

  • 特徴量重要度が分散する
  • 学習結果が不安定になる
  • どの特徴が効いているか分かりにくくなる
  • 計算時間が増える
  • 微妙なデータ差で選ばれる特徴が変わる

といった問題が起こる可能性があります。

似た特徴量をすべて消す必要はありません。

しかし、追加によって本番性能が改善しているかは確認したいところです。

問題③ 未来の情報が混ざるデータリーク

特徴量を増やす際、最も危険なのがデータリークです。

データリークとは、本来予想時点では分からない情報が、学習データへ混入することです。

競馬AIでは、例えば次のようなケースが考えられます。

  • 確定後の最終人気や情報を、予想時点の特徴量として使う
  • 対象レース後の成績を含めて騎手勝率を計算する
  • その馬の将来成績を含めて適性を作る
  • 同じレースの結果を集計値へ混ぜる
  • 全期間を使って標準化した後に時系列分割する

リークが起きると、検証結果は大きく改善することがあります。

しかし、それはAIが競馬を理解したのではありません。

結果の一部を先に教えてもらっているだけです。

特徴量を増やした直後に、性能が不自然なほど向上した場合は、

予想時点で本当に利用できる情報なのか

を最初に確認する必要があります。

問題④ 現在は使えても将来は使えない

競馬の傾向は固定ではありません。

騎手の所属や騎乗馬の質が変わります。

厩舎の成績も変化します。

競馬場の芝、レース体系、開催時期も変わることがあります。

そのため、過去には有効だった特徴量が、将来も同じように機能するとは限りません。

例えば、

  • 過去10年間の騎手勝率
  • 特定厩舎との組み合わせ
  • 開催時期別の枠順傾向
  • 以前のクラス体系での成績

は、時間が経つと意味が変わる可能性があります。

これをデータの変化、あるいはドリフトとして捉えることができます。

古いデータを大量に含む特徴量は安定して見えますが、現在の実力を表していない場合があります。

逆に直近だけを使うと、件数が少なくなります。

競馬AIでは、

長期的な安定性と、直近の変化のどちらを重視するか

という調整も必要になります。

問題⑤ 欠損値そのものを学習してしまう

特徴量を増やすほど、データが存在しない項目も増えます。

新馬には過去走がありません。

初めての芝、初めての距離、初めての競馬場では、適性成績を計算できません。

その結果、欠損値が多くなります。

LightGBMは欠損値を扱えますが、欠損があるから問題ないとは限りません。

モデルが、

「この特徴量が欠損している馬は新馬だから低評価」

というように、欠損そのものを条件として学習することがあります。

それが未来でも再現するなら問題ありません。

しかし、データ取得方法が変わっただけで欠損率が変化すると、予測も変わる可能性があります。

追加した特徴量については、

  • どの条件で欠損するか
  • 欠損率は何%か
  • 0で埋めることに意味があるか
  • 欠損フラグを分けるべきか

も確認したいところです。

特徴量が多くても強いモデルは作れる

表彰台に上がっている様子

ここまで特徴量を増やす危険を書きましたが、少数の特徴量だけが正しいという話でもありません。

競馬は複数の要素が組み合わさって結果が決まります。

距離適性だけでは足りません。

脚質だけでも足りません。

馬の能力、レース条件、騎手、枠順、展開などを組み合わせることで、初めて見える関係もあります。

例えば、

単純な外枠
単純な先行馬

だけでは大きな差がなくても、

最初のコーナーまでが短いコースで、外枠から先行する馬

という組み合わせには意味があるかもしれません。

LightGBMのような決定木系モデルは、こうした特徴量同士の組み合わせを学習することを得意としています。

したがって、特徴量が多いこと自体を恐れる必要はありません。

大切なのは、追加した特徴量を検証せずに残し続けないことです。

「特徴量が効いている」は何で判断するのか

特徴量を追加したとき、学習データの正解率だけを見てはいけません。

競馬AIでは、複数の観点から確認する必要があります。

評価項目確認したいこと
Log Loss勝率予測の確からしさが改善したか
Brier Scorep_winと実際の結果のずれが小さくなったか
AUCなど勝ち馬を相対的に上位評価できているか
1位馬の勝率指数1位の成績が改善したか
確率の校正p_win20%の馬が本当に約20%勝っているか
回収率オッズと組み合わせた結果が改善したか
条件別成績特定条件だけの偶然ではないか
年度別成績複数期間で効果が続いているか

特に注意したいのは、的中精度と回収率の違いです。

特徴量を増やすことで、人気馬をより正確に評価できるようになれば、的中率は上がるかもしれません。

しかし、市場もその馬を高く評価しているため、オッズが低ければ回収率は改善しない可能性があります。

競馬AIの目的が、勝ち馬の順位付けなのか、確率推定なのか、期待値の発見なのかによって、評価指標も変える必要があります。

特徴量重要度が高ければ残すべきか

LightGBMでは、特徴量重要度やSHAP値を使って、どの情報が予測に影響したかを確認できます。

ただし、重要度が高いから、その特徴量が必ず有効とは限りません。

データリークしている特徴量は、非常に高い重要度を持つ可能性があります。

似た特徴量が複数ある場合は、重要度が分散します。

一部のレースだけで強く働く特徴量もあります。

特徴量重要度は、

「モデルがよく使っている情報」

を示します。

しかし、

「未来のレースでも役立つ情報」

を保証するものではありません。

最終的には、その特徴量を入れた場合と外した場合で、未来側の検証成績を比較する必要があります。

特徴量を一つずつではなく、グループで検証する

競馬AIの特徴量は、単独では意味が弱くても、グループで機能することがあります。

そのため、次のように分類して検証する方法があります。

特徴量グループ
基礎能力近走着順、着差、走破内容
スピード走破時計、上がり、ペース補正
脚質通過順位、先行率、位置取り変化
適性距離、競馬場、馬場別成績
ローテーション間隔、距離変更、クラス変更
人的要素騎手、厩舎、乗り替わり
当日条件枠順、斤量、馬体重

まず基礎モデルを作ります。

その後、

  • 脚質グループを追加
  • 騎手グループを追加
  • 適性グループを追加

という形で比較します。

一つの特徴量だけでは効果が小さくても、関連する情報をまとめて入れると改善する場合があります。

反対に、グループ全体を追加しても未来側の性能が変わらないなら、計算量を増やしているだけかもしれません。

時系列で検証しないと未来への強さが分からない

競馬データでは、ランダムに学習用と検証用を分けるだけでは不十分な場合があります。

実際の運用では、過去を使って未来を予測するからです。

例えば、

  • 2015~2023年で学習
  • 2024年で調整
  • 2025年で最終確認

という時系列に沿った分割が考えられます。

さらに、

  • 2015~2020年で学習し2021年を検証
  • 2015~2021年で学習し2022年を検証
  • 2015~2022年で学習し2023年を検証

というように、時点をずらして確認する方法もあります。

ある特徴量が2024年だけ有効でも、2022年や2023年では悪化しているなら、偶然の可能性があります。

特徴量を残す基準は、

一つの検証期間で最高成績を出したかではなく、複数の未来期間で安定して改善したか

にした方がよさそうです。

競馬AIで起こりやすい「特徴量追加の罠」

反転する水晶

例えば、騎手の競馬場別勝率を追加したとします。

検証成績が改善したため、有効な特徴量に見えます。

しかし、よく確認すると、

  • 有力騎手が強い馬に乗っている影響
  • 人気情報を間接的に学習している
  • 集計時に対象レース後の成績が含まれている
  • 騎乗数が少ない騎手の勝率が極端
  • 特定年度だけ成績が良い

という可能性があります。

必要になるのは、

  • 対象レース以前の成績だけで集計する
  • 騎乗数が少ない場合は全体平均へ近づける
  • 人気帯や馬の能力を考慮する
  • 年度を変えて検証する

といった処理です。

特徴量は、作った瞬間には完成していません。

その数字が何を表しているのかを確認する工程まで含めて特徴量設計

なのだと思います。

特徴量を減らした方が強くなる場合

特徴量を削除すると、モデルが単純になります。

単純になることは、必ずしも性能低下を意味しません。

不要な特徴量を減らすことで、

  • 過学習を抑えられる
  • 学習時間が短くなる
  • 予測結果が安定する
  • モデルの説明がしやすくなる
  • データ更新時のミスが減る
  • 本番処理を簡素化できる

という利点があります。

特に競馬AIを継続運用する場合、データ取得と加工の負担も無視できません。

性能がほとんど変わらない特徴量のために、毎週複雑な処理を維持する必要があるのか。

予測精度だけでなく、運用コストも考える必要があります。

ぼくの競馬AIで試したい追加手順

現在のAIへ新しい特徴量を追加するなら、次のような流れがよさそうです。

1.追加する理由を言葉にする

「データがあるから」ではなく、競馬的な仮説を決めます。

例えば、

札幌では直線の上がりだけでなく、3コーナーから位置を上げる能力が重要ではないか。

という仮説です。

2.特徴量を作る

過去走の3コーナーから4コーナーまでの順位変化を集計します。

3.予想時点の情報だけで作られているか確認する

対象レース後のデータが混ざっていないかを確認します。

4.基礎モデルと比較する

追加前後で、未来側のLog LossやBrier Scoreなどを比べます。

5.年度・競馬場別に確認する

札幌だけで効いているのか、ほかの小回りコースでも効くのかを見ます。

6.オッズと組み合わせて検証する

予測精度だけでなく、購入条件で回収率が改善したかも確認します。

7.改善が安定しなければ外す

競馬的に面白い特徴量でも、モデルへ必ず残す必要はありません。

この流れなら、特徴量を増やすこと自体が目的になりにくくなります。

AIに必要なのは「全部知ること」ではない

競馬を理解しようとすると、あらゆる情報をモデルへ入れたくなります。

しかし、すべての情報を取り込むことと、重要な情報を見つけることは違います。

人間の予想でも、情報を集めすぎると迷うことがあります。

調教は良い。
距離は不安。
騎手は好成績。
展開は厳しい。
血統は合う。
枠順は悪い。

材料が増えた結果、どの馬にも買う理由と消す理由が見つかります。

AIにも似た問題があります。

特徴量を増やしすぎると、学習データの細かな違いを説明できる一方、未来でも通用する中心的な傾向が見えにくくなることがあります。

必要なのは、競馬に存在するすべての情報ではありません。

結果に関係し、未来でも繰り返し観測できる情報

です。

まとめ

特徴量を増やしすぎるとAIは弱くなるのか。

結論としては、

特徴量が多いから弱くなるのではなく、ノイズや不安定な情報を増やすことで、未来への予測力が落ちる可能性がある

となります。

重要な点を整理すると、次のとおりです。

  • 有効な特徴量が増えれば性能は向上し得る
  • 特徴量数だけでモデルの良し悪しは決まらない
  • 情報を細かくするほど対象件数が減る
  • 無関係な特徴量は偶然の相関を生みやすい
  • 似た特徴量を増やすと解釈や学習が不安定になる
  • データリークは検証成績を不自然に高める
  • 過去に有効でも将来は変化する可能性がある
  • 欠損値の意味も確認する
  • 特徴量重要度だけでは有効性を判断できない
  • 未来側の期間で追加前後を比較する
  • 精度だけでなく確率の校正や回収率も見る
  • 効果が小さい特徴量は、運用負荷を考えて外す

ぼくはまだ、競馬AIに何をどこまで教えるべきなのかを探している途中です。

情報を増やせば、AIが競馬へ近づいていくように感じます。

しかし、増えた情報の中に偶然や重複が多ければ、AIは競馬を理解しているのではなく、過去のレースを細かく暗記しているだけかもしれません。

特徴量設計で重要なのは、

何個入れたかではなく、その情報が未来のレースでも役立ったか。

新しい特徴量を作ることは、AIを賢くする作業です。

同時に、役に立たない特徴量を外すことも、AIを強くするための大切な学習なのだと思います。

コメント

タイトルとURLをコピーしました