
譯者 | 李睿
審校 | 重樓
本文對(duì)機(jī)器學(xué)習(xí)在體育運(yùn)動(dòng)中的主要應(yīng)用與實(shí)現(xiàn)進(jìn)行了探討。通過整合賽事統(tǒng)計(jì)、可穿戴設(shè)備及視頻追蹤等多個(gè)來源數(shù)據(jù),機(jī)器學(xué)習(xí)可以實(shí)現(xiàn)比賽結(jié)果預(yù)測(cè)、球員表現(xiàn)評(píng)估、傷病風(fēng)險(xiǎn)預(yù)警及戰(zhàn)術(shù)優(yōu)化,還能夠分析球員和比賽的數(shù)據(jù),以識(shí)別隱藏的模式,幫助球隊(duì)確定更科學(xué)的訓(xùn)練方法。
你有沒有想過,體育解說員如何能在賽事中快速準(zhǔn)確地判斷球員的競(jìng)技狀態(tài)或總結(jié)關(guān)鍵數(shù)據(jù)?體育數(shù)據(jù)分析讓球隊(duì)能夠收集數(shù)據(jù)、評(píng)估隊(duì)員表現(xiàn)并做出深入決策以提高成績(jī)。
機(jī)器學(xué)習(xí)在這方面發(fā)揮著關(guān)鍵作用,因?yàn)樗梢苑治鲇嘘P(guān)球員和比賽的數(shù)據(jù),以識(shí)別隱藏的模式。通過觀察這些模式,教練可以為球員制定個(gè)性化的比賽計(jì)劃。在現(xiàn)代體育時(shí)代,數(shù)據(jù)分析被用來幫助球隊(duì)確定更科學(xué)的訓(xùn)練方法,確定招募球員,并規(guī)劃比賽策略。本文將介紹機(jī)器學(xué)習(xí)在體育領(lǐng)域的應(yīng)用,并演示如何實(shí)現(xiàn)。
機(jī)器學(xué)習(xí)在體育運(yùn)動(dòng)中的應(yīng)用

機(jī)器學(xué)習(xí)是人工智能的一個(gè)子領(lǐng)域,它創(chuàng)建了從數(shù)據(jù)中學(xué)習(xí)的系統(tǒng)。在體育領(lǐng)域,機(jī)器學(xué)習(xí)需要管理和處理多種類型的數(shù)據(jù),以完成預(yù)測(cè)和模式發(fā)現(xiàn)等任務(wù)。例如,計(jì)算機(jī)視覺模型可以分析足球比賽視頻,自動(dòng)跟蹤球員和足球的位置。這些算法使用不同的特征(例如速度、射門距離、生物識(shí)別等)來進(jìn)行數(shù)據(jù)驅(qū)動(dòng)的預(yù)測(cè)。隨著時(shí)間的推移,將添加更多數(shù)據(jù),這些模型通常會(huì)得到改進(jìn)。數(shù)據(jù)預(yù)處理和特征工程是向這些模型提供正確信息的非常重要的步驟,隨著新的匹配數(shù)據(jù)的出現(xiàn),每個(gè)賽季都可以對(duì)其進(jìn)行重新訓(xùn)練。
體育運(yùn)動(dòng)中使用的機(jī)器學(xué)習(xí)算法類型
- 監(jiān)督學(xué)習(xí):在現(xiàn)有的標(biāo)記數(shù)據(jù)、目標(biāo)列上使用算法(例如,線性回歸、多項(xiàng)式回歸和決策樹回歸器等回歸算法)來預(yù)測(cè)結(jié)果(勝/負(fù))或特定球員統(tǒng)計(jì)數(shù)據(jù)(進(jìn)球、控球等)。
- 無監(jiān)督學(xué)習(xí):利用聚類和關(guān)聯(lián)方法來尋找潛在的團(tuán)隊(duì)布局或球員的比賽風(fēng)格。
- 強(qiáng)化學(xué)習(xí):包括通過基于獎(jiǎng)勵(lì)系統(tǒng)的試錯(cuò)反饋過程來學(xué)習(xí)策略,例如模擬比賽中的戰(zhàn)術(shù)。
- 深度學(xué)習(xí):可以分析非常具有挑戰(zhàn)性的數(shù)據(jù),例如信號(hào)形式,包括通過視頻識(shí)別動(dòng)作或分析傳感器數(shù)據(jù)。
每種算法都有特定的用途。監(jiān)督模型和方法的作用是預(yù)測(cè)分?jǐn)?shù)(數(shù)字)或分類(類別)。無監(jiān)督學(xué)習(xí)的作用是識(shí)別球員分組或隱藏模式(角色)。強(qiáng)化學(xué)習(xí)可以模擬完整的比賽策略。深度學(xué)習(xí)可以處理復(fù)雜的高維數(shù)據(jù),例如獨(dú)特的圖像或時(shí)間序列。使用這些方法的一些組合可以提供更豐富的信息/輸出,從而提升競(jìng)技表現(xiàn)。
體育比賽的數(shù)據(jù)來源

