機器學(xué)習(xí)如何在足球比賽數(shù)據(jù)分析中應(yīng)用?
足球的還沒有實驗過,但是籃球領(lǐng)域已經(jīng)有過類似的研究了:
下文已經(jīng)發(fā)表在第四范式專欄中。
鐺鐺or唰唰,機器學(xué)習(xí)預(yù)測科比的投籃中不中?
Part 1
科比·布萊恩特,廣大的中國籃球迷對于這個名字應(yīng)該非常熟悉,當然也各自懷抱著不同的感情??墒菬o論你是黑還是粉,有一點應(yīng)該是被廣泛認可的:科比是21世紀以來,整個NBA聯(lián)盟里進攻方式最無解、得分技巧最全面的球員。他的每一次出手都伴隨著自信,令對手提心吊膽,即使可能在那之前他已經(jīng)連丟了許多投籃。橫亙20年的職業(yè)生涯,他的比賽錄像被一遍遍地研究,人們希望能總結(jié)出一些規(guī)律,用以限制這個幾乎無所不能的男人。
那么問題來了,我們可不可以結(jié)合經(jīng)驗和已知的信息,用最科學(xué)的方式評估科比的某一次出手能夠命中籃筐的幾率呢?答案是肯定的,機器學(xué)習(xí)對于分析數(shù)據(jù)、理論預(yù)測最為在行。在大數(shù)據(jù)的思維下,即使面對體育比賽這樣瞬息萬變的場景,機器學(xué)習(xí)也可以發(fā)現(xiàn)其中的“蛛絲馬跡”。
問題起源于kaggle(一個數(shù)據(jù)科學(xué)社區(qū))上的一次公開競賽,我們掌握的數(shù)據(jù)是科比20年NBA職業(yè)生涯中所有投籃出手(field goal attempts)的相關(guān)信息,包含以下這些條目:

除此之外,自然還存在一個label:shot_made_flag,即本次出手是否命中。所有三萬多條數(shù)據(jù)中的5000條選作測試集,其label值被隱去,最終的工作就是要在學(xué)習(xí)其余數(shù)據(jù)的基礎(chǔ)上,預(yù)測這5000次出手命中的可能性。
在預(yù)測5000次出手命中的過程中,我們也發(fā)現(xiàn)了一些有意思的結(jié)果:
重要的單一特征主要有 3 類,出手類型(細)、出手區(qū)域類型和出手距離。預(yù)測科比是否能投中,最重要的是一個組合特征是出手方式(細)和出手距離,特征重要性 0.6099。出手方式和出手距離組合起來,我們能學(xué)習(xí)到在不同的出手距離時,科比不同的出手方式對最終是否命中有顯著的影響。出手方式和賽季的組合特征也非常有效,特征重要性 0.6049,這兩者結(jié)合起來可能是大數(shù)據(jù)反映出科比在不同賽季拿手或常用的得分方式不同。出手方式和對手球隊名被組合起來了,因為不同球隊的防守傳統(tǒng)不一樣,有些球隊專注于培養(yǎng)外線鐵閘,有些球隊熱衷內(nèi)線巨獸;那么面對不同的防守重心,科比選擇攻擊籃筐還是外線投射在成功率的差別也被挖掘出來了。本節(jié)剩余秒數(shù)、出手類型以及比賽地點經(jīng)度(代表打球的場館)的三階特征組合是很好的指標,特征重要性 0.5556。比賽編號也是一個重要特征,這說明了科比的手感在比賽中有一定的持續(xù)性,有時候可夜晚非常準,例如對猛龍的比賽,而有的時候就會打鐵一整晚。科比出手點的球場位置也有很強的預(yù)測性,但其中出手點的 x 坐標(球場寬邊的坐標)要比 y 坐標更重要(球場長邊的坐標)。基于這些特征,我們最終可以預(yù)測科比的投籃是否命中,以logloss為評估指標。目前kaggle最好的效果是 0.56529。Part 2
好了,介紹完背景,準備好數(shù)據(jù),接下來就該第四范式斥巨資開發(fā)的先知平臺登場了。借助于這個科學(xué)方便的機器學(xué)習(xí)平臺,我們可以系統(tǒng)、直觀地完成這個機器學(xué)習(xí)課題。
要想讓計算機學(xué)會評估科比的投籃成功率,我們自然得提供已知的范例來“教會”它。有了前面列出來的這些信息,事情就好辦了。其實只有三個問題需要明確:
1.科比的投籃成功率和什么有關(guān)?
每一個信息條目,就代表著科比此次出手的一項特征(feature)。既然是特征,那么肯定與是否命中這一結(jié)果息息相關(guān),例如:
比賽剩余時間:影響著科比出手時的興奮和緊張程度出手距離:直接決定瞄準難度賽季:區(qū)分出年齡和傷病因素等等仔細觀察某些特征,還能發(fā)現(xiàn)不少有趣的東西。例如球隊名這一項就體現(xiàn)不出什么價值,因為科比二十年都待在同一支球隊;對手這一變量更是饒有意味,舉個例子來說,熟悉科比的球迷應(yīng)該都知道,他一打猛龍就來勁。
2.有哪些因素應(yīng)該組合起來描述科比的投籃?
在很多時候,單一特征不足以完整反映此次出手的某個性質(zhì),我們需要將若干特征組合在一起使用,以更合理地幫助計算機訓(xùn)練模型。
第四范式提供自動的特征組合算法——FeatureGo,簡單地使用“自動特征組合”算子,先知平臺就可以開始他的表演。

