K-Means mengelompokkan data tanpa label lewat dua langkah yang diulang bergantian: assign tiap titik ke centroid (titik pusat) terdekat, lalu update posisi tiap centroid ke rata-rata anggotanya. Widget ini menjalankan kedua langkah itu satu per satu pada data segmentasi 30 nasabah (frekuensi transaksi vs nilai transaksi), sehingga proses konvergensinya terlihat, bukan sekadar hasil akhirnya.

Cara Pakai

Atur Jumlah cluster (k) lewat slider, lalu klik Langkah berikutnya berulang kali. Klik pertama menjalankan assignment: tiap nasabah diwarnai sesuai centroid terdekat (posisi centroid awal dipilih acak dari titik data). Klik berikutnya menjalankan update: tiap centroid berpindah ke rata-rata koordinat anggotanya, ditandai animasi pergeseran posisi. Ulangi assign–update sampai status berubah menjadi Konvergen — artinya assignment sudah tidak berubah lagi antar-iterasi. Panel atas menampilkan inertia (total jarak kuadrat semua titik ke centroid-nya) yang seharusnya terus turun atau stagnan di tiap langkah, tidak pernah naik. Klik ↻ Ulang untuk mencoba posisi centroid awal berbeda.

Rumus Kunci

Langkah assignment — tiap titik $x_i$ ditugaskan ke cluster dengan centroid $\mu_k$ terdekat (jarak Euclidean kuadrat):

$$c_i = \arg\min_{k} \lVert x_i - \mu_k \rVert^2$$

Langkah update — tiap centroid dipindah ke rata-rata (mean) seluruh titik yang jadi anggotanya:

$$\mu_k = \frac{1}{|C_k|}\sum_{x_i \in C_k} x_i$$

Fungsi objektif (inertia / within-cluster sum of squares) yang diminimalkan algoritma secara bertahap di tiap iterasi:

$$J = \sum_{k=1}^{K}\sum_{x_i \in C_k} \lVert x_i - \mu_k \rVert^2$$

Contoh Angka

4 nasabah dengan k = 2, koordinat (frekuensi transaksi, nilai transaksi): A(2, 3), B(3, 4), C(8, 7), D(9, 8). Centroid awal dipilih dari dua titik data itu sendiri: $\mu_1 = A = (2,3)$, $\mu_2 = D = (9,8)$.

Langkah 1 — Assignment (hitung jarak kuadrat tiap titik ke kedua centroid):

TitikJarak² ke μ₁=(2,3)Jarak² ke μ₂=(9,8)Ditugaskan ke
A(2,3)074Cluster 1
B(3,4)1+1=236+16=52Cluster 1
C(8,7)36+16=521+1=2Cluster 2
D(9,8)740Cluster 2

Inertia setelah assignment ini: $J = 0+2+2+0 = 4$.

Langkah 2 — Update centroid (rata-rata tiap cluster):

$$\mu_1^{\text{baru}} = \left(\frac{2+3}{2}, \frac{3+4}{2}\right) = (2{,}5,\ 3{,}5) \qquad \mu_2^{\text{baru}} = \left(\frac{8+9}{2}, \frac{7+8}{2}\right) = (8{,}5,\ 7{,}5)$$

Langkah 3 — Inertia setelah update (jarak tiap titik ke centroid barunya):

$$J_{\text{baru}} = \big[(2{-}2{,}5)^2{+}(3{-}3{,}5)^2\big]+\big[(3{-}2{,}5)^2{+}(4{-}3{,}5)^2\big]+\big[(8{-}8{,}5)^2{+}(7{-}7{,}5)^2\big]+\big[(9{-}8{,}5)^2{+}(8{-}7{,}5)^2\big]$$$$J_{\text{baru}} = 0{,}5+0{,}5+0{,}5+0{,}5 = 2{,}0$$

Inertia turun dari 4,0 menjadi 2,0 setelah satu putaran assign–update — persis pola yang harus terlihat di widget setiap kali tombol Langkah berikutnya diklik. Karena assignment A, B, C, D ke cluster masing-masing tidak akan berubah lagi pada iterasi berikutnya (mereka sudah paling dekat ke centroid barunya), algoritma langsung konvergen di iterasi ke-1 untuk contoh sederhana ini.