- 概要
Sports betting はスポーツ観戦の新しい形だと考えています.私はNBA観戦が好きなので,試合観戦に合わせて,選手やチームの得点やアシスト数,Win or Lose を予測したいなと考えました.そこで今回はBOSが次の試合で何点取るのか?をスタッツを基に機械学習を用いて予測していこうと思います.
- 前準備
機械学習の流れ
一般に機械学習を用いた予測は次の流れで行うと考えています.
- データセットの準備
- 予測モデルの構築
- モデルの検証
- モデルのアップデート
- 予測
各ステップごとのポイントは次のように考えます.
1. データセットの準備
人間が考えるところです.インプットデータで予測結果は変わるので,どんなデータセットを準備すれば予測精度は上がるのかを考えます.
2. 予測モデルの構築
予測モデルの理解は必要ですが,現在はChat GPTがあるので実際のコーディングは必要ありません(データの型などで多少はエラーになりますが,エラー文である程度わかるかなと思います).予測モデルはいくつも存在します.ちなみに,Chat GPTにSport関係のスタッツ予測でのおすすめモデルを聞いたところ,次のように教えてくれました.
ロジスティック回帰:
- メリット: 理解しやすく、推定された係数を解釈することが容易である。
- デメリット: 複雑な非線形関係を捉えることができない場合がある。
- 決定木:
- メリット: モデルの可視化が容易であり、特徴量の重要性を理解しやすい。
- デメリット: 過学習しやすく、予測性能が低いことがある。
- ランダムフォレスト:
- 勾配ブースティング:
- メリット: 高い予測性能を実現し、他のモデルよりも少ないハイパーパラメータチューニングが必要である。
- デメリット: 過学習しやすく、ハイパーパラメータの調整が必要である。
- ニューラルネットワーク:
- サポートベクターマシン:
3. モデルの検証
特徴量の寄与度を確認します.これはバスケへの理解が必要であると考えます
4 モデルのアップデート
必要に応じてモデルの組み合わせることで予測精度を上げていきます
5 予測
予測したい目的変数を指定し,説明変数を入力します.
- 予測の実行
今回は前3試合の結果を使って次の試合の結果をどの程度予測できるのかを検証する
◆データセット
前3試合の結果の平均と次の試合の得点を1つにデータセットとして試合分準備する
例えば,24seasonの試合スケジュールの一部は次の通り.game1-3はvs NYK, MIA, WASなので,この3つの平均スタッツと,game4のvs INDでの得点を1つのデータセットとする.
試験的に,20試合分のデータセットを教師データとして,予測対象は次の5試合とする
◆特徴量
特徴量としては,traditional stats の項目を使う.OFの成績はBOSのStats,DFの成績は 相手チームのスタッツを使う.相手チームの OF,DFの成績も必要なので全部で,BO S,相手チームのOF,DFの成績で4つのかたまりになる.
traditinal statsの項目は次の通り
予測モデル
今回の検証では,ランダムフォレストと勾配ブースティングの2つを使用する
モデルの精度はRMSEを使用.また,交差検定も実施する
◆ランダムフォレスト
RMSE : 12.5067 (交差検定の結果)
ランダムフォレストでは,本来不純度ベースの重要度を計算することで取得可能だが今回はデータセットが小さかったので,取得できず
◆勾配ブースティング
RMSE : 11.9272 (交差検定の結果)
特徴量の寄与度を上からみていくと,上から相手のDF強度(TOの誘発数),BOSの相手のスリーポイントの成功率(BOSのDF強度),相手のORBとなっており,BOSの得点に関わる項目とそうでない項目が混ざっている状態.
予測
データ数が足りないので,教師データとして使ったgame #1-24の次,#25 ORL戦のみ予測してみる.実際の得点は114点に対して,
ランダムフォレスト:118.67 点
勾配ブースティング:116.92 点
確かに10点以内には収まりそうな結果である
次の検証
- データセット数を増やして検証
- 4試合平均,5試合平均も実行し,インプットデータで精度がどの程度変化するのかを確認する