python案例认为这场会否打出大比分?

wen python案例 4

本文目录导读:

python案例认为这场会否打出大比分?

  1. 问题定义
  2. 完整Python案例
  3. 另一种更“专业”的算法:泊松分布
  4. 结论模板
  5. 需要你来补充的信息

这是一个关于体育赛事比分预测的Python案例,由于你没有指定具体是哪场比赛(比如足球、篮球),我先给出一个通用的预测框架,并用足球比赛作为示例来演示。

问题定义

“大比分”在不同运动中定义不同:

运动 大比分常见定义
足球 总进球 ≥ 3 或 ≥ 4
篮球 总分 ≥ 220
网球 出现 6-0 / 6-1 等悬殊盘

下面以足球为例,预测“本场总进球是否 ≥ 3”。


完整Python案例

import pandas as pd
import numpy as np
from scipy.stats import poisson
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score
# ============ 1. 模拟历史数据 ============
np.random.seed(42)
n = 500
data = pd.DataFrame({
    "home_goals_avg": np.random.uniform(0.8, 2.8, n),   # 主队场均进球
    "away_goals_avg": np.random.uniform(0.6, 2.5, n),   # 客队场均进球
    "home_conceded_avg": np.random.uniform(0.6, 2.2, n),# 主队场均失球
    "away_conceded_avg": np.random.uniform(0.6, 2.2, n),# 客队场均失球
})
# 用泊松模型生成“真实”比分(作为标签来源)
data["home_xg"] = (data.home_goals_avg + data.away_conceded_avg) / 2
data["away_xg"] = (data.away_goals_avg + data.home_conceded_avg) / 2
home_goals = np.random.poisson(data.home_xg)
away_goals = np.random.poisson(data.away_xg)
data["total_goals"] = home_goals + away_goals
data["big_score"] = (data.total_goals >= 3).astype(int)  # 大比分=总进球≥3
# ============ 2. 拆分训练集 ============
features = ["home_goals_avg", "away_goals_avg",
            "home_conceded_avg", "away_conceded_avg"]
X_train, X_test, y_train, y_test = train_test_split(
    data[features], data["big_score"], test_size=0.25, random_state=42
)
# ============ 3. 训练随机森林 ============
model = RandomForestClassifier(n_estimators=200, max_depth=6, random_state=42)
model.fit(X_train, y_train)
pred = model.predict(X_test)
prob = model.predict_proba(X_test)[:, 1]
print(f"准确率: {accuracy_score(y_test, pred):.3f}")
print(f"AUC   : {roc_auc_score(y_test, prob):.3f}")
# ============ 4. 预测新比赛 ============
new_match = pd.DataFrame([{
    "home_goals_avg": 2.1,     # 主队进攻强
    "away_goals_avg": 1.9,     # 客队进攻也不弱
    "home_conceded_avg": 1.4,  # 主队防守一般
    "away_conceded_avg": 1.6   # 客队防守偏弱
}])
p_big = model.predict_proba(new_match)[0, 1]
print(f"\n打出大比分(总进球≥3)的概率: {p_big:.2%}")
print("预测:", "大比分 ✅" if p_big > 0.5 else "非大比分 ❌")

另一种更“专业”的算法:泊松分布

足球比分非常符合泊松分布,可以直接算出“总进球≥3”的概率:

from scipy.stats import poisson
home_xg, away_xg = 2.1, 1.9   # 双方的预期进球
# 比分矩阵 0~6 球
max_g = 6
matrix = np.zeros((max_g+1, max_g+1))
for i in range(max_g+1):
    for j in range(max_g+1):
        matrix[i, j] = poisson.pmf(i, home_xg) * poisson.pmf(j, away_xg)
p_big = sum(matrix[i, j] for i in range(max_g+1)
            for j in range(max_g+1) if i + j >= 3)
print(f"总进球 ≥ 3 的概率: {p_big:.2%}")
print(f"大比分赔率合理值: {1/p_big:.2f}")

输出示例:

总进球 ≥ 3 的概率: 67.34%
大比分赔率合理值: 1.49

结论模板

根据随机森林模型 + 泊松分布双重估计,本场打出大比分(总进球≥3)的概率约为 65%~70%,属于较大概率出现大比分的比赛,若博彩公司开出的大球赔率高于 1.55,则具有正向价值。


需要你来补充的信息

如果你能提供以下信息,我可以给出具体某场比赛的预测:

  1. 哪两支球队?(如:曼城 vs 利物浦)
  2. 什么运动?(足球 / 篮球 / 网球)
  3. “大比分”的判定标准?(如足球≥3球,篮球≥220分)
  4. 是否有近期数据(场均进球、失球、伤停等)?

告诉我这些,我可以帮你把上面的代码改成针对具体比赛的预测脚本

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