MA1420 · DATA SAINS · SESI 14

Unsupervised Learning:
Clustering & PCA

Tidak semua data punya label. Unsupervised learning menemukan struktur tersembunyi dalam data secara mandiri — mengelompokkan yang serupa, menemukan anomali, dan meringkas dimensi tinggi menjadi representasi yang lebih sederhana.

1. Apa Itu Unsupervised Learning?

💡 ILUSTRASI — PERPUSTAKAAN TANPA KATALOG

Bayangkan kamu mendapat satu juta buku tanpa judul, pengarang, atau kategori. Tugas kamu: susun buku-buku ini secara masuk akal. Kamu akan mulai mengelompokkan berdasarkan kesamaan — buku tipis tentang memasak di satu rak, buku tebal bergambar di rak lain, buku dengan banyak angka di rak matematika.

Itulah unsupervised learning: temukan struktur alami dalam data tanpa panduan label. Tidak ada "jawaban benar" yang bisa kita bandingkan — model sendiri yang mendefinisikan kelompok.

🎯
Clustering
Kelompokkan titik data yang mirip ke dalam satu cluster. Titik dalam satu cluster lebih mirip satu sama lain dibanding titik di cluster lain.
K-Means, DBSCAN, Hierarchical Clustering
📐
Dimensionality Reduction
Kurangi jumlah fitur sambil mempertahankan informasi paling penting. Data berdimensi tinggi diproyeksikan ke dimensi lebih rendah.
PCA, t-SNE, UMAP, Autoencoder
🔍
Anomaly Detection
Temukan titik data yang "tidak normal" — jauh dari pola mayoritas. Tidak butuh label anomali untuk training.
Isolation Forest, One-Class SVM, LOF
AspekSupervised (sesi 13)Unsupervised (sesi ini)
Label YAdaTidak ada
TujuanPrediksi label baruTemukan pola/struktur
EvaluasiBandingkan vs label aktual (akurasi, RMSE, dll.)Lebih sulit — tidak ada "benar/salah". Pakai metrik internal (Silhouette Score, Inertia)
Interpretasi hasilLabel sudah terdefinisi dari awalPerlu domain expert untuk memberi makna pada cluster/komponen yang ditemukan

2. K-Means Clustering: Algoritma Dasar

K-Means adalah algoritma clustering paling populer. Tujuannya: bagi n titik data ke dalam k cluster sehingga setiap titik masuk ke cluster dengan centroid (pusat) terdekat.

💡 ILUSTRASI — MAHASISWA PILIH KELOMPOK BELAJAR

100 mahasiswa berkumpul di aula. Dosen menunjuk 3 titik random: "Kalian jadi ketua kelompok A, B, C." Semua mahasiswa berdiri di dekat ketua yang paling mirip mereka. Setelah berkumpul, ketua baru adalah rata-rata posisi anggota kelompoknya. Proses ini diulang sampai tidak ada yang pindah kelompok.

ITER 0: Inisialisasi — 3 centroid random (★)
ITER 1: Setiap titik ke centroid terdekat
ITER 2: Update centroid ke rata-rata cluster
KONVERGEN: Tidak ada perubahan cluster
ALGORITMA K-MEANS — 4 LANGKAH

1. Inisialisasi: Pilih k titik secara random sebagai centroid awal (K-Means++ memilih lebih cerdas)

2. Assignment: Setiap titik ditetapkan ke centroid terdekat (jarak Euclidean)

3. Update: Centroid baru = rata-rata semua titik dalam cluster tersebut

4. Ulangi 2–3 sampai konvergen (centroid tidak berubah atau perubahan < threshold)

Minimasi: Σₖ Σᵢ∈Cₖ ‖xᵢ − μₖ‖²  (Within-Cluster Sum of Squares / Inertia)

Segmentasi Pelanggan — Studi Kasus

Toko online di Indonesia ingin mengelompokkan pelanggan berdasarkan perilaku belanja untuk strategi marketing yang lebih tepat sasaran.

