2018年世界杯足球賽開賽在即,全世界的球迷都想知道:誰將奪得令人垂涎的冠軍杯?

如果你不僅是個球迷,還是個技術(shù)達人,我猜你已意識到機器學習和AI也是目前的流行語。我們不妨結(jié)合兩者來預(yù)測誰贏得世界杯。
免責聲明:本文不該用于投注或任何財務(wù)決策。你要是選擇這么做,我也不會攔你(如果你中了頭彩,可別忘了我)。
足球比賽涉及好多因素;正因為如此,所有這些因素無法在一個機器學習模型中加以分析。我只是想用數(shù)據(jù)搞一個有趣的項目……
目標
目標是使用機器學習來預(yù)測哪支球隊將贏得2018年世界杯。
預(yù)測今年這屆世界杯每一場比賽的結(jié)果。
模擬下一輪比賽,比如四分之一決賽、半決賽和決賽。
這些目標帶來了一個獨特而實際的機器學習預(yù)測問題,需要解決各項機器學習任務(wù):數(shù)據(jù)整合、特征建模和結(jié)果預(yù)測。
數(shù)據(jù)
我使用了Kaggle的兩個數(shù)據(jù)集,可以在這里(https://www.kaggle.com/martj42/international-football-results-from-1872-to-2017/data)找到。我們將使用自1930年世界杯開始以來所有參賽球隊的歷史比賽結(jié)果。
局限性:國際足聯(lián)排名是上世紀90年代搞起來的,因此缺少數(shù)據(jù)集的大部分內(nèi)容。于是我們堅持使用歷史比賽記錄。
環(huán)境和工具:jupyter筆記本、numpy、pandas、 seaborn、matplotlib和scikit-learn。
我們先要對兩個數(shù)據(jù)集進行一些探索性分析,做一些特征工程以選擇對預(yù)測最要緊的特征,做一些數(shù)據(jù)處理,選擇一個機器學習模型,最后將模型部署到數(shù)據(jù)集上。
開始動手吧!
要緊的事先說,導(dǎo)入必要的代碼庫,并將數(shù)據(jù)集加載到一個數(shù)據(jù)框。

導(dǎo)入代碼庫

加載數(shù)據(jù)集……
為兩個數(shù)據(jù)集調(diào)用world_cup.head()和results.head(),確保數(shù)據(jù)集已加載到數(shù)據(jù)框中,如下所示:

探索性分析
分析這兩個數(shù)據(jù)集后,得到的數(shù)據(jù)集包含過去比賽的數(shù)據(jù)。因而得到的新的數(shù)據(jù)集對分析和預(yù)測將來的比賽很有用。
探索性分析和特征工程:這需要確定哪些特征對機器學習模型來說很要緊,這是任何數(shù)據(jù)科學項目中最耗時的部分。
現(xiàn)在讓我們將目標差異和結(jié)果這一列添加到結(jié)果數(shù)據(jù)集。

查看新的結(jié)果數(shù)據(jù)框。

然后我們將處理數(shù)據(jù)子集,這部分包括只有尼日利亞參加的比賽。這將幫助我們專注于哪些特性對一個國家來說很要緊,然后擴大到參加世界杯的那些國家。

第一屆世界杯在1930年舉辦。為年份創(chuàng)建一個列,并選擇1930年以后的所有比賽。

現(xiàn)在我們可以直觀顯示歷年來尼日利亞最常見的比賽結(jié)果。

獲得每個參賽國家的勝率是一個有用的指標,我們可以用它來預(yù)測每場比賽的最有可能的結(jié)果。
比賽場地關(guān)系不大。
范圍縮小到參加世界杯的球隊
為所有參與球隊創(chuàng)建一個數(shù)據(jù)框。

然后,我們會進一步過濾結(jié)果數(shù)據(jù)框,只顯示1930年起出現(xiàn)在今年世界杯上的球隊,并擯棄重復(fù)的球隊。

創(chuàng)建年份列,擯棄1930年之前的比賽,并擯棄不會影響比賽結(jié)果的列,比如date、home_score、away_score、tournament、city、country、goal_difference和match_year。

修改“Y”(預(yù)測標簽),以便簡化我們模型的處理。
如果主隊獲勝,winner_team列將顯示“2”,如果是平局,顯示“1”,如果客隊贏,則顯示“0”。


通過設(shè)置偽變量,將home_team和_team從分類變量轉(zhuǎn)換成連續(xù)輸入。
使用pandas以及get_dummies()函數(shù)。它將分類列轉(zhuǎn)換成獨熱(one-hot,數(shù)字“1”和“0”)表示,讓它們能夠加載到Scikit學習模型中。
然后,我們將X級和Y組分開,將數(shù)據(jù)分成70%是訓練數(shù)據(jù),30%是測試數(shù)據(jù)。

我們將使用邏輯回歸,這是一種分類器算法。這個算法如何工作?它通過使用邏輯函數(shù)來估計概率,從而度量分類因變量和一個或多個自變量之間的關(guān)系。具體來說是累計邏輯分布。
換句話說,在給出可能影響結(jié)果的一組數(shù)據(jù)點的情況下,邏輯回歸試圖預(yù)測結(jié)果(贏或輸)。
實際上其工作方式是,你每次為算法饋送一次比賽,同時饋送上述的“數(shù)據(jù)集”和比賽的實際結(jié)果。然后,模型學習你饋送的每一個數(shù)據(jù)如何積極或消極地影響比賽結(jié)果,影響多大。
饋送足夠多的好數(shù)據(jù),你就有了可以用來預(yù)測未來結(jié)果的模型。
模型的好壞取決于饋送給它的數(shù)據(jù)。
不妨看一下最后的數(shù)據(jù)框:

看起來很棒?,F(xiàn)在我們準備將這個傳遞給我們的算法:

我們的模型在訓練集上的準確率為57%,在測試集上的準確率為55%。這看起來不太好,但暫且不用管它。
這時候,我們將創(chuàng)建一個數(shù)據(jù)框,我們將部署模型。
我們先開始加載截至2018年4月的國際足聯(lián)排名數(shù)據(jù)集(https://us.soccerway.com/teams/rankings/fifa/?ICID=TN_03_05_01)和含有從這里(https://fixturedownload.com/results/fifa-world-cup-2018)獲得的小組賽階段保留球隊的數(shù)據(jù)集。排名較高的球隊將被視為比賽的“熱門”,因此它們放在“home_teams”這一列,這是由于世界杯比賽中沒有“主隊”或“客隊”。然后,我們根據(jù)每支球隊的排名位置將球隊添加到新的預(yù)測數(shù)據(jù)集。下一步將創(chuàng)建偽變量,并部署機器學習模型。
預(yù)測比賽
現(xiàn)在你想知道我們怎么來預(yù)測?碼了那么多代碼,說了那么多,你啥時預(yù)測比賽?好了,馬上預(yù)測比賽了。
將模型部署到數(shù)據(jù)集
我們先將模型部署到小組賽。

這是小組賽的結(jié)果。







模型預(yù)測三場平局,它還在葡萄牙和西班牙之間穩(wěn)妥下注,但認為西班牙勝率高。我用該網(wǎng)站(https://ultra.zone/2018-FIFA-World-Cup-Group-Stage)來模擬小組賽的比賽。
下面是模擬16輪淘汰賽。


模型預(yù)測四分之一決賽在這些球隊之間進行:葡萄牙對陣法國、巴西對陣英格蘭、西班牙對陣阿根廷和德國對陣比利時。
預(yù)測如下:

半決賽
葡萄牙對陣巴西和德國對陣阿根廷
預(yù)測:

最后是總決賽
巴西對陣德國
預(yù)測:

根據(jù)這個模型,巴西很可能贏得這屆世界杯。

轉(zhuǎn)自:云頭條
Copyright ? 2005-2020 www.allweyes.cn | All Rights Reserved 粵ICP備05105686號
Hello, please leave your name and email here before chat online so that we won't miss your message and contact you smoothly.