python案例如何评估夏窗引援的性价比?

wen python案例 2

本文目录导读:

python案例如何评估夏窗引援的性价比?

  1. 第一步:数据准备与清洗
  2. 第二步:构建核心性价比指标
  3. 第三步:可视化分析(识别“溢价”与“超值”)
  4. 第四步:进阶机器学习——聚类分析找“评级”
  5. 第五步:加入市场参照(回归残差法)
  6. 总结:如何用这套系统做决策?

评估夏窗引援性价比是一个非常经典的足球数据分析问题,由于俱乐部财务数据(转会费、工资)和球员表现数据(进球、助攻、出场)往往量纲不同,且高度线性相关,直接用“进球数/转会费”这种简单除法会失真。

我为你设计了一个基于Python的多维度性价比评估框架,从数据清洗核心指标计算可视化聚类分析分步实现。

第一步:数据准备与清洗

你需要一个包含球员表现和转会信息的数据集,这里模拟一份典型数据(你也可以从 fbrefTransfermarkt 爬取实际数据)。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
# 模拟数据:列包括球员、位置、转会费(万欧)、周薪(万欧)、出场次数、进球、助攻、预期进球(xG)、关键传球
data = {
    '球员': ['A', 'B', 'C', 'D', 'E'],
    '位置': ['前锋', '中场', '后卫', '前锋', '中场'],
    '转会费': [8000, 4000, 5000, 6000, 1500],  # 单位:万欧元
    '周薪': [30, 20, 15, 25, 10],               # 单位:万欧元
    '出场': [30, 35, 28, 32, 38],
    '进球': [18, 8, 2, 15, 3],
    '助攻': [5, 12, 3, 6, 10],
    'xG': [17.5, 7.0, 1.5, 14.2, 2.8],         # 预期进球
    '关键传球': [25, 60, 20, 40, 55]
}
df = pd.DataFrame(data)
# 数据清洗:处理缺失值和异常值(这里简单填充)
df.fillna(0, inplace=True)
# 计算单位成本:每万欧转会费带来的数据
# 注意:工资是长期成本,转会费是摊销成本,这里进行年化处理(假设合同5年)
df['年化转会成本'] = df['转会费'] / 5
df['年均总成本'] = df['年化转会成本'] + (df['周薪'] * 52)  # 年薪
print(df)

第二步:构建核心性价比指标

单纯看进球不行,要考虑单位成本产出效率

# 1. 基础性价比指标(每百万欧成本产出)
df['每成本进球'] = df['进球'] / df['年均总成本']
df['每成本助攻'] = df['助攻'] / df['年均总成本']
# 2. 效率指标(每90分钟产出) - 假设每场踢90分钟
df['每90分钟进球'] = df['进球'] / df['出场']
df['每90分钟助攻'] = df['助攻'] / df['出场']
df['每90分钟xG'] = df['xG'] / df['出场']
# 3. 综合性价比评分(加权)
# 前锋更看重进球,中场看重组织和助攻,这里简单做加权总分
df['综合表现分'] = (df['进球']*1.5 + df['助攻']*1.0 + df['xG']*0.8 + df['关键传球']*0.2)
df['性价比指数'] = df['综合表现分'] / np.log1p(df['年均总成本'])  # 对数处理大金额差异
print(df[['球员','转会费','进球','性价比指数']].sort_values('性价比指数', ascending=False))

第三步:可视化分析(识别“溢价”与“超值”)

用散点图横轴是成本,纵轴是表现,一眼看出谁在性价比最优区间。

plt.figure(figsize=(12, 8))
sns.scatterplot(data=df, x='年均总成本', y='综合表现分', hue='位置', s=150)
# 绘制平均线辅助判断
plt.axhline(df['综合表现分'].mean(), color='red', linestyle='--', label='平均表现')
plt.axvline(df['年均总成本'].mean(), color='blue', linestyle='--', label='平均成本')
# 标注球员名
for i in range(len(df)):
    plt.text(df['年均总成本'][i]+50, df['综合表现分'][i]+1, df['球员'][i], fontsize=12)
plt.xlabel('年均总成本(万欧)')
plt.ylabel('综合表现分')'2024夏窗引援性价比分布图')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# 结论标注:
# 左上角(高表现、低成本)= 超值引援
# 右下角(低表现、高成本)= 水货/溢价引援

第四步:进阶机器学习——聚类分析找“评级”

用K-Means对球员进行分档,自动打出“黑店”、“高性价比”、“中规中矩”、“亏本交易”标签。

# 选择用于聚类的特征(标准化)
features = df[['年均总成本', '进球', '助攻', '出场']]
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
# 聚类(假设分为3-4类)
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
df['性价比等级'] = kmeans.fit_predict(features_scaled)
# 根据聚类中心点重新映射标签(这里人为定义)
# 观察中心点后,手动定义标签顺序
# 假设按中心点表现/成本排序
mapping = {0: '中规中矩', 1: '超值引援', 2: '亏本交易', 3: '核心高薪'}
df['性价比等级'] = df['性价比等级'].map(mapping)
print(df[['球员', '性价比等级', '年均总成本', '综合表现分']])

第五步:加入市场参照(回归残差法)

这是最专业的做法:用回归模型预测球员市场价值,与真实转会费对比,残差为负 = 买贵了,残差为正 = 买值了。

from sklearn.linear_model import LinearRegression
# 假设我们要预测转会费,用年龄、进球、助攻等做特征
# 这里为了简便,仅用核心表现指标预测
X = df[['进球', '助攻', '出场', 'xG']]  # 特征
y = df['转会费']  # 预测目标
model = LinearRegression()
model.fit(X, y)
df['预测转会费'] = model.predict(X)
# 残差 = 真实 - 预测,残差为负(真实<预测)说明买便宜了
df['性价比残差'] = df['转会费'] - df['预测转会费']
print(df.sort_values('性价比残差'))
# 残差为负且绝对值大的 = 性价比最高(转会费被低估/表现超预期)

如何用这套系统做决策?

  1. 看入坑比:按“性价比指数”排序,选最高的前30%作为目标球员。
  2. 看象限:在散点图中,分布在左上角(低成本高产出)的球员坚决买入。
  3. 看标签等级:聚类标签为“超值引援”的球员优先谈判,“亏本交易”的直接放弃。
  4. 看回归残差:若“预测转会费”远高于“实际转会费”,说明球员目前是被低估的状态。

如果你有真实数据(比如从 Transfermarkt 爬虫获取的表格),把 df 替换成你的数据表即可直接运行,是否需要我针对某个具体位置(如前锋/中场)细化指标权重?

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