見出し画像

競馬②AI競馬予想はどのくらい現実的か

noteで機械学習と検索すると、競馬の記事ばかりヒットする、そのくらい、AI競馬予想は商材として盛んであるように見える。

流石に、ChatGPTに「今日のレースの3連単教えてください」、と聞くくらいの低レベルはないと信じたいが、それにしても中身が不透明だ。

競馬は既にギャンブルなのに、的中するAI競馬予想を探すという、さらなるギャンブルに手を出すのは感心しない。

今回は、AI競馬予想を理解するための基礎知識をまとめた。また、数式や機械学習実行環境についてはAPPENDIXにまとめたので、手元で検証したい人はぜひ。


1. 機械学習での競馬予測とは何をしているか──機械学習が扱うのは確率の再現であり、未来の予言ではない

一言で、競馬を機械学習で予測する、AIで当てると言葉で説明されても、いまいちピンとこない。予測、とは具体的にどのような行為を指すのだろうか。

直感的には、AIによる予測とは、過去のレースを統計的に整理し、次のレースで同事象が現れる確率を推定する作業だと、競馬ファンの皆さんも理解はしているかと思う。

では、それは具体的にはどういうことか。

この領域の試み、すなわちレースの結果を数値化して予測モデルに学ばせる手法は、ここ10年で急速に拡大した。

大学の研究、Kaggleの個人プロジェクト、企業の分析部門など、さまざまな場所で手法が検証されている。

勝敗(二値分類)を学習するモデルは「当たるように見えて実は外れを当てている」

最初に結論:二値分類の有料予想を買うということは、鉛筆を転がしているのと何も変わらない結果をお金を出して買うということに近い。

最も古典的で分かりやすい、どの馬が勝つか/勝たないかを分類するモデルを二値分類半か丁か当てると呼ぶ。

モデルに入力するデータとしては、過去の成績、騎手、枠順、距離、コース、馬場状態、斤量、調教タイムなどが使われる。

使われるアルゴリズムは、ロジスティック回帰やランダムフォレスト条件分岐を繰り返し予測を力技で大量実施XGBoost(エックスジーブースト)同じく力技、勾配ブースティングした条件分岐を繰り返すなどが主流。

そして出力は「勝つ確率」「3着以内に入る確率」などの確率値として表される。

この方法は実装が容易で、Accuracy正解率AUC; Area Under Curveモデルの予測性能の検証も分かりやすい。

過去の成績、騎手、枠順、距離、馬場。ファンなら誰でも口にする条件を、機械が整然と数字として出す。

この馬は中山巧者だ中山競馬場でやけに勝つ馬だから買うぞ」と言う代わりに「この馬場・距離での勝率は35%」という出力になるかたちだ。

だが、根本的な問題として、競馬は常に1頭だけ勝ち、残りは負けるゲームである。そのため、二値分類というモデルにおいてはデータが極端に不均衡になる。

これは極端なクラス不均衡問題であり、「勝ち馬1:負け馬13〜17」というデータ構造がモデルの学習を歪める。

この状況で精度を評価すると、「外れを当てる」だけで高得点になる。

Accuracy正解率が95%でも、実際には「全員負け」と予想しただけ、ということが起こりうる。マークシート試験で負ける馬を選べ、いくら選んでも構わないと出題されたら、全部塗り潰しても高得点になるのと同じことだから。

AUCモデルの予測性能LogLoss予測の確実性で見れば、モデルの精度は改善していますと言えなくもないかもしれないが、勝ち馬の的中率に必ずしも結び付くとは限らないモデルなのだ。

これに対して不均衡データを補正する手法(SMOTEなどでオーバーサンプリング1等の馬の数を負けた馬と同じ数に水増しし学習させる)もあるが、本来存在しない「仮想の勝ち馬」を作り出すことで、モデルが現実の競馬構造から乖離してしまう。

二値分類半か丁か当てるが悪いのではなく、二値分類は競馬予想に向いていないモデルなのだ。「データを綺麗にすればするほど、実際の競馬から離れる」矛盾を抱えている。

だから、上記のキーワードを使っている有料予想はお勧めしない

コラム 不均衡データへの対処と特徴量工夫
 
「勝ち馬が1頭しかいない」という構造上、勝敗データは常に不均衡(imbalanced)である。この問題に対して、合成サンプリング(SMOTE)やクラス重み調整(パラメータの重みづけを調整)を導入する研究もある。
 また、着差を順位スコアに変換する、上位3着を1クラスにまとめるなど、
