Dataikuを使って2022年FIFAワールドカップを予測する

フランスが2回目の優勝を果たした2018年のワールドカップから4年が経ちました。特にサッカーに興味がなくても、ワールドカップは人々が喜びや感動を分かち合う楽しい瞬間となります。私も一緒に楽しみたかったのですが、私の知識ではネイマールやキリアン・ムバッペの名前を知っている程度なので・・・。そこで、データサイエンティストである私が、ワールドカップを楽しむ方法の1つとして、機械学習（ML）モデルを構築することを思いつきました。

ワールドカップが近づいてきたので、Dataikuの優秀なデータサイエンティストでチームを作り、大会期間中に行われる64試合の予測（結果と正確なスコアの両方）を一緒に考えてみることにしたのです。

スポーツの結果のように予測不可能なものを予測することは、楽しそう（そして非常に難しい）だったので、私たちはとにかくやってみようと思いはじめました。Dataikuを使って、異なる戦略で、いくつかの競合モデルを作成しました。私たちがどのようにモデルを作ったのか、そしてどのチームが勝つと予測したかを知りたい方は、このブログ記事（かなり専門家向き）をぜひ読んでみてください。

## ブラジルが優勝候補であることを知るために、本当に機械学習が必要なのか？
もし、ワールドカップの最終的な勝者だけを予想するのであれば、FIFAランキングが1位で、すでに5回の世界チャンピオンを経験し、そしてワールドカップ優勝オッズで4対1の人気チームであるブラジル（[NBCスポーツ](https://www.nbcsports.com/bayarea/favorites-win-2022-fifa-world-cup-golden-boot-qatar)による）に賭けるのが自然で合理的な選択でしょう。ただそうするとあまりにも簡単すぎますよね。そして、サッカーでは予期せぬサプライズが起こりうることを、私たちは知っています。

そこで、今回は伝統的なスポーツベッティングゲームのオッズ（配当率）を参考にしてみたいと思います。スポーツベッティングゲームでは、各試合にオッズ（配当率）というものが存在します。競技結果をある程度予測できる指標と見なすことができますが、配当率が低いほど勝利する可能性が高いと見られます。
フランスとオーストラリアの試合を例に挙げます。試合の結果だけを見てみると、合計3つのパターンがあります。フランスが勝利する場合、オーストラリアが勝利する場合、そして引き分けで終わる場合です。 

機械学習モデルは確率に基づいて勝者を予測します。単に確率予測値（Predicted Probability）だけで判断すれば、勝利する確率が63％に達するフランスが優勝すると予測することになります。しかし、ここでオッズ（配当率）を考慮して、確率予測値にオッズ（配当率）を乗じた値である期待収益（Expected Gain）と見たときは、引き分けに賭ける方が良い選択と見られます。

![スクリーンショット 2022-12-02 9.51.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/93d179fd-7c83-9a36-c1c2-a292cf7a7920.png)
<font color="DarkSlateGray">*フランス-オーストラリア戦の予想される確率、オッズ、期待値*</font>


**今回のモデルを通じて予測したいものは大きく2つあります:**
各試合の期待利益を最大化する結果を予測する（したがって、必ずしも勝つ可能性が最も高いチームに賭ける必要はない）。
ゲーム終了時に各チームの正確なスコアを予測すること。例えば、引き分けの場合に1対1で終わるか、あるいは2対2で終わるかまで合わせて予測することができればかなり正確なモデルといえるようです。 )例えば、上記のフランス - オーストラリアの例では、我々のモデルは57ポイントを得るために引き分けを予測しますが、正しいスコア（例えば、1-1）を推測すると、実際には114ポイントを獲得することになります。

このモデルを構築するために、どのようなデータを使用したのでしょうか？