🏆 Cluster 0 — Premium
Frekuensi beli12.3×/bln
Avg. transaksiRp 850rb
Last purchase3 hari
Jumlah18%

Pelanggan loyal nilai tinggi. Prioritaskan program VIP dan exclusive offers.

📦 Cluster 1 — Regular
Frekuensi beli3.1×/bln
Avg. transaksiRp 210rb
Last purchase18 hari
Jumlah55%

Pelanggan aktif. Dorong dengan rekomendasi personalisasi dan flash sale.

😴 Cluster 2 — Dormant
Frekuensi beli0.3×/bln
Avg. transaksiRp 75rb
Last purchase92 hari
Jumlah27%

Sudah lama tidak beli. Kampanye win-back dengan diskon reaktivasi besar.

3. Memilih Jumlah Cluster K yang Tepat

K harus ditentukan sebelum menjalankan K-Means. Bagaimana memilih K yang optimal?

ELBOW METHOD — INERTIA vs JUMLAH CLUSTER K
K=3 ← Elbow! 1 2 4 5 6 Inertia (WCSS) Jumlah Cluster K

Titik elbow adalah K di mana penurunan inertia mulai melambat drastis. Menambah K di atas titik ini memberikan manfaat yang semakin kecil dibanding kompleksitas yang bertambah.

💡 DUA METODE POPULER MEMILIH K

Elbow Method: Plot inertia (WCSS) vs K. Pilih K di "siku" grafik — titik di mana penurunan inertia melambat. Bersifat heuristik, tidak selalu ada siku yang jelas.

Silhouette Score: Ukur seberapa mirip setiap titik dengan clusternya sendiri vs cluster tetangga. Nilai antara −1 dan +1. Pilih K dengan Silhouette Score tertinggi.

s(i) = (b(i) − a(i)) / max(a(i), b(i))

a(i) = jarak rata-rata ke anggota cluster sendiri  |  b(i) = jarak rata-rata ke cluster terdekat

🎮 DEMO INTERAKTIF — PENGARUH NILAI K PADA CLUSTERING
Jumlah cluster K = 3
K=3 | Drag slider untuk lihat perubahan cluster

4. DBSCAN: Clustering Berbasis Kepadatan

K-Means mengasumsikan cluster berbentuk bola (spherical) dan membutuhkan K ditentukan terlebih dahulu. DBSCAN bekerja berbeda: ia menemukan kelompok berdasarkan kepadatan titik.

K-MEANS PADA DATA BERBENTUK CINCIN
Cluster A Cluster B K-Means memotong secara salah!
DBSCAN PADA DATA YANG SAMA
DBSCAN mendeteksi bentuk dengan benar! C1 C2
PARAMETER DBSCAN

eps (ε): radius lingkungan suatu titik. Titik lain dalam radius ini dianggap "tetangga".

min_samples: jumlah minimum titik dalam radius ε agar suatu titik dianggap "core point".

3 tipe titik:

Core point — punya ≥ min_samples tetangga dalam radius ε  |  Border point — dalam radius core point tapi tidak memenuhi syarat core  |  Noise/Outlier — bukan core dan tidak dalam radius siapapun

KriteriaK-MeansDBSCAN
Jumlah KHarus ditentukan di awalOtomatis ditemukan
Bentuk clusterHanya spherical/convexBentuk arbitrer (cincin, U, S)
OutlierSemua titik masuk clusterTitik noise teridentifikasi sebagai −1
Cocok untukCluster jelas terpisah, ukuran similarCluster berdensitas tinggi, data dengan outlier
KelemahanBuruk untuk cluster non-sphericalButuh tuning eps dan min_samples

5. Evaluasi Clustering

Tanpa label yang benar, evaluasi clustering mengandalkan metrik internal — mengukur kualitas cluster dari struktur data itu sendiri.

SILHOUETTE SCORE — METRIK TERBAIK UNTUK CLUSTERING