目的変数(Target)の再設計も行われている。
 これらは統計的安定性を高める工夫だが、過剰にバランスを取ると、現実の「勝者1名・敗者多数」の構造を失ってしまう。つまり、学術的に美しいデータにしても、実際の競馬とは乖離する。

着順やタイムを数値で予測する回帰モデルは「精度は出ても賭けに直結しない」

最初に結論:回帰モデルの有料予想を買うなら、どのくらいデータを取り込んでいて、モデル作成者がモデルと現実の誤差をどう考えているのか吟味して欲しい。

次に多いのが、順位やタイム差を回帰分析で扱う手法。

勝敗ではなく「どれくらいの着差でゴールするか」「タイム偏差がどの程度か」を予測する。

この場合、目的変数は連続値になるため、誤差(MAE; Mean Absolute ErrorやRMSE; Root Mean Squared Error)で評価できる。

単勝のような一点予想よりも安定した精度が出やすいことが利点。

また、タイムや着差は連続変数なので、的中・不的中の二元性を超えた滑らかな予測が可能になる。

ただし、タイムは馬場や気象条件の影響が非常に大きく、正規化が難しい。芝とダート、季節、含水率などの補正を入れないと誤差が拡大する。

回帰モデルなら、お金を出して買う価値はそれなりにあるかもしれない。魔法の言葉は「R²(決定係数)はいかほどモデルがデータをどれくらい説明できているかでしょうか?」0は論外、0.8以上は必須、1に近づけば優秀。なんですかそれと返されたら作成者は話す価値のないド素人。

コラム 深層学習
 二値分類、回帰の他、第三の方法として、ニューラルネットワーク(人間の脳の仕組みを真似した構造)を使った高度なモデルもある。データが多く、複雑なパターンを持つ場合に特に強力だが、完全ブラックボックスと言っても良いので評価不能、普通やらないというか、やれない。少なくとも2025年時点では。

展開・位置取りの構造を特徴量に加えるモデルは「理論的でも現場の偶然に崩される」

最初に結論:海外の競馬予想では、このシミュレーションが主戦場。でも日本ではJRAが未対応のため、データでなく人間の経験に頼らざるを得ない。展開さえあたればあたる、、、ってそれが一番難しい(笑)

レースの展開(ペース・隊列)を入力特徴として扱うモデルも増えてきている。

近年、英国や香港では全レースの区間タイムやGPSによる位置情報が公開されている。馬ごとの速度や加速度を時系列で分析でき、展開の再現も可能になった。

これにより、単に「馬」と「条件」だけでなく、「逃げ馬が多いか」「先行馬が何頭いるか」「直線での追い込み型が何頭いるか」など、レースの流れそのものを数値化して予測に組み込むことが可能になってきている。

この考え方は、従来の人間予想が経験的にやってきた発想に近い。

AIはそれを体系化し、複数レースのラップ傾向を統計的にクラスタ化できる。

一方で、日本の中央競馬ではこの種のデータは限定的にしか扱われていない。ラップや映像から推測するしかなく、AIが学べる情報はまだ狭い。

つまり、日本では、このタイプのAIは存在しないか、人間が代わりに直感で入れて補うかのどちらかだ。

そして、言うまでもないことだが、この展開というものは、当日の出遅れや隊列の乱れで容易に崩れる。

AIは「典型的な展開型」、例えばスローペースなので先行馬が有利・不利等を見抜くことは得意でも、「実際の展開を再現」できるようにはできていない。

典型的な展開になりやすいレースかどうかを判断する嗅覚(いわゆる展開マッチ度%)、は人間に頼らざるを得ない。それはAIとは呼ばない。

コラム 日本の競馬はデータ不足
 海外では、馬の位置情報や速度を時系列で記録した「トラッキングデータ」が入手できる。
 馬ごとの座標・速度・加速度をフレーム単位で解析するためのデータセットが提供されているため、「どの馬がどこで加速し、どこで減速したか」を可視化できる。
 ただし、海外では当たり前になりつつあるこの手法は日本では使えない。データの取得コストが高く、日本の中央競馬では実証実験どまり。JRA内部では確実に理論的・学術的な検証はしているはずだが、その結果は公開されていない。

オッズや市場データを取り込むモデルは「市場と同じ目線に立つため優位性が生まれない」

最初に結論:勝ち馬を当てるだけでなく、どのようにお金を賭けるか、が賭けとしてみた場合は大切。

馬の順位だけでなく、賭けの勝敗も考えたい。この二つは似て非なるものだ。