## 技術要件を確認
### データの理解
今回使用したデータセットは、1990年代以降に行われたすべての国際サッカー試合の完全な概要を提供するものです。FIFA World Cupから通常の親善試合まで、さまざまなトーナメントの23,921試合が含まれています。各チームの強さはFIFAランキングによって提供されています。
各試合について、その背景や両チームの特徴などを解説しています。: 
- 日付、大会、場所（国、都市、中立地の有無）、試合結果（勝ち／引き分け／負け）、各チームのスコア。
- FIFAランキング（全体、攻撃、守備、ミッドフィールドランキング）。 4年間の国家代表試合結果をもとに良い成績を収めた国がランキングが上がる方式

チーム関連の列には home と away 接頭辞が付けられ、中立球場で開かれた試合のために true/false 値を持つ "neutral_location" 列を置きました。

### データ準備/探索
まず、試合結果の分布は、ホーム/アウェイと中立地とで異なることがわかる。当然ながら、勝敗の比率はホームチームに有利である。ホームでプレーすることは明らかに有利であり、そのため試合結果に偏りが生じる。

一方、中立地で行われた試合の勝敗率は驚くべきことではありませんでした。これは、ホーム/アウェイを2つの独立変数にモデル化する戦略に偏りをもたらし、データセットの再整備が必要になります。ホーム/遠隔区切りを削除し、ホーム/アウェイ/中立の3つの値を取る「場所」変数に置き換える予定です。

![Screen Shot 2022-11-10 at 5.57.22 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/1a5af586-3ca1-63cf-316a-2fc5e3235042.png)
<font color="DarkSlateGray">*試合結果の場所による分布 (home/away or neutral)*</font>

ホームチームとアウェイチームのスコアは予測される変数です。どういうわけか、ターゲット変数は、home_scoreとaway_scoreの共同分布として理解されなければなりません。そして、（データ探索の目的のために）チーム間の相互作用を考慮した2つの変数 home + away と home - away score によって、試合を記述することがより便利かもしれません。

FIFAワールドカップの最大の特徴の1つは、各国のトップチームが集まるということです。したがって、モデルのトレーニング/テストデータには、低ランクのチーム間の試合を除いて、ワールドカップレベルの代表性を持つと見なすことができる試合のみを含める必要があります。

- ここでは、両チーム国のランキングの違いと和で表現される「joint ranking」という新しい変数を作成してみました。
2つのチーム間のランキングの差は、過去と現在に関係なく同様の分布を示しています。過去のデータも問題なく使えそうです。
![Screen Shot 2022-11-10 at 4.48.44 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/d1134074-af4d-fb05-aa6c-12a3731b7391.png)
<font color="DarkSlateGray">*ここ最近（2014年、2018年）と過去（2014年以前）のワールドカップで比較した試合ランキングの分布図*</font>

- 順位差という変数は、ゴール数と相関するトップの変数です。これは、ワールドカップのマッチを代表するデータセットを作成するために使用されることを意味します。順位差の分布は、データセットをフィルタリングすることができます: 分布の "境界 "から外れた試合は除外されます。これらの「境界」は，最初と最後のパーセンタイルとして定義され，たとえば，2010-06-15に行われた韓国DPR（105位）対ブラジル（1位）のような、起こりそうにないいくつかの試合（異常値とみなされる）を除外するために使われます（結果は，驚くべきことに1-2でした）。