有一組被組合起來的特征是shot_zone_area(出手區(qū)域,包括左側(cè)、右側(cè)等)和shot_zone_basic(出手區(qū)域類型,包括中距離、外線、禁區(qū)等),這兩項特征被組合起來的理由易于理解,同時確定了角度和距離才可以定位科比出手的位置,組合起來使用是科學(xué)的方式。
還有一組特征,action_type(出手方式,包括跳投、上籃等)和opponent(對手球隊名)也被組合起來了。乍一看這是沒有什么聯(lián)系的一組,可是仔細一分析卻會有收獲:球隊各自的防守傳統(tǒng)不一樣,有些球隊專注于培養(yǎng)外線鐵閘,有些球隊熱衷內(nèi)線巨獸;那么面對不同的防守重心,科比選擇攻擊籃筐還是外線投射在成功率上的區(qū)別應(yīng)該有所體現(xiàn),因此,先知平臺從數(shù)據(jù)層面發(fā)現(xiàn)了這一專家經(jīng)驗,幫助我們更優(yōu)地提取特征。
3.哪些因素對科比投籃影響最大?
特征種類很多,相關(guān)度自然有高有低。我們最關(guān)心的,當然是對結(jié)果影響力最強的那些特征,先知平臺可以很方便地幫我們尋找出來。
我們通過先知完成特征抽取之后,可以連接“特征重要性分析”算子,通過計算后就可以得到各項特征在機器學(xué)習(xí)過程中的重要性排序。

先知告訴我們,與科比投籃成功率關(guān)聯(lián)相對最大的一項特征是action_type(出手方式,包括跳投、上籃等),原因可能在于不同的出手方式,其命中率差別本身就較大,例如科比的上籃(包括扣籃)的命中率肯定會高于其中距離跳投,而中投的成功率和三分相比又會略勝一籌。類似的,下面是其他一些重要的特征:
action_type,shot_distance(組合):出手方式和出手距離組合起來,我們能學(xué)習(xí)到在不同的出手距離時,科比不同的出手方式對最終是否命中有顯著的影響。action_type,season(組合):出手方式和賽季,這兩者結(jié)合起來可能是大數(shù)據(jù)反映出科比在不同賽季拿手或常用的得分方式不同。shot_zone_basic:出手區(qū)域的類型,包括禁區(qū)、中距離、外線等,這也是對命中率區(qū)分度較大的因素。shot_distance:出手距離,這項單一特征的影響力不用解釋。combined_shot_type:粗分的出手方式,同樣對命中率產(chǎn)生影響。shot_zone_range:出手區(qū)域,包括左側(cè)、右側(cè)等,這可能反映出科比進攻選擇時在不同區(qū)域舒適度有高低。有了對于特征重要度的分析報告,我們在處理重要性很高的特征項時就應(yīng)該更加注意,謹慎考慮是否分桶、其泛化性如何等等關(guān)鍵問題。
Part 3
有了上述的分析,我們已經(jīng)打好了堅實的基礎(chǔ),當然,預(yù)測科比的投籃沒有這么簡單,但是先知的“黑科技”也不遠止于此,我們一步一步來實現(xiàn)它。
首先,我們需要將整個數(shù)據(jù)上傳至先知平臺,可以看到其中包含了科比職業(yè)生涯一共30697次出手的相關(guān)數(shù)據(jù)。

