當前位置:
首頁 > 知識 > 用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

點擊上方「CSDN」,選擇關注

關鍵時刻,第一時間送達!

作者 | Gerald Muriuki

2018 年 FIFA 世界盃即將拉開帷幕,全世界的球迷都熱切地想要知道:誰將獲得那夢寐以求的大力神杯?

如果你不僅是個足球迷,而且也是高科技人員的話,我猜你肯定知道機器學習和人工智慧也是目前的流行詞。

讓我們結合兩者來預測一下本屆俄羅斯 FIFA 世界盃哪個國家將奪冠。

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!


免責聲明:請不要以本文為依據投注或做財務決定。如果你非買不可的話,我也沒法阻止你,只是如果你中了大獎的話,別忘了我哦:)

以下為譯文:

足球比賽涉及的因素非常繁多,我無法將所有因素都融入機器學習模型中。本文只是一個黑客想用數據嘗試一些很酷的東西。本文的目標是:

  • 用機器學習來預測誰將贏得2018 FIFA世界盃的冠軍;
  • 預測整個比賽的小組賽結果;
  • 模擬四分之一決賽、半決賽以及決賽。

這些目標代表了獨一無二的現實世界裡機器學習的預測問題,並將解決機器學習中的各種任務:數據集成、特徵建模和結果預測。


數據

我採用了兩個來自 Kaggle 的數據集,我們將使用自 1930 年第一屆世界盃以來所有參賽隊的歷史賽事結果。


FIFA 排名是於 90 年代創建的,因此這裡缺失很大一部分數據,所以我們使用歷史比賽記錄。點擊以下鏈接獲取所有數據 :

  • https://www.kaggle.com/martj42/international-football-results-from-1872-to-2017/data;
  • 本文中主要使用的環境和工具有:jupyter notebook、numpy、pandas、seaborn、matplotlib 和 scikit-learn。

首先,我們要針對兩個數據集做探索性分析,然後經過特徵工程來選擇與預測關聯性最強的特徵,還有數據處理,再選擇一個機器學習模型,最後將模型配置到數據集上。


讓我們開始動手吧!

首先,導入所需的代碼庫,並將數據集載入到數據框中:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

導入代碼庫:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

下一步是載入數據集。通過調用 world_cup.head() 和 results.head() ,務必將兩個數據集都載入到數據框中,如下所示:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

探索性分析

在分析了兩組數據集後,所得的數據集包含了以往賽事的數據——這個新的(所得的)數據集對於分析和預測將來的賽事非常有幫助。


探索性分析和特徵工程:需要建立與機器學習模型相關的特徵,在任何數據科學的項目中,這部分工作都是最耗時的。

現在我們把目標差異和結果列添加到結果數據集:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

檢查一下新的結果數據框:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

然後我們著手處理僅包含奈及利亞參加比賽的一組數據(這可以幫助我們集中找出哪些特徵對一個國家有效,隨後再擴展到參與世界盃的所有國家):

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

第一屆世界盃於 1930 年舉行。我們為年份創建一列,並選擇所有 1930 年之後舉行的比賽:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

現在我們可以用圖形表示這些年來奈及利亞隊最普遍的比賽結果:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

每個參加世界盃的國家的勝率是非常有幫助性的指標,我們可以用它來預測此次比賽最可能的結果。

比賽的舉行地點無關緊要。

鎖定參加世界盃的隊伍

我們為所有參賽隊伍創建一個數據框:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

然後從該數據框中進一步篩選出從 1930 年起參加世界盃的隊伍,並去掉重複的隊伍:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

為年份創建一列,去掉 1930 年之前的比賽,並去掉不會影響到比賽結果的數據列,比如 date(日期)、home_score(主場得分)、away_score(客場得分)、tournament(錦標賽)、city(城市)、country(國家)、goal_difference(目標差異)和 match_year(比賽年份):

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

為了簡化模型的處理,我們修改一下預測標籤。

如果主場隊伍獲勝,那麼 winning_team(獲勝隊伍)一列顯示「2」,如果平局則顯示「1」,如果是客場隊伍獲勝則顯示「0」:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

通過設置啞變數(dummy variables),我們將 home_team(主場隊伍)和away _team(客場隊伍)從分類變數轉換成連續的輸入。