![Screen Shot 2022-11-10 at 10.33.08 AM (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/d2926849-de14-fa62-9247-6035b9665325.png)
*ワールドカップ歴代試合におけるチームランキングの差の分布*

- 「トーナメント」変数を使用して、ワールドカップ本選の試合と同様のランキング差の分布を示す主要な試合のみを残すことができます。親善戦と競争のための試合は当然、試合の強さは同じではなく、ワールドカップレベルの代表性を持たない試合はトレーニング/テストデータに含めることはできません。
![Screen Shot 2022-11-10 at 12.18.54 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/59af9f2e-ee42-8e69-667c-a869d2dfa969.png)
*Kolmogorov-Smirnoff test showing the ranking of teams in the selected tournaments is similar to the World Cup’s*
![Screen Shot 2022-11-10 at 4.52.18 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/62227221-f570-0565-9f7a-57f4312215dd.png)
*しかし、FIFAワールドカップ資格を取り入れることにより、ランキング分布は統計的にワールドカップとは異なるものになる*

ただし、試合範囲を限定しても、準備試合など他の試合を考慮して生成される特徴量を妨げるものではないことに留意してください。

最後に、ターゲット変数も不要な試合の除外に使用できます。例えば、歴代ワールドカップの試合最大骨髄である8点を超える試合はモデルの精度を損なう可能性があるので、除外するのが良さそうです。

## ”良い”モデルを定義する
「良い」モデルをどのように判断し、どのように比較すればよいのでしょうか。
 
- まず、期待収益（配当率×確率予測値）を最大化するモデルを作りたいと思います。しかし、過去の配当率データがないため、まず多クラス分類モデルを活用して勝ち、負け、引き分けの3つに分類し、このモデルをスポーツベットの観点から期待収益の最大値が得られるように補正する必要があります。 MLモデルの観点からは精度スコアを最大化しなければなりません。


- 2番目のモデルでは、両チームのスコアを予測したいと思います。 2つの異なる方法を検討することができます。複数のマルチターゲット回帰（multi-output regression）を使用する方法と、各チームのスコアを予測する2つの独立した回帰モデルを使用して結果をまとめる方法です。ここでは2番目の方法を選びました。

また、ワールドカップの試合の代表性を持つテストデータを定義する必要があります。この時、ワールドカップと類似レベルの試合だけを抜き出すという目標と十分なサンプル数を維持しなければならないという目標の間の妥協点を探さなければなりませんでした。

前述のデータ探索結果を念頭に置いてワールドカップに次ぐレベルの試合を抜き出した後、学習データとテストデータの割合を75:25に決めました。
 
次のセクションでは、Dataikuを介して異なる機械学習モデルを組み合わせる戦略について説明します。

## 統的な機械学習に基づくモデリングでアプローチする
### データ準備
まず、試合場所データによる潜在的な偏りを排除します。これを行うには、1試合につき1行のデータを1試合につき2行のデータに変換します。元の行を複製して2番目の行を作成し、複製した行のホーム/アウェイチーム関連フィーチャ値を入れ替え、場所はホーム/アウェイとしてマークしました。
![Capture d’écran 2022-11-10 à 11.22.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/65c8f53a-27aa-92aa-3c1f-d0358f8a16f7.png)
<font color="DarkSlateGray">*各試合を複製し、値を変える、日本対ブラジルの例*</font>

その後、タイムウィンドウ機能を使用して、各試合前までの両チームの戦績を反映する特徴量をいくつか作成しました。ここでは、試合直前の1年と直前の10試合という2つの時間枠を使って、「平均得点と失点」と「勝負の割合」を計算しました。
- 得点と失点の平均スコア
- 勝ち、負け、引き分けの比率

### 試合のスコアを予測する
第一段階は、試合結果の予測である。先に説明したように、これはホームチームの結果に対する多クラス分類問題として表現することができ、3つのクラスがある。勝ち、引き分け、負けの3クラスです。

我々は、異なる性質の複数のモデル（ロジスティック回帰、ランダムフォレスト、XGBoost、さらにk-nearest neighbor）を比較し、精度スコアを最適化しました。我々のデータセットは非常にバランスが取れているにもかかわらず（3つのクラスの分布は均等に近い）、ランダムフォレストは勝ちと負けのクラスの予測には非常に優れていましたが、引き分けクラスについてはあまり良くありませんでした。そこで、ランダムフォレストを継続することにしました。

![Capture d’écran 2022-11-10 à 11.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/6f43bed3-fc52-7236-3b5b-009e349b4384.png)
<font color="DarkSlateGray">*比較したアルゴリズムの性能（精度スコア)*</font>

![Capture d’écran 2022-11-10 à 11.13.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/064eb111-9ddd-3ce7-81c0-e30e8aae4c66.png)
<font color="DarkSlateGray">*ランダムフォレストアルゴリズムのコンフュージョンマトリックス*
*(Confusion matrix for the random forest algorithm)*</font>

