Mengenal K-Modes Clustering untuk Mengelompokkan Data Kategorik
Beberapa hari yang lalu, rekan kantor saya bertanya kepada saya tentang analisa k-modes clustering. Awalnya saya kira rekan saya tersebut bercanda karena saya hanya tahu dan pernah menulis beberapa artikel tentang k-means clustering.
Setelah googling sana-sini, saya akhirnya mendapatkan suatu penjelasan tentang apa yang dimaksud dengan k-modes clustering. Berikut adalah penjelasan yang saya dapatkan:
Penjelasan Singkat
Bayangkan sebuah toko pakaian
Anda punya toko pakaian dengan banyak sekali pelanggan. Masing-masing pelanggan punya gaya berpakaian yang berbeda-beda, ada yang suka warna cerah, ada yang suka warna gelap, ada yang suka model baju santai, ada yang suka model baju formal, dan sebagainya.
Mengelompokkan Pelanggan
K-modes clustering ini seperti seorang penata gaya yang sangat pintar. Dia bisa melihat semua pelanggan Anda dan mengelompokkan mereka berdasarkan gaya berpakaian. Misalnya, dia akan mengelompokkan pelanggan yang suka warna cerah dan model baju santai menjadi satu kelompok, lalu pelanggan yang suka warna gelap dan model baju formal menjadi kelompok lain, dan seterusnya.
Kenapa Perlu Mengelompokkan?
Kenapa sih harus repot-repot mengelompokkan pelanggan? Ada banyak manfaatnya, lho:
- Membuat Promosi Lebih Efektif: Kalau sudah tahu kelompok-kelompok pelanggan, Anda bisa membuat promosi yang lebih sesuai dengan minat masing-masing kelompok. Misalnya, untuk kelompok yang suka warna cerah dan model baju santai, Anda bisa bikin promo diskon khusus untuk baju-baju dengan ciri-ciri seperti itu.
- Mengembangkan Produk Baru: Dengan mengetahui preferensi masing-masing kelompok, Anda bisa mengembangkan produk baru yang lebih sesuai dengan kebutuhan mereka. Misalnya, kalau ada kelompok pelanggan yang banyak suka baju olahraga, Anda bisa buat koleksi baju olahraga baru.
- Mengerti Perilaku Pelanggan: Dengan mengelompokkan pelanggan, Anda bisa lebih memahami perilaku mereka. Misalnya, kelompok pelanggan yang suka warna gelap dan model baju formal mungkin lebih sering membeli produk pada saat tertentu atau melalui saluran tertentu.
Jadi, apa itu k-modes clustering sebenarnya?
K-modes clustering adalah sebuah teknik dalam data sains yang digunakan untuk mengelompokkan data yang memiliki data kategorik. Dalam contoh toko pakaian tadi, kategori-kategorinya adalah warna, model baju, dan sebagainya. Berbeda dengan k-means clustering yang memiliki input data numerik.
Dalam konteks bisnis, k-modes clustering sangat berguna untuk memahami pelanggan dengan lebih baik, sehingga bisnis bisa mengambil keputusan yang lebih tepat. Selain di bidang retail, k-modes clustering juga bisa digunakan di berbagai bidang lain, seperti pemasaran, keuangan, dan kesehatan.
Algoritma
Langkah-langkah dalam mengerjakan k-modes clustering sebenarnya mirip dengan pengerjaan k-means clustering. Prinsipnya sangat dipengaruhi oleh konsep simmilarity and dissimilarity dari suatu data.
Berikut adalah ilustrasinya: bayangkan kita sedang memilah-milah kelereng warna-warni.
Langkah-langkah K-modes Clustering:
- Tentukan Jumlah Kelompok (K):
- Pertama-tama, kita harus memutuskan ingin membagi data menjadi berapa kelompok. Misalnya, kita ingin mengelompokkan kelereng menjadi 3 kelompok warna (merah, biru, hijau). Jumlah kelompok ini disebut K.
- Pilih Pusat Kelompok Secara Acak:
- Kita ambil beberapa kelereng secara acak dan jadikan sebagai pusat dari setiap kelompok. Kelereng-kelereng ini akan menjadi contoh dari kelompoknya masing-masing.
- Hitung Jarak Setiap Data ke Pusat Kelompok:
- Setiap kelereng akan kita ukur jaraknya ke setiap pusat kelompok. Jarak di sini bukan jarak fisik, tapi seberapa mirip kelereng tersebut dengan pusat kelompok. Misalnya, kelereng merah akan lebih dekat ke pusat kelompok merah daripada pusat kelompok biru.
- Tentukan Kelompok Setiap Data:
- Setelah menghitung jarak, setiap kelereng akan kita masukkan ke kelompok yang pusatnya paling dekat. Jadi, kelereng merah kemungkinan besar akan masuk ke kelompok merah.
- Perbarui Pusat Kelompok:
- Setelah semua kelereng terkelompokkan, kita akan menghitung ulang pusat kelompok. Pusat kelompok yang baru ini adalah kelereng yang paling banyak mewakili kelompoknya.
- Ulangi Langkah 3-5:
- Langkah 3-5 akan terus diulang sampai tidak ada lagi perubahan pada kelompok. Artinya, setiap kelereng sudah berada di kelompok yang paling tepat.
Konsep-konsep Penting:
- Centroid: Titik pusat dari setiap kelompok.
- Jarak: Ukuran kemiripan antara data dengan centroid.
- Iterasi: Proses pengulangan langkah-langkah dalam algoritma sampai mencapai hasil yang konvergen.
Software untuk Melakukan Analisa K-modes Clustering:
Berhubung saya hanya tahu R dan Py, maka saya hanya akan meremomendasikan dua tools tersebut untuk melakukannya.
- Python: Menggunakan library seperti
scikit-learn
atauKModes
. - R: Menggunakan library seperti
klaR
.
Proses Kritis Saat Melakukan K-Modes Clustering
Oleh karena kita menggunakan R atay Py, kita tidak perlu memusingkan algoritma atau langkah-langkah pengerjaannya karena proses tersebut dilakukan secara otomatis oleh skrip. Nah, hal yang paling kritis adalah penentuan nilai yang optimal.
Nilai harus sekecil mungkin yang penting setiap cluster-nya berisi anggota-anggota yang mirip dan masing-masing cluster-nya berbeda.
Mirip dengan proses k-means clustering.
Bagaimana caranya?
Menentukan Nilai K dalam K-Modes Clustering dengan Within-Cluster Difference
Memahami Within-Cluster Difference (WCD)
- Definisi: WCD adalah ukuran total perbedaan (disimilaritas) antara setiap data point dalam sebuah cluster dengan centroid cluster tersebut. Semakin kecil nilai WCD, semakin homogen anggota dalam suatu cluster.
- Tujuan: Dengan meminimalkan WCD, kita berusaha untuk membentuk cluster-cluster yang kompak dan terpisah dengan baik.
Metode Elbow Method dengan WCD
Metode Elbow Method adalah salah satu teknik yang paling umum digunakan untuk menentukan nilai K optimal dalam K-Modes Clustering. Berikut langkah-langkahnya:
- Hitung WCD untuk Berbagai Nilai K:
- Jalankan algoritma K-Modes Clustering beberapa kali dengan nilai K yang berbeda-beda (misalnya, K = 2, 3, 4, …).
- Untuk setiap nilai K, hitung total WCD dari semua cluster.
- Plot Grafik:
- Buat grafik dengan sumbu X adalah nilai K dan sumbu Y adalah nilai total WCD.
- Identifikasi Titik Siku:
- Cari titik pada grafik di mana penurunan nilai WCD mulai melambat secara signifikan. Titik ini sering disebut sebagai “siku”. Nilai K pada titik siku umumnya dianggap sebagai nilai K yang optimal.
Interpretasi Grafik:
- Penurunan Drastis: Pada awal, ketika nilai K masih kecil, setiap penambahan cluster akan menyebabkan penurunan WCD yang signifikan karena data dibagi menjadi kelompok yang lebih kecil dan lebih homogen.
- Penurunan Melambat: Setelah mencapai titik siku, penambahan cluster tidak lagi memberikan penurunan WCD yang signifikan. Ini menunjukkan bahwa penambahan cluster lebih lanjut tidak memberikan peningkatan yang berarti dalam kualitas clustering.
Visualisasi Contoh Grafik Elbow Method
Mengapa Titik Siku Menunjukkan Nilai K Optimal?
- Kompromi: Titik siku mewakili titik di mana terdapat kompromi antara memiliki cluster yang sedikit (untuk interpretasi yang lebih mudah) dan memiliki cluster yang sangat homogen (untuk akurasi yang lebih tinggi).
- Diminishing Returns: Setelah titik siku, penambahan cluster hanya memberikan sedikit peningkatan dalam homogenitas cluster, namun meningkatkan kompleksitas model.
Tutorial dengan R
Pada bagian ini, saya akan memberikan tutorial singkat bagaimana cara
melakukan k-modes clustering menggunakan library(klaR)
di bahasa
pemrograman R.
Data yang Digunakan
Misalkan saya memiliki data sebagai berikut:
df %>% knitr::kable()
age | gender | marital_status | income | purchase_frequency |
---|---|---|---|---|
25-34 | Female | Married | Medium | Weekly |
18-24 | Male | Single | Low | Daily |
35-44 | Female | Married | High | Monthly |
45-54 | Male | Divorced | Medium | Rarely |
55+ | Female | Married | High | Monthly |
25-34 | Male | Single | Low | Daily |
18-24 | Female | Married | Medium | Weekly |
35-44 | Male | Single | High | Monthly |
45-54 | Female | Divorced | Medium | Rarely |
55+ | Male | Married | High | Monthly |
45-54 | Male | Single | High | Weekly |
Tabel di atas adalah data 11 orang pelanggan yang hendak dikelompokan.
Langkah I persiapan memanggil libraries yang dibutuhkan.
# data carpentry
library(dplyr)
# k modes clustering
library(klaR)
# parallel computing
library(parallel)
# berapa banyak cores yang digunakan
n_core = detectCores()
Langkah II menghitung nilai WCD untuk berbagai nilai .
# membuat function untuk menghitung WCD
within_diff = function(k_input){
kmodes_result = kmodes(df,k_input,iter.max = 15)
output = kmodes_result$withindiff %>% sum()
return(output)
}
# proses perhitungan
k_val = 2:11
wcd_k = mcmapply(within_diff,k_val)
Langkah III buat plot-nya.
Dari grafik di atas, saya bisa menyimpulkan ada dua kemungkinan nilai , yakni atau .
Langkah IV Saya akan coba dulu untuk berikut ini:
cl_ana = kmodes(df,6,iter.max = 10)
# berikut adalah cluster center-nya
cl_ana$modes |>
knitr::kable()
age | gender | marital_status | income | purchase_frequency |
---|---|---|---|---|
18-24 | Male | Single | Low | Daily |
35-44 | Male | Single | High | Monthly |
18-24 | Female | Married | Medium | Weekly |
55+ | Female | Married | High | Monthly |
45-54 | Female | Divorced | Medium | Rarely |
25-34 | Male | Single | Low | Daily |
# berikut adalah tabulasinya
library(expss)
df |>
mutate(cluster = cl_ana$cluster) |>
tab_cols(cluster) |>
tab_cells(age,gender,marital_status,income,
purchase_frequency) |>
tab_stat_cpct() |>
tab_pivot()
cluster | ||||||
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
age | ||||||
18-24 | 100 | 50 | ||||
25-34 | 50 | 100 | ||||
35-44 | 50 | 33.3 | ||||
45-54 | 50 | 100 | ||||
55+ | 66.7 | |||||
#Total cases | 1 | 2 | 2 | 3 | 2 | 1 |
gender | ||||||
Female | 100 | 66.7 | 50 | |||
Male | 100 | 100 | 33.3 | 50 | 100 | |
#Total cases | 1 | 2 | 2 | 3 | 2 | 1 |
marital_status | ||||||
Divorced | 100 | |||||
Married | 100 | 100.0 | ||||
Single | 100 | 100 | 100 | |||
#Total cases | 1 | 2 | 2 | 3 | 2 | 1 |
income | ||||||
High | 100 | 100.0 | ||||
Low | 100 | 100 | ||||
Medium | 100 | 100 | ||||
#Total cases | 1 | 2 | 2 | 3 | 2 | 1 |
purchase_frequency | ||||||
Daily | 100 | 100 | ||||
Monthly | 50 | 100.0 | ||||
Rarely | 100 | |||||
Weekly | 50 | 100 | ||||
#Total cases | 1 | 2 | 2 | 3 | 2 | 1 |
if you find this article helpful, support this blog by clicking the ads.