AI アルゴリズム解説

スポーツベッティングにおけるAI予想の仕組み

AIスポーツ予想は5段階のパイプラインに集約される。過去の試合データの収集、クリーニング、特徴量エンジニアリング、機械学習モデルの学習、そして最後に予想勝率をライブオッズと比較して正のEVベットを見つけ出す。人間の直感だけに頼る場合と比べ、機械学習は予想精度を平均で約15%引き上げる。本記事ではNBAを実例に、各ステップの実装ロジックを分解する。

まずバックテスト結果が見たい? 13,000試合以上・53回の反復にわたるモデルの実勝率と収益曲線は、AIモデルのパフォーマンス ページにまとめてある。

Mysports.AI データサイエンスチームより最終更新:2026年6月

予想パイプライン:5ステップの概要

Prediction Pipeline

1つのパイプライン、5つのステージ

生データからプラス EV のベットまで — データがパイプラインを流れる様子を見てみましょう。

01
データ収集
300万件以上のレコード
02
データクレンジング
欠損値/外れ値を除去
03
特徴量エンジニアリング
Elo · PER
04
モデル学習
ランダムフォレスト
05
オッズ比較
プラス EV のみベット
01

シーズンデータを収集

Basketball-Reference と stats.nba.com から300万件以上の過去レコードを取得

02

データをクレンジング

欠損値、重複、外れ値を処理し、フォーマットを標準化してデータ品質を保証

03

特徴量を設計

最も予想力の高い特徴量を抽出 — Elo レーティング、直近の調子、負傷、PER など

04

モデルを学習

ランダムフォレスト、ロジスティック回帰などのモデルをバックテストし、最高のテスト精度を見つける

05

バリューを求めてオッズを比較

AI の勝率をライブオッズと照合して期待値を算出し、プラス EV のラインのみにベット

NBAシーズンデータのスクレイピング

データはBasketball-Referenceとstats.nba.comから取得し、1946年以降の全試合をカバーする — チームと選手の300万件超のレコード:勝敗、総得点、リバウンド、アシスト、ターンオーバー、スティール、3ポイント成功率、フリースロー試投数など。両ソースともカスタムの日付範囲に対応する。技術的にはPythonのrequestsでHTMLを読み込み、Pandasのpd.read_html() または BeautifulSoup で必要なテーブルを抽出する。

生の列はまず正規化し、下流のクリーニングと特徴量エンジニアリングで一貫したスキーマを共有できるようにする:

COLUMN_MAP = {
    'PName': 'Player_Name',      # 選手名
    'POS':   'Position',         # ポジション
    'Team':  'Team_Abbreviation',
    'GP':    'Games_Played',
    'W':     'Wins',
    'L':     'Losses',
    'Min':   'Minutes_Played',
    'PTS':   'Total_Points',
    'FG%':   'Field_Goal_Percentage',
    '3P%':   'Three_Point_FG_Percentage',
    'FT%':   'Free_Throw_Percentage',
    'REB':   'Total_Rebounds',
    'AST':   'Assists',
    'TOV':   'Turnovers',
    'STL':   'Steals',
    'BLK':   'Blocks',
    # ... 全 29 列、OREB / DREB / PF / FP / DD2 / TD3 を含む
}
Basketball-Reference / stats.nba.com からスクレイピングした生のシーズンデータ
Basketball-Reference / stats.nba.com からスクレイピングした生のシーズンデータ
列名の正規化後、クリーニングと特徴量エンジニアリングの準備が整った統一スキーマ
列名の正規化後、クリーニングと特徴量エンジニアリングの準備が整った統一スキーマ

データクリーニング

データクリーニングはモデルが到達できる上限を決める。生データには入力ミス、欠損値、重複、外れ値が散在しており、まずこれらを取り除かねばならない。見落とされがちだが最も重要な2点:第一に、最終結果を漏らす列はすべて削除し、モデルが答えを不正に得られないようにする。第二に、相関の高い冗長な特徴量(例えばフィールドゴール、2ポイント、3ポイント成功率はすべて重複する)を取り除き、多重共線性を減らす。

Step 1

欠損データを処理

欠損値を除去、妥当な補完、またはモデルで推定し、学習データに穴がないようにします。