s(i) = (b(i) − a(i)) / max(a(i), b(i))

a(i) = rata-rata jarak titik i ke semua titik lain dalam clusternya sendiri (kohesi)

b(i) = rata-rata jarak titik i ke semua titik di cluster terdekat (separasi)

+1 = dalam cluster yang tepat  |  0 = di perbatasan cluster  |  −1 = mungkin di cluster salah

Silhouette Score keseluruhan = rata-rata s(i) untuk semua titik. Semakin tinggi semakin baik (ideal > 0.5)

6. PCA — Principal Component Analysis

💡 ILUSTRASI — FOTO 3D JADI FOTO 2D

Bayangkan objek 3D (panjang × lebar × tinggi). Untuk difoto, kita proyeksikan ke bidang 2D (foto). Kehilangan sedikit informasi (kedalaman), tapi representasi 2D ini masih berguna dan jauh lebih mudah ditangani. Kita pilih sudut foto yang mempertahankan paling banyak informasi (variasi objek).

PCA melakukan hal serupa: dari p dimensi asli, PCA menemukan k arah (principal components) yang menangkap variansi data paling besar.

DATA ASLI
50
dimensi / fitur

Sulit divisualisasi, banyak redundansi, multikolinieritas tinggi


PCA
SETELAH PCA
5
principal components
PC1
42%
PC2
25%
PC3
15%
PC4+5
10%

5 PC menangkap 92% total variansi!

KAPAN MENGGUNAKAN PCA?

1. Visualisasi data berdimensi tinggi: Reduksi ke 2D atau 3D untuk scatter plot eksplorasi

2. Preprocessing sebelum supervised learning: Kurangi dimensi → kurangi multikolinieritas → training lebih cepat

3. Compression: Simpan data penting dalam format lebih ringkas

Perhatian: Principal components adalah kombinasi linear dari fitur asli — tidak mudah diinterpretasikan secara domain. Jika interpretabilitas penting, pertimbangkan feature selection biasa.

7. Praktik Python: K-Means, DBSCAN, dan PCA

PYTHON · UNSUPERVISED LEARNING LENGKAP
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score

np.random.seed(42)
n = 300
# Simulasi data pelanggan: frekuensi, nilai transaksi, recency
frekuensi = np.concatenate([
    np.random.normal(12, 2, 60),   # premium
    np.random.normal(4,  1, 160),   # reguler
    np.random.normal(0.5,0.3, 80)   # dormant
])
nilai = np.concatenate([
    np.random.normal(850, 100, 60),
    np.random.normal(210, 50,  160),
    np.random.normal(75,  20,  80)
])

df = pd.DataFrame({'frekuensi': frekuensi.clip(0), 'nilai_rb': nilai.clip(10)})

# ── Wajib: scaling sebelum clustering ────────────
sc = StandardScaler()
X = sc.fit_transform(df)

# ── K-Means: Elbow method ─────────────────────────
inertia = []
sil_scores = []
K_range = range(2, 8)
for k in K_range:
    km = KMeans(n_clusters=k, random_state=42, n_init=10).fit(X)
    inertia.append(km.inertia_)
    sil_scores.append(silhouette_score(X, km.labels_))

print("=== ELBOW METHOD ===")
for k, iner, sil in zip(K_range, inertia, sil_scores):
    print(f"K={k}: Inertia={iner:7.1f} | Silhouette={sil:.3f}")

# ── K-Means dengan K=3 ───────────────────────────
km3 = KMeans(n_clusters=3, random_state=42, n_init=10)
df['cluster'] = km3.fit_predict(X)

print("\n=== PROFIL CLUSTER K=3 ===")
profil = df.groupby('cluster').agg({
    'frekuensi': ['mean', 'count'],
    'nilai_rb': 'mean'
}).round(1)
print(profil)