競馬ファンの皆さんも経験があるだろう。「当たっているのに増えない」現象。

単勝を拾い続けても、残高は少しずつ減っていく。中央競馬では払戻率があらかじめ決まっており、単勝・複勝で約80%、三連系では70%台まで下がる(出典:JRA, 2025)。

つまり、当てるだけでは利益が出ない仕組みになっている。単純に馬の順位を予想するだけでは足りず、市場のオッズの裏をかく予測をする必要がある。

近年の実践的な研究では、市場の集団心理を学習に取り込むケースが多い。

まず前提として、JRAのオッズは、多数の人間の情報判断が凝縮された「集合知(多くの参加者の判断が集まった平均)」であり、ある意味、既に最強の機械学習人間の脳の集合システムといえる。そのため、見つかった優位の織り込みも早い。

AIはそのオッズを特徴量として加え、「市場がどの馬を過大評価しているか/過小評価しているか」を見極める。

この手法は、AI単体よりも「AIと市場の差分」が重要になる。

モデルが出した勝率と実際のオッズが乖離している馬を“バリュー馬”とみなす。過大評価されているなら勝ってもうま味は少なく、過小評価されているなら穴場だ(後述)。

これにより、単なる的中率よりも、回収率(ROI)を最適化する方向に近づける。

コラム 市場構造の自己修正性
 競馬のオッズ市場は、すでに多数の人間とAIの「学習結果」が集約された集合知である。人気の馬が「なぜ人気なのか」を分析しても、その情報はすでに価格(オッズ)に反映されている。新たな規則性を見つけても、すぐ市場が織り込み、優位性は消える。
 AIが見つけるパターンは、過去には有効だったが、見つかった瞬間に無効化される。市場の自己修正が働くため、AIの優位は一時的でしかない。

現状で「成果」とされているのは「学術的精度の向上」であり「利益ではない」

最初に結論:AI研究者のゴールと競馬ファンのゴールは微妙に違うので、競馬ファンがAIを使う時は、研究者のゴールと自分のゴールの違いを把握してAIを使おう。

学術研究では、予測の精度であるAUC・RMSEなどの数値が改善した時点で「成果」と見なされる。

たとえば、ロジスティック回帰よりXGBoostがAUCで0.05上がった、展開特徴を加えたら誤差が10%減った、など。

しかし、それはモデルとしての性能向上であり、「賭けとして勝てた」という意味ではない。

実際に賭けの回収率(ROI)が長期的に100%を超えた例はほとんどない。

短期間で偶然プラスになったプロジェクトはあるが、サンプルを増やすと平均95〜98%前後に収束する。

これでも胴元の控除率(約25%)を考えれば、非常に健闘している。

コラム 控除率という絶対的な壁
 JRAをはじめとする公営競技では、売上の約25%が控除として差し引かれる。つまり、すべてのプレイヤーの平均回収率は75%前後に固定されている。この控除を上回る利益を長期的に維持するハードルは非常に高い。

2. モデルの構成と動作の整理──誤差の流れを分けて管理しなければ再現性が保てない

ここからは、実際に競馬予測AIを作るうえで考えておかなければならないことを書く。

競馬予想におけるAIは、単一のプログラムではあり得ない。

実際に機械学習でレースを扱おうとすると、性質の異なる複数の作業を別々のモジュールに分けなければならないからだ。

そして、AIによる予測誤差は、学習、展開、最適化のそれぞれにおいて発生する。人間の手作業と異なり、AIでは手作業では追えない誤差の流れを分解して見える化することができる。

単なる予想自動化ではなく、誤差の源泉を管理するための構造化を行い、AIの「失敗」を学べるようになる。

統計・機械学習層は「過去の平均を圧縮する」装置

統計・機械学習層は、過去データから条件付き確率を推定する部分にあたる。

入力:馬・騎手・距離・枠・馬場などの特徴量を入力する。
出力:そして各馬の「勝率」「複勝率」「着差推定」が出力される。
アルゴリズム:ロジスティック回帰、ランダムフォレスト、XGBoost、LightGBM、ニューラルネットを選び、どの方法が適しているか精査し、最適なモデルを作り込む。

こうやって、過去の構造を圧縮し、似た条件のレースでどうなるかの統計的平均を出す準備が整う。

