python案例认为这次远射能打破僵局吗?

wen python案例 5

本文目录导读:

python案例认为这次远射能打破僵局吗?

  1. 问题拆解
  2. 数据准备
  3. Python 分析代码
  4. 典型输出解读

在足球数据分析中,“远射能否打破僵局”是一个经典的概率问题,而不是一个确定性的判断,Python 可以帮助我们基于历史数据来量化这个概率,但不能“认为”或“预测”某一次具体远射一定会进球。

下面是一个完整的 Python 案例框架,用来分析“这次远射打破僵局的可能性”。

问题拆解

“远射打破僵局”可以拆成几个可量化的子问题:

  1. 远射本身的进球概率是多少?
  2. 僵局(比分平局) 情况下,远射概率是否变化?
  3. 这次远射的质量(距离、角度、防守压力、门将位置)如何?
  4. 综合以上,给出一个概率值,而不是“能/不能”。

数据准备

假设我们有历史射门数据 shots.csv,字段如下:

字段 含义
distance 射门距离(米)
angle 射门角度(度)
is_goal 是否进球(1/0)
is_draw 射门时是否平局
pressure 防守压力(0-1)
keeper_dist 门将离球门距离

Python 分析代码

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
# 1. 读取数据
df = pd.read_csv("shots.csv")
# 2. 只看远射(比如距离 > 25 米)
long_shots = df[df["distance"] > 25].copy()
# 3. 特征工程
long_shots["log_dist"] = np.log(long_shots["distance"])
long_shots["angle_rad"] = np.radians(long_shots["angle"])
long_shots["is_draw"] = long_shots["is_draw"].astype(int)
features = ["log_dist", "angle_rad", "is_draw", "pressure", "keeper_dist"]
X = long_shots[features]
y = long_shots["is_goal"]
# 4. 训练逻辑回归模型
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
# 5. 模型评估
probs = model.predict_proba(X_test)[:, 1]
print("AUC:", roc_auc_score(y_test, probs))
# 6. 预测“这一次远射”
this_shot = pd.DataFrame([{
    "log_dist": np.log(28),      # 距离 28 米
    "angle_rad": np.radians(12), # 角度 12 度
    "is_draw": 1,                # 当前是僵局
    "pressure": 0.6,             # 防守压力中等偏高
    "keeper_dist": 1.5           # 门将离门 1.5 米
}])
p = model.predict_proba(this_shot)[0, 1]
print(f"这次远射打破僵局的概率约为:{p:.2%}")
# 7. 对比:非僵局情况下的同一脚远射
this_shot_not_draw = this_shot.copy()
this_shot_not_draw["is_draw"] = 0
p2 = model.predict_proba(this_shot_not_draw)[0, 1]
print(f"若比分不是平局,概率约为:{p2:.2%}")

典型输出解读

假设输出为:

AUC: 0.78
这次远射打破僵局的概率约为:6.4%
若比分不是平局,概率约为:5.1%

这说明:

  • 这脚远射大概率不会进球(约 93.6% 不进)。
  • 但在僵局下,远射进球概率略高于非僵局(6.4% vs 5.1%),可能是因为僵局时防守更谨慎、门将注意力分散,或进攻方更愿意冒险远射。
  • “打破僵局”是一个低概率事件,不能因为一次远射就认为“能打破”。

Python 不能“认为”这次远射一定能打破僵局,只能给出一个概率估计。

  • 如果模型输出 6%,那意味着:类似情况下,100 次只有约 6 次进球。
  • 如果输出 30%+,那才可以说“这次远射有较大可能打破僵局”。
  • 真正要判断“能不能”,还需要结合球员个人能力、门将状态、比赛时间、天气、战术等模型外信息。

如果你有具体的数据集或某场比赛的射门参数,我可以帮你跑一个更精确的版本。

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