Lesson K-means clustering dan standardization akan membahas menyelesaikan masalah clustering dengan melakukan standardization.
Standardization adalah proses menyamakan weight dari independent variable, agar keduanya memiliki skala yang sama.
Pada lesson ini kita akan melakukan clustering untuk market segmentation. Dimana cluster akan menunjukan tingkat kepuasan dan loyalitas customer. Download data disini.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.cluster import KMeans
data = pd.read_csv ('MarketSegmentation.csv')
x = data.copy()
kmeans = KMeans(2)
kmeans.fit(x)
clusters = x.copy()
clusters['cluster_pred']=kmeans.fit_predict(x)
plt.scatter(clusters['Satisfaction'],clusters['Loyalty'],c=clusters['cluster_pred'],cmap='rainbow')
plt.xlabel('Satisfaction')
plt.ylabel('Loyalty')

Dari grafik diatas, dapat disimpulkan terdapat dua maket segment, warna merah segment customer yang rendah tingkat kepuasaannya, dan ungu untuk segmen yang tingkat kepuasannya.
Solusi diatas mungkin terlihat masuk akal. Namun data science bukan hanya sekedar urutan code program saja. Diperlukan daya analisis dari data scientist.
Umumnya kita akan menggambarkan segmen pasar pada customer seperti berikut:
- kepuasan rendah dan rendah loyalitas.
- kepuasan rendah dan loyal.
- kepuasan tinggi dan rendah loyalitas.
- kepuasan tinggi dan loyal.
Sementara clustering diatas hanya melihat tingkat kepuasan sebagai fitur. Hal ini terjadi dikarenakan perbedaan skala dari variable satisfaction dan loyalitas. Untuk menyelesaikan masalah diatas, perlu dilakukan standardization.
Pada grafik diatas, nampak cluster terbagi kiri dan kanan oleh garis vertikal pada tingkat kepuasan 6. Jika Anda melihat hal seperti ini saat melakukan clustering, ini bisa menjadi indikasi ada yang salah dengan clustering Anda. Karena clustering hanya melihat fitur satisfaction saja, padahal secara logika, segment pasar semestinya dipengaruhi juga oleh loyalitas.
TIPS
Standardization data
Untuk melakukan standardization, kita gunakan modul preprocessing dari library sklearn. Perintah scale akan melakukan standardisasi dengan default mean 0 dan standard deviation 1 untuk setiap variable (kolom) secara terpisah. Caranya sangat mudah, berikut codenya:
from sklearn import preprocessing x_scaled = preprocessing.scale(x)
Hasil dari preprocessing diatas akan berupa array dibawah. Perhatikan, nilai loyality tidak berubah karena sudah di standarisasi sebelum digunakan dalam lesson ini.
array([[-0.93138063, -1.3318111 ],
[-0.15523011, -0.28117124],
....
....
....
[-0.54330537, 0.72944425]])
Gunakan Elbow Method
Gunakan metoda yang sudah kita bahas pada lesson sebelumnya untuk menentukan jumlah cluster paling tepat. Dari grafik kita dapat lihat, 4 atau 5 cluster adalah jumlah cluster terbaik yang akan kita gunakan.
wcss =[]
for i in range(1,10):
kmeans = KMeans(i)
kmeans.fit(x_scaled)
wcss.append(kmeans.inertia_)
plt.plot(range(1,10),wcss)
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')

Final Clustering
Pada lesson ini akan dibahas menghitung model dengan jumlah cluster 4, silakan bereksperimen dengan jumlah cluster lainnya.
Perlu diperhatikan, saat membuat grafik, jangan gunakan data yang sudah distandarisasi. Data standarisasi hanya digunakan untuk menghitung model.
kmeans_new = KMeans(4)
kmeans_new.fit(x_scaled)
clusters_new = x.copy()
clusters_new['cluster_pred'] = kmeans_new.fit_predict(x_scaled)
plt.scatter(clusters_new['Satisfaction'],clusters_new['Loyalty'],c=clusters_new['cluster_pred'],cmap='rainbow')
plt.xlabel('Satisfaction')
plt.ylabel('Loyalty')
