Stata如何做機器學習?——SHAP解釋框架下的足球運動員價值驅動因素識別:基于H2O集成學習模型

在這里插入圖片描述

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_ratioagenationality。相比之下,球員positionheight等變量的重要性較小。

為了進一步解釋,我們現在轉向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解釋框架的應用,對于實證分析領域,有何指導意義呢?

一、數據預處理:適配經濟變量特性與多源整合邏輯

  1. 分布轉換與異常值控制:針對經濟學中常見的右偏變量(如收入、資產價格),采用對數變換等方法穩定方差(如文章對球員市場價值的處理),并通過箱線圖等可視化工具識別極端值(如球星高估值樣本),避免模型被異常點主導。
  2. 多源數據的結構化整合:經濟學研究常涉及宏觀-微觀跨層數據(如行業指標與企業財務數據),需參照文章合并GitHub與Kaggle數據的思路,重點校驗時間頻率一致性(如季度數據與年度數據對齊)、量綱統一性(如貨幣單位標準化),并利用H2O等工具的自動缺失值算法(如均值插補、樹模型預測填充)提升數據完整性。

二、集成模型與因果推斷的協同建模策略

  1. 非線性關系捕捉與模型優化:突破線性回歸假設,采用梯度提升機(GBM)、隨機森林(RF)等集成模型捕捉經濟變量的高階交互效應(如人力資本理論中“年齡-經驗-工資”的非線性關系),通過交叉驗證(如3折CV)與超參數網格搜索(如樹深度、學習率調優)優化預測精度,以均方誤差(MSE)、R2等指標作為模型篩選基準。
  2. 因果機制的雙重驗證:機器學習模型的預測相關性需與傳統計量方法結合:先用集成模型篩選關鍵變量(如文章中團隊勝率、年齡等),再通過工具變量法(IV)、雙重差分法(DID)等驗證因果關系(如解決“球隊勝率與球員能力”的內生性問題),避免將統計關聯誤判為因果效應。

三、SHAP解釋框架與經濟理論的雙向映射

  1. 變量重要性的經濟機理解構:基于H2O輸出的特征重要性排序(如球隊勝率>年齡>國籍),結合經濟學理論解讀驅動因素:例如“團隊績效對球員估值的溢出效應”可關聯產業組織中的“品牌外部性”理論,“年齡的倒U型影響”對應勞動經濟學的“經驗溢價衰減”規律。
  2. 個體與總體層面的邊際效應分析:通過SHAP值實現雙維度解釋:
    • 個體層面:如文章中姆巴佩的SHAP貢獻圖,可用于分析特定經濟主體(如龍頭企業、高收入群體)的特征影響路徑(如勝率+1.3、進球效率+0.47的價值貢獻);
    • 總體層面:借助蜂群圖分析變量邊際效應異質性(如年齡對價值的非線性影響),對應計量經濟學中的“異質性處理效應”分析,為政策模擬(如最低工資調整對不同年齡段就業的影響)提供微觀基礎。

核心價值:從“預測”到“解釋”的經濟學研究閉環

上述框架通過集成學習提升復雜經濟關系的捕捉能力,以SHAP解釋連接數據模式與理論機制,最終實現“數據驅動建模—因果機制驗證—經濟理論創新”的研究閉環,尤其適用于勞動經濟學(工資決定)、行為經濟學(決策偏差)、金融經濟學(資產定價)等領域的高維非線性問題。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87787.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87787.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87787.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Android的益智游戲學習系統

博主介紹:java高級開發,從事互聯網行業多年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

Oracle11G Linux版本(linux_x86_64_oracle11.2.0.4)

Oracle11G Linux版本 linux_x86_64_oracle11.2.0.4 文件分割成 七個 壓縮包,必須集齊 七個 文件后才能一起解壓一起使用: p13390677_112040_Linux-x86-64_7of7.zip下載地址: https://download.csdn.net/download/weixin_43800734/20303421 p1…

C++20中的counting_semaphore的應用

一、std::counting_semaphore 在前面介紹過C20中的同步庫,其中就提到過std::counting_semaphore。但當時的重點是同步庫的整體介紹,本文則會對std::counting_semaphore這個信號量進行一個全面的分析和說明,并有針對性的給出具體的例程。 C20中…

mongo常用命令

