Uitleg van unsupervised modellen

Explainable AI in Python

Fouad Trad

Machine Learning Engineer

Clustering

Groepeer vergelijkbare datapunten zonder vooraf gedefinieerde labels

Afbeelding met data met 2 features verdeeld in 3 clusters, elk met een centroid.

Explainable AI in Python

Silhouette-score

  • Meet de kwaliteit van clustering
  • Loopt van -1 tot 1
    • 1 → goed gescheiden clusters

Afbeelding met goed gescheiden clusters.

Explainable AI in Python

Silhouette-score

  • Meet de kwaliteit van clustering
  • Loopt van -1 tot 1
    • 1 → goed gescheiden clusters
    • -1 → punten verkeerd toegewezen

Afbeelding met clusters zonder duidelijke scheiding.

Explainable AI in Python

Invloed van features op clusterkwaliteit

Afbeelding met het clusteringresultaat van een dataset met 2 features die aan het clusteringalgoritme zijn gevoerd.

Explainable AI in Python

Invloed van features op clusterkwaliteit

Afbeelding met het clusteringresultaat na het verwijderen van één feature en het opnieuw trainen van het model.

Explainable AI in Python

Invloed van features op clusterkwaliteit

Afbeelding met de formule: de impact van de verwijderde feature is het verschil tussen de silhouette-scores met alle features en de score na verwijdering.

  • $\text{Impact(}f) > 0$ → positieve bijdrage van $f$
  • $\text{Impact(}f) < 0$ → $f$ voegt ruis toe
Explainable AI in Python

Student Performance-dataset

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 met features

Explainable AI in Python

Impact van features op clusterkwaliteit berekenen

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}')
Explainable AI in Python

Impact van features op clusterkwaliteit berekenen

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
Explainable AI in Python

Adjusted Rand Index (ARI)

  • Meet hoe goed clusterindelingen overeenkomen

Afbeelding met twee vergelijkbare clusterindelingen voor een dataset.

  • Maximale ARI = 1 → perfecte clusterovereenkomst
Explainable AI in Python

Adjusted Rand Index (ARI)

  • Meet hoe goed clusterindelingen overeenkomen

Afbeelding met twee verschillende clusterindelingen voor dezelfde dataset.

  • Maximale ARI = 1 → perfecte clusterovereenkomst
  • Lagere ARI → grotere verschillen tussen clusterings
Explainable AI in Python

Feature-importance voor clusterindelingen

   

  • Verwijder features één voor één
  • $\text{Importance}(f) = 1 - \text{ARI (originele clusters, aangepaste clusters)}$
  • Lage $\text(ARI)$ → hoge $\text(1 - ARI)$ → belangrijke feature
Explainable AI in Python

Feature-importance voor clusterindeling

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
Explainable AI in Python

Laten we oefenen!

Explainable AI in Python

Preparing Video For Download...