
SHAP解释框架下的足球运动员价值驱动因素识别------基于H2O集成学习模型⚽
欢迎关注 「阿水实证通」,前沿方法时刻看!🌟🌟🌟
文章目录
- SHAP解释框架下的足球运动员价值驱动因素识别------基于H2O集成学习模型⚽
-
- 聚焦:决策树的足球运动员集合⚽
-
- 数据探索热身♾️
- [准备H2O开始分析 👍](#准备H2O开始分析 👍)
- 机器学习实战
- 利用变量重要性和SHAP解读洞见
- 终场哨声
- 对咱们实证分析有什么帮助?
聚焦:决策树的足球运动员集合⚽
你是否拥有一个大型数据集?数据中是否存在复杂的、可能是非线性的关系?你是否不确定哪些预测变量最为重要?如果对上述任何一个问题的回答是"是",那么机器学习可能是处理你的数据的合适选择。
幸运的是,你不必成为程序员也能有效使用这些方法。借助H2O的支持,现在你可以在Stata中使用新的h2oml命令套件进行机器学习。流线型的H2O集成和图形界面使执行用于回归、二元分类和多分类的梯度提升机(GBM)和随机森林(RF)变得轻松。
在这篇聚焦文章中,我们通过分析场上表现指标如何预测足球运动员的平均市场价值------这是球员转会、合同谈判和足球行业整体估值的关键因素------来展示基本的H2O工作流程。我们将训练两个模型进行预测比较,并使用选定的模型解释预测变量的影响。
数据探索热身♾️
我们的分析始于一个从两个不同来源(GitHub)和Kaggle)合并的数据集(https://www.stata.com/stata-news/news40-3/ensemble-decision-trees/fifa.dta
),其中包含2023年以来1000多名不同球员的观测数据。你可以使用以下命令获取这些数据:
. use https://www.stata.com/users/lil/fifa, clear
我们生成箱线图,按位置可视化以百万欧元为单位的市场价值分布:
. graph hbox mil_average_market_value, over(position) title("Market value distribution by position")
ytitle("Market value (in millions)")