Step 2

重複を除去

重複エントリを検出して除去し、各試合・選手レコードを一意にします。

Step 3

外れ値を処理

統計手法やアルゴリズムで極端な値を検出し、1試合の大爆発がモデルを歪めないようにします。

Step 4

一貫性を確保

選手名の表記を標準化し、ソース間でフォーマットを統一して、すべてのデータが同じ言語で語るようにします。

クリーニング前:欠損値、重複、外れ値
クリーニング前:欠損値、重複、外れ値
クリーニング後:結果を漏らす列と相関のある重複特徴量を削除
クリーニング後:結果を漏らす列と相関のある重複特徴量を削除

特徴量エンジニアリング:5つの主要特徴量

特徴量エンジニアリングの核心は、各チームの実力を比較可能な数値に変換し、試合を決める要因とその重みを浮かび上がらせることにある — チーム名や評判を無視し、確かな数字だけを見る。ディープラーニングによるNBAの実装では、以下の5つの特徴量が試合結果に対して最も高い予想力を持つ。

Feature Importance

予想力でランク付けした特徴量

相対化したチーム指標(Elo)は個人の選手効率(PER)を大きく上回ります — モデルの最も決定的なトレードオフです。

Elo レーティング(チームの相対的な強さ)0
チームの直近の調子(直近10試合)0
負傷/出場可否の状況0
選手の直近の調子0
PER 選手効率レーティング0

1. Eloレーティング:結果からチーム力を測る

Eloレーティングは各試合の最終スコア、開催地、日付さえあれば機能する。勝利は加点、敗北は減点、番狂わせや大差での勝利はより多く加点される。ゼロサムのシステムなので、一方のチームが得た点は相手が失う。各チームは通常、中央値の1500から始まる。試合後の更新式は次の通り:

Elo_new = Elo_old + K × (Result − WinProbability)

Elo_old        現在の Elo Rating
K              調整パラメータ:K が大きいほどレーティングの変動が速い
Result         実際の結果(勝ち = 1、負け = 0)
WinProbability 両チームの Elo 差から導かれる予想勝率

Eloはシーズンをまたいで引き継がれる — 強いチームは強いままになりやすく、弱いチームが一夜で逆転することは稀だ — そのため新シーズンは、前シーズンの最終レーティングをリーグ平均の1505へ25%回帰させた値から始める:

Elo_next_season = (R × 0.75) + (0.25 × 1505)

R = 前シーズン終了時のチームの Elo Rating

任意の3チームのEloを時系列でグラフ化すると、シーズンを通じた浮き沈みが一目でわかる:ウォリアーズとキャバリアーズがファイナルで対戦した年は両者のEloが同時にピークを迎えた。西が東より全体的に厳しいことは、ウォリアーズが「質の高い勝利」から蓄えた余分なEloに表れる。そして優勝後のロスター流出や負傷は、曲線を同じくらい急速に滑り落とす。

シーズンを通じたNBA3チームのEloレーティング:優勝した年に同時にピークを迎え、その後ロスター流出と負傷で急速に下落
実際のEloの時系列:NBAの実際の過去スコアから算出したチームEloを、時間経過で追跡したもの。

2. チームの直近の調子(直近10試合平均)

各チームの直近10試合について、得点、リバウンド、アシスト、ターンオーバー、ブロック、スティールを平均し、新たな特徴量列として保存する。腕の見せどころは特徴量の選択にある:相関分析、主成分分析(PCA)、情報利得を使い、最も有益な列を残す。さらにトレンドと季節性を捉えるには、時系列モデル(ARIMA、LSTM)を重ねるか、特徴量をそのままSVM、決定木、ランダムフォレストに渡して、それらの間の非線形な関係を学習させる。

チームの直近10試合平均のパフォーマンスがデータ上で実際にどう見えるか
直近10試合の移動平均の実際の算出結果。

3. 選手の直近の調子(直近10試合平均)

チームレベルを超えて、各選手の直近の調子もシグナルになる。nba.com/statsから試合ごとの詳細を取得した後、全選手について直近10試合の平均を算出する。2人のスターを例に挙げる:

プレイヤーPTSREBASTTOVBLKSTL
レブロン・ジェームズ28.57.87.22.31.11.5
ステフィン・カリー31.25.66.82.10.31.7

選手によって価値を発揮する列は異なり(得点役対リバウンドを取るセンター)、特徴量の選択はここでも相関分析、PCA、情報利得によって決まる。

4. 選手のシーズン成績(前シーズンと今シーズン)

平均だけでは実像が歪む — 選手は負傷し、ローテーションで入れ替わるため、モデルは各試合が選手自身の基準値からどれだけ乖離しているかをより重視する。完全な評価には、5つの次元を同時に勘案する必要がある:

ボックススコア平均スタッツ

得点、アシスト、リバウンド、スティール、ブロック、ターンオーバー — ポジションとシステムと併せて読まないと、表面的な数字に惑わされる。

負傷状況

負傷部位と予想される回復期間は、出場可否と復帰後の調子の変動を直接左右する — モデルの重要な入力。

出場時間

スターターとベンチ選手の出場時間の差は、生のスタッツを膨らませたり縮めたりする。短い時間で大きな数字を残すなら高効率の証。

ポジションとプレースタイル

シューティングガードとセンターでは役割が異なり、チームのシステム(ボールムーブメント対アイソレーション)がスタッツの内容を変える。

試合の文脈

リードを守って流す展開はペースを落としスタッツを下げ、ビハインドを追う展開はそれを押し上げる — 勝敗の文脈を加味しなければならない。

5. プレイヤー効率指数(PER)

EloがチームについてそうするのとちょうどH同様に、HollingerのPERは一見無関係なスタッツを単一の指標に集約し、選手のパフォーマンスを「相対化」する。NBAのスタッツは出場時間や対戦相手(ベンチ対スターター)によって容易に膨らんだり縮んだりするが、PERは1分あたりの正規化でこれを補正する — 各オフェンスとディフェンスのスタッツに重みを付け、出場時間の逆数を掛ける:

PER = ( FGM × 85.910  + STL  × 53.897 + 3PTM × 51.757
      + FTM × 46.845  + BLK  × 39.190 + OREB × 39.190
      + AST × 34.677  + DREB × 14.707 − PF   × 17.174
      − FT_Miss × 20.091 − FG_Miss × 39.190 − TOV × 53.897
      ) × (1 / Minutes)

データ分析とモデル学習

分析の核心には2つの問いがある:Eloは本当に他のスタッツと相関し、正しく並ぶのか? そして試合結果の予想は、チームスタッツ(Elo)と選手スタッツ(PER)のどちらがうまくいくのか?

まずはシーズンごとのリーグ全体のElo分布密度から:正規分布に近い形は均衡したリーグを意味し、長い裾は「スーパーチーム」の出現を意味する。1チームを追うと、平均得点が高いほどEloも高くなる傾向がある — それでも同程度の得点水準ではEloは依然として大きくばらつく。得点を相手とリーグ平均に対して相対化して初めて、相関は真に安定する。これこそ、Eloが相対化されたスタッツであるがゆえに、生の得点より結果をうまく予想できる証拠だ。PERは逆の物語を語る:チームのPER合計、平均、中央値を、チーム力を測るEloと並べると、相関は全体的に弱い — 選手効率が高くても得点が増えるわけではなく、対戦(ひいてはEloを動かすもの)を実際に決めるのは相対的な得点だ。

シーズン別NBA Elo分布密度:正規分布に近ければ均衡したリーグ、長い裾はスーパーチームの形成を意味する

2つの核心的な要点

  • 相対化こそが安定をもたらす:得点を相手とリーグに対して相対的に表現して初めて、結果との相関が真に成り立つ。
  • チーム > 選手の総和:PERの合計はチーム力との相関が弱い — 選手効率が高いことはチームの勝利を意味しない。
Eloとプレイヤー効率(PER)の実際の散布図:同じEloでもPERは大きくばらつく — 選手効率はチーム力との相関が弱い
実際の散布図:Eloはプレイヤー効率(PER)との相関が弱い — 選手効率が高いことはチームの勝利を意味しないことを裏付ける。
Accuracy vs Ceiling

理論上限に対するテスト精度