潜在的な利益を最大化する結果を選択した後（冒頭で詳述したフランス - オーストラリアの例を参照）、結果の可能性と関連するオッズ（ポイント形式）の両方を考慮して、次にこれらの結果を使用して2チームのスコアを予測することができ、これは明らかに予測された結果と一致する必要があります。

### それぞれのチームのスコアを予測する
試合結果を予測した後、我々のアプローチの第二段階は、各試合の正しいスコアを予測することでした。1つはホームチームのスコア、もう1つはアウェイチームのスコアに対応する回帰モデルです。

2番目のステップは各試合のスコアの予測であり、2つの回帰モデルを使用して各ホームチームのスコアとアウェイチームのスコアを予測しました。両方の回帰モデルも、試合結果予測と同様に複数のモデルを学習して比較し、回帰予測については[Root mean squared error](https://towardsdatascience.com/what-does-rmse-really-mean-806b65f2e48e)の最小化を目指しました。その結果、両方の回帰モデルともにランダムフォレストが最適であった。最後に、予測値を整数値に丸め、チームごとのスコアを得ました。重要なことは、このようにして得られたチームごとの予測スコアは、前のステップで得られた予測試合結果と一致する必要があることです。

このように予測してみたグループリーグ初の16試合のスコアです。
![Capture d’écran 2022-11-10 à 11.00.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/5b45befe-d649-f034-c6fc-fdb81d0f781d.png)
<font color="DarkSlateGray">*最適化ゲインアプローチによる第一次予測*
*(First round of predictions using the optimizing gain approach)*</font>

サッカーに詳しい方にとっては、これらの結果のいくつかは起こりそうにないように思えるかもしれません（例えば、イングランドがイランに負けるなど）、しかし私たちはただ予測された結果を選んだのではなく、潜在的な利益を最大化するものを選んだということを思い出してください。これは、この種のイベントに関連するオッズが常に上昇しているため、Dataikuがかなりの数の引き分けを予測していることの説明となります。

もし、各結果に関連するオッズと潜在的な利益を考慮しなかったら、つまり、モデルが最も可能性が高いと考える結果（チーム1の勝利、引き分け、チーム2の勝利）を単に選んだら、次のような予測になったでしょう。これは、潜在的な利益を最適化することで、予測される結果に大きな影響を与えることができるからです（冒頭のフランス - オーストラリアの例を参照ください）。

![last.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/f8504e2b-0380-e932-88ad-2280bcb75c88.png)
<font color="DarkSlateGray">*最適化されたゲインを用いない、より古典的なアプローチによる第一ラウンドの予測*
*(First round of predictions using a more classic approach, without optimizing gain)*</font>

## さらによくするために
他のデータサイエンス・プロジェクトと同様に、特にモデリング戦略、特徴量エンジニアリング、ヒューリスティックの使用などの面で、多くのアプローチが可能でしょう。このプロジェクトは限られた時間枠の中で作られたものなので、プレーヤーデータの活用や特徴量エンジニアリングのさらなる追求など、明らかに多くの改善の可能性があります。
しかし、上に示したグループリーグ第1戦の結果は興味深いもので、私たちのMLモデルが実際の状況でどれほどのパフォーマンスを発揮するのか、楽しみでもあります。そして、2022年FIFAワールドカップが来週から始まるので、それを知るのもあと数日です。

最後まで読んでいただきありがとうございました。次回は、モデルのキャリブレーションについての詳細と、別のモデリング手法の紹介、そして前回紹介したモデルのライブ結果を分析する予定です。ご期待ください。


## Dataikuについてもっと知りたいですか？

もしあなたがコードファーストのデータ専門家なら、Dataikuが高品質なデータパイプラインとモデルを効率的に構築するためにどれだけ役立つか、[こちら](https://www.dataiku.com/ja/%e8%a3%bd%e5%93%81/%e6%8a%80%e8%a1%93%e5%b0%82%e9%96%80%e5%ae%b6%e5%90%91%e3%81%91-dataiku/)のリンクより参照いただけます。


原文: [Using ML and Dataiku to Make 2022 FIFA World Cup Predictions](https://blog.dataiku.com/fifa-world-cup-predictions)