這時可以使用 pandas 的 get_dummies() 函數,它會將分類列替換成一位有效值(one-hot,由數字『1』和『0』組成),以便將它們載入到 Scikit-learn 模型中。

接下來,我們將數據按照 70% 的訓練數據集和 30% 的測試數據集分成 X 集和 Y 集:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

這裡我們將使用分類演算法:邏輯回歸。這個演算法的工作原理是什麼?該演算法利用邏輯函數來預測概率,從而可以測量出分類因變數與一個或多個自變數之間的關係。具體來說就是累積的邏輯分布。

換句話說,邏輯回歸可以針對一組可以影響到結果的既定數據集(統計值)嘗試預測結果(贏或輸)。

在實踐中這種方法的工作原理是:使用上述的兩套「數據集」和比賽的實際結果,一次輸入一場比賽到演算法中。然後模型就會學習輸入的每條數據對比賽結果產生了積極的效果還是消極的效果,以及影響的程度。

經過充分的(好)數據的訓練後,就可以得到能夠預測未來結果的模型,而模型的好壞程度取決於輸入的數據。

讓我們看看最終的數據框:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

看起來很不錯。現在我們將這些數據傳遞到演算法中:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

我們的模型子訓練數據集的正確率為 57%,在測試數據集上的正確率為 55%。雖然結果不是很好,但是我們先繼續下一步。

接下來我們建立需要配置到模型的數據框。

首先我們載入 2018 年 4 月 FIFA 排名數據和小組賽分組狀況的數據集。由於世界盃比賽中沒有「主場」和「客場」,所以我們把 FIFA 排名靠前的隊伍作為「喜愛」的比賽隊伍,將他們放到「home_teams」(主場隊伍)一列。然後我們根據每個隊伍的排名將他們加入到新的預測數據集中。下一步是創建默認變數,並部署機器學習模型。

  • 2018 年 4 月 FIFA 排名數據:

https://us.soccerway.com/teams/rankings/fifa/?ICID=TN_03_05_01

  • 小組賽分組狀況的數據集:

https://fixturedownload.com/results/fifa-world-cup-2018

比賽結果預測

到這裡你可能在想我們究竟什麼時候開始預測啊?看了這麼多代碼和嘮叨,究竟什麼時候才給我們看預測結果?別著急,我們馬上就要開始了……

將模型部署到數據集中

首先,我們將模型部署到小組賽中:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

以下是小組賽的結果:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

該模型的預測中出現了三場平局,並且獲勝隊伍會在葡萄牙和西班牙之間,且判定西班牙有更高的獲勝概率。我使用該網站(https://ultra.zone/2018-FIFA-World-Cup-Group-Stage)模擬了小組賽。

以下是 16 強淘汰賽的模擬:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

模型預測的四分之一決賽——葡萄牙vs法國,巴西vs英格蘭,西班牙vs阿根廷,德國vs比利時。

下面是結果預測:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

半決賽的陣容是——葡萄牙vs巴西,德國vs阿根廷。

結果預測:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

最後的冠軍比賽是——巴西vs德國。

結果預測:

用機器學習預測誰將奪得世界盃冠軍?附完整代碼!

根據該模型,巴西將有可能獲得本屆世界盃的冠軍

進一步的研究和提高領域

  • 為提高數據集的質量,可以利用 FIFA 的比賽數據評估每個球員的水平;
  • 混淆矩陣可以幫助我們分析模型預測的哪場有誤;
  • 我們可以嘗試將多個模型組合在一起,提高預測準確度。

寫在最後

我們可以從很多方面的工作來提高該預測,接下來就讓我們來看看真正的比賽結果是否如此啦。

點擊此處獲取完整的代碼:

  • https://github.com/itsmuriuki/FIFA-2018-World-cup-predictions

最後的聲明:我不是資深球迷,所以請自行承擔預測的風險。


鏈接:https://medium.com/@itsmuriuki/predicting-fifa-world-cup-2018-using-machine-learning-dc07ad8dd576

作者:Gerald Muriuki,經濟、數據科學專家

譯者:彎月,責編:郭芮

聲明:本文已獲作者翻譯授權。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

如何從技術上成功預測比特幣價格?
年薪 700 萬也換不來區塊鏈開發者的一次回眸

TAG:CSDN |