體育數(shù)據(jù)分析使用多種類型的數(shù)據(jù)。表現(xiàn)指標(biāo)(得分、進(jìn)球、助攻、傳球)來自官方比賽記錄和事件日志??纱┐髟O(shè)備(GPS跟蹤器、加速計(jì)、心臟監(jiān)測(cè)器和智能服裝)提供生物特征數(shù)據(jù),例如速度、加速度和心率。視頻攝像頭和自動(dòng)/人工編碼的視頻追蹤系統(tǒng)提供球員運(yùn)動(dòng)軌跡、陣型和足球軌跡的監(jiān)控?cái)?shù)據(jù)。
球迷和社交媒體數(shù)據(jù)提供了與球迷互動(dòng)、情緒和觀看相關(guān)的信息。連接的體育場(chǎng)傳感器(IoT)也可以記錄球場(chǎng)的噪音、溫度或天氣數(shù)據(jù)。醫(yī)療記錄、球員受傷記錄和財(cái)務(wù)數(shù)據(jù)(工資和預(yù)算)也為體育數(shù)據(jù)分析提供數(shù)據(jù)。所有這些數(shù)據(jù)集都需要仔細(xì)整合。當(dāng)整合在一起時(shí),這些來源提供了一個(gè)關(guān)于球隊(duì)、球員、球迷行為和聯(lián)盟的更完整的數(shù)據(jù)世界。
實(shí)踐:使用機(jī)器學(xué)習(xí)預(yù)測(cè)比賽結(jié)果
導(dǎo)入數(shù)據(jù)庫
在進(jìn)一步操作前,先導(dǎo)入在整個(gè)分析過程中提供幫助的所有重要庫。
# 1. Load Required Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score,classification_report
from sklearn.ensemble import RandomForestClassifier
import warnings
warnings.filterwarnings("ignore")問題陳述
這是一個(gè)多類別的分類問題:根據(jù)比賽統(tǒng)計(jì)數(shù)據(jù)預(yù)測(cè)球隊(duì)的比賽結(jié)果(勝/平/負(fù))。假設(shè)特征(例如預(yù)期進(jìn)球、射門次數(shù)、控球率等)可用。工作流程是對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將其拆分為訓(xùn)練/測(cè)試,訓(xùn)練模型,然后評(píng)估預(yù)測(cè)結(jié)果。
數(shù)據(jù)集概述(matches_full.csv)
該案例中有一個(gè)包含 4318 場(chǎng)職業(yè)足球比賽((2019~2025年賽季)的數(shù)據(jù)源。數(shù)據(jù)中的每一行都代表一支球隊(duì)在一場(chǎng)比賽中的表現(xiàn):得球/失球、預(yù)期進(jìn)球(xG)、控球率、射門次數(shù)、犯規(guī)次數(shù)等。結(jié)果欄顯示該隊(duì)的贏/平/輸。將其概念化為“板球”場(chǎng)景或任何運(yùn)動(dòng)的示例,可以應(yīng)用并開發(fā)模型來預(yù)測(cè)團(tuán)隊(duì)的比賽結(jié)果??梢詮?a >這里下載數(shù)據(jù)集。
df = pd.read_csv('matches_full.csv')
print("Initial shape:", df.shape)
# Initial shape: (4318, 29)數(shù)據(jù)預(yù)處理與模型訓(xùn)練
在這個(gè)階段,將通過刪除與預(yù)測(cè)任務(wù)無關(guān)的任何重復(fù)或不相關(guān)的列來清理數(shù)據(jù)。在這個(gè)示例中,這包括可以在Unnamed: 0、日期/時(shí)間列或僅包含文本(例如比賽報(bào)告或注釋)的列中找到的任何元數(shù)據(jù)。
#2 Drop unnecessary columns
df.drop(['Unnamed: 0', 'date', 'time', 'match report', 'notes'], axis=1, inplace=True)
# Drop rows with missing target values
df.dropna(subset=['result'], inplace=True)分類數(shù)據(jù)的標(biāo)簽編碼
由于機(jī)器學(xué)習(xí)模型只處理數(shù)字,使用標(biāo)簽編碼將分類文本列轉(zhuǎn)換成數(shù)值(如對(duì)手、場(chǎng)地、隊(duì)長(zhǎng)等)。分類列中的每個(gè)值都轉(zhuǎn)換為數(shù)字。保存編碼器以便以后可以使用它們將分類列反向轉(zhuǎn)換為原始狀態(tài)。
# 3. Label Encoding for Categorical Columns
label_cols = ['comp', 'round', 'day', 'venue', 'opponent', 'captain',
'formation', 'opp formation', 'referee', 'team']
label_encoders = {}
for col in label_cols:
if col in df.columns: # Check if column exists
le = LabelEncoder()
df[col] = le.fit_transform(df[col].astype(str))
label_encoders[col] = le編碼目標(biāo)變量
將目標(biāo)列(結(jié)果)轉(zhuǎn)換為數(shù)值。例如,W(勝)、L(負(fù))和D(平)將分別被編碼為2、1和0。這允許模型將預(yù)測(cè)的輸出視為分類任務(wù)。
# Encode target separately
result_encoder = LabelEncoder()
df['result_label'] = result_encoder.fit_transform(df['result'])在開始構(gòu)建模型之前,首先對(duì)數(shù)據(jù)進(jìn)行可視化。初始圖大致顯示了球隊(duì)的平均進(jìn)球數(shù)(gf)在不同賽季中的變化情況。你可以看到球表現(xiàn)更強(qiáng)或更弱的一致模式和領(lǐng)域。
# Store original mapping
result_mapping = dict(zip(result_encoder.classes_, result_encoder.transform(result_encoder.classes_)))
print("Result mapping:", result_mapping)
#Result mapping: {'D': 0, 'L': 1, 'W': 2}在繼續(xù)構(gòu)建模型之前,首先對(duì)數(shù)據(jù)進(jìn)行可視化。該圖顯示了球隊(duì)在不同賽季的平均進(jìn)球數(shù),它的可視化趨勢(shì)和性能模式。
# Trend of Average Goals Over Seasons
if 'season' in df.columns and 'gf' in df.columns:
season_avg = df.groupby('season')['gf'].mean().reset_index()
plt.figure(figsize=(10, 6))
sns.lineplot(data=season_avg, x='season', y='gf', marker='o')
plt.title('Average Goals For Over Seasons')
plt.ylabel('Average Goals For')
plt.xlabel('Season')
plt.xticks(rotatinotallow=45)
plt.tight_layout()
plt.show()
這張圖是一個(gè)直方圖,顯示了進(jìn)球數(shù)(gf)的得分規(guī)律。幫助更好地了解大多數(shù)比賽是低分還是高分,以及這些分?jǐn)?shù)的分散程度。
# Goals Scored Distribution
if 'gf' in df.columns:
plt.figure(figsize=(8, 6))
sns.histplot(df['gf'], kde=True, bins=30)
plt.title("Goals Scored Distribution")
plt.xlabel('Goals For')
plt.ylabel('Frequency')
plt.tight_layout()
plt.show()
特征與目標(biāo)拆分:將輸入特征(X)與目標(biāo)標(biāo)簽(y)分離,并將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集,以便能夠評(píng)估模型在看不見的數(shù)據(jù)上的性能。
# 4. Feature Selection
X = df.drop(columns=['result', 'result_label'])
y = df['result_label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)訓(xùn)練和評(píng)估模型:這個(gè)函數(shù)將建立一個(gè)機(jī)器學(xué)習(xí)管道。它實(shí)施以下環(huán)節(jié):
- 缺失值插補(bǔ)
- 特征縮放
- 模型訓(xùn)練
然后,將使用準(zhǔn)確性指標(biāo)和分類報(bào)告來評(píng)估模型的性能。對(duì)于不同的模型,可以很容易地再次調(diào)用這個(gè)函數(shù)(例如隨機(jī)森林)。
def train_and_evaluate(model, model_name):
# Create imputer for missing values
imputer = SimpleImputer(strategy='mean')
# Create pipeline
pipe = Pipeline([
('imputer', imputer),
('scaler', StandardScaler()), # For models sensitive to feature scaling
('clf', model)
])
# Train the model
pipe.fit(X_train, y_train)
y_pred = pipe.predict(X_test)
# Calculate metrics
acc = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=result_encoder.classes_)
print(f"\n {model_name}")
print(f"Accuracy: {acc:.4f}")
print("Classification Report:\n", report)
return pipe, acc訓(xùn)練隨機(jī)森林分類器:最后,通過管道訓(xùn)練一個(gè)隨機(jī)森林模型。隨機(jī)森林是一個(gè)流行且強(qiáng)大的集成模型,在此類結(jié)構(gòu)化數(shù)據(jù)集上通常表現(xiàn)良好。同時(shí)存儲(chǔ)訓(xùn)練好的分類器,以便以后分析特征的重要性。
rf_model, rf_acc = train_and_evaluate(RandomForestClassifier(n_estimators=250, random_state=42), "Random Forest")
# Store the best model for feature importance
rf = rf_model.named_steps['clf']輸出:


