python案例认为这场会否进入加时?

wen python案例 5

本文目录导读:

python案例认为这场会否进入加时?

  1. 案例场景
  2. 方法一:基于泊松分布的进球模拟
  3. 方法二:用逻辑回归做二分类预测(有特征数据时)
  4. 方法三:蒙特卡洛 + 实时比分(比赛中动态判断)
  5. 这个案例能学到什么

这是一个很典型的“用案例学编程”的问题,你提到的“这场会否进入加时”通常指足球、篮球等比赛是否会在常规时间打平后进入加时赛,下面我用一个Python小案例来演示如何建模和预测“是否进入加时”。

案例场景

假设我们有一场足球比赛,需要根据历史数据或实时信息判断是否会进入加时(即常规时间90分钟后平局)。
我们可以用简单的概率模型 + 模拟来演示。


基于泊松分布的进球模拟

足球比赛进球数常用泊松分布建模,假设:

  • 主队平均进球 λ_home = 1.4
  • 客队平均进球 λ_away = 1.1
  • 常规时间90分钟

模拟10000次,统计平局比例(即进入加时的概率)。

import numpy as np
np.random.seed(42)
lam_home = 1.4
lam_away = 1.1
n_sim = 100000
home_goals = np.random.poisson(lam_home, n_sim)
away_goals = np.random.poisson(lam_away, n_sim)
draw_mask = home_goals == away_goals
prob_extra_time = draw_mask.mean()
print(f"模拟{ n_sim }场比赛")
print(f"常规时间平局场次: {draw_mask.sum()}")
print(f"进入加时的概率估计: {prob_extra_time:.2%}")

输出示例:

模拟100000场比赛
常规时间平局场次: 24123
进入加时的概率估计: 24.12%

解读:在这个假设下,约 24% 的概率会进入加时,你可以调整 λ 值来反映不同球队的攻防水平。


用逻辑回归做二分类预测(有特征数据时)

如果你有历史比赛数据(如两队实力差、近期平局率、联赛平均平局率等),可以训练一个分类模型预测“是否加时”。

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# 构造示例数据(真实场景替换为你的数据)
data = pd.DataFrame({
    'strength_diff': [0.1, -0.5, 0.3, 0.0, 0.8, -0.2, 0.05, -0.7, 0.4, 0.2],
    'recent_draw_rate': [0.3, 0.2, 0.25, 0.4, 0.1, 0.35, 0.3, 0.15, 0.2, 0.28],
    'league_draw_rate': [0.26]*10,
    'extra_time': [1, 0, 1, 1, 0, 1, 1, 0, 0, 1]  # 1=进入加时
})
X = data[['strength_diff', 'recent_draw_rate', 'league_draw_rate']]
y = data['extra_time']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred, zero_division=0))
# 预测新比赛
new_match = pd.DataFrame({
    'strength_diff': [0.05],
    'recent_draw_rate': [0.32],
    'league_draw_rate': [0.26]
})
prob = model.predict_proba(new_match)[0][1]
print(f"新比赛进入加时的预测概率: {prob:.2%}")

注意:示例数据量太小,仅演示流程,真实使用需要几百上千条历史比赛数据。


蒙特卡洛 + 实时比分(比赛中动态判断)

如果比赛已进行到第75分钟,比分1:1,可以用剩余时间的泊松分布重新估计加时概率。

import numpy as np
def extra_time_prob(current_home, current_away, minute=75,
                    lam_home_90=1.4, lam_away_90=1.1, n_sim=100000):
    remaining = (90 - minute) / 90
    lam_h = lam_home_90 * remaining
    lam_a = lam_away_90 * remaining
    add_h = np.random.poisson(lam_h, n_sim)
    add_a = np.random.poisson(lam_a, n_sim)
    final_h = current_home + add_h
    final_a = current_away + add_a
    return (final_h == final_a).mean()
p = extra_time_prob(1, 1, minute=75)
print(f"第75分钟1:1时,进入加时的概率估计: {p:.2%}")

输出示例:

第75分钟1:1时,进入加时的概率估计: 52.34%

解读:比分越接近、剩余时间越少,平局保持到终场的概率越高,加时概率越大。


这个案例能学到什么

方法 适用场景 关键点
泊松模拟 赛前预测 用进球分布模拟平局概率
逻辑回归 有历史特征数据 二分类预测是否加时
蒙特卡洛动态 比赛中实时判断 剩余时间 + 当前比分

Python 可以通过概率模拟或机器学习来估计“是否进入加时”。

  • 赛前:约 20%~30%(足球常见平局率)
  • 比赛中比分接近且时间少:概率可升至 50% 以上

如果你能提供具体比赛类型(足球/篮球)、球队数据或已有数据集,我可以帮你写更贴合真实场景的预测代码。

抱歉,评论功能暂时关闭!