ディープラーニングを使用して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

ブログ    

推薦する

組み込みおよびベクターデータベースの実践ガイド

翻訳者 |ブガッティレビュー | Chonglouこの革命の中心にあるのは、ベクター データベースの...

聞いてください、トランスフォーマーはサポートベクターマシンです

Transformer は、学界で議論を巻き起こしたサポート ベクター マシン (SVM) の新しい...

2020 DIGIXグローバルキャンパスAIアルゴリズムエリートコンペティションが成功裏に終了し、キャンパスのイノベーションを刺激

11月13日〜14日、江蘇省人工知能学会、ファーウェイ端末クラウドサービス、ファーウェイ南京研究所が...

武器化されたAIとIoT攻撃は最大の技術的脅威となる

1. 「企業が人工知能やモノのインターネットなどの新しいテクノロジーの導入を検討するにつれ、攻撃対象...

2017 年最もホットなテクノロジーである人工知能について、あなたはどれくらい知っていますか?

2017 年の最もホットなテクノロジートピックは間違いなく人工知能です。人工知能は非常に難しい科学...

人工知能技術の発展に関する合理的な見方

[[421597]]社会の生産性が急速に発展するにつれ、文学作品に描かれた未来の技術やより良い生活が...

データが限られている場合にディープラーニングモデルを最適化する方法

[[198229]]転移学習転移学習とは、ある問題で訓練したモデルを、簡単な調整で新しい問題に適した...

Xing Bo 氏のチームの LLM360 は、大規模なモデルを真に透明化する総合的なオープンソース プロジェクトです。

オープンソース モデルは、数だけでなくパフォーマンスも増加しており、活発な活力を示しています。チュー...

人工知能分野で最も有望な技術トップ10

2018年世界ロボット会議が北京で開催され、ロボット産業の最先端技術が披露されました。世界的なロボ...

大規模モデルは16,000以上の実世界のAPIを習得しており、清華大学などのToolLLMのツール使用能力はChatGPTに劣らない。

ご存知のとおり、オープンソースの大規模言語モデル (LLM) とその派生モデル (LLaMA や V...

XML 圧縮アルゴリズムについての簡単な説明

XML 圧縮ユニットテストコードクラスプログラム { パブリック静的文字列XML = @"...

Zhuiyi Technology AI Lab: ビジネスとテクノロジーの両方を推進し、新しいレベルのインテリジェントなインタラクティブアプリケーションを創造

[51CTO.comからのオリジナル記事] 人工知能の推進により、ビジネス運営モデルは変化しました。...

2020年の世界産業用ロボット業界の現在の市場状況と競争環境の分析

2020年の世界産業用ロボット産業の現状と競争環境の分析:アジア太平洋地域が世界最大の市場に1. 世...

スタートラインで勝つ: データサイエンスに必須の 5 つのスキル

データサイエンスの分野は競争が激しく、人々はますます多くのスキルと経験を急速に身につけています。 「...

MIT の新しい研究: 労働者は AI によって排除されることを心配する必要はありません。コストは非常に高く、視覚的な作業の23%しか置き換えられない

人工知能は私たちの仕事を奪うのでしょうか?シリコンバレーの幹部が今日の最先端の AI テクノロジーに...