การอธิบายโมเดล Unsupervised

Explainable AI ด้วย Python

Fouad Trad

Machine Learning Engineer

การจัดกลุ่ม (Clustering)

จัดกลุ่มข้อมูลที่คล้ายกันโดยไม่ต้องมี Label กำหนดไว้ล่วงหน้า

ภาพแสดงข้อมูลที่มี 2 ฟีเจอร์ แบ่งเป็น 3 คลัสเตอร์ โดยแต่ละคลัสเตอร์มีจุดศูนย์กลาง

Explainable AI ด้วย Python

Silhouette Score

  • วัดคุณภาพของการจัดกลุ่ม
  • มีค่าตั้งแต่ -1 ถึง 1
    • 1 → คลัสเตอร์แยกกันชัดเจน

ภาพแสดงคลัสเตอร์ที่แยกกันชัดเจน

Explainable AI ด้วย Python

Silhouette Score

  • วัดคุณภาพของการจัดกลุ่ม
  • มีค่าตั้งแต่ -1 ถึง 1
    • 1 → คลัสเตอร์แยกกันชัดเจน
    • -1 → จุดข้อมูลถูกจัดกลุ่มผิดพลาด

ภาพแสดงคลัสเตอร์ที่ไม่มีการแยกกันชัดเจน

Explainable AI ด้วย Python

ผลกระทบของฟีเจอร์ต่อคุณภาพคลัสเตอร์

ภาพแสดงผลลัพธ์การจัดกลุ่มของชุดข้อมูลที่มี 2 ฟีเจอร์ที่ป้อนเข้าสู่อัลกอริทึมการจัดกลุ่ม

Explainable AI ด้วย Python

ผลกระทบของฟีเจอร์ต่อคุณภาพคลัสเตอร์

ภาพแสดงผลลัพธ์การจัดกลุ่มหลังจากลบฟีเจอร์หนึ่งออกและฝึกโมเดลใหม่

Explainable AI ด้วย Python

ผลกระทบของฟีเจอร์ต่อคุณภาพคลัสเตอร์

ภาพแสดงสูตรคำนวณผลกระทบของฟีเจอร์ที่ถูกลบออก โดยเป็นผลต่างระหว่าง Silhouette Score เมื่อมีทั้งสองฟีเจอร์ กับ Silhouette Score เมื่อลบฟีเจอร์นั้นออก

  • $\text{Impact(}f) > 0$ → $f$ มีส่วนช่วยในเชิงบวก
  • $\text{Impact(}f) < 0$ → $f$ เพิ่ม Noise ให้กับโมเดล
Explainable AI ด้วย Python

ชุดข้อมูล 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: อาร์เรย์ที่เก็บฟีเจอร์ทั้งหมด

Explainable AI ด้วย Python

การคำนวณผลกระทบของฟีเจอร์ต่อคุณภาพคลัสเตอร์

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 ด้วย Python

การคำนวณผลกระทบของฟีเจอร์ต่อคุณภาพคลัสเตอร์

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 ด้วย Python

Adjusted Rand Index (ARI)

  • วัดความสอดคล้องของการจัดกลุ่ม

ภาพแสดงการจัดกลุ่มสองแบบที่คล้ายกันสำหรับชุดข้อมูลเดียวกัน

  • ARI สูงสุด = 1 → การจัดกลุ่มตรงกันสมบูรณ์
Explainable AI ด้วย Python

Adjusted Rand Index (ARI)

  • วัดความสอดคล้องของการจัดกลุ่ม

ภาพแสดงการจัดกลุ่มสองแบบที่แตกต่างกันสำหรับชุดข้อมูลเดียวกัน

  • ARI สูงสุด = 1 → การจัดกลุ่มตรงกันสมบูรณ์
  • ARI ต่ำลง → การจัดกลุ่มแตกต่างกันมากขึ้น
Explainable AI ด้วย Python

ความสำคัญของฟีเจอร์ต่อการจัดกลุ่ม

   

  • ลบฟีเจอร์ออกทีละตัว
  • $\text{Importance}(f) = 1 - \text{ARI (original clusters, modifed clusters)}$
  • $\text(ARI)$ ต่ำ → $\text(1 - ARI)$ สูง → ฟีเจอร์สำคัญ
Explainable AI ด้วย Python

ความสำคัญของฟีเจอร์ต่อการจัดกลุ่ม

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 ด้วย Python

มาฝึกกันเถอะ!

Explainable AI ด้วย Python

Preparing Video For Download...