隨機(jī)森林模型表現(xiàn)良好,準(zhǔn)確率高達(dá)99.19%,它能準(zhǔn)確預(yù)測(cè)足球比賽的勝、平、負(fù)的情況,并附圖表證明以及更多的證據(jù)。機(jī)器學(xué)習(xí)可以幫助用數(shù)據(jù)有效地解釋比賽結(jié)果,即使有一些小誤差,也能為體育比賽結(jié)果提供參考價(jià)值,但也通過以往的比賽統(tǒng)計(jì)數(shù)據(jù)提供了對(duì)球隊(duì)表現(xiàn)的有用見解。
機(jī)器學(xué)習(xí)在體育運(yùn)動(dòng)中的應(yīng)用
現(xiàn)代體育運(yùn)動(dòng)高度依賴于機(jī)器學(xué)習(xí)。它可以幫助球隊(duì)制定更好的比賽計(jì)劃,減少傷病,提高球員表現(xiàn),甚至增加球迷的參與度。以下探討機(jī)器學(xué)習(xí)在體育運(yùn)動(dòng)中的各種應(yīng)用。
球員表現(xiàn)評(píng)估
機(jī)器學(xué)習(xí)可以對(duì)球員表現(xiàn)進(jìn)行客觀評(píng)估。其模型可以分析詳細(xì)的比賽數(shù)據(jù)(例如射門區(qū)域和傳球模式)來衡量球員的技術(shù)和預(yù)測(cè)未來的表現(xiàn)水平。例如,分析師可以使用機(jī)器學(xué)習(xí)來分析運(yùn)動(dòng)員技術(shù)中的弱點(diǎn)或優(yōu)勢(shì),包括球探可能忽略的細(xì)微方面。這有助于找到重要的機(jī)會(huì)來評(píng)估人才,并為發(fā)現(xiàn)球員的弱點(diǎn)定制訓(xùn)練干預(yù)措施。
例如,棒球分析師使用賽博計(jì)量學(xué)并依賴機(jī)器學(xué)習(xí)技術(shù),而足球模型則通過評(píng)估射門質(zhì)量來估算預(yù)期進(jìn)球。許多球隊(duì)現(xiàn)在也在采用運(yùn)動(dòng)傳感器來測(cè)量技術(shù)(例如,揮桿速度或踢球力量),這可以幫助教練專門為每位運(yùn)動(dòng)員量身定制訓(xùn)練和表現(xiàn)策略。

