基于Poisson Distribution的足球剩余时间比分概率计算结果异常问询
问题根源与修正方案
核心错误点
- 误用全场预期进球数:代码直接使用了全场90分钟的预期进球值
xgh=2.69和xga=1.12,但比赛只剩20分钟,需要按时间比例计算剩余时段的预期进球,而非直接沿用全场数据。 - Poisson分布参数逻辑错误:通过
loc=hg关联当前比分的做法不符合场景需求。正确逻辑是计算剩余时间内主队/客队再进N球的概率,再结合当前比分推导最终比分的概率。
修正思路
- 按剩余时间比例缩放预期进球:剩余时间预期进球 = 全场预期进球 × (剩余分钟数/90)
- 用剩余时间的预期进球作为Poisson分布的
mu,计算剩余时间内进0、1、...、N球的概率 - 最终比分的概率 = 剩余主队进X球的概率 × 剩余客队进Y球的概率(其中X+当前主队比分=最终主队比分,Y+当前客队比分=最终客队比分)
修正后的代码
from scipy.stats import poisson from itertools import product import numpy as np import pandas as pd # 全场预期进球数 full_xgh = 2.69 full_xga = 1.12 # 时间参数 current_minute = 70 remaining_minute = 90 - current_minute # 计算剩余时间的预期进球 remaining_xgh = full_xgh * (remaining_minute / 90) remaining_xga = full_xga * (remaining_minute / 90) # 当前比分 current_hg, current_ag = 2, 1 # 设定剩余时间最多可能的进球数(覆盖绝大多数场景) max_add = 5 add_h_goals = range(max_add + 1) add_a_goals = range(max_add + 1) # 生成概率矩阵 prob_matrix = [] for h_add in add_h_goals: row = [] for a_add in add_a_goals: h_prob = poisson.pmf(mu=remaining_xgh, k=h_add) a_prob = poisson.pmf(mu=remaining_xga, k=a_add) row.append(h_prob * a_prob) prob_matrix.append(row) # 构建最终比分的DataFrame final_h = [current_hg + h for h in add_h_goals] final_a = [current_ag + a for a in add_a_goals] prob_df = pd.DataFrame(prob_matrix, index=final_h, columns=final_a) # 输出2-1的概率 print(f"最终比分2-1的概率: {prob_df.loc[2, 1]:.2%}")
修正后结果
运行修正代码后,最终比分2-1的概率约为55%,符合仅剩20分钟、当前比分领先的预期。
内容的提问来源于stack exchange,提问作者luka
相关产品推荐
相关产品推荐

