ML Atlas

04 · Ocena · 5 min czytania · Interaktywne · aktualizacja

Czym są wartości SHAP i jak wyjaśniają pojedynczą predykcję modelu?

W skrócie

Wartości SHAP rozkładają przewidywanie modelu dla jednego przykładu na wkłady cech, które sumują się do różnicy między tym przewidywaniem a średnią.

Co to jest

Wartości SHAP (SHapley Additive exPlanations) to metoda wyjaśniania pojedynczych przewidywań, która przypisuje każdej cesze liczbę φ — jej wkład w przesunięcie przewidywania od wartości bazowej (średniego przewidywania modelu) do przewidywania dla danego przykładu. Wkłady sumują się dokładnie: f(x) = E[f(X)] + φ₁ + φ₂ + … + φₘ. Metodę spopularyzowali Lundberg i Lee w 2017 roku, opierając ją na wartości Shapleya z teorii gier kooperacyjnych (Shapley, 1953).

Intuicja: cechy to gracze, którzy wspólnie „wypracowali” przewidywanie. Pytamy, jak sprawiedliwie podzielić wygraną. Problem w tym, że wkład gracza zależy od tego, kto już jest w drużynie — informacja „pasażer trzeciej klasy” znaczy co innego, gdy wiemy już, że to mężczyzna. Shapley rozwiązał to, uśredniając wkład gracza po wszystkich możliwych kolejnościach dołączania do drużyny.

Mechanizm — dlaczego tak działa

Potrzebujemy funkcji v(S): jakie przewidywanie daje model, gdy znamy tylko cechy ze zbioru S. Model wymaga jednak wszystkich cech, więc brakujące uzupełnia się wartościami z danych tła i uśrednia. W wersji „interwencyjnej” v(S) = średnia po danych tła z f(x_S, x_C⁽ⁱ⁾): cechy z S bierzemy od wyjaśnianego przykładu, resztę od kolejnych przykładów tła. v(∅) to średnie przewidywanie, v(wszystkie cechy) to f(x).

Wartość Shapleya cechy j to średnia ważona jej wkładów krańcowych v(S ∪ {j}) − v(S) po wszystkich podzbiorach S pozostałych cech, z wagą |S|! · (m − |S| − 1)! / m!. Waga odpowiada odsetkowi kolejności, w których cecha j dołącza dokładnie po zbiorze S. Jest to jedyny sposób podziału spełniający cztery aksjomaty: wkłady sumują się do f(x) − v(∅) (efektywność), cechy o identycznym wpływie dostają to samo (symetria), cecha bez wpływu dostaje zero, a wyjaśnienie sumy modeli to suma wyjaśnień (addytywność).

Dokładne obliczenie wymaga 2ᵐ podzbiorów, co przy dziesiątkach cech jest niewykonalne. Dlatego stosuje się przybliżenia: KernelSHAP (losowanie podzbiorów i ważona regresja), TreeSHAP (dokładny i szybki algorytm dla drzew i ich zespołów) oraz metody gradientowe dla sieci. Dla modelu liniowego z interwencyjną funkcją v jest wzór zamknięty: φⱼ = βⱼ · (xⱼ − średnia xⱼ).

Zastrzeżenia. Wartości SHAP zależą od wyboru danych tła i od skali wyjścia — te same cechy dadzą inne liczby dla prawdopodobieństwa i dla log-szans. Przy skorelowanych cechach wersja interwencyjna ocenia model na nierealistycznych kombinacjach (jak PDP), a wersja warunkowa może przypisać wkład cechom, których model w ogóle nie używa. SHAP wyjaśnia model, nie świat: duża wartość φ nie oznacza związku przyczynowego. Wreszcie średnie |φ| po zbiorze dają globalną ważność cech, ale to inna wielkość niż ważność permutacyjna — mierzy wpływ na przewidywania, nie na jakość.

Na przykładzie

Biblioteka shap nie była zainstalowana, więc policzyłem wartości Shapleya dokładnie, wszystkimi 2³ = 8 podzbiorami, dla małego modelu: regresji logistycznej na trzech cechach Titanica — płci, klasie i wieku (braki uzupełnione medianą). Trening na 668 pasażerach z warstwowego podziału 75/25 (random_state=0), te same 668 osób jako dane tła; trafność testowa 77,1%. Wyjaśniam przewidywane prawdopodobieństwo przeżycia 22-letniego mężczyzny z trzeciej klasy. Średnie przewidywanie to 0,383, a dla niego model daje 0,107. Rozkład różnicy −0,276: płeć −0,171, klasa −0,137, wiek +0,032 (młody wiek nieco pomaga). Suma wkładów zgadza się z różnicą dokładnie, jak wymaga aksjomat efektywności.

