本文目录导读:

评估夏窗引援性价比是一个非常经典的足球数据分析问题,由于俱乐部财务数据(转会费、工资)和球员表现数据(进球、助攻、出场)往往量纲不同,且高度线性相关,直接用“进球数/转会费”这种简单除法会失真。
我为你设计了一个基于Python的多维度性价比评估框架,从数据清洗、核心指标计算、可视化到聚类分析分步实现。
第一步:数据准备与清洗
你需要一个包含球员表现和转会信息的数据集,这里模拟一份典型数据(你也可以从 fbref、Transfermarkt 爬取实际数据)。
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('性价比残差'))
# 残差为负且绝对值大的 = 性价比最高(转会费被低估/表现超预期)
如何用这套系统做决策?
- 看入坑比:按“性价比指数”排序,选最高的前30%作为目标球员。
- 看象限:在散点图中,分布在左上角(低成本高产出)的球员坚决买入。
- 看标签等级:聚类标签为“超值引援”的球员优先谈判,“亏本交易”的直接放弃。
- 看回归残差:若“预测转会费”远高于“实际转会费”,说明球员目前是被低估的状态。
如果你有真实数据(比如从 Transfermarkt 爬虫获取的表格),把 df 替换成你的数据表即可直接运行,是否需要我针对某个具体位置(如前锋/中场)细化指标权重?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播