ディープラーニングを使用してNBAの試合結果を予測する

ディープラーニングを使用してNBAの試合結果を予測する

この記事では、ディープラーニングを使用して NBA の試合結果を予測します。この記事を通じて、次のことを学ぶことができます。

  1. NBA の技術統計をクロールする方法。
  2. データを前処理する方法。
  3. シンプルなディープ ネットワーク モデルを構築する方法。
  4. 試合の結果を予測する方法。

ついに翌日の試合を 100% の精度で予測するモデルが完成しました。

技術統計収集

ディープラーニングを使用してゲーム結果を予測するには、学習サンプルとして大量の技術統計データが必要です。

公式テクニカル統計ウェブサイトをご覧ください: http://stats.nba.com/schedule

ブラウザの開発者ツールを開き、各ゲームの右側にある BOX SCORE をクリックします。次のような json ファイルが要求されることがわかります。

具体的には、次の JSON 内の hls (ホーム チーム データ) と vls (アウェイ チーム データ) という統計情報が必要です。

URL の形式は次のとおりです:

https://data.nba.com/data/10s/v2015/json/mobile_teams/nba/2017/scores/gamedetail/0021700228_gamedetail.json

数回試してみると、パターンが見つかります。

  1. https://data.nba.com/data/10s/v2015/json/mobile_teams/nba/ これは修正されました。
  2. 2017 年はシーズン開始年です。たとえば、前シーズンは 2016 年でした。
  3. /scores/gamedetail/ と *** の _gamedetail.json も修正されました。
  4. 0021700228 はゲームの ID です。ルールは 002 がルール、17 はシーズン開始年の最後の 2 桁 (昨シーズンは 16 など)、00228 は 1 から始まる 5 桁の数字で、1 未満の場合はゼロが追加されます。たとえば、シーズンの最初のゲームは 00001 で、00228 は 228 番目のゲームです。
  5. キャプチャされた URL は https ですが、http もサポートされており、クロール時に https よりも高速です。

コレクション スクリプトは比較的単純で、ループで取得して Redis に保存します。

トレーニングに使用するデータは、ホームチームデータとアウェイチームデータの形式で整理し、勝ち負けのラベルを追加する必要があります (バスケットボールの試合では引き分けはありません)。

  1. 127.0.0.1:6379> HGET ゲーム詳細差分 0021700228_ゲーム詳細.json
  2.  
  3. {u'ast ':2、' win ':1.0、u'fbptsa':6、u'tf ':1、u'bpts':-4、 'away':u'lac '、u'pip':u'cha '、u'dreb':4、u'fga u'fbptsm ':5、u'tpa':-3、u'fgm ':1、u'stl':2、u'fbpts ':10、u'ble':13、u'tov ':-6、u'oreb':1、u'potov ':16、u'fta':10、u'pipm ':10、u'pipm': -1、u'pf': -6、u'tmreb': -2、u'blk': 3、u'reb': 5、u'pipa': -4、u'ftm': 10、u'tpm': 3}"  

***2015 年、2016 年、2017 年から 2017 年 11 月 19 日までの 3 シーズンから合計 2699 件の有効なデータが収集されました。

データ前処理

データ処理にはPandasを使用しており、非常に便利です。

まず、redis から直接データを読み取ります。

  1. pandasをpdとしてインポートする
  2. Redisをインポートする
  3. ast をインポート
  4.  
  5. cli = redis.Redis()
  6. データ = cli.hgetall( "gamedetaildiff" )
  7. df = pd.DataFrame([ast.literal_eval(data[k]) データkに対して])
  8. df = df.fillna(value=0.0) # 空白データを0で埋める
  9. df.head()

入力データは無関係な項目が削除され、トレーニング データとテスト データに整理されます。

  1. dataX = df.drop ([ "勝利" "日付" "ホーム" "アウェイ" ]、軸=1)
  2. dataY = df[ "勝つ" ]
  3. train_x = np.array(dataX)[::2] # トレーニングセット 
  4. train_y = np.array(データY)[::2]
  5. test_x = np.array(dataX)[1::2] # テストセット 
  6. test_y = np.array(データY)[1::2]

処理されるデータのディメンションは次のとおりです。

深いネットワークの構築

この部分は、Keras があるため、実際にはこの記事の中で最も簡単な部分です。

  1. keras.modelsからSequentialをインポートする
  2. keras.layers.coreからDense をインポートする
  3.  
  4. モデル = シーケンシャル()
  5. モデルを追加します(Dense(60, input_dim=train_x.shape[1], activation= 'relu' ))
  6. model.add (Dense(30, activation= 'relu' ))
  7. model.add (Dense(1, activation= 'sigmoid' ))
  8. model.compile(損失= 'binary_crossentropy' 、オプティマイザー= 'adam' 、メトリック=[ 'accuracy' ])

最もシンプルな 3 層の完全接続ネットワーク。

ネットワークの出力次元は 1 なので、最後の層の活性化関数は sigmoid で、損失関数は binary_crossentropy です。

モデルのトレーニングと検証

10エポック後、トレーニングデータに対するモデルの精度は98.89%に達したことがわかります。

次に、テスト データを使用してモデルを検証します。

トレーニングデータの精度も 95.40% に達し、このモデルが比較的信頼できることを示しています。トレーニングには数秒しかかかりませんが、保存しておきましょう。

  1. モデルを保存します( "nba-model.hdf5" )

新しいデータの予測

これで、ゲームの結果を予測できるモデルができました。ここで問題となるのは、2 つのチームの技術統計をどのようにシミュレートするかということです。

ホームチームの過去 5 回のホームゲームの平均技術統計とアウェイチームの過去 5 回のアウェーゲームの平均技術統計を使用し、その 2 つを減算してモデルの予測入力とします。

まず、Redis から完全なデータを取得します。

  1. game_detail_data = cli.hgetall( "gamedetail" )
  2. ゲームの詳細json = []
  3. game_detail_datakの場合:
  4. } は、
  5. di_h = {}
  6. j = json.loads(ゲームの詳細データ[k])
  7. vls = j[ "g" ][ "vls" ]
  8. hls = j[ "g" ][ "hls" ]
  9. di_v.update (vls[ "tstsg" ])
  10. di_v.update ({ "日付" : j[ "g" ][ "gdtutc" ], "名前" : vls[ "ta" ], "ホーム" : 0})
  11. ゲームの詳細jsonを追加します(di_v)
  12. di_h.update (hls[ "tstsg" ])
  13. di_h.update ({ "日付" : j[ "g" ][ "gdtutc" ], "名前" : hls[ "ta" ], "ホーム" : 1})
  14. ゲームの詳細jsonを追加します(di_h)
  15. game_detail_df = pd.DataFrame(game_detail_json)
  16. game_detail_df = game_detail_df.fillna(値=0.0)