# ── DBSCAN ───────────────────────────────────────
dbs = DBSCAN(eps=0.4, min_samples=5)
labels_dbs = dbs.fit_predict(X)
n_clusters = len(set(labels_dbs)) - (1 if -1 in labels_dbs else 0)
n_noise    = list(labels_dbs).count(-1)
print(f"\nDBSCAN: {n_clusters} cluster, {n_noise} noise points")

# ── PCA: visualisasi 2D ───────────────────────────
# Tambahkan fitur recency untuk demo PCA (3 dimensi → 2)
df['recency'] = np.where(df.cluster==0,
    np.random.normal(3,1,n), np.where(df.cluster==1,
    np.random.normal(18,5,n), np.random.normal(90,20,n)))
X3 = StandardScaler().fit_transform(df[['frekuensi','nilai_rb','recency']])

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X3)
print(f"\n=== PCA: 3D → 2D ===")
print(f"Explained variance ratio: {pca.explained_variance_ratio_.round(3)}")
print(f"Total variansi tertangkap: {pca.explained_variance_ratio_.sum():.1%}")
📤 OUTPUT
=== ELBOW METHOD ===
K=2: Inertia=  312.4 | Silhouette=0.541
K=3: Inertia=  148.7 | Silhouette=0.623  ← tertinggi!
K=4: Inertia=  121.3 | Silhouette=0.571
K=5: Inertia=  108.9 | Silhouette=0.534
K=6: Inertia=  101.2 | Silhouette=0.498

=== PROFIL CLUSTER K=3 ===
        frekuensi           nilai_rb
             mean count         mean
cluster
0            11.8    58        847.3  ← Premium
1             4.1   159        211.6  ← Reguler
2             0.5    83         74.9  ← Dormant

DBSCAN: 3 cluster, 7 noise points

=== PCA: 3D → 2D ===
Explained variance ratio: [0.612 0.285]
Total variansi tertangkap: 89.7%  ← 90% info tertangkap di 2D!

Uji Pemahaman Sesi 14

🧩PERTANYAAN 1 — K-MEANS
Setelah menjalankan K-Means dengan K=4 pada data transaksi e-commerce, Anda ingin mengetahui apakah K=4 adalah pilihan terbaik. Langkah apa yang tepat?
Benar! B. Tidak ada cara langsung menentukan K "terbaik" tanpa eksplorasi. Elbow method memplot inertia — cari titik "siku" di mana penurunan melambat. Silhouette Score mengukur kohesi dan separasi cluster secara bersamaan. Gunakan keduanya bersama dengan domain knowledge untuk membuat keputusan akhir.
🧩PERTANYAAN 2 — PCA
Dataset memiliki 100 fitur. Setelah PCA, 5 principal component pertama menjelaskan 88% total variansi. Apa artinya dan apa yang sebaiknya dilakukan?
Benar! B. Explained variance 88% dengan 5 dari 100 komponen adalah hasil yang sangat baik. Ini berarti 95% dimensionalitas dapat direduksi sambil hanya "kehilangan" 12% informasi (variansi). Dalam praktik, manfaatnya sangat besar: training lebih cepat, kurangi multikolinieritas, memungkinkan visualisasi 2D/3D. Threshold umum: pertahankan PC hingga 80–95% explained variance.
🧩PERTANYAAN 3 — DBSCAN VS K-MEANS
Analisis GPS tracking ojek online di Jakarta menghasilkan data koordinat. Beberapa titik adalah outlier (koordinat error GPS). Cluster berbentuk jalur jalan yang tidak spherical. Algoritma mana yang lebih tepat?
Benar! B. Masalah ini cocok sekali untuk DBSCAN karena: (1) cluster berbentuk jalur memanjang — bukan spherical, K-Means tidak bisa tangkap ini, (2) outlier GPS error perlu diidentifikasi sebagai noise, bukan dipaksa masuk cluster, (3) jumlah cluster (rute unik) tidak diketahui sebelumnya. DBSCAN mendeteksi pola kepadatan sepanjang jalur jalan dengan sangat baik.
📋 Ringkasan Sesi 14