Categories Machine Learning

SHAP Dəyərləri və Modellərin Açıqlanması

Praktikada bu problem necə həll olunur?

Bütün kombinasiyalardan istifadə etmək əvəzinə random subsetlər (təsadüfi alt qruplar) seçilir. Model bu subsetlər üzərində işlədilir və nəticələr toplanır. Daha sonra bu nəticələr əsasında weighted linear regression qurulur və feature-ların Shapley dəyərləri (yəni modelin proqnoza təsiri) bu reqresiyanın əmsalları olaraq öyrənilir.

Weighted Linear Regression ilə SHAP hesablanması nə deməkdir?
Buradakı məntiq sadədir:
— Subsetlərdən əldə olunan model nəticələri bir linear model formasında yazılır.
— Məsələn:
f(S) ≈ φ₀ + φ₁·z₁ + φ₂·z₂ + … + φₘ·zₘ
Burada φ dəyərləri SHAP value-lar, z isə feature-un mask dəyəridir. Həmin feature var yada yoxdur şəklində binary encoding vectoru. (1 varsa seçilib, 0 yoxdursa background).
— Hər subset üçün nəzəriyyəyə uyğun xüsusi bir çəki (weight) verilir. Bu çəki Shapley nəzəriyyəsində hər feature-un bütün ehtimallar üzrə balanslı paylanmasını təmin edir.
— Nəticədə, bütün subsetlərdən gələn məlumatlar ilə qurulan ağırlıqlı xətti regresiya həll olunur və φ-lar (SHAP values) çıxarılır. Bu metodun adı Kernel SHAP-dır. Kernel SHAP universal metoddur və istənilən model üçün tətbiq edilə bilər. Lakin çox feature olduqda hesablama bahalı ola bilər. Bu səbəbdən praktikada ya `nsamples` parametrinin azaldılması ilə istifadə edilir, ya da ağac əsaslı modellər üçün xüsusi olaraq optimallaşdırılmış Tree SHAP istifadə olunur.
Bəs istifadə olunan subsetlərin sayı necə seçilir?
Python-un shap kitabxanasında default olaraq subsetlərin sayı belə seçilir:
n_samples = 2 * feature_sayı + 2048. Yəni, əgər 10 feature varsa → 2068 subset istifadə ediləcək. Əgər 50 feature varsa → 2148 subset olacaq. İstifadəçi `nsamples` parametrini dəyişərək bu sayını artırıb-azalda bilər. Daha çox subset → daha dəqiq nəticə,amma daha yavaş hesablama; daha az subset → daha sürətli, amma daha noise-lu nəticə verir.

Yenidən qayıdaq hesablanma qaydasına. Ağırlıqlı linear regression dediyimiz metod tam olaraq shap dəyərlərini bütün feature kombinasiyasını tapmadan necə hesablayır? Bunu kiçik bir misal üzərindən sadə dildə izah etməyə çalışacam. Tutaqki əlimizdəki datada yaş, kilo, gəlir və boy dəyişkənləri var. Və biz digər 3 dəyişkənə əsasən boy təxmini etmək istəyirik. Yəni bizim featurelar [yaş, gəlir, kilo], target isə boy-dur. Kernel Shap metodu ilk öncə random subsample hesablayır demişdik. n_samples olaraq 4 verdiyimizi düşünək. Bizim mümkün subsetlərimiz normalda 2³ = 8-dir. Ancaq biz 4 feature kombinasiyası istifadə edəcəyik. Bunlar aşağıdakı kimi olsun.

S1 = [0, 0, 0] => Yəni heçbir feature istifadə edilməsə nəticə nə olar?

S2 = [Yaş, Gəlir, 0] => Kilo istifadə edilməsə nəticə nə olar?

S3 = [0, Gəlir, Kilo] => Yaş istifadə edilməsə nəticə nə olar?

S4 = [Yaş, Gəlir, Kilo] => Bütün feature istifadəsində nəticə nə olar?

Daha sonra bu feature kombinasiyasına əsasən modellər quruldu və nəticələr aşağıdakı kimi oldu

S1 = 170sm

S2 = 175sm

S3 = 178sm

S4 = 180sm

Hər kombinasiya (S) üçün ağırlıq dəyəri hesablanır. Bunun üçün aşağıdakı düsturdan istifadə olunur.

Press enter or click to view image in full size

  • M = total feature sayı (3)
  • |S| = Kombinasiyadakı feature sayısı
  • Boş kombinasiyalar və total featurelar olan çoxluqlar sonsuz ağırlıq alır.

O zaman bizim ağırlıq dəyərlərmiz.

w(S1) = ∞

w(S2) = (3–1)/[C(3,1)×1×(3–1)] = 2/(3×1×2) = 1/3

w(S3) = (3–1)/[C(3,1)×1×(3–1)] = 2/(3×1×2) = 1/3

w(S4) = ∞

w=[∞,1/3,1/3,∞]

Daha sonra aşağıdakı linear regression həll edilir.

Press enter or click to view image in full size

Bu problem əslində WLS (weighted least squares) ilə həll edilir. Ancaq bizim əlimizdəki datanın kiçik olduğunu və subset sayınında sadəcə 4 olduğunu nəzərə alsaq problemi normal şəkildə də həll edə bilərik. O zaman sadəcə aşağıdakı tənliyi həll etsək yetərlidir.

f(S) = φ₀ + φ₁×z_yaş + φ₂×z_gəlir + φ₃×z_kilo

Buradan da:

170 = φ₀ + φ₁×0 + φ₂×0 + φ₃×0 → φ₀ = 170 (S1)
175 = φ₀ + φ₁×1 + φ₂×0 + φ₃×0 → φ₁ = 5 (S2)
178 = φ₀ + φ₁×1 + φ₂×1 + φ₃×0 → φ₂ = 3 (S3)
180 = φ₀ + φ₁×1 + φ₂×1 + φ₃×1 → φ₃ = 2 (S4)

  • Yaş SHAP: φ₁ = +5 cm
  • Gəlir SHAP: φ₂ = +3 cm
  • Kilo SHAP: φ₃ = +2 cm
  • Baseline: φ₀ = 170 cm

Hər feature üçün shap dəyərimiz müsbətdir. Yəni hər dəyişkən boya müsbət mənada təsir edir. Bütün featurelar istifadə ediləndə boy 180sm idi. O zaman shap dəyərlərinə əsasən hesablandıqda 180sm olmalıdır.

170 + 5(yaş) + 3(gəlir) + 2(kilo) = 180 sm ✓

Göründüyü kimi eyni dəyər əldə edildi. Bu metot KernelShap metodu idi. Və hər model üçün istifadə oluna bilər. Ancaq biraz bahalıdır. Xgboost, catboost, lightgbm modelləri üçün Tree SHAP metodunu istifadə edə bilərsiniz.

You May Also Like