Pandas を使用すると、1 行のコードでホームチームの過去 5 回のホームゲームの平均を見つけることができます。

  1. def predict(ホーム=なし、アウェイ=なし):
  2. home_data = game_detail_df[(game_detail_df[ 'name' ]==home) & (game_detail_df[ 'home' ]==1)].sort_values( by = 'date' , ascending= False )[:5].mean()
  3. away_data = game_detail_df[(game_detail_df[ 'name' ]==away) & (game_detail_df[ 'home' ]==0)].sort_values( by = 'date' , ascending= False )[:5].mean()
  4. home_data = home_data.drop ([ 'home' ] )
  5. away_data = away_data.drop ([ 'home' ] )
  6. new_x = np.array(ホームデータ - アウェイデータ)
  7. model.predict_classes(new_x[np.newaxis,:], verbose=0)[0][0]を返す

予測効果

データは米国時間 2017 年 11 月 19 日まで収集されています。

2017年11月20日の試合の結果を見てみましょう。

モデルの予測結果を実行します。

11ゲームすべて正解でした、すごい!!

<<:  李開復:今後数年間、中国で最も収益性の高い仕事は何でしょうか?

>>:  TENSORFLOW に基づく中国語テキスト分類のための CNN と RNN

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

人工知能、自動化、新興技術のトレンドが4.6兆ドルの通貨市場に混乱をもたらしている

いくつかのスタートアップ企業は、最新のテクノロジーを活用して、最大かつ最も古いセクターの 1 つであ...

機械学習におけるモデルドリフト

今日、機械学習モデルはビジネス上の意思決定の主な原動力となっています。他のビジネス戦略と同様に、これ...

教育業界における自動問題解決と適応学習AIの応用

[51CTO.comより引用] 近年、人工知能が大流行し、多くの大企業、中堅企業、中小企業が動き始め...

...

...

AIの冷却:ディープラーニングは万能薬ではない

[[202706]]近年、ディープラーニングはある程度の流行状態に入り、人々はこの技術を使ってあらゆ...

百度の顔認識技術のインテリジェント企業人事管理分野への応用分析

[51CTO.com からのオリジナル記事] 周知のように、人、物、オブジェクトは企業管理の 3 つ...

次世代ビジネスインテリジェンスのトレンドと機会

ビジネス成果を明確に定義するために、多くの企業は分析にビジネス インテリジェンス ソフトウェアを活用...

Intel と AMD はパフォーマンスの向上のために AI PC に期待していますが、消費者はそれらを買い替える資金を持っているのでしょうか?

11月2日、新型コロナウイルス感染症のパンデミックをきっかけに2年間成長を続けてきたパソコン(PC...

...

サイバーセキュリティにおける人工知能の長所と短所を探る

急速に進化するデジタル環境において、人工知能 (AI) とサイバーセキュリティの組み合わせは、進化す...

ビッグデータ、人工知能、そして法曹界の未来

私は人工知能と法曹界の将来について数多くの講演を行ってきました。過去2年間、AlphaGo Zero...

産業用ロボットの開発状況と技術動向を明らかにする

近年、人件費の継続的な上昇に伴い、産業分野では「機械が人に取って代わる」という現象が一般的になり、産...

Metaverse と Web3 は似ていますが、最も重要な違いは何でしょうか?

現在、ビジネス テクノロジーの世界では、2 つの流行語が頻繁に登場しています。 1つはWeb3、もう...