到底有多重要?shapley value來解釋解釋
無論是全局特征重要性分析,還是單個樣本的特征貢獻(xiàn)解釋,SHAP都能提供清晰的視角。本文將通過實(shí)際案例,展示如何利用SHAP來分析數(shù)據(jù),優(yōu)化決策,并提供相關(guān)代碼資源供讀者參考。
1. 為什么執(zhí)著于因素解釋
我們常會遇到,在事后歸因時能知道貢獻(xiàn)來源,比如下圖,它解釋了總收入同比增長1000元,主要是老客購買A品類30元以上商品和新客購買C品類10元以下商品貢獻(xiàn)的。
但接下來的問題是:要保持增長應(yīng)該怎么辦?還要在之前優(yōu)勢的品類和人群上繼續(xù)投入嗎?效果會好嗎?
之所以在此時會決策猶豫,是因?yàn)槲覀冎懒怂鼛碓鲩L,但不知道為什么它會帶來增長。想要知道到底是什么因素導(dǎo)致了這個策略成功,即這類用戶會購買這個商品,它就變成了一個y=f(xi)因素解釋問題,y是否會購買,xi就是是否購買時候的一個個決策要素:
- 可能是反復(fù)瀏覽了很多次,剛好降價了,就買了,
- 可能是貴和便宜的同類商品同時出現(xiàn),買了個便宜的,
- 可能是它就是常買的品牌,順手就買了
等等……
什么因素影響最大,這時候模型解釋就派上了用場。
(繞了這么久終于開始進(jìn)入正題了。。。)
2. 白話講shapley value是怎么算的
之前說過線性回歸模型解釋有一些局限
① 如果變量并非呈線性,對目標(biāo)影響就很難解釋;
② 只能說明全局特征的貢獻(xiàn)度,不能做個體解釋。
現(xiàn)在來介紹一個不挑模型的解釋方法:SHAP
shapley value源自于博弈論里的方法,用來解決多人合作模式下,如何公平分配收益的問題。
舉例來說,假如幾個人合作對一個藝術(shù)品競拍,合作方式有:1人投、2人投、3人投,在不同的投資組合下以及不同的順序下,他們投入的金額是不同的,如下圖所示,那么未來這個藝術(shù)品升值所帶來利潤要如何分配?
如果以玩家A->C->B這個入場順序來看,A入場貢獻(xiàn)7,C入場邊際貢獻(xiàn)=AC-A=15-7=8,B入場邊際貢獻(xiàn)=ABC-AC=19-15=4
可以計算出每種不同順序下每個人的貢獻(xiàn),除以6即為組合情況下的shapley value值
A=(7+7+10+3+9+10)/6=7.7
B=(4+0+4+4+4+3)/6=3.2
C=(8+12+5+12+6+6)/6=8.1
如果用公式表示,長這樣:
這個抓狂的公式理解起來,就是樣本x第j個特征xj的貢獻(xiàn)值為所有特征的貢獻(xiàn)值減去排除xj特征剩下所有特征的貢獻(xiàn)值是多少,以此來計算xj對x的貢獻(xiàn),就和上邊的案例是一個意思。
要把這個算出來,計算量十分龐大,因此演化了新的方法SHAP,它是Shapley Additive exPlanations的縮寫,公式是
其含義是對于一個隨機(jī)樣本i,在預(yù)測均值的基礎(chǔ)上,每個特征j不斷對其拉扯,最后得到i預(yù)測值,而?j就是i樣本j特征的邊際貢獻(xiàn)值shapley value,有kernelSHAP 和 treeSHAP兩個方法可以求出?j,在此就不對計算過程做詳細(xì)討論,主要來解釋SHAP值怎么用。
3.SHAP值是怎么用的
如上圖,以YouTube18年的某日瀏覽量為例 (數(shù)據(jù)源為kaggle公開數(shù)據(jù))
- 目標(biāo):是否會是2018年5月25日瀏覽top200視頻
- 變量:其他字段
現(xiàn)在想知道對于成為25日高瀏覽量的視頻,與 視頻的發(fā)布時間、單日瀏覽增量、或者用戶反饋的喜歡增量或者歷史累計量等等,哪個因素貢獻(xiàn)最大,這樣就能指導(dǎo)我們在某個方面進(jìn)行優(yōu)化。
(當(dāng)然,實(shí)際上一個視頻是否會成為一個爆款,影響因素很多,這里只是簡單列舉了一些行為反饋因素,除此之外還有視頻原始特征,本身的內(nèi)容和創(chuàng)意才是更有價值的。。。)
操作過程為:先使用lightGBM訓(xùn)練一個分類模型,然后使用shap,來計算每個特征對樣本的shapley value。
這里有個需要注意的是:如果使用的是樹模型,對應(yīng)的是TreeExplainer,另外還有DeepExpainer適合TensorFlow模型,或者選擇KernelExplainer,適用任何模型。
接下來輸出shap value總體特征的平均值,看起來和特征重要性長得差不多,它表示對成為一個高瀏覽量的熱門視頻,歷史累計的喜歡量貢獻(xiàn)最大,其次是單日增量喜歡率(這里的shap value為絕對值平均值)
如果把所有樣本都打上,會發(fā)現(xiàn)有意思的事情,歷史累計喜歡量為正向shap貢獻(xiàn),而單日增量喜歡率卻反之。
更美妙的是,它還能解釋單個樣本的因素貢獻(xiàn)。
如下我隨機(jī)選了一個樣本50,它表示在所有樣本平均shap值E[f(x)]=-7.36的情況下,該樣本通過自身特征20180524likes-5.56,view_diff-4.27等等,將該樣本成為一個熱門視頻的shap值推到f(x)=-13.46,這已經(jīng)可以解釋在單個樣本下是哪個具體因素影響程度,但對于預(yù)測值又是如何影響的呢?
這里可以把樣本預(yù)測概率和shap值進(jìn)行一個映射,來更直觀的知道對于預(yù)測概率,影響程度是多少,如下這個公式,通過python里interpolate的一維插值interp1d函數(shù)
再通過去掉其中一個特征的shap值,來計算對應(yīng)的概率,與原始概率的差值,即為該特征對這個樣本預(yù)測概率的貢獻(xiàn)。
通過以上公式,樣本50轉(zhuǎn)換到概率預(yù)測上,可以看到總體特征貢獻(xiàn)最大的
20180524likes,這個視頻沒有和熱門視頻一樣有個歷史累計很高的like量,讓它成為熱門視頻的概率降低了6.84854%,但是新增瀏覽的喜歡轉(zhuǎn)化對它是正向概率貢獻(xiàn),在逐步被適合的人群看到后,逐步積累瀏覽量,就可以再等等~
同時可推斷,在全局上,歷史累計的喜歡量是大部分視頻第二天會繼續(xù)成為熱門視頻的主要因素(限在現(xiàn)有特征內(nèi)),但它會隨著瀏覽量的增加逐漸泛化到不會喜歡看的人的身上,從而讓新增的喜歡率變低,如此往復(fù)和疊加,會形成整體生態(tài)的循環(huán)迭代。
參考資料
shapley value 計算原理https://zhuanlan.zhihu.com/p/82462362
shapley value 映射https://blog.csdn.net/sinat_26917383/article/details/115556182
本文由人人都是產(chǎn)品經(jīng)理作者【小王子和小企鵝】,微信公眾號:【小王子和小企鵝】,原創(chuàng)/授權(quán) 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于 CC0 協(xié)議。
- 目前還沒評論,等你發(fā)揮!