想知道最右边那个点是谁吗?那是法国前锋基利安·姆巴佩。在本文结尾,我们将探究他为何价值如此之高。
由于存在异常值和右偏分布,我们选择应用对数变换来稳定方差,这可能有助于我们的模型在后续更准确地泛化:
. generate ln_average_market_value = log(average_market_value)
准备H2O开始分析 👍
让我们演示如何从Stata开始使用H2O。首先,h2o init 启动一个新的H2O集群,在Stata和H2O之间建立连接。接下来,我们将当前的Stata数据集传输到一个名为fifa的H2O框架中,并使其成为后续操作的当前活动框架:
. h2o init
(output omitted)
. _h2oframe put, into(fifa) current
Progress (%): 0 100
现在我们已经建立了H2O环境,开始为机器学习准备数据。我们使用_h2oframe toenum
将字符串变量转换为分类(枚举)类型。为了验证这种编码是否正确,我们运行_h2oframe describe
:
. _h2oframe toenum position nationality league_rank, replace
. _h2oframe describe
Rows: 1108
Cols: 21
Column Type Missing Zeros +Inf -Inf Cardinality
name string 0 0 0 0
position enum 0 269 0 0 4
age int 0 0 0 0
height int 0 0 0 0
league_rank enum 0 281 0 0 5
average_marke~e real 0 0 0 0
highest_marke~e int 0 0 0 0
total_played_~s int 0 0 0 0
average_minut~d real 0 0 0 0
average_assis~e real 0 419 0 0 0
total_assists int 0 419 0 0 0
assist_per_mi~e real 0 419 0 0 0
average_goals~e real 0 414 0 0 0
total_goals int 0 414 0 0 0
goals_per_min~e real 0 414 0 0 0
total_yellow_~s int 0 163 0 0 0
team_win_ratio real 0 1 0 0 0
data_year int 0 0 0 0
nationality enum 0 6 0 0 73
mil_average_m~e real 0 0 0 0
ln_average_ma~e real 0 0 0 0
最后一步是使用_h2oframe split
将数据分为训练集和测试集。我们使用标准的训练-测试拆分,分配80%的数据用于训练,保留剩余20%用于测试,并设置随机种子以确保可重复性:
. _h2oframe split fifa, into(train test) split (0.8, 0.2) rseed(19)
机器学习实战
我们准备开始训练!首先,我们切换框架,使训练数据集成为工作框架:
. _h2oframe change train
我们定义全局宏predictors来存储模型将使用的变量,这些变量包括球员人口统计信息、联赛信息、表现指标以及其他行为和球队成功指标:
. global predictors position age height nationality league_rank average_minutes_played
average_goals_per_game average_assists_per_game total_yellow_cards team_win_ratio
我们首先实现随机森林回归,使用cv()
选项应用三折交叉验证,并使用h2orseed()
选项确保可重复性:
. h2oml rfregress ln_average_market_value $predictors, cv(3) h2orseed(19)
Progress (%): 0 28.9 100
Random forest regression using H2O
Response: ln_average_market_value
Frame: Number of observations:
Training: train Training = 877
Cross-validation = 877
Cross-validation: Random Number of folds = 3
Model parameters
Number of trees = 50
actual = 50
Tree depth: Pred. sampling value = -1
Input max = 20 Sampling rate = .632
min = 17 No. of bins cat. = 1,024
avg = 18.9 No. of bins root = 1,024
max = 20 No. of bins cont. = 20
Min. obs. leaf split = 1 Min. split thresh. = .00001
Metric summary
Cross-
Metric Training validation
Deviance .6068654 .6541131
MSE .6068654 .6541131
RMSE .7790156 .8087726
RMSLE .0480274 .0497248
MAE .6133148 .6394611
R-squared .6423362 .6144901
在这个例子中,我们主要关注均方误差(MSE)作为整体拟合优度的关键指标。使用这个模型,我们通过交叉验证得到的MSE为0.65,作为基准性能水平。让我们看看是否可以通过调优降低这个值。
调优是通过调整超参数来调整模型的过程。为了演示,我们将仅通过比较20到80棵树的模型来调整树的数量。有关RF的可调整选项的完整列表,请参阅 h2oml rf(https://www.stata.com/manuals/h2omlh2omlrf.pdf)
。
. h2oml rfregress ln_average_market_value $predictors, cv(3) h2orseed(19)
ntrees(20(10)80)
Progress (%): 0 100
Random forest regression using H2O
Response: ln_average_market_value
Frame: Number of observations:
Training: train Training = 877
Cross-validation = 877
Cross-validation: Random Number of folds = 3
Tuning information for hyperparameters
Method: Cartesian
Metric: Deviance
Grid values
Hyperparameters Minimum Maximum Selected
Number of trees 20 80 70
Model parameters
Number of trees = 70
actual = 70
Tree depth: Pred. sampling value = -1
Input max = 20 Sampling rate = .632
min = 17 No. of bins cat. = 1,024
avg = 18.9 No. of bins root = 1,024
max = 20 No. of bins cont. = 20
Min. obs. leaf split = 1 Min. split thresh. = .00001
Metric summary
Cross-
Metric Training validation
Deviance .587266 .6434246
MSE .587266 .6434246
RMSE .7663328 .8021375
RMSLE .0472597 .0493562
MAE .6040548 .6320858
R-squared .6538873 .6207895
我们将MSE适度降低到0.64。在实践中,我们会继续调优以找到交叉验证MSE最低的模型。让我们继续存储这个模型:
. h2omlest store rf
接下来,我们使用相同的三折交叉验证、随机数种子和树网格训练梯度提升回归,并存储此模型。
. h2oml gbregress ln_average_market_value $predictors, cv(3) h2orseed(19)
ntrees(20(10)80)
Progress (%): 0 100
Gradient boosting regression using H2O
Response: ln_average_market_value
Loss: Gaussian
Frame: Number of observations:
Training: train Training = 877
Cross-validation = 877
Cross-validation: Random Number of folds = 3
Tuning information for hyperparameters
Method: Cartesian
Metric: Deviance
Grid values
Hyperparameters Minimum Maximum Selected
Number of trees 20 80 80
Model parameters
Number of trees = 80 Learning rate = .1
actual = 80 Learning rate decay = 1
Tree depth: Pred. sampling rate = 1
Input max = 5 Sampling rate = 1
min = 5 No. of bins cat. = 1,024
avg = 5.0 No. of bins root = 1,024
max = 5 No. of bins cont. = 20
Min. obs. leaf split = 10 Min. split thresh. = .00001
Metric summary
Cross-
Metric Training validation
Deviance .1025126 .6337925
MSE .1025126 .6337925
RMSE .3201759 .7961109
RMSLE .0198991 .0492887
MAE .23022 .6083482
R-squared .9395829 .6264663
. h2omlest store gbm
为了帮助我们选择模型,我们使用h2oml 事后估计命令在测试样本上评估其预测性能。首先,我们使用h2omlest restore 恢复每个模型。然后,我们使用h2omlpostestframe test 激活测试数据集进行评估。准备好两个模型后,我们运行h2omlgof来比较它们在测试数据上的性能指标:
. h2omlest restore rf
(results rf are active now)
. h2omlpostestframe test
(testing frame test is now active for h2oml postestimation)
. h2omlest restore gbm
(results gbm are active now)
. h2omlpostestframe test
(testing frame test is now active for h2oml postestimation)
. h2omlgof rf gbm
Performance metrics for model comparison using H2O
Testing frame: test
rf gbm
Testing
No. of observations 231 231
Deviance .5692276 .5008833
MSE .5692276 .5008833
RMSE .7544718 .7077311
RMSLE .0458549 .0430169
MAE .6169705 .567296
R-squared .6051586 .6525652
GBM在测试集中具有最低的MSE,证明了其优越的预测性能。如果我们有兴趣在测试数据中进行预测,可以在恢复我们选择的模型后使用h2omlpredict:
. h2omlest restore gbm
(results gbm are active now)
. h2omlpredict gbm_pred_value
Progress (%): 0 100
利用变量重要性和SHAP解读洞见
现在我们已经选择了性能最佳的模型,我们通过使用h2omlgraph varimp绘制变量重要性图来检查其预测变量的影响。在基于树的模型中,变量重要性通过每个预测变量的分裂导致的MSE总减少量来衡量:
. h2omlgraph varimp

变量重要性图确定市场价值的前三个预测变量为team_win_ratio 、age 和nationality 。相比之下,球员position 和height等变量的重要性较小。
为了进一步解释,我们现在转向SHAP(夏普利加性解释)值,以了解每个预测变量如何对每个球员的预测市场价值做出贡献。让我们使用h2omlgraph shapvalues查看我们最有价值的球员基利安·姆巴佩的SHAP贡献。他的预测平均市场价值(对数变换后)为18.65,比训练数据集的平均预测值15.59高出3.06个单位。我们使用SHAP值来解释这一差异:
. h2omlgraph shapvalues, obs(590) title("SHAP values for Kylian Mbappé") frame(fifa)

团队胜率(1.3)、平均每场进球数(0.47)和平均出场时间(0.42)共同贡献了从基线到姆巴佩预测市场价值增长的三分之二以上,表明它们是其高估值的关键驱动因素。
最后,为了在样本层面获得洞见,我们可以使用h2omlgraph shapsummary命令生成SHAP汇总图,也称为蜂群图:
. h2omlgraph shapsummary, frame(fifa)
Progress (%): 0 100

在这个图中,每个观测值对应每个预测变量有一个点,其水平位置表示该观测值的预测变量的SHAP值。预测变量的高观测值用红色表示,低观测值用蓝色表示。预测变量在y轴上按其整体SHAP重要性排序。
团队胜率是最强的预测变量,较高的胜率始终提升球员的市场价值。年龄呈现相反的模式------年轻增加价值,而年长降低价值,反映了对年轻球员的溢价。
虽然每个球员的个体预测变量贡献不同,但SHAP汇总结果与变量重要性排名大致一致,表明球队成功、年龄和表现指标是球员估值的最有影响力的驱动因素。
终场哨声
通过H2O,Stata的机器学习工具通过对变量重要性的详细评估,既提供了高预测准确性,又提供了有价值的可解释性。
对咱们实证分析有什么帮助?
上文所提到的H2O集成学习与SHAP解释框架的应用,对于实证分析领域,有何指导意义呢?
一、数据预处理:适配经济变量特性与多源整合逻辑
- 分布转换与异常值控制:针对经济学中常见的右偏变量(如收入、资产价格),采用对数变换等方法稳定方差(如文章对球员市场价值的处理),并通过箱线图等可视化工具识别极端值(如球星高估值样本),避免模型被异常点主导。
- 多源数据的结构化整合:经济学研究常涉及宏观-微观跨层数据(如行业指标与企业财务数据),需参照文章合并GitHub与Kaggle数据的思路,重点校验时间频率一致性(如季度数据与年度数据对齐)、量纲统一性(如货币单位标准化),并利用H2O等工具的自动缺失值算法(如均值插补、树模型预测填充)提升数据完整性。
二、集成模型与因果推断的协同建模策略
- 非线性关系捕捉与模型优化:突破线性回归假设,采用梯度提升机(GBM)、随机森林(RF)等集成模型捕捉经济变量的高阶交互效应(如人力资本理论中"年龄-经验-工资"的非线性关系),通过交叉验证(如3折CV)与超参数网格搜索(如树深度、学习率调优)优化预测精度,以均方误差(MSE)、R²等指标作为模型筛选基准。
- 因果机制的双重验证:机器学习模型的预测相关性需与传统计量方法结合:先用集成模型筛选关键变量(如文章中团队胜率、年龄等),再通过工具变量法(IV)、双重差分法(DID)等验证因果关系(如解决"球队胜率与球员能力"的内生性问题),避免将统计关联误判为因果效应。
三、SHAP解释框架与经济理论的双向映射
- 变量重要性的经济机理解构:基于H2O输出的特征重要性排序(如球队胜率>年龄>国籍),结合经济学理论解读驱动因素:例如"团队绩效对球员估值的溢出效应"可关联产业组织中的"品牌外部性"理论,"年龄的倒U型影响"对应劳动经济学的"经验溢价衰减"规律。
- 个体与总体层面的边际效应分析 :通过SHAP值实现双维度解释:
- 个体层面:如文章中姆巴佩的SHAP贡献图,可用于分析特定经济主体(如龙头企业、高收入群体)的特征影响路径(如胜率+1.3、进球效率+0.47的价值贡献);
- 总体层面:借助蜂群图分析变量边际效应异质性(如年龄对价值的非线性影响),对应计量经济学中的"异质性处理效应"分析,为政策模拟(如最低工资调整对不同年龄段就业的影响)提供微观基础。
核心价值:从"预测"到"解释"的经济学研究闭环
上述框架通过集成学习提升复杂经济关系的捕捉能力,以SHAP解释连接数据模式与理论机制,最终实现"数据驱动建模---因果机制验证---经济理论创新"的研究闭环,尤其适用于劳动经济学(工资决定)、行为经济学(决策偏差)、金融经济学(资产定价)等领域的高维非线性问题。