傷病預(yù)測(cè)和負(fù)荷管理
體育數(shù)據(jù)分析的健康管理是機(jī)器學(xué)習(xí)核心的應(yīng)用之一。其模型可以分析球員的訓(xùn)練負(fù)荷、生物力學(xué)和以往的傷病報(bào)告,以標(biāo)記傷病風(fēng)險(xiǎn)。例如,球隊(duì)通過智能手表和足底壓力傳感器監(jiān)測(cè)球員的心率、加速度和疲勞程度,以檢測(cè)過載指標(biāo)。
其目標(biāo)是利用這些數(shù)據(jù)提醒訓(xùn)練人員在球員受傷之前調(diào)整訓(xùn)練量或訓(xùn)練計(jì)劃。研究表明,這些主動(dòng)系統(tǒng)通過識(shí)別教練通常無法察覺的模式來增強(qiáng)傷害預(yù)防效果。目標(biāo)是在整個(gè)賽季中盡量減少球員的傷病,縮短球員停賽時(shí)間。

戰(zhàn)術(shù)決策
教練利用機(jī)器學(xué)習(xí)中的人工智能增強(qiáng)比賽策略。算法可以分析歷史和實(shí)時(shí)比賽數(shù)據(jù),以建議替代戰(zhàn)術(shù)和陣型。這使教練能深入分析對(duì)手,利用自動(dòng)化分析其戰(zhàn)術(shù)傾向,從而強(qiáng)化球隊(duì)的戰(zhàn)略思維。
當(dāng)結(jié)合多個(gè)模型預(yù)測(cè)時(shí),教練也將在預(yù)測(cè)結(jié)果方面得到幫助,以幫助分析對(duì)手可能采取的行動(dòng)。一些教練正在使用強(qiáng)化學(xué)習(xí)(RL)來模擬特定的比賽場(chǎng)景,以幫助他們嘗試新的戰(zhàn)術(shù)??偟膩碚f,這些機(jī)器學(xué)習(xí)和人工智能應(yīng)用程序能有效幫助制定戰(zhàn)略和比賽規(guī)劃。

