SHAP(夏普利加性解釋)
/ shap /
SHAP是一種把單次預測「公平地」拆分給每個輸入特徵的方法,它借來了博弈論的一道食譜。想像一支隊伍贏了獎金,而你得在貢獻並不均等的隊員之間把它分得公道。來自經濟學的「夏普利值」,回答的恰恰是這個問題:它考慮隊員加入的每一種可能順序,再把每個人的邊際貢獻做平均。SHAP把模型的預測當作那筆獎金,把每個特徵當作一名隊員。
具體來說,對某一個特定的個案——這位病人、這筆貸款——SHAP會告訴你:相對於某個基準平均值,每個特徵把預測往上推、或往下拉了多少。這些值加起來,恰好等於「模型預測」與「那個基準」之間的差額;這正是它被稱為「加性」的原因:解釋把輸出分毫不差地交代清楚,不留一點餘數。這使SHAP在「局部解釋」(為何是這一個決定?)和——經彙總後——「全域解釋」(模型總體上倚重什麼?)上都很受歡迎。
SHAP的魅力在於:它立足於扎實的理論,給出前後一致、可加的答案,不像那些臨時拼湊的方法。它誠實的侷限是:精確計算的代價隨特徵數指數級飆升,所以真實工具用的都是近似,而近似的好壞參差不齊。它假定你能「合理地」移除某個特徵,可一旦特徵彼此相關,這一假定就吃緊。還有——最要命的一條——SHAP解釋的是「模型做了什麼」,而非「模型對不對」、也非「某個特徵是否真的導致了結果」。給一個有偏見的模型畫出一張自信滿滿的SHAP圖,不過是把那份偏見解釋得漂漂亮亮罷了。
一個模型預測某位客戶流失的機率為0.78。而資料集的基準流失率是0.30。SHAP把這0.48的差額拆開:「近期的客服投訴」貢獻了+0.25,「按月簽的合約」貢獻了+0.18,「在網時長很久」則減去了−0.05……每個特徵的貢獻加總,恰好回到0.78這個預測。
SHAP的「加性」:每個特徵一推一拉,加總起來恰好等於那個預測。
一個微妙的陷阱:當特徵彼此相關時,SHAP可能把重要性歸給一個「模型技術上用到、但真正訊號其實由另一個幾乎一模一樣的特徵承載」的特徵;而用作基準的不同「背景資料集」,還會改變這些值。SHAP那份數學上的整潔,容易誘你過度信任它;把它當作一個審慎的假設,而非一份證明。