Skąd −0,171 dla płci? Wkład krańcowy „mężczyzna” wynosi −0,172, gdy jest pierwszą znaną cechą (0,383 → 0,211), −0,161 po klasie, −0,168 po wieku i −0,177 po obu; średnia z wagami 1/3, 1/6, 1/6, 1/3 daje −0,171. Wkłady różnią się, bo model jest nieliniowy w skali prawdopodobieństwa. Dlatego ta sama płeć u 4-letniego chłopca z pierwszej klasy dostaje −0,138, a nie −0,171. W skali log-szans oba wkłady wynoszą identycznie −0,90 i zgadzają się ze wzorem β · (x − średnia). Dla 38-letniej kobiety z pierwszej klasy (przewidywanie 0,904) wkłady to: płeć +0,303, klasa +0,258, wiek −0,040.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: dokładne wartości Shapleya dla regresji logistycznej na pasażerach Titanica: u kobiety z 1. klasy płeć dodaje +30 pp, a klasa +27 pp do średniej 38,4%, a w całym zbiorze testowym najwięcej waży płeć (22,2 pp), potem klasa (16,3 pp).

Dane: Titanic

W praktyce

  • Biblioteka shap: explainer = shap.Explainer(model, X_background), potem sv = explainer(X); wykresy shap.plots.waterfall(sv[0]) dla jednego przykładu, shap.plots.beeswarm(sv) dla całego zbioru.
  • Dla lasów i boostingu (XGBoost, LightGBM, scikit-learn) używany jest szybki i dokładny TreeExplainer; dla dowolnego modelu wolniejszy KernelExplainer z niewielką próbką tła (np. 100 przykładów).
  • Zwróć uwagę na skalę: modele boostingowe domyślnie wyjaśniane są w log-szansach, nie w prawdopodobieństwie.
  • Globalna ważność: średnia z |φ| dla każdej cechy; zależność efektu od wartości cechy: shap.plots.scatter(sv[:, 'age']).
  • Przy skorelowanych cechach interpretuj wyniki dla grup cech, nie pojedynczych kolumn.
  • Typowy błąd: traktowanie wartości SHAP jako dowodu, że cecha jest przyczyną wyniku, albo porównywanie φ policzonych z różnymi danymi tła.

Najczęstsze pytania

Czym SHAP różni się od ważności permutacyjnej?
Ważność permutacyjna mówi, o ile spada jakość modelu bez informacji z cechy, i działa globalnie. SHAP mówi, o ile cecha przesunęła konkretne przewidywanie i w którą stronę, a średnie z |φ| dają obraz globalny. Pierwsza dotyczy jakości, druga — samych przewidywań.
Dlaczego wartości SHAP sumują się do przewidywania?
To aksjomat efektywności wartości Shapleya: wkłady wszystkich graczy sumują się do wartości całej koalicji minus wartości pustej, czyli do f(x) − E[f(X)]. Dzięki temu wyjaśnienie jest pełnym rozliczeniem przewidywania, bez reszty.
Czy wartości SHAP są „prawdziwym” wyjaśnieniem modelu?
Są jednym, dobrze uzasadnionym aksjomatycznie sposobem podziału przewidywania. Inny wybór danych tła, skali wyjścia lub wersji funkcji v(S) da inne liczby, a przy skorelowanych cechach różnice bywają duże. Traktuj je jako opis zachowania modelu, a nie jako jedyną prawdę.

Źródła

  • Shapley L. S. (1953). A Value for n-Person Games. W: Kuhn H. W., Tucker A. W. (red.), Contributions to the Theory of Games II, Annals of Mathematics Studies 28, Princeton University Press.
  • Lundberg S. M., Lee S.-I. (2017). A Unified Approach to Interpreting Model Predictions. Advances in Neural Information Processing Systems 30 (NIPS 2017).
  • Lundberg S. M. i in. (2020). From local explanations to global understanding with explainable AI for trees. Nature Machine Intelligence, 2.
  • Molnar C. „Interpretable Machine Learning”, rozdz. Shapley Values i SHAP — https://christophm.github.io/interpretable-ml-book/

Zobacz też