Explicarea modelelor nesupervizate

AI Explicabil în Python

Fouad Trad

Machine Learning Engineer

Clusterizare

Gruparea punctelor de date similare fără etichete predefinite

Imagine care prezintă date cu 2 caracteristici împărțite în 3 clustere, fiecare cu un centroid.

AI Explicabil în Python

Scorul de siluetă

  • Măsoară calitatea clusterizării
  • Interval de la -1 la 1
    • 1 → clustere bine separate

Imagine care prezintă clustere bine separate.

AI Explicabil în Python

Scorul de siluetă

  • Măsoară calitatea clusterizării
  • Interval de la -1 la 1
    • 1 → clustere bine separate
    • -1 → puncte atribuite incorect

Imagine care prezintă clustere fără o separare clară.

AI Explicabil în Python

Impactul caracteristicilor asupra calității clusterilor

Imagine care prezintă rezultatul clusterizării unui set de date cu 2 caracteristici utilizate de algoritmul de clusterizare.

AI Explicabil în Python

Impactul caracteristicilor asupra calității clusterilor

Imagine care prezintă rezultatul clusterizării după eliminarea unei caracteristici și reantrenarea modelului.

AI Explicabil în Python

Impactul caracteristicilor asupra calității clusterilor

Imagine care prezintă formula pentru calculul impactului caracteristicii eliminate ca diferență între scorurile de siluetă cu ambele caracteristici prezente și scorul de siluetă fără caracteristica respectivă.

  • $\text{Impact(}f) > 0$ → contribuție pozitivă pentru $f$
  • $\text{Impact(}f) < 0$ → $f$ introduce zgomot
AI Explicabil în Python

Setul de date Student Performance

age health status absences G1 G2 G3
18 3 4 0 11 11
17 3 2 9 11 11
15 3 6 12 13 12
15 5 0 14 14 14
16 5 0 11 13 13

 

X: array cu caracteristici

AI Explicabil în Python

Calculul impactului caracteristicilor asupra calității clusterilor

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score


kmeans = KMeans(n_clusters=2).fit(X)
original_score = silhouette_score(X, kmeans.labels_)
for i in range(X.shape[1]):
X_reduced = np.delete(X, i, axis=1)
kmeans.fit(X_reduced)
new_score = silhouette_score(X_reduced, kmeans.labels_)
impact = original_score - new_score print(f'Feature {column_names[i]}: Impact = {impact}')
AI Explicabil în Python

Calculul impactului caracteristicilor asupra calității clusterilor

Feature age: Impact = 0.05199181662741281
Feature health status: Impact = 0.06046737420227638
Feature absences: Impact = 0.031290940582026694
Feature G1: Impact = -0.025746421940652353
Feature G2: Impact = -0.02578292339364119
Feature G3: Impact = -0.03163419458330158
AI Explicabil în Python

Indicele Rand ajustat (ARI)

  • Măsoară cât de bine corespund atribuirile de clustere

Imagine care prezintă două atribuiri de clustere similare pentru un set de date dat.

  • ARI maxim = 1 → aliniere perfectă a clusterelor
AI Explicabil în Python

Indicele Rand ajustat (ARI)

  • Măsoară cât de bine corespund atribuirile de clustere

Imagine care prezintă două atribuiri diferite de clustere pentru același set de date.

  • ARI maxim = 1 → aliniere perfectă a clusterelor
  • ARI mai mic → diferență mai mare între clusterizări
AI Explicabil în Python

Importanța caracteristicilor pentru atribuirea clusterelor

   

  • Eliminarea caracteristicilor pe rând
  • $\text{Importance}(f) = 1 - \text{ARI (clustere originale, clustere modificate)}$
  • ARI mic → $\text(1 - ARI)$ mare → caracteristică importantă
AI Explicabil în Python

Importanța caracteristicilor pentru atribuirea clusterelor

from sklearn.metrics import adjusted_rand_score

kmeans = KMeans(n_clusters=2).fit(X) original_clusters = kmeans.predict(X)
for i in range(X.shape[1]):
X_reduced = np.delete(X, i, axis=1)
reduced_clusters = kmeans.fit_predict(X_reduced)
importance = 1 - adjusted_rand_score(original_clusters, reduced_clusters) print(f'{df.columns[i]}: {importance}')
age: 0.0
health status: 0.9995376368119572
absences: 0.0
G1: 0.0
G2: 0.6204069909514572
G3: 0.6204069909514572
AI Explicabil în Python

Să exersăm!

AI Explicabil în Python

Preparing Video For Download...