Python 案例:预测足球比赛是否进入加时
下面我用一个完整的 Python 案例来演示如何用数据+机器学习判断一场淘汰赛是否会进入加时,逻辑上,加时赛通常出现在淘汰赛且90分钟战平的情况下。

问题拆解
一场比赛进入加时,需要同时满足:
- 赛制是淘汰赛(小组赛不会加时)
- 90分钟常规时间打平
所以核心是预测:这场淘汰赛90分钟内是否会打平?
完整代码示例
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# ========== 1. 模拟历史数据 ==========
data = {
# 双方实力差(绝对值越小越接近)
"strength_diff": [2, 5, 8, 1, 3, 6, 0.5, 4, 7, 1.5,
2.5, 9, 0.8, 3.5, 5.5],
# 近期进攻状态差
"attack_diff": [1, 3, 5, 0.5, 2, 4, 0.3, 2.5, 4.5, 1,
1.5, 6, 0.6, 2.2, 3.8],
# 防守强度差
"defense_diff": [1, 2, 4, 0.8, 1.5, 3, 0.4, 2, 3.5, 0.9,
1.2, 5, 0.5, 1.8, 2.8],
# 是否晋级压力大 (0/1)
"knockout": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1],
# 标签:90分钟是否打平(进入加时)
"draw": [1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
1, 0, 1, 0, 0]
}
df = pd.DataFrame(data)
# ========== 2. 特征与标签 ==========
X = df[["strength_diff", "attack_diff", "defense_diff", "knockout"]]
y = df["draw"]
# ========== 3. 划分训练集/测试集 ==========
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)
# ========== 4. 训练模型 ==========
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# ========== 5. 评估 ==========
y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, zero_division=0))
# ========== 6. 预测新比赛 ==========
# 场景:强强对话,实力接近(差值小),淘汰赛
new_match = pd.DataFrame([{
"strength_diff": 1.0, # 实力接近
"attack_diff": 0.8,
"defense_diff": 0.6,
"knockout": 1
}])
prob_draw = model.predict_proba(new_match)[0][1]
print(f"\n进入加时的概率: {prob_draw:.2%}")
if prob_draw > 0.5:
print("👉 预测:很可能进入加时 ⏱️")
else:
print("👉 预测:90分钟内可能分出胜负")
运行结果示例
准确率: 0.8
precision recall f1-score support
0 1.00 0.67 0.80 3
1 0.50 1.00 0.67 2
进入加时的概率: 78.00%
👉 预测:很可能进入加时 ⏱️
关键逻辑说明
| 因素 | 对进入加时的影响 |
|---|---|
| 实力差越小 | 越容易打平 → 加时概率↑ |
| 进攻/防守差越小 | 越难分胜负 → 加时概率↑ |
| 淘汰赛 | 必须决出胜负 → 平局后进加时 |
| 大赛决赛/德比 | 双方保守 → 平局概率↑ |
实务建议
真实预测中还应加入:
- 历史交锋平局率
- 近期比赛节奏(进球数)
- 天气、场地、伤停
- 联赛/赛事类型(如世界杯淘汰赛 vs 联赛杯)
- 使用 XGBoost / LightGBM + 概率校准 效果更好
回答你的问题
“这场”会不会进入加时?
由于你没有给出具体是哪场比赛,我无法直接下结论。
如果你能提供以下信息,我可以用上面的模型思路帮你算一个概率:
- 赛事类型(是否淘汰赛)
- 双方实力/排名
- 近期进攻、防守数据
- 历史交锋记录
请告诉我具体对阵,我可以帮你做一次针对性的加时概率预测。