18 minute read

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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 atau KModes.
  • 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 k yang optimal.

Nilai k 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:

  1. 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.
  2. Plot Grafik:
    • Buat grafik dengan sumbu X adalah nilai K dan sumbu Y adalah nilai total WCD.
  3. 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 k.

# 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 k, yakni k=4 atau k=6.

Langkah IV Saya akan coba dulu untuk k=6 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.