引入數(shù)據(jù)后,我們拖入“數(shù)據(jù)拆分”算子,先將這三萬條數(shù)據(jù)拆成訓(xùn)練集和測試集,對于訓(xùn)練集中的兩萬五千條數(shù)據(jù),簡單地按照9:1的比例隨機拆分成訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。
拆分數(shù)據(jù)完成之后,就是提取特征的過程,這一過程針對不同變量有著不同的提取方式:有些離散值可以直接使用,有些連續(xù)變量則需要分桶;小數(shù)位保留太多泛化性不夠,就需要向下取整;單一變量不足以完整反映某項特性,就要多個組合起來……這些復(fù)雜、技巧性強的過程先知平臺都可以輕松幫你搞定:拖入“特征組合”算子,設(shè)定好學(xué)習(xí)率和隨機調(diào)參次數(shù)之后,先知會為我們算出若干種特征抽取和組合方式,由于 logloss 和 AUC 具有數(shù)學(xué)一致性,選擇其中AUC最高的一種來使用即可。

在完成特征提取的工作之后,下一步就要應(yīng)用學(xué)習(xí)算法來生成一個預(yù)測模型了。數(shù)據(jù)經(jīng)過特征自動組合之后已經(jīng)全部離散化,因此我們選擇邏輯回歸算法來做訓(xùn)練。同樣地,我們面臨調(diào)參這個讓人頭大的問題,別擔心,先知依然可以幫你快速搞定。我們使用“邏輯回歸自動調(diào)參”算子,只需要設(shè)定調(diào)參次數(shù)、參數(shù)范圍這樣一些基本的指標,就可以達成反復(fù)試驗以得到最佳參數(shù)的目的。


經(jīng)過自動調(diào)參后,我們把最佳的參數(shù)填入邏輯回歸的參數(shù)表中,這樣輸出就將是一個訓(xùn)練好的機器學(xué)習(xí)模型。下面就需要對其質(zhì)量做一個檢驗,利用之前訓(xùn)練集分出來的測試數(shù)據(jù)做模型預(yù)測。由于評估標準是logloss,在輸出后連接一個SQL算子,計算預(yù)測結(jié)果的logloss值。


可以看見,logloss值還較小,測試通過。最后一步,我們需要把這個模型應(yīng)用到label未知的測試集上,以得到最終的結(jié)果。出于模塊化的考慮,我們把這個模型導(dǎo)出,重新命名發(fā)布,那么之后就可以直接使用這個訓(xùn)練好的模型了。由于測試集中各數(shù)據(jù)的label為空,而先知平臺目前暫時還不能對空集做特征抽取,因此我們引入一個PySpark自定義腳本,把這個空值設(shè)為0。接著,我們使用與前面一致的特征抽取方法對測試集特征做處理,再套上先前的模型,就可以很方便地輸出結(jié)果了。


Part 4
至此,我們完成了利用機器學(xué)習(xí)評估科比單次投籃命中概率的全過程。整體看下來,先知平臺完成一個機器學(xué)習(xí)項目所表現(xiàn)出的靈活性與方便性都非常突出。通過先知,我們可以省去很多繁瑣復(fù)雜的步驟,克服很多頗具難度的問題,不僅提高了效率,也降低了機器學(xué)習(xí)應(yīng)用的門檻。
回到這個課題本身,讓我們來看看結(jié)果里的數(shù)據(jù),概率高的那些情形,科比一定是最飄逸、最擅長的;概率低的那些情形,科比可能是最無助、最偏執(zhí)的。這個留在無數(shù)少年青春里的男人,完成了那么多壯舉,也背負了那么多罵名,如今都過去了。封存在那一串串數(shù)字里的,有他的痛點,有我們的回憶,可更多的,是一種堅持。
明白了這些,或許你就能化身懂球帝,對著墻上張貼的海報說:
科比,我已經(jīng)看穿了你。
如果你對我們感興趣,請在這里申請先知平臺:https://prophet.4paradigm.com
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由財神資訊-領(lǐng)先的體育資訊互動媒體轉(zhuǎn)載發(fā)布,如需刪除請聯(lián)系。