球迷參與和開發(fā)廣告
在賽場(chǎng)外,人工智能和機(jī)器學(xué)習(xí)可以提升球迷的體驗(yàn)。專業(yè)團(tuán)隊(duì)正在分析球迷數(shù)據(jù),以個(gè)性化內(nèi)容、優(yōu)惠和互動(dòng)體驗(yàn)。例如,球隊(duì)正在利用人工智能驅(qū)動(dòng)的AR/VR應(yīng)用程序和可定制的精彩片段,將球迷融入當(dāng)前的賽季。使用機(jī)器學(xué)習(xí)的人工智能驅(qū)動(dòng)應(yīng)用程序也幫助贊助商根據(jù)喜好為細(xì)分受眾開發(fā)有針對(duì)性的營(yíng)銷和個(gè)性化廣告。
體育數(shù)據(jù)分析采用機(jī)器學(xué)習(xí)面臨的挑戰(zhàn)
盡管機(jī)器學(xué)習(xí)在體育運(yùn)動(dòng)中的應(yīng)用有很多優(yōu)勢(shì),但實(shí)際應(yīng)用并非總是一帆風(fēng)順。在實(shí)際的體育運(yùn)動(dòng)中應(yīng)用機(jī)器學(xué)習(xí)時(shí),團(tuán)隊(duì)和分析師會(huì)遇到許多困難。以下是一些主要面臨的困難:
- 體育數(shù)據(jù)雜亂、不一致且來源多樣,可能影響數(shù)據(jù)可靠性或相關(guān)不確定性。
- 許多團(tuán)隊(duì)的歷史數(shù)據(jù)有限,因此存在模型的數(shù)據(jù)過擬合的情況。
- 具備體育知識(shí)至關(guān)重要,機(jī)器學(xué)習(xí)系統(tǒng)應(yīng)該在實(shí)際的比賽情境和教練實(shí)踐中構(gòu)建。
- 不可預(yù)測(cè)的事件(例如球員突發(fā)傷病或裁判判罰)將限制預(yù)測(cè)的普遍性或準(zhǔn)確性。
規(guī)模較小的俱樂部可能缺乏預(yù)算或?qū)I(yè)人員,難以大規(guī)模執(zhí)行機(jī)器學(xué)習(xí)。
所有這些因素都意味著,在體育運(yùn)動(dòng)中使用機(jī)器學(xué)習(xí)需要大量的領(lǐng)域?qū)I(yè)知識(shí)和謹(jǐn)慎的判斷。
結(jié)論
機(jī)器學(xué)習(xí)正在以數(shù)據(jù)驅(qū)動(dòng)的分析視角徹底改變體育分析。通過獲取統(tǒng)計(jì)數(shù)據(jù)、可穿戴信息和視頻,球隊(duì)能夠探索和分析球員的賽場(chǎng)表現(xiàn)、球場(chǎng)上的策略和球迷的參與度。這個(gè)比賽預(yù)測(cè)案例展示了數(shù)據(jù)整理、數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練和使用比賽統(tǒng)計(jì)數(shù)據(jù)進(jìn)行審查的核心工作流程。
通過將機(jī)器學(xué)習(xí)的見解與教練知識(shí)結(jié)合起來,團(tuán)隊(duì)將做出更好的決策并提供更好的結(jié)果。利用這些原則,體育從業(yè)者將能夠利用機(jī)器學(xué)習(xí),從而做出基于數(shù)據(jù)的決策,改善運(yùn)動(dòng)員的健康狀況,并獲得比以往任何時(shí)候都更令人滿意的球迷體驗(yàn)。
常見問題解答
Q1:機(jī)器學(xué)習(xí)能準(zhǔn)確預(yù)測(cè)比賽結(jié)果嗎?
答:機(jī)器學(xué)習(xí)可以相當(dāng)準(zhǔn)確地預(yù)測(cè)結(jié)果,尤其是采用高質(zhì)量歷史數(shù)據(jù)訓(xùn)練的情況下。但由于球員傷病、裁判判罰或天氣等因素具有不可預(yù)測(cè)性,因此其預(yù)測(cè)并非完美。
Q2:預(yù)測(cè)比賽結(jié)果最重要的特征是什么?
答:通常重要的特征包括進(jìn)球數(shù)、預(yù)期進(jìn)球數(shù)(xG)、控球率、射門次數(shù)和比賽場(chǎng)地(主場(chǎng)/客場(chǎng))。特征的重要性取決于運(yùn)動(dòng)和數(shù)據(jù)集。
Q3:球隊(duì)在真實(shí)比賽中使用機(jī)器學(xué)習(xí)模型嗎?
答:是的!許多足球、板球、籃球和網(wǎng)球的專業(yè)團(tuán)隊(duì)都已經(jīng)使用機(jī)器學(xué)習(xí)來制定戰(zhàn)術(shù)、選擇球員和預(yù)防傷病。機(jī)器學(xué)習(xí)并不是取代人類,而是通過分析強(qiáng)化決策的科學(xué)性,最終實(shí)現(xiàn)人機(jī)協(xié)同的效能提升。
Q4:在體育運(yùn)動(dòng)中建立機(jī)器學(xué)習(xí)模型需要相關(guān)領(lǐng)域知識(shí)嗎?
答:當(dāng)然。了解相關(guān)領(lǐng)域知識(shí)有助于選擇相關(guān)特征,解釋模型結(jié)果,并避免得出誤導(dǎo)性結(jié)論。數(shù)據(jù)科學(xué)與領(lǐng)域?qū)I(yè)知識(shí)只有深度融合,才能發(fā)揮最大價(jià)值。
Q5:在哪里可以獲得數(shù)據(jù)集來訓(xùn)練體育數(shù)據(jù)分析?
答:可以在Kaggle和官方體育API上找到公共數(shù)據(jù)集。許多聯(lián)賽還會(huì)發(fā)布?xì)v史數(shù)據(jù)以供分析。
原文標(biāo)題:How to Use Machine Learning in Sports Analytics?,作者:Vipin Vashisth


























