SHAP解釋框架下的足球運動員價值驅動因素識別——基于H2O集成學習模型?
歡迎關注 「阿水實證通」,前沿方法時刻看!🌟🌟🌟
文章目錄
- SHAP解釋框架下的足球運動員價值驅動因素識別——基于H2O集成學習模型?
- 聚焦:決策樹的足球運動員集合?
- 數據探索熱身??
- 準備H2O開始分析 👍
- 機器學習實戰
- 利用變量重要性和SHAP解讀洞見
- 終場哨聲
- 對咱們實證分析有什么幫助?
- 一、數據預處理:適配經濟變量特性與多源整合邏輯
- 二、集成模型與因果推斷的協同建模策略
- 三、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) currentProgress (%): 0 100
現在我們已經建立了H2O環境,開始為機器學習準備數據。我們使用_h2oframe toenum
將字符串變量轉換為分類(枚舉)類型。為了驗證這種編碼是否正確,我們運行_h2oframe describe
:
. _h2oframe toenum position nationality league_rank, replace. _h2oframe describeRows: 1108Cols: 21Column Type Missing Zeros +Inf -Inf Cardinalityname 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_playedaverage_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 100Random forest regression using H2OResponse: ln_average_market_value
Frame: Number of observations:Training: train Training = 877Cross-validation = 877
Cross-validation: Random Number of folds = 3Model parametersNumber of trees = 50actual = 50
Tree depth: Pred. sampling value = -1Input max = 20 Sampling rate = .632min = 17 No. of bins cat. = 1,024avg = 18.9 No. of bins root = 1,024max = 20 No. of bins cont. = 20
Min. obs. leaf split = 1 Min. split thresh. = .00001Metric summaryCross-Metric Training validationDeviance .6068654 .6541131MSE .6068654 .6541131RMSE .7790156 .8087726RMSLE .0480274 .0497248MAE .6133148 .6394611R-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 100Random forest regression using H2OResponse: ln_average_market_value
Frame: Number of observations:Training: train Training = 877Cross-validation = 877
Cross-validation: Random Number of folds = 3Tuning information for hyperparametersMethod: Cartesian
Metric: DevianceGrid valuesHyperparameters Minimum Maximum SelectedNumber of trees 20 80 70Model parametersNumber of trees = 70actual = 70
Tree depth: Pred. sampling value = -1Input max = 20 Sampling rate = .632min = 17 No. of bins cat. = 1,024avg = 18.9 No. of bins root = 1,024max = 20 No. of bins cont. = 20
Min. obs. leaf split = 1 Min. split thresh. = .00001Metric summaryCross-Metric Training validationDeviance .587266 .6434246MSE .587266 .6434246RMSE .7663328 .8021375RMSLE .0472597 .0493562MAE .6040548 .6320858R-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 100Gradient boosting regression using H2OResponse: ln_average_market_value
Loss: Gaussian
Frame: Number of observations:Training: train Training = 877Cross-validation = 877
Cross-validation: Random Number of folds = 3Tuning information for hyperparametersMethod: Cartesian
Metric: DevianceGrid valuesHyperparameters Minimum Maximum SelectedNumber of trees 20 80 80Model parametersNumber of trees = 80 Learning rate = .1actual = 80 Learning rate decay = 1
Tree depth: Pred. sampling rate = 1Input max = 5 Sampling rate = 1min = 5 No. of bins cat. = 1,024avg = 5.0 No. of bins root = 1,024max = 5 No. of bins cont. = 20
Min. obs. leaf split = 10 Min. split thresh. = .00001Metric summaryCross-Metric Training validationDeviance .1025126 .6337925MSE .1025126 .6337925RMSE .3201759 .7961109RMSLE .0198991 .0492887MAE .23022 .6083482R-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 gbmPerformance metrics for model comparison using H2O
Testing frame: testrf gbmTestingNo. of observations 231 231Deviance .5692276 .5008833MSE .5692276 .5008833RMSE .7544718 .7077311RMSLE .0458549 .0430169MAE .6169705 .567296R-squared .6051586 .6525652
GBM在測試集中具有最低的MSE,證明了其優越的預測性能。如果我們有興趣在測試數據中進行預測,可以在恢復我們選擇的模型后使用h2omlpredict:
. h2omlest restore gbm
(results gbm are active now). h2omlpredict gbm_pred_valueProgress (%): 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)、R2等指標作為模型篩選基準。
- 因果機制的雙重驗證:機器學習模型的預測相關性需與傳統計量方法結合:先用集成模型篩選關鍵變量(如文章中團隊勝率、年齡等),再通過工具變量法(IV)、雙重差分法(DID)等驗證因果關系(如解決“球隊勝率與球員能力”的內生性問題),避免將統計關聯誤判為因果效應。
三、SHAP解釋框架與經濟理論的雙向映射
- 變量重要性的經濟機理解構:基于H2O輸出的特征重要性排序(如球隊勝率>年齡>國籍),結合經濟學理論解讀驅動因素:例如“團隊績效對球員估值的溢出效應”可關聯產業組織中的“品牌外部性”理論,“年齡的倒U型影響”對應勞動經濟學的“經驗溢價衰減”規律。
- 個體與總體層面的邊際效應分析:通過SHAP值實現雙維度解釋:
- 個體層面:如文章中姆巴佩的SHAP貢獻圖,可用于分析特定經濟主體(如龍頭企業、高收入群體)的特征影響路徑(如勝率+1.3、進球效率+0.47的價值貢獻);
- 總體層面:借助蜂群圖分析變量邊際效應異質性(如年齡對價值的非線性影響),對應計量經濟學中的“異質性處理效應”分析,為政策模擬(如最低工資調整對不同年齡段就業的影響)提供微觀基礎。
核心價值:從“預測”到“解釋”的經濟學研究閉環
上述框架通過集成學習提升復雜經濟關系的捕捉能力,以SHAP解釋連接數據模式與理論機制,最終實現“數據驅動建模—因果機制驗證—經濟理論創新”的研究閉環,尤其適用于勞動經濟學(工資決定)、行為經濟學(決策偏差)、金融經濟學(資產定價)等領域的高維非線性問題。