最高の NBA 予想モデルでも上限は約70%。67.15% のランダムフォレストはすでに迫っており — 残りの伸びしろは調整ではなくモデル選択にあります。

上限 70%
ランダムフォレスト(最良モデル)0.00%
選手スタッツのみの線形回帰0.00%
選手の得点予想 RMSE ≈ 5.56(おおよそ2~3本のシュート分の誤差)

選手の得点から結果を予想する際は、ロジスティック回帰(勝敗のみを予想)ではなく線形回帰(連続的なスコアを予想)を用い、各チームの予想得点を合計して比較した。58.66%の精度は先の観察を裏付ける:選手の合算パフォーマンスはあまりに変動が大きく、チームレベルの調子ほど一貫していない。最良の結果 — RandomizedSearchCVで調整したランダムフォレスト — はテスト精度67.15%のピークに達し、最強のNBA予想モデルでも約70%が上限であることを踏まえれば、このモデルはすでに理論上の天井に迫っている。ここから先の見返りは、果てしないチューニングではなく、モデル選択(SGD分類器、線形判別分析、畳み込みネットワーク、ナイーブベイズ)に時間を投じることから生まれる。

オッズ比較:予想勝率から正のEVへ

モデルの勝率だけでは利益は生まれない。利益の公式には3つの要素が必要だ:ディープラーニングの予想勝率、ライブオッズ、そしてバックテスト済みのステーキング戦略。AIの勝率を市場オッズと突き合わせて期待値(EV)を計算し、EVが正のときだけ動く:

EV = (AI 予想勝率 × デシマルオッズ) − 1

EV > 0  →  長期的にプラスの期待リターン(バリューベット)
EV < 0  →  長期的には負ける、スキップする

例:AI 勝率 58%、オッズ 1.90
EV = (0.58 × 1.90) − 1 = +0.102 → 1ベットあたり期待値 +10.2%

このアプローチはNBAに限りません。バスケットボール、野球、サッカー、ホッケー、テニスにも同様に適用できます。実際の試合におけるモデルの的中率と獲得ユニットを月ごとに確認できます。確認はこちら:AIモデルのパフォーマンスそして、ベット前の期待値と組み合わせ(パーレイ)オッズの計算をすばやく実行できます。使用するのはベッティング計算ツール

一つのフレームワークで、世界の主要リーグを網羅

特徴量エンジニアリングはチーム名を読むのではなく能力を比較するものであるため、同じパイプラインが競技をまたいで応用できます。現在はNBA、MLB、サッカー5大リーグ、欧州大会、NHLを網羅しており、今後さらにリーグを追加予定です。

  • NBA ロゴNBA
  • MLB ロゴMLB
  • プレミアリーグ ロゴEPL
  • ラ・リーガ ロゴLa Liga
  • ブンデスリーガ ロゴブンデスリーガ
  • セリエA ロゴセリエA
  • リーグ・アン ロゴリーグ・アン
  • UEFA チャンピオンズリーグ ロゴUCL
  • UEFA ヨーロッパリーグ ロゴUEL
  • MLS ロゴMLS
  • NHL ロゴNHL

まとめと次のステップ

  • 相対化した指標は生の数値に勝ります。Eloは平均得点より正確で、得点はPERの合計に勝ります。勝敗は本質的に相対的なものだからです。
  • チーム単位の特徴量は選手の合計よりも安定しており、モデルの主要なシグナルを形成します。選手の調子は補助的な特徴量として機能します。
  • 67.15%のテスト精度は、NBA予想における理論上の上限である約70%にすでに近づいています。残る伸びしろは、終わりのないチューニングではなくモデル選択にあります。
  • 予想勝率が長期的な利益につながるのは、オッズ比較とプラスEVの規律と組み合わせたときだけです。

参考文献とデータソース

本記事で扱ったすべての手法とデータセットは公開され、検証可能です。ぜひ元の研究を深く掘り下げてみてください:

アルゴリズムを理解したら、データに基づいて自分のベットを実践しよう

すべてのベットを無料で記録し、勝率、ROI、資金曲線を自動で追跡。モデルのように自分のステーキング戦略をバックテストできます。

Telegram で相談