世界盃預測,其實很簡單
17 人贊了文章
「 你們看到的世界盃,其實都是錄播的。你們想想,大晚上的哪來的太陽!」
今天我們來扯一扯,如何用一個簡單的機器學習模型,預測世界盃比賽的結果。
01 問題定義
為了預測比賽勝負,我們需要將預測勝負的問題,進行一個合理的數學建模。
正常來說,一場足球比賽只可能有三種結果,即勝、負、平,在這種情況下,我們可以將預測勝負的問題定義為一個分類問題,即給定一場比賽的對陣雙方,預測比賽結果屬於勝、負、平三種的哪一類。
在機器學習中,分類問題可以定義為,利用一組已知的樣本輸入 X 和對應的類別 Y,構建一個分類器,預測一個未知樣本 x 對應的類別。
從這個定義我們可以看出,在預測比賽勝負之前,我們需要一些已知樣本來構建一個分類器,這組已知的樣本,通常被稱為訓練集,需要預測結果的樣本,通常被稱為測試集。
對於世界盃預測的問題,我們已經有了一組需要預測結果的比賽,這些比賽就構成了我們的測試集。但是,我們還沒有訓練集,還不能構建分類器進行預測。
02 數據收集
為了構建分類器,我們需要收集一個訓練集。
一般來說,當訓練集和測試集的分布比較接近時,我們能得到一些比較靠譜的結果。
對於世界盃比賽,可以用以前世界盃比賽的數據作為訓練集。不過,一屆世界盃才64場比賽,這樣的數據實在是太少,在數據較少的情況下,得到的分類器通常效果較差,預測的很不靠譜。為此,我們需要收集一些額外的數據進行補充。
對於額外數據的選擇,我們從以下兩方面出發進行考慮。
第一,世界盃比賽是成年國家隊之間的比賽,因此,我們應該補充一些成年國家隊之間的比賽,如大型杯賽,友誼賽等;像聯賽和青少年比賽的數據,由於分布不同,所以不太適合作為訓練集。
第二,足球比賽規則和戰術流派在不斷變化,用20年前的比賽結果預測現在的世界盃,分布差異太大,可能也不太靠譜。
基於上述兩方面考慮,我們的訓練集採用以下數據:
- 14年、18年世界盃預選賽
- 14年世界盃
- 12年、16年歐洲杯
- 16年歐洲杯預選賽
- 15年、16年美洲杯
- 13年、17年聯合會杯
- 15年、17年中北美金杯
- 17年非洲杯
- 15年亞洲杯
- 17年、18年國家隊友誼賽
為了獲得這些數據,我們從一個專業的足球數據網站:http://whoscored.com,利用爬蟲拿到了這些比賽的時間、結果、雙方的出場球員以及球員的相關統計數據。
這些數據大約有2000場左右。
03 特徵選擇
有了訓練集的數據,我們需要構造一些簡單的特徵,對比賽結果進行預測。這些特徵,應該與比賽結果比較相關。
首先,比賽球隊本身就是一個很好的特徵,當我們聽說比賽的隊伍是巴西隊和中國隊的時候,不用想出場的球員是誰,十有八九就能預測中國隊不太行。
接著,上場球員實力也是一個不錯的特徵,阿根廷踢德國的比賽,如果梅西不上,可能大家也不太會看好阿根廷。
再來,球隊的板凳深度應該也是一個有用的特徵,能在歐冠決賽把貝爾按在替補席上的皇馬,獲勝也在情理之中。
那麼,綜合以上想法,我們的特徵其實就不難想像:
- 兩組ID特徵:球隊1的ID,球隊2的ID
- 球隊1首發球員當年在聯賽的平均數據
- 球隊1替補球員當年在聯賽的平均數據
- 球隊2首發球員當年在聯賽的平均數據
- 球隊2替補球員當年在聯賽的平均數據
對於球員,其平均統計數據有13組,分別是:身高、體重、出場次數、助攻數、進球數、傳球成功率、射門數、爭頂頭槌成功率、最佳球員次數、出場時間、替補次數、賽後評分、排名。
在處理特徵過程中,對於一些特別弱的國家,其比賽和球員數據可能有所缺失,為此,我們去掉了一些數據完全缺失的比賽,以免對預測結果產生影響。
04 模型訓練
有了特徵,我們就可以用模型構造一個分類器進行訓練。
由於我們的訓練數據只有2000條左右,為了豐富數據量,我們做了一個簡單的數據擴展,即將球隊1和球隊2的特徵互換,得到一條新數據,這樣我們就將訓練集從2000條擴展到了4000條。
在模型的選擇上,由於數據量和數據維度不大,一些傳統分類演算法就能取得不錯的效果。基於對效果的比較,我們最終選用了基於集成學習的AdaBoost演算法,訓練一個模型預測結果。
俗話說,三個臭皮匠,頂個諸葛亮。AdaBoost演算法可以看成是多個弱分類器(這裡用的是CART決策樹)的集成。簡單來說,AdaBoost先用一個弱分類器得到一組分類結果,然後根據這組結果,對出錯的樣本進行加權,得到下一個弱分類器。最後,通過對所有弱分類器的加權平均,我們能得到一組不錯的結果。
在使用AdaBoost演算法時,我們對球隊ID進行了獨熱編碼的處理,即將ID轉化成了一個長度為N的單位向量(N是球隊ID的總數)。
05 模型預測
訓練好分類器後,我們可以對比賽的結果進行預測。
對於未知的比賽,由於我們不能提前知道世界盃比賽雙方的首發陣容,因此,在預測時,我們只能用該隊最近時間的一次比賽的數據進行模擬計算。
最終模型預測的結果如下:
在日本與塞內加爾比賽前,該模型的準確率為0.767。
至於後面的比賽蒙的準不準,讓我們拭目以待吧。
06 總結
本文純屬一本正經地胡說八道,對於預測結果的準確性,概不負責。
畢竟,足球是圓的,出現什麼結果都是正常的!本導演說了也不算數啊!
「王秘書,給球員的盒飯準備好了嗎?跟他們說,今天加雞腿!」
推薦閱讀:
※[機器學習入門] 李宏毅機器學習課程從這裡開始
※【讀論文】Neural Episodic Control
※技術站搬運工:來自BrianWang的技術站:PCA的一大數學基礎:求矩陣的特徵值特徵向量
※seq2seq模型中beam search的改進
TAG:世界盃WorldCup | 機器學習 | 足球 |