Expliquer les modèles non supervisés

Explainable AI en Python

Fouad Trad

Machine Learning Engineer

Regroupement (clustering)

Regrouper des points de données semblables sans étiquettes préalables

Image montrant des données avec 2 caractéristiques divisées en 3 grappes, chacune avec un centroïde.

Explainable AI en Python

Indice de silhouette

  • Évalue la qualité du regroupement
  • Valeurs de -1 à 1
    • 1 → grappes bien séparées

Image montrant des grappes bien séparées.

Explainable AI en Python

Indice de silhouette

  • Évalue la qualité du regroupement
  • Valeurs de -1 à 1
    • 1 → grappes bien séparées
    • -1 → points mal assignés

Image montrant des grappes sans séparation nette.

Explainable AI en Python

Impact des caractéristiques sur la qualité des grappes

Image montrant le résultat de regroupement d'un ensemble de données à 2 caractéristiques envoyé à l'algorithme de regroupement.

Explainable AI en Python

Impact des caractéristiques sur la qualité des grappes

Image montrant le résultat de regroupement après retrait d'une caractéristique et réentraÎnement du modèle.

Explainable AI en Python

Impact des caractéristiques sur la qualité des grappes

Image montrant la formule pour calculer l'impact de la caractéristique retirée comme la différence entre les scores de silhouette où les deux caractéristiques sont présentes et le score de silhouette quand la caractéristique est retirée.

  • $\text{Impact(}f) > 0$ → contribution positive de $f$
  • $\text{Impact(}f) < 0$ → $f$ ajoute du bruit
Explainable AI en Python

Ensemble Student Performance

age état de santé 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 : tableau contenant les caractéristiques

Explainable AI en Python

Calculer l'impact des caractéristiques sur la qualité des grappes

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 en Python

Calculer l'impact des caractéristiques sur la qualité des grappes

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 en Python

Indice de Rand ajusté (ARI)

  • Mesure la concordance des assignations de grappes

Image montrant deux assignations de grappes similaires pour un même ensemble de données.

  • ARI maximal = 1 → alignement parfait des grappes
Explainable AI en Python

Indice de Rand ajusté (ARI)

  • Mesure la concordance des assignations de grappes

Image montrant deux assignations de grappes différentes pour le même ensemble de données.

  • ARI maximal = 1 → alignement parfait des grappes
  • ARI plus faible → plus grande différence entre regroupements
Explainable AI en Python

Importance des caractéristiques pour l'assignation aux grappes

   

  • Retirer les caractéristiques une à la fois
  • $\text{Importance}(f) = 1 - \text{ARI (grappes originales, grappes modifiées)}$
  • ARI faible → $1 - \text{ARI}$ élevé → caractéristique importante
Explainable AI en Python

Importance des caractéristiques pour l'assignation aux grappes

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 en Python

Passons à la pratique !

Explainable AI en Python

Preparing Video For Download...