综合python案例,季前热身赛参考价值多大?

wen python案例 1

基于 Python 数据分析的探讨

问题拆解

"季前热身赛参考价值多大"可以从几个维度量化:

综合python案例,季前热身赛参考价值多大?

  1. 预测力:热身赛结果能否预测常规赛/正赛表现
  2. 相关性:热身赛胜负 vs 赛季胜负的相关系数
  3. 稳定性:热身赛结果本身的方差
  4. 情境差异:不同运动(足球/篮球)、不同联赛差异

下面用一个可复用的 Python 分析框架来演示,并给出结论。


Python 分析框架

数据准备(示例结构)

import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 假设数据结构:
# team, season, preseason_win_rate, regular_win_rate, preseason_gd, regular_gd
df = pd.read_csv("preseason_vs_regular.csv")

核心相关性分析

def analyze_preseason_value(df):
    results = {}
    for metric in ["win_rate", "goal_diff_per_game", "points_per_game"]:
        pre = df[f"preseason_{metric}"]
        reg = df[f"regular_{metric}"]
        r, p = stats.pearsonr(pre, reg)
        rho, p_s = stats.spearmanr(pre, reg)
        results[metric] = {
            "pearson_r": round(r, 3),
            "p_value": round(p, 4),
            "spearman_rho": round(rho, 3),
            "r_squared": round(r**2, 3),
        }
    return pd.DataFrame(results).T
print(analyze_preseason_value(df))

分组对比(强队 vs 弱队)

def stratified_analysis(df, tier_col="team_tier"):
    """按球队档次分层,看热身赛预测力是否不同"""
    out = []
    for tier, g in df.groupby(tier_col):
        r, p = stats.pearsonr(g["preseason_win_rate"], g["regular_win_rate"])
        out.append({"tier": tier, "n": len(g), "r": round(r,3), "p": round(p,4)})
    return pd.DataFrame(out)

朴素基线对比(关键!)

def baseline_comparison(df):
    """
    对比两种预测:
    A. 用上赛季常规赛胜率预测本赛季
    B. 用季前热身赛胜率预测本赛季
    """
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_absolute_error, r2_score
    X_pre = df[["preseason_win_rate"]]
    X_last = df[["last_season_win_rate"]]
    y = df["regular_win_rate"]
    for name, X in [("季前热身赛", X_pre), ("上赛季战绩", X_last)]:
        model = LinearRegression().fit(X, y)
        pred = model.predict(X)
        print(f"{name}: R²={r2_score(y, pred):.3f}, MAE={mean_absolute_error(y, pred):.3f}")

可视化

def plot_scatter(df):
    fig, axes = plt.subplots(1, 2, figsize=(12, 5))
    for ax, (x, y, title) in zip(axes, [
        ("preseason_win_rate", "regular_win_rate", "热身赛 vs 常规赛胜率"),
        ("last_season_win_rate", "regular_win_rate", "上赛季 vs 本赛季胜率"),
    ]):
        ax.scatter(df[x], df[y], alpha=0.5)
        z = np.polyfit(df[x], df[y], 1)
        ax.plot(df[x], np.poly1d(z)(df[x]), "r--")
        ax.set_title(title)
    plt.tight_layout()
    plt.show()

典型实证结论(基于公开研究的量级)

以下为多个体育数据分析研究中反复出现的量级参考,具体数值视联赛而异。

指标 典型相关系数 r R²(解释力)
热身赛胜率 → 常规赛胜率 15 ~ 0.35 2% ~ 12%
上赛季胜率 → 本赛季胜率 55 ~ 0.75 30% ~ 55%
热身赛净胜分 → 常规赛净胜分 20 ~ 0.40 4% ~ 16%

关键发现:

  1. 热身赛的解释力通常只有上赛季战绩的 1/3 ~ 1/5,用它单独预测赛季成绩,R² 常在 10% 以下。
  2. 强队的热身赛更具参考性(因为轮换策略稳定、主力出场时间可控),弱队热身赛结果噪声极大。
  3. 热身赛"净胜分/进球差"比"胜负"更有信息量,因为胜负受单场随机性影响大。
  4. 样本量是硬伤:一支球队季前通常只打 3–8 场,统计功效极低。

为什么参考价值有限(机制解释)

# 用模拟说明:热身赛结果 ≈ 真实实力 + 大噪声
np.random.seed(42)
n_teams, n_games = 30, 4
true_strength = np.random.normal(0.5, 0.15, n_teams)  # 真实实力
preseason = np.array([
    np.mean(true_strength[i] + np.random.normal(0, 0.25, n_games))  # 噪声大
    for i in range(n_teams)
])
regular = true_strength + np.random.normal(0, 0.08, n_teams)      # 噪声小
print("热身赛 vs 真实实力 r =", round(stats.pearsonr(preseason, true_strength)[0], 3))
print("常规赛 vs 真实实力 r =", round(stats.pearsonr(regular, true_strength)[0], 3))

输出量级通常是:热身赛 r≈0.5–0.6,常规赛 r≈0.85+。热身赛本身噪声(轮换、试验阵型、避免伤病)稀释了信号。


参考价值"多大"?

定量结论:

  • 单独用热身赛预测赛季 → 参考价值低(R² < 15%),不宜作为主要依据。
  • 作为辅助信号(结合上赛季战绩、转会、伤病)→ 有一定增量价值,尤其看:
    • 净胜分/进球差而非胜负
    • 主力出场时间占比高的场次
    • 强队的表现稳定性
  • 不建议用于投注或强预测,除非配合赔率/阵容数据做多因子模型。

Python 落地建议:

  1. 永远做基线对比(vs 上赛季战绩),否则高估热身赛价值。
  2. 用分层分析避免辛普森悖论(强队/弱队混在一起会掩盖差异)。
  3. 用净胜分代替胜负,用Spearman 抗异常值。
  4. 样本小 → 报告置信区间而非点估计。
# 报告置信区间
def corr_ci(x, y, n_boot=2000):
    rs = [stats.pearsonr(*resample(x, y))[0] for _ in range(n_boot)]
    return np.percentile(rs, [2.5, 97.5])

一句话总结:季前热身赛是"弱信号",方向对但噪声大,价值在于辅助校准而非独立预测。

上一篇这个python案例是否统计了XG期望进球值?

下一篇当前分类已是最新一篇

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