1 連接mongo服務器 mongo ip:端口/庫名 -u 用戶名 -p 密碼 2 選擇數據庫 show dbs; 顯示數據庫列表 use 數據庫名稱; 3 集合操作 (1) 顯示集合列表 show tables; (2)刪除集合 db.集合名稱.drop(); (3&#x…

華為云 銀河麒麟 vscode遠程連接

解決方案 檢查 SSH 服務器配置: 在遠程主機上編輯 /etc/ssh/sshd_config 文件 關鍵配置說明: AllowTcpForwarding yes # 允許TCP端口轉發(必須開啟) AllowAgentForwarding yes # 允許SSH代理轉發(可選&#xf…

有限狀態機(Finite State Machine)

文章目錄有限狀態機(Finite State Machine)簡介狀態機的組成六要素(1) 狀態集合(2) 初態(3) 終態(4) 輸入符號集(5) 輸出符號集(6) 狀態轉移函數狀態機的工作四要素(1) 現態(2) 輸入(3) 輸出(4) 次態FPGA中的狀態機模型1. Moore型狀態機(1) Moore l型(2)…

前端框架中注釋占位與Fragment內容替換的實現與優化

在現代前端開發中,使用注釋占位符替換Fragment內容是一種常見的需求,尤其在處理動態內容、模板預加載和組件復用場景中。React和Vue作為當前最主流的前端框架,提供了不同的實現方式和優化策略,但核心目標都是減少不必要的DOM操作&…

uniapp中使用web-worker性能優化的分享

為什么要使用 web-workers原因很簡單,將復雜的計算邏輯和耗時邏輯放到線程中運行,避免ui阻塞,防止卡頓問題場景:本次運用于GPS 位置更新接入小程序注意事項:微信小程序中只允許存在一個 worker所以,需要再一…

5118 API智能處理采集數據教程

簡數采集器支持調用5118 API接口處理采集的數據標題和內容、關鍵詞、描述等,還可配合簡數采集的SEO功能優化文章數據,對提高收錄有積極的作用。 簡數采集器支持5118接口:5118智能核心詞提取API 和 5118智能摘要提取API 。 接入使用教程 1. …

【深度學習:進階篇】--4.2.詞嵌入和NLP

在RNN中詞使用one_hot表示的問題 假設有10000個詞 每個詞的向量長度都為10000,整體大小太大 沒能表示出詞與詞之間的關系 例如Apple與Orange會更近一些,Man與Woman會近一些,取任意兩個向量計算內積都為0 目錄 1.詞嵌入 1.1.特點 1.3.wor…

WebRTC 的 ICE candidate 協商

文章目錄 前言WebRTC 的 ICE candidate 協商1. 什么是 ICE candidate?2. ICE 協商的流程3.前端使用 ICE candidate 協商代碼示例1)收集 candidate 并發送2)WebSocket 接收 candidate 并添加 4. ICE candidate 的類型5. ICE 協商常見問題6. 關…

卡爾曼濾波介紹

卡爾曼濾波介紹📖 **卡爾曼濾波原理簡介**🔑 **核心思想**📦 **卡爾曼濾波的組成**🔍 **代碼分析(kalman_filter.py)**🏗? 1. 狀態空間定義🔄 2. 初始化模型矩陣🚀 3. 核…

遞歸與循環

文章目錄遞歸TestRecursiveListRemoveNodeTestRecursiveListRemoveNode2循環TestWhileLoopListRemoveNodeTestWhileLoopListRemoveNode2遞歸 關鍵理解這幾點: 1、求解基本問題 2、將原問題拆分為小問題,直至基本問題(難點) 3、借…

3D魔方游戲

# 3D魔方游戲 這是一個基于Three.js的3D魔方游戲,支持2到6階魔方的模擬操作。 ## 功能特點 - 支持2到6階魔方 - 真實的3D渲染效果 - 鼠標操作控制 - 隨機打亂功能 - 提示功能 - 重置功能 ### 安裝依賴 bash npm install ### 啟動游戲 bash npm start 然…

下載安裝 com0com

下載 在 sourceforge 網站下載安裝器:下載鏈接 安裝完成后可以在設備管理器中看到默認創建的一對虛擬串口 使用串口調試助手收發 使用串口調試助手分別打開。如下圖所示,在端口選擇的下拉列表中可以看到剛才在設備管理器中看到的 COM3 和 COM5 分…

C++ 應用軟件開發從入門到實戰詳解

目錄 1、引言 2、IDE 開發環境介紹 2.1、Visual Studio 2.2、Qt Creator 3、 C語言特性 3.1、熟悉泛型編程 3.2、了解C/C異常處理 3.3、熟練使用STL容器 3.4、熟悉C11新特性 4、Windows 平臺的編程技術與調試技能 4.1、需要掌握的若干編程技術和基礎知識 4.2、需…

Python爬蟲實戰:研究slug相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網技術的快速發展,網絡上的信息量呈爆炸式增長。如何從海量的非結構化數據中提取有價值的信息,成為當前數據科學領域的重要研究方向。網絡爬蟲作為一種自動化數據采集工具,可以高效地獲取網頁內容,為數據分析提供豐富的數據來源。 Sl…

人工智能-基礎篇-18-什么是RAG(檢索增強生成:知識庫+向量化技術+大語言模型LLM整合的技術框架)

RAG(Retrieval-Augmented Generation,檢索增強生成)是一種結合外部知識檢索與大語言模型(LLM)生成能力的技術框架,旨在提升生成式AI在問答、內容創作等任務中的準確性、實時性和領域適應性。 1、核心概念 …

CppCon 2018 學習:What do you mean “thread-safe“

什么是“線程安全”? “線程安全”指的是一個函數、方法或代碼塊能夠在多個線程同時執行時,不會出現意外的交互或破壞共享數據,能夠安全地運行。 POSIX 對線程安全的定義很清楚: “一個線程安全的函數可以在多個線程中被安全地并…

熱方程初邊值問題解法

已知公式: u ( x , t ) ∫ ? ∞ ∞ G ( x , y , t ) g ( y ) d y . u(x,t)\int_{-\infty}^{\infty}G(x,y,t)g(y)dy. u(x,t)∫?∞∞?G(x,y,t)g(y)dy. (1) 其中 G ( x , y , t ) 1 2 k π t e ? ( x ? y ) 2 4 k t G(x,y,t)\frac{1}{2…