コラム 非定常性──分布が常に変わる問題
 統計モデルは「過去と未来の分布が同じ」ことを前提に動く。しかし競馬では、その前提が常に崩れている。
 芝丈、含水率、天候、レースペース、外厩の仕上げ、騎手の技量。これらの変化が、わずか数週でレース結果の分布を変えてしまう。ある年「逃げ馬有利」とされていた条件が、翌年には真逆になる。
 AIはこうした非定常性を前提に設計されていない。過去データに適合したモデルは、翌月には劣化し始める。定期的な再学習で対応できるが、そのコストがかかる。また、「今週が過去と同じ分布に戻る保証」もない。AIは常に、すでに過去になったデータで未来を予測している

コラム 特徴量化できない情報の存在
 
AIが扱えるのは数値化された特徴だけである。しかし競馬には、数値にできない要素が無数にある。
- 騎手の判断や心理的傾向(思い切った仕掛けをするか)
- 馬の気性や精神状態(パドックでの挙動など)
- 調教師・厩舎の戦略(叩きか勝負仕上げか)
これらは予測の本質に関わるが、データとしては存在しない。AIが「未知の変数」を扱うとき、それはすべてノイズとして処理される。
 この「ノイズの中にある本質的な差」を拾えないことが、AIの最大の弱点である。しかし、これらは人間がデータをどう解釈し、AIにモデルとして与えられるかの話でもある。

コラム ノイズの支配──偶然の力
 競馬の結果は、偶発的な事象によって大きく変わる。出遅れ、接触、落馬、馬の気分。これらの出来事はどれも確率的に予測不能であり、しかも勝敗を決定づけるほどの影響力を持つ。
 AIは確率分布の「中心」を最適化するが、競馬では外れ値(outlier)が勝つことが多い。レースを左右するのは平均ではなく、偶然の一瞬である。
 このため、AIによる予測は「安定して当たるが大きくは勝てない」方向に収束する。

シミュレーション層は「展開の幅を見せる」ための補助

ラップや位置取りなどを動的に再現するシミュレーション層も欲しい。統計層が出した確率を、シミュレーション層は展開の幅として再検証する。

ここではレースを「エージェント群の相互作用」として扱い、各馬の初期速度、加速力、持続力などを仮定して複数パターンを生成する。

目的は「平均的展開」を予測することではなく、あり得る展開の幅を可視化すること

この層があると、展開が荒れたときにどの馬が影響を受けやすいかがわかる。

言語処理層(LLM)は「数値の背景を整理する」

自然言語を扱い、数値では表せない情報を整える層。シミュレーション層の結果を、言語層が人間に理解できる形でまとめる。

調教師コメント、レース回顧、ニュース、オッズ急変理由などを整理し、「どの要素が学習データに含まれていないか」を示す。

また、AIの出力を説明文やレポートに変換する。

この層は確率を作らないが、判断の背景を透明化する役目を持つ。

最適化・探索層は「誤差を拡大しやすい危険領域」

統計層・シミュレーション層のモデルが出した確率とオッズを突き合わせて、どこに資金を配分するかを決める最適化・探索層も設定する。

ここは純粋なギャンブル理論であり、洗練されたモデルが数多くある。ケリー基準、比例ベッティング、定額ベットなど、数理的に最適化を行うことができる。

ただし、これらのモデルは正しい確率を前提とするため、誤差を増幅させやすい。

リスクを抑えるためには、モデルを抑制的に使う工夫が必要だ。「1/4ケリー」や閾値での見送りが現実的な制御になるだろう。

コラム 評価指標と現実の乖離
 AIの精度を測る一般的な指標(Accuracy、AUC、RMSE、F1など)は、実際の賭けでの回収率とは相関しない。
 たとえば、モデルが「勝ち馬を8割の確率で的中させた」としても、その馬が常に1番人気でオッズ1.8倍なら、利益は出ない。
 逆に、的中率が2割でも、20倍の馬を当てられれば利益は出る。AIは「正確さ」を目指すが、賭けで求められるのは「期待値」であり、目的が違う。このギャップを埋めるには、確率の校正(calibration)が必要になる。

モデル間の接続とログ管理を分けることで「どこで外れたか」を学べる

学習や再学習を繰り返すうちに、モデルは常に変化する。これを「ドリフト」と呼ぶ。

過去のモデルがどのデータで訓練され、どんな誤差傾向を持っていたのかを記録しなければ、再現性は維持できない。

したがって、モデルごとに

  • 学習期間

  • 使用特徴量

  • 検証指標(AUC, LogLoss)

  • 回収率シミュレーション結果

をバージョンとして保存する。SageMaker Model Registry や Vertex AI Model Registry を利用すれば、モデルとデータをセットで追跡できる。

また、推論時の入出力ログ(入力特徴量、出力確率、実際の結果)を週次でアーカイブし、誤差の集中条件を可視化できるようにしておく必要もある。

「どのタイプのレースでAIが外れやすいか」を明確にしなければ、AIによる予想などできない。

コラム 経済性とスケーラビリティの限界
 現状、週次で再学習・再評価を行うクラウド構成(SageMaker や Vertex AI)を維持するには、月額で1〜2万円規模のコストがかかる。
 回収率が仮に95%から98%に改善しても、賭け金が月20万円なら実際の増加利益は6000円。クラウドコストと人件費で相殺され、経済的には赤字になる。
 AIを商業的に成立させるには、「モデル自体の販売」や「予想支援システム」としての転用が必要になる。単体での馬券運用としては、費用対効果が見合わない。

3. AIが人より得意な部分──誤差を記録し続ける知能が、熱狂の世界に秩序をもたらす

かなりかみ砕いたつもりではいるが、それでも難しいお話に付き合っていただいた競馬ファンの皆さんありがとう。まだ五合目だが、AIは「当てる力」で人を上回るわけではないとお判りいただけただろうか。

モデルには各々限界があり、予測の精度そのものでは、長年競馬を見てきた熟練者の勘に及ばない場面も多いのだ。

だが、AIも利点がある。データの扱い方と判断の一貫性という面では、人間を圧倒する。

人が忘れ、迷い、疲れ、熱を持つ領域で、AIは無感情に正確に処理を続ける。それがAIが競馬で活きる部分である。

膨大な変数を同時に扱い、感覚では到達できない複合条件を評価できる

人間が頭の中で同時に考慮できる変数はせいぜい十数個。

馬の調子、騎手、枠順、距離、馬場状態、天候、前走のタイム……これを全部加味しようとすると、重みづけが曖昧になり、結局「なんとなく」で決めることになる。

AIは違う。

数百項目の特徴量を同時に扱い、それぞれの組み合わせが結果に与える影響を統計的に推定できる。

「騎手A×馬場重×左回り×1800m」という複合条件でも、過去数千件から一貫した傾向を抽出する。

こうした多変量の同時最適化は、人間には不可能な領域だ。

コラム とはいえ人間の脳は未知も多い
 人間の脳は、毎秒、途方もない量の情報を取り込み続けている。その大半を占めるのが視覚情報だ。私たちが目を開けている限り、視神経を通じて約1,000万 bit(ビット)/秒という膨大な情報が、脳に送り込まれている。聴覚情報もまた、視覚ほどではないがかなりの量だ。私たちの耳は、高品質な音響データ換算で毎秒数十万 bitの情報を脳に届けている。さらに、皮膚からの触覚、鼻からの嗅覚、舌からの味覚を合わせると、脳へ流れ込む情報量は、1,100万~数億 bit/秒にも及ぶ。
 しかし、人間の意識は、その全てを処理することはできない。意識が集中して処理できる情報量は、研究によればわずか毎秒10~50 bit程度にすぎない。つまり、脳は外部からの膨大な情報の洪水を、一瞬のうちに、数百万分の一以下にまで絞り込んでいることになる。
 ただし、これは意識の話。人間の脳が決断を下すとき、実は意識より先に結論が出ていることが多い。意識が切り離した情報は、末端のC線維から中枢神経へ至るまでの間にエッジ処理され、その情報を基に無数の行動案が「一次ドラフト」として生み出される。
 意識は価値判断とヴェトー権拒否権を行使する。さらに、意識には複数の時間的階層があり、数十ミリ秒~数百ミリ秒での直感・約300ミリ秒のグローバル放映(気づき)・数秒単位の熟考と自己統合と繰り返し案を見直す。
 AIの性能を測るとき、我々はそれを人間の脳をどれだけ模倣できるかで考えがちだが、人間自体が脳を良く分かっていないため、模倣できているのかどうかは謎に包まれている。

記録を忘れず、更新を怠らないことで「昨日の常識の劣化」を検知できる

人間の記憶は曖昧で、過去の印象や最近の出来事に強く引きずられる。

AIはデータベース全体を等価に扱い、時間が経てば自動で学習を更新する。忘れず、疲れず、整合性を維持できる。

また、人間が気づかない「古い知識の劣化」も数値で検出できる。

例えば、「去年まで有効だった芝の傾向が今季は逆転している」ことを、確率の偏差として即座に把握できる。

これにより、感覚に頼らずトレンド変化に追従できる。

感情に左右されず、一貫したルールを守り続けることでリスクを平滑化する

連敗したとき、人は焦って賭け金を増やし、勝ちが続くと気が大きくなって条件を緩める。

この感情の波が、長期回収率を最も悪化させる。

AIには感情がない。どんな連敗でも、条件が整わなければ賭けない。

連勝してもベットサイズを変えない。

賭けを“熱”から切り離し、統計的整合性を保ち続ける。これは単純に見えて、人間にはほぼ不可能な行為である。

また、AIはルールを逸脱しない。「賭けない条件」が決まっていれば、その閾値を絶対に破らない。

これは単に堅実という話ではなく、リスク管理の一貫性を意味する。

ほとんどの競馬ファンは悪い賭けでも取り合えず少額を賭ける(何も賭けるべきではない)、そして良い賭けに大金を賭けることをためらいすぎている、そして損をしている。

優柔不断をAIに断ち切ってもらうのだ。しかも無感情に。

バイアスを持たず、人間が見落とす「不人気の価値」を拾える

人は人気馬を過大評価し、穴馬を過小評価する傾向がある。

「この馬は強い」「この騎手は信頼できる」という先入観が判断を歪める。

AIはそうしたブランドや印象に影響されない。

入力が数値化されていれば、名前も人気も関係なく、過去の成績から統計的に最も整合的な答えを出す。

このため、AIは人間が軽視するデータの中の価値を見つけるのが得意だ。

たとえば「不人気だが条件が揃った馬」や「騎手との相性で走る馬」など、市場が見落としたパターンを拾える

これらの馬は好オッズなことも多いので二重に嬉しい。

誤差を記録し、修正を積み重ねることで「失敗の再現性」を保てる

人間は自分の予想が外れても、理由を曖昧に処理する。

「展開が向かなかった」「たまたま出遅れた」などの言葉で片づける。AIはそうしない。

どの条件で、どの特徴量の寄与が過大/過小だったかを数値で記録する。

次の学習ではその偏差を補正し、誤差を自己修正する

人は失敗から学ぶが、AIは失敗の統計を取る。

これは質的に違う学習方法であり、人間が経験を「感覚」で蓄積するのに対し、AIは「誤差分布」で蓄積する。

情報を高速に統合し、変化を即座に反映できる

当日発表の馬体重、天候、オッズ、馬場指数——これらがレース直前に変化しても、AIは数秒で全頭再評価できる。

人間は情報を目で追い、直感で補正するしかないが、AIは条件が一つ変われば即座にモデル再計算を行う。

予想の理由を可視化・透明化し、盲信ではなく検証へと変える

AIの予想は数値であり、後から検証できる。

「なぜこの馬を選んだか」「どの特徴が効いたか」を説明できる。

人間の勘は、当たった後に理由を作る。
AIは、当たる前に理由を提示できる

これにより、予想が“盲信”ではなく“検証可能な仮説”になる。

4. 負けない勝負しかしないという発想──破綻を遅らせる設計が最適解になる

今現在のAIでは、競馬で勝ち続けることはできない。だが、それでも、負け方を選ぶことはできる

これは慰めではなく、AIが本来得意な分野をそのまま活かす使い方だ。

AIが「誤差を観察し続ける装置」であることを踏まえれば、負けを小さく、均一にし、資金を長く保つことこそが現実的な目標になる。

勝ちを狙わない設計に切り替えることで「人気馬依存の罠」から離れられる

AIに最初から「的中」を目的に与えると、モデルは勝ちやすい馬を過剰に選び、結果として人気馬しか拾わない最適化を行う。

これは勝敗の精度としては大正解かもしれないが、オッズが低く、控除率に食われて必ずマイナスに転じる。

有料の予想を買って、さらに損をするのは悲しい話だ。

そこで、目的を「勝つ」から「負けを限定する」に変える。AIがやるべきは、

  • データが欠損している

  • 馬場が急変している

  • 展開予測の信頼度が低い

といった「誤差が大きい条件」を自動的に検出して見送ること。AIの予測精度は限界があるが、危険条件の抽出精度は非常に高い。

これを使えば、賭けない判断を機械的に下せる。「買う理由」を探すのではなく「買わない理由」を明示するためにAIを使える。

だがしかし、AIが「予測できない」と沈黙するレースほど、本質的に不確実で荒れやすい。

逆の発想として、予測不能なレースになるロマン指数など面白いかもしれない。皆さんの財布がさらに薄くなること請け合いだが。

損失を制御する三原則(レースを減らす/金額を固定/頻度を抑える)を守れば破綻リスクは劇的に下がる

AI予想を使う時は、以下の三原則を守ってほしい。AIは万能ではない。AIを使ってもいいときと、使うべきではないときを峻別し、さらに自分の懐具合に応じて掛け金は変えるべきだ。

  1. 賭けるレースを減らす
    AIの確信度(確率の安定性)を基準に、対象レースを絞る。当日データの欠損や馬場変化が大きいもの予測に向かないので除外する。

  2. ベットサイズを固定する
    AIの出力に応じて金額を増減させると、誤差があった場合に資金を倍速で減らす。とくに回帰モデルが危ない。金額は固定し、確率の閾値で賭ける/見送るを分けるだけにする。

  3. 頻度を制御する
    連敗しても熱を上げない。AIは疲れないが、人間は連敗で判断を狂わせる。AIが「今日の見送り」を出したら、必ず従う。

この三原則を守れば、勝率は上がらなくても破綻リスクは劇的に下がる。負け方を均一にすれば、資金は長く温存できる。

お疲れ様でした。本文はここまで。お読みいただいてありがとうございました。

この後は数式を用いた説明とAIのクラウドへのデプロイを参考につけた。

APPENDIX:モデル出力とオッズから賭け金を決める

予測確率とオッズの整合を取る

AIが出力する勝率$${p̂}$$と、市場オッズ$${O}$$を比較して、理論上の期待値$${EV}$$を求めることが出発点になる。

$$
EV = p̂ \times O - 1
$$

$${EV}$$が0を超えれば理論的にはプラスの期待値、0未満ならマイナス。
ただし、競馬では控除率が約25%あるため、実際の閾値は$${EV > 0.25}$$が最低条件になる。

この値を超えた馬だけを「理論上は賭ける価値がある」とみなす。

ここで使う$${p̂}$$は、モデルの生の出力ではなく、モデルが出した確率と実際の当たり方を合わせ込むキャリブレーション(確率の整合化)すなわち校正を済ませた確率に限る。

具体的には、過去データで「確率帯と実際の的中率が一致している」ことを確認してから使うことにする。

これを怠ると、AIは単に「自信過剰な数字」を出して破綻する。

ケリー基準(Kelly Criterion)

資金の成長率を最大化する理論式。勝率$${p̂}$$とオッズ$${O}$$から、最適な投資割合$${f*}$$を求める。

$$
f^* = \frac{p̂(O - 1) - (1 - p̂)}{O - 1}
$$

$${f}$$は「現在の資金に対して何%を賭けるか」を意味する。
例えば、$${O = 5}$$(4倍馬券)、$${p̂ = 0.25}$$なら $${f = 0.0625}$$、つまり資金の6.25%。

長所:理論的には最も効率的な成長。
短所:確率誤差に極端に敏感。わずかな誤差で資金が急減する。
実際には全額ではなく、1/4〜1/2ケリーに抑え、他の方法と併用するのが現実的。

比例ベッティング(Proportional Betting)

期待値$${EV}$$に比例して固定比率で賭ける方法。

$$
Stake = k \times EV
$$

$${k}$$は比例係数で、例えば「$${EV}$$が0.1上がるごとに資金の1%」などとする。
安定性が高く、破綻しにくい。ただし、ケリーほどの成長効率はない。

定額+見送り式

もっとも安全で実務的な運用だろう。

$${EV > 閾値(0.25など)}$$のときだけ、固定額を賭ける。それ以外は完全に見送る。

AIの得意分野である「見送り判断」を最大限に活かせる。回収率の振れ幅を最小化できる。

APPENDIX:クラウドでの実装フロー

ここはどうしても、Python書けないと話にならないのでご了承いただきたい。ChatGPTに聞けばそれなりに動くコードを出してくれるかもしれない。

試作段階:Google Colabで試作してみよう

まずはクラウド課金を避け、無料で動くColabでモデルの原型を作ろう。

以下なら比較的簡単にできる(競馬ではなく別の理由があって、わたしがゴールデンウィークにColabでモデル作った時は、深夜帯であまり集中していなかったが、それでも5-6時間くらいでできた。素晴らしいツールだ)。

  1. データ整形
    CSVまたはAPIから取得したレースデータをpandasで読み込む。
    特徴量(距離、馬場、騎手、脚質、ラップなど)を整理し、欠損値の確認、カテゴリ変数のエンコードを行う。

  2. モデル学習
    LightGBMかXGBoostで勝率推定(分類)と着差予測(回帰)を構築。
    時系列を考慮して、過去レースを学習、直近レースで検証する。

  3. 確率のキャリブレーション
    Plattスケーリングまたは等分位校正(isotonic regression)を用いて、
    出力確率が実際の当たり率に一致するよう調整。

  4. 評価と保存
    AUC、LogLoss、Brier scoreを算出し、学習済みモデルをPickle形式等で保存。Google Driveに置いて、後でクラウドに移すことにする。

  5. 差分確認
    4で過去のレースを的中させることが分かったなら、次に当日データを追加し、AIが出す確率の変化を確認。「更新による再現性」が確認できれば、Colab試作は完了。

本運用環境の選択:AWSかGCPで自動学習とログ化を回す

試作後、満足のいく結果が出たなら、定期的に再学習を行う段階へ移る。モデルをAWS(SageMaker)またはGCP(Vertex AI)に移し、自動化とログ管理ができるようにする。わたしはSageMaker派なので悪しからず。

構成例

  • S3:データ格納。レースデータCSV、結果ログ、学習済みモデルを保存。

  • SageMaker Training Job:週次で再学習を実行。Python使う。

  • Model Registry:モデルバージョン管理。

  • SageMaker Endpoint:API経由で確率を出力。

  • AWS Lambda:当日オッズを受け取り、期待値計算を実施。

  • CloudWatch:ジョブ成功率と実行時間の監視。

Vertex AI構成例

  • BigQuery:データベースとしてレース履歴を格納。

  • Vertex AI Pipelines:学習・検証・デプロイを一括管理。

  • Cloud Run:推論用APIとして稼働。

  • Cloud Scheduler:定期トリガー。

  • Cloud Monitoring:学習指標と異常検知。

どちらの環境でも、「データ更新→再学習→推論→監査」を完全自動化できる。

パイプラインの基本設計

  1. データ入庫(ETL)
    各週のレース結果をS3/BigQueryに保存する。スキーマ検証と欠損チェックを行い、整わないデータは破棄。

  2. 週次学習ジョブ
    直近3か月〜6か月のデータで再学習を行う。学習結果と指標(AUC、LogLoss、RMSE等)を記録する。

  3. モデル評価・登録
    検証セットで基準値を超えた場合のみModel Registryに登録し予測に供する。閾値未達なら旧モデルを維持。

  4. デプロイ
    登録済みモデルをエンドポイント化し、LambdaまたはCloud Runも利用。

  5. 推論(当日処理)
    当日のオッズ・馬体重・天候情報を入力し、AIが勝率を再計算。
    EV>閾値(0.25)の馬を出力、ケリー基準または比例ルールで賭け金を算出。

  6. 出力と通知
    結果をJSON/CSVで保存。大した手間でもないのでメールやSlackに通知も追加していいかもしれない。

  7. 監査と再学習ログ取得
    レース後に実績を取得し、AIの予測確率と結果を突合する。誤差集中条件を検出して翌週の再学習に反映。

スケーリングと監視

クラウドで長期運用するには、スケールの制御と監視が欠かせない。

  • 自動停止:学習ジョブ完了後にインスタンスを自動停止し、コストを抑える。

  • アラート設定:失敗ジョブ、異常な学習時間、推論エラー発生時に通知。

  • バージョン保存:モデルと特徴量セットをペアで記録し、誤差を追跡。

  • フォールバック:障害発生時は直近モデルを自動再ロード。

これで「止まらない」「壊れない」「原因が追える」運用が成立する。

可視化と分析ダッシュボード

モデルの挙動と回収率の動向を可視化しておくと、異常を人間が瞬時に察知できる。AWSならQuickSight、GCPならLooker Studioを使う。

  • 週ごとの平均AUC・LogLoss

  • 勝率帯ごとの実的中率(キャリブレーション曲線)

  • EV別の回収率推移

  • 連敗・連勝の分布

  • ベット額の総量とドローダウン

これをグラフ化し、ダッシュボードで常に見られるようにする。

コストと効率の最適化

月額コストを抑えるためのせこい節約術。

  • 学習頻度は週1回で十分。

  • 推論はバッチ処理にして常時稼働のAPIを避ける。

  • ストレージは古いデータを圧縮し、1年単位でアーカイブ。

  • オッズAPIの取得回数を制限して通信費を抑制。

これで、為替レート次第でもあるが、SageMaker構成でも月1万円前後に収まるだろう。Vertex AIでもBigQuery料金を合わせて同程度のはず。

いいなと思ったら応援しよう!