Machine Learning Descriptive Case: Customer Segmentation
Sewaktu kegiatan mengajar di kelas Data Science di Purwadhika Startup and Coding School, saya pernah menayakan “Jika saya mengatakan…
Sewaktu kegiatan mengajar di kelas Data Science di Purwadhika Startup and Coding School, saya pernah menayakan “Jika saya mengatakan Machine Learning, apa yang pertama kali terlintas di pikiran?”. Jawaban yang sering saya dengar seperti “untuk meramal”, “alat prediksi”, “Artificial Intelligence” dan lain sebagainya. Secara umum, tentu jawaban tersebut tidak salah tetapi Machine Learning tidak terbatas sebagai alat untuk prediksi saja. Untuk memahami apa itu Machine Learning, sebaiknya coba kita definisikan terlebih dahulu apa itu Machine Learning.
Machine Learning
Dari namanya saja, kita bisa mengatakan Machine Learning adalah pembelajaran melalui mesin. Di konteks kita, Machine Learning sendiri bisa didefiniskan sebagai mesin atau algoritm yang mampu mempelajari pola dari data untuk melaksanakan kegiatan yang berhubungan dengan data.
Jika kalian memikirkan bahwa Artificial Intelligence dan Machine Learning adalah hal yang sama, kalian tidak meleset jauh tetapi kedua kalimat tersebut sebenarnya memiliki arti yang berbeda. Artificial Intelligence sendiri dapat dikatakan sebagai usaha untuk membuat kegiatan intelektual manusia menjadi otomatis. Dengan demikian, bisa dikatakan bahwa Machine Learning adalah subset dari Artificial Intelligence sebab tidak semua kegiatan dari Artificial Intelligence membutuhkan proses pembelajaran.
Dari definisi Machine Learning diatas, itu berarti kegiatann Machine Learning tidak terbatas sebagai alat untuk prediksi saja sebab tugas dari Machine Learning lebih ke arah belajar dari data; prediksi hanyalah salah satu output dari kegiatan Machine Learning.
Jika begitu, apa fungsi lain Machine Learning? Ini hal lain yang sering dilupakan oleh seseorang yang ingin masuk ke dunia Data Science. Ingat, Machine Learning itu bekerja untuk mempelajari data, sehingga Machine Learning selain untuk melakukan prediksi juga bisa digunakan untuk menjelaskan data. Dengan menggunakan Machine Learning, kita mampu memahami data kita lebih baik sehingga kita dapat menjelaskan hal yang sebelumnya tidak disadari dengan melihat data secara kasar saja. Hal ini yang disebut Machine Learning Descriptive.
Secara pribadi, saya berpendapat Machine Learning Descriptive ini tidak kalah menariknya dibandingkan dengan proses prediksi yang bisa dilakukan oleh Machine Learning. Terlebih lagi, di dunia akademis ataupun industri proses untuk memahami data yang ada bisa dianggap lebih penting karena tidak selamanya proses dengan data itu membutuhkan prediksi tetapi kita selalu membutuhkan proses analisis data untuk memahami data yang ada.
Sekarang saya akan menunjukkan salah satu contoh dimana kita mengaplikasikan Machine Learning untuk kebutuhan memahami data yaitu Clustering Analysis.
Clustering Analysis
Di dalam Machine Learning terdapat bidang pembelajaran yang disebut sebagai Unsupervised Learning dimana kita menggunakan Machine Learning tanpa adanya target pembelajaran atau biasa disebut label. Salah satu contoh dari Unsupervised Learning yang sering digunakan adalah Clustering Algorithm yang digunakan untuk membuat segmentasi dari data yang kita miliki.
Metode apapun di Clustering Algorithm selalu menggunakan jarak antar suatu titik dengan titik data lainnya sebagai pusat perhitungan dalam membuat kluster. Dengan kata lain, kita dapat mengatakan Clustering Alghoritm bertujuan untuk mencari jarak sekecil mungkin antara suatu data dari kluster yang sama dibandingkan dengan data dari kluster yang berbeda.
Ada banyak metode yang termasuk di dalam Clustering Algorithm, tetapi saya hanya akan menggunakan metode yang paling simpel dan sering digunakan yaitu K-Means.
K-Means
K-means memiliki cara kerja yang sangat mudah untuk dipahami. Pertama, kita menentukan jumlah kluster yang kita inginkan untuk mengelompokan data tersebut. Secara acak, algoritm K-Means akan menjadikan suatu titik data menjadi pusat kluster yang disebut dengan centroid. Setelah itu, setiap data akan dimasukkan kedalam kluster terdekat berdasarkan jarak data tersebut dengan centroid dan di kluster yang baru, centroid baru dibentuk. Langkah ini dilakukan terus hingga variasi data tidak bisa dikurangin lebih jauh lagi. Perhitungan jarak antar data dengan centroid sendiri dilakukan menggunakan metode yang dinamakan Euclidean Distance. Untuk lebih jelasnya, bisa dilihat di gambar dibawah ini.
Memakai metode K-Means berarti kita menentukan jumlah kluster yang kita inginkan. Yang pasti menjadi pertanyaan adalah, berapa jumlah kluster yang seharusnya kita gunakan? Untuk menjawab pertanyaan ini, serta untuk belajar model K-Means untuk mendeskripsikan data kita akan langsung mencoba kepada data asli.
Mall Customer Segmentation
Saya akan menggunakan data synthetic dari Kaggle mengenai pengunjung mall. Mari kita lihat seperti apa data kita.
import pandas as pd import seaborn as sns import matplotlib.pyplot as pltfrom sklearn.preprocessing import StandardScaler, LabelEncodermall = pd.read_csv('Mall_Customers.csv')
Kita memiliki 5 kolom yang berupa CustomerID sebagai penanda pelanggan, Gender yaitu jenis kelamin pelanggan, Age yaitu umur pelanggan, Annual Income (k$) yaitu pendapatan pertahun, dan Spending Score (1–100) yaitu nilai yang diberikan oleh mall kepada pelanggan sebagai penilaian seberapa besar seseorang mengeluarkan uang di mall.
Karena kita tidak membutuhkan kolom CustomerID, maka saya akan menghilangkan kolom tersebut. Selain itu, untuk mempermudah pekerjaan nantinya saya akan merubah nama kolom Annual Income (k$) dan Spending Score (1–100) menjadi Annual Income dan Spending Score saja.
Juga, karena data di kolom Gender kita berupa Male dan Female, saya akan menggunakan LabelEncoder untuk merubah Female menjadi value 0 dan Male menjadi value 1. Saya melakukan ini karena Machine Learning K-Means model membutuhkan value numerical untuk dapat bekerja. LabelEncoder sendiri bekerja dengan cara merubah seluruh kategori yang ada di dalam suatu kolom menjadi angka. Angka tersebut diurutkan berdasarkan huruf abjad dari kategori yang ada.
mall.drop('CustomerID', axis = 1, inplace = True)mall.rename(columns = {'Annual Income (k$)': 'Annual Income','Spending Score (1-100)': 'Spending Score'}, inplace = True)labeler = LabelEncoder()mall['Gender'] = labeler.fit_transform(mall['Gender'])
Setelah mendapatkan data yang saya ingingkan, dapat kita coba untuk melihat bagaimana persebaran data kita serta hubungan antar satu kolom dengan kolom lainnya.
sns.pairplot(mall)
Hal menarik yang dapat saya lihat dari visualisasi data diatas adalah:
Kita mempunyai pelanggan Mall dengan rentang umur yang lebih muda
Rata-rata Annual Income pelanggan mall memiliki penghasilan dibawah 100K$
Terdapat Normal distribusi untuk Spending Score pelanggan, yaitu mendekati nilai 50
Hubungan antara kolom Annual Income dan Spending Score membentuk suatu kluster yang dapat kita lihat secara langsung.
Kita sudah memiliki beberapa asumsi untuk bekerja dengan data kita, sekarang kita akan mencoba untuk menggunakan Machine Learning model K-Means untuk membantu mengelompokan data kita. Sebelum kita menggunakan model K-Means, ingat bahwa model ini bekerja berdasarkan jarak dari suatu data sehingga akan lebih baik kita menyamakan skala dari data numerical kita. Kali ini saya akan menstandarisasi data (Menjadikan data menjadi Z-score sehingga data memiliki mean 0 dan standard deviation 1).
scaler = StandardScaler()mall = pd.DataFrame(scaler.fit_transform(mall), columns = mall.columns)
Menggunakan K-Means berarti kita harus menentukan jumlah kluster yang kita inginkan, untuk itu kita dapat menggunakan elbow method. Saya akan langsung menggunakan plot untuk menjelaskan apa itu elbow method.
from sklearn.cluster import KMeansinertia_list = []
for i in range(1,11): kmeans = KMeans(n_clusters = i) kmeans.fit(mall) inertia_list.append(kmeans.inertia_)
plt.figure(figsize = (8,8))plt.plot(range(1,11), inertia_list, color = 'blue', linestyle = 'dashed', marker ='o', markerfacecolor = 'red', markersize = 10)plt.title('Inertia vs K Value')plt.xticks(range(1,11, 1))plt.xlabel('K')plt.ylabel('Inertia')
Menggunakan metode K-Means itu sangatlah mudah, hanya membutuhkan model tersebut dengan mengatur n_clusters untuk mengatur jumlah kluster.
Untuk memilih jumlah kluster yang sesuai, kita bisa menggunakan evaluasi apa yang kita sebut Inertia. Inertia adalah total jarak dari suatu centroid kepada data yang berada di kluster yang sama. Kita ingin Inertia yang lebih kecil karena kita mengingkan kluster dengan data-data yang berdekatan.
Elbow Method mempunyai nama seperti itu karena plot yang dihasilkan memiliki bentuk seperti siku tangan, dimana semakin meningkat nilai K kita, Inertia juga semakin mengecil sampai ke titik tertentu.
Tentu, ada pertanyaan lebih lanjut lagi jika kita menggunakan Elbow Method; sampai seberapa besarkah jumlah K yang baik jika dengan penambahan nilai K, Inerita akan semakin turun? Pertama, kita secara pribadi dapat menentukkan batas nilai K yang seharusnya. Kita dapat terus menurunkan nilai K, tetapi tentu saja kita bisa membatasi nilai K sesuai pengetahuan dan logika kita. Kedua, nilai K dapat dipilih pada saat K di nilai yang sangat menurunkan Inertia; sebagai contoh, jika gambar di atas kita dapat memilih antara K di nilai 4–6 karena di antara nilai itu Inertia mengalami penurunan yang signifikan dan setelah nilai 6, penurunan Inertia yang terjadi tidak terlalu kecil.
Selain itu, masih ada penilaian lain untuk menentukkan nilai K seperti silhouette index tetapi saya tidak akan membahas proses tersebut di artikel ini.
Sekarang kita akan mencoba untuk mengelompokkan data kita dan mengevaluasi kluster yang dihasilkan dengan cara kluster tersebut dapat dikembalikkan ke data awal.
km = KMeans(n_clusters =5).fit(mall)
#Membaca kembali original data ke variable lainmall_ori = pd.read_csv('Mall_Customers.csv')mall_ori.drop('CustomerID', axis = 1, inplace = True)mall_ori['Gender'] = labeler.fit_transform(mall_ori['Gender'])
#Membuat satu kolom category untuk menampung hasil kluster kitamall_ori['Category'] = km.labels_
sns.pairplot(data = mall_ori, hue = 'Category', palette = 'rainbow')
Dengan melihat plot diatas, kita dapat memberikan kesimpulan dari pembagian data kita sebagai berikut:
Label 0 merepresentasikan Pelanggan Female dengan rentang umur beragam yang memiliki Annual Income dibawah 100K $ serta spending score rendah hingga menengah.
Label 1 merepresentasikan pelanggan Male yang masih muda dengan Annual Income beragam dan Spending score menengah hingga tinggi
Label 2 merepresentasikan pelanggan Female yang masih muda dengan Annual Income beragam dan Spending score menengah hingga tinggi
Label 3 merepresentasikan pelanggan Male dengan rentang umur yang lebih tua, memiliki Annual income yang lebih rendah, serta spending score yang lebih rendah juga
Label 4 merepresentasikan pelanggan baik Female ataupun Male, dengan Annual Income menengah hingga tinggi, serta spending score rendah hingga menengah
Tidak ada syarat yang mutlak untuk menggunakan seluruh data dalam membuat kluster. Jika dilihat dari data kita diatas, akan mudah memang untuk K-Means membagi data dengan menggunakan kolom gender karena kolom tersebut hanya memiliki 2 nilai (0 (Female) dan 1 (Male)). Oleh karena itu kita dapat mencoba untuk melatih ulang K-Means model dengan data mall tapi tanpa data gender. Sebagai catatan saya sudah mencoba elbow method sekali lagi untuk menentukan nilai K dan nilai 5 masih baik untuk dicoba.
km = KMeans(n_clusters =5).fit(mall.drop('Gender', axis = 1))mall_ori['Category'] = km.labels_sns.pairplot(data = mall_ori, hue = 'Category', palette = 'Paired')
Tanpa menggunakan data gender, data kita tidak terpisah sama sekali berdasarkan gender. Sekarang, kita dapat mengambil kesimpulan dari hasil kluster diatas sebagai berikut:
Label 0 merepresentasikan pelanggan dengan annual income sangat rendah, spending score rendah, dan rentang umur yang beragam
Label 1 merepresentasikan pelanggan dengan annual income agak rendah, spending score agak rendah, dan memiliki rentang umur menengah hinnga tua
Label 2 merepresentasikan pelanggan dengan rentang umur menengah ke arah muda, annual income menengah hingga tinggi, serta spending score yang tinggi
Label 3 merepresentasikan pelanggan dengan rentang umur muda, annual income yang rendah, serta spending score yang menengah hingga tinggi
Label 4 merepresentasikan pelanggan dengan umur yang beragam, annual income menengah hingga tinggi, serta spending score yang rendah
Dengan merubah data yang dilatih, kita mampu mendapatkan perspektif baru. Selain itu, dengan merubah nilai K juga, kita dapat melihat kelompok baru yang belum dapat kita lihat sebelumnya.
Kesimpulan
Sebagai kesimpulan, Machine Learning tidak selamanya dipakai hanya untuk memprediksi sesuatu tetapi dapat juga digunakan untuk menjelaskan data yang kita miliki serta mendapatkan insight yang sebelumnya tidak kita lihat. Metode K-Means adalah salah satu metode dari unsupervised learning yang mudah untuk digunakan, tetapi kita harus menentukan terlebih dahulu nilai K yang digunakan sehingga analisis kita akan tergantung dari penentuan nilai K ini.