UFCの試合結果を予測するMLモデルを作り、AIで理由を説明してみた

Reddit r/MachineLearning / 2026/4/29

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • 著者は学習プロジェクトとして、機械学習モデルでUFCの勝敗を予測するWebアプリを作成し、約71.6%の精度を得たと述べています。
  • モデルはXGBoostの二値分類器で、試合前の履歴データを使って学習し、引き分け/ノーコンテストを除外しつつ、相対優位が解釈しやすい差分特徴量(ファイターA−ファイターB)を採用しています。
  • 重要な特徴量には、打撃・グラップリング・身体的特徴・戦績・直近の調子(時間重み付きモメンタム)・経験に加え、スタイル文脈情報や体重階級差(階級を自然な階級から上げ下げるか)などが含まれます。
  • パイプラインにはリーク防止として、各学習サンプルの統計を「対象試合より前に行われた試合」のみから計算するようにして、未来の情報が混ざらないようにしています。
  • 説明は、TreeSHAPで算出した特徴ごとの寄与をClaudeに渡して自然言語の理由づけを生成し、数値の再計算はAIにさせず決定的な統計に基づく形にしています。

何年もUFCのファンで、最近少し空いた時間を使って、学習プロジェクトとして、機械学習を使ってどのファイターが勝つかを予測するウェブアプリを作ってみました。

驚くことにかなり良い出来で、精度はおよそ71.6%です。アルゴリズムを調整して、各ディビジョンの支配的なファイティングスタイルを考慮し、それに合うファイターにわずかな優位を与えるようにしました。

興味のある方向けに、MLパイプライン:

モデル:XGBoostの二値分類器(binary:logistic)— ファイターAが勝つか(1)ファイターBが勝つか(0)を予測します。ドロー/ノーコンテストは学習から除外しています。

特徴量(合計26)

重要な設計上の選択は差分特徴量です。すべての統計を絶対値ではなく「fighter_A − fighter_B」で計算します。これにより、SHAP値を相対的な優位としてそのまま解釈できます:

- ストライキング:SLpM差、有意な有効打命中率差、被弾差、ストライクディフェンス差

- グラップリング:TD平均差、TD命中率/ディフェンス差、サブミッション平均差

- 身体面:身長差、リーチ差

- 戦績:勝率差、フィニッシュ率差、KO/TKO率差、サブ率差

- 最近の調子:wins_last_5差、losses_last_5差、そして(直近ほど重みが大きい)レシェンシー重み付けのモメンタムスコア(最も新しい試合=5×、最も古い=1×、[−1, +1]に正規化)

- 経験:総試合数差、平均ストライク/TD/コントロール時間差

- スタイル文脈:style_win_rate_in_division差 — そのウエイトクラスにおける各ファイターのスタイル(ストライカー/レスラー等)の歴史的な勝率

- 差分を取らないもの:両者のスタイルエンコーディング(マッチアップの相互作用を捉えるためペアのまま保持)、ウエイトクラスのデルタ(本来のディビジョンからカット/アップしているか)

リーケージ防止
各学習サンプルについて、両ファイターの統計は「その試合の日時より厳密に前に行われた試合だけ」を使って計算します。未来のデータが混入しません。すべての試合を日付順に並べます。試合Nでは、特徴ベクトルに寄与するのは試合1..N-1のみです。

学習
- XGBoost:n_estimators=500, max_depth=5, lr=0.05, subsample=0.8, colsample_bytree=0.8, min_child_weight=5, patience=50で早期終了

- 80/20の層化(stratified)train/test分割

- 一般化を検証するための5-fold層化CV

- 指標:accuracy、ROC-AUC、log-loss

TreeSHAPは、各予測ごとに特徴量ごとの重要度(importance)値を生成します。これらは、生の統計量とともにClaude(claude-sonnet-4-6)へ渡され、自然言語による説明を生成します— Claudeは計算はせず、ナレーションするだけです(すべての数値は決定論的なパイプラインから来ています)。

https://ufc-fight-predictor-v1.vercel.app/

免責事項:これは個人的な学習プロジェクトであり、金融や賭けの助言ではありません。予測は過去の統計に基づいており、たくさんの回数で外れることもあります。

submitted by /u/albaneso
[link] [comments]

UFCの試合結果を予測するMLモデルを作り、AIで理由を説明してみた | AI Navigate