SlideShare a Scribd company logo
1 of 17
Download to read offline
Analisa Segementasi Pasar Dengan Python Machine Learning (Algoritma K-Means)
Oleh : Rahmat Taufiq Sigit
Perkenalan Studi Kasus:
Pada artikel ini akan dibahas tentang bagaimana cara membuat sebuah Machine Learning berbasis
bahasa pemrograman python dengan algoritma K –Means.
Dalam studi kasus ini terdapat sebuah data pelanggan, kita diminta untuk mengkliasifikasi data
tersebut dan melihat segmentasi pasar yang menjadi customer perusahaan. Untuk itu sebagai
langkah awal akan dilakukan pemrosesan klasifikasi untuk melihat berapa jenis klasifikasi pelanggan
yang terjadi.
Dalam dataset pelanggan diasumsikan bahwa data sudah melalui proses data cleaning dan feature
enginering. Sehingga langkah selanjutnya adalah melakukan analisa statistik dan klasifikasi.
Mengenali Dataset Segmantasi Analysis
Pada gambar diatas terdapat struktur dari dataset segementasi yang akan diolah, dimana terdapat 8
Kolom yang terdiri dari ID, Sex, Marital Status, Age, Education, Income, Occupation dan Settlement
Size.
Selanjutnya kita mulai melakukan pemrograman python untuk analisa dataset tersebut dimulai
dengan langkah sebagai berikut:
1. Mengimport library yang akan digunakan
import pandas as pd
import numpy as np
Variable Data type Range Description
ID numerical Integer Shows a unique identificator of a customer.
Sex categorical {0,1} Biological sex (gender) of a customer. In this dataset there are only 2 different options.
0 male
1 female
Marital status categorical {0,1} Marital status of a customer.
0 single
1 non-single (divorced / separated / married / widowed)
Age numerical Integer
The age of the customer in years, calculated as current year minus
the year of birth of the customer at the time of creation of the dataset
18 Min value (the lowest age observed in the dataset)
76 Max value (the highest age observed in the dataset)
Education categorical {0,1,2,3} Level of education of the customer
0 other / unknown
1 high school
2 university
3 graduate school
Income numerical Real Self-reported annual income in US dollars of the customer.
35832 Min value (the lowest income observed in the dataset)
309364 Max value (the highest income observed in the dataset)
Occupation categorical {0,1,2} Category of occupation of the customer.
0 unemployed / unskilled
1 skilled employee / official
2 management / self-employed / highly qualified employee / officer
Settlement size categorical {0,1,2} The size of the city that the customer lives in.
0 small city
1 mid-sized city
2 big city
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from sklearn.preprocessing import StandardScaler
import scipy
from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import pickle
2. Meangkses dataset dan menyimpan hasilnya kedalam variabel
data = pd.read_csv("data/segmentation data.csv", index_col = 0)
Pada code tersebut dapat dilihat bahawa dataset yang akan diolah berada pada folder data yang
dengan nama segmentation data.csv. Dalam code tersebut ditambahkan parameter index_col = 0
untuk menjadikan kolom ID pada dataset sebagai index.
3. Melihat hasil dari akses dataset dengan code berikut:
data.head()
Hasilnya adalah sebagai berikut:
4. Melihat statistic deskriptif dari dataset dengan perintah:
data.describe()
Hasilnya adalah sebagai berikut:
Dari table diatas dapat dibaca statistic descriptif sebagai berikut:
 Bagian Count dapat dilihat terdapat 2000 data yang ada pada dataset.
 Bagian Mean menunjukkan bahwa rata-rata umur pada data adalah 35 tahun dan rata-
rata income adalah 120.954, untuk kolom dengan nilai kategorical pembacaan rata-
ratanya tidak diperlukan
 Bagian Min, Max data serta sebaran 25%, 50% dan 75% dapat pula dijadikan rujukan
apabila dianggap perlu untuk memahami penyebaran dari data
5. Melihat korelasi data menggunakan pearson method dengan perintah berikut:
data.corr()
Hasilnya adalah sebagai berikut:
Pada gambar diatas terdapat nilai korelasi dari -1 sampai dengan 1, dimana -1 bernilai korelasi
negatif dan 1 berarti korelasi kuat positif. Korelasi dengan nilai 0 berarti kedua variabel tidak
saling berhubungan.
Dari tabel diatas terlihat korelasi yang kuat antara age dan education dengan nilai korelasi 0.65
ini bisa dibilang masuk akal karena orang yang berumur kemunkinan memiliki pendidikan lebih
tinggi.
Dapat pula dilihat korelasi antara income dengan occupation dengan nilai 0.68 ini berarti bahwa
semakin tinggi income yang diperoleh maka rumah lebih besar
6. Menampilkan korelasi data dengan lebih mudah menggunakan heatmap dengan perintah
berikut:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
Pada perintah diatas sudah diketik pada bagian awal akses library diman fungsinya adalah untuk
melakukan import paket yang dibutuhkan untuk visualisasi data dengan menggunakan paket
matplotlib dan seborn.
Tampilkan heatmap dengan perintah berikut:
plt.figure(figsize=(12,9))
s = sns.heatmap(data.corr(),
annot=True,
cmap="RdBu",
vmin=-1,
vmax=1)
s.set_yticklabels(s.get_yticklabels(), rotation = 0, fontsize = 12)
s.set_xticklabels(s.get_xticklabels(), rotation = 90, fontsize = 12)
plt.title('Correlation Heatmap')
plt.show()
Hasinya adalah sebagai berikut:
Gambar diatas menunjukkan bahwa semakin biru warna dari korelasi menandakan maka korelasi
positif yang semakin kuat. Dan semakin merah menandakan hubungan korelasi negatif yang
semakin tinggi.
Gambar diatas memiliki hasil yang sama dengan tabel pada langkah sebelumnya, namun dengan
heatmap menampilkan dalam bentuk visual sehingga lebih mudah dipahami.
7. Melakukan visualisasi terhadap data dengan menggunakan scatter plot.
Dari gambar heatmap kita sudah dapat memahami secara logis korelasi antara age dengan
education, income dengan occupantion. Selanjutnya dilakukan analisa menggunakan grafik
scatter plot untuk korelasi antara age dengan income. Menggunakan perinta berikut:
plt.figure(figsize=(12,9))
plt.scatter(data.iloc[:,2],data.iloc[:,4])
plt.xlabel("Age/Umur")
plt.ylabel("Income/Gaji")
plt.title("Scatter Plot Korelasi Antara Age dan Income")
Hasilnya adalah sebagai berikut:
Dari gambar diatas terlihat penyebaran data age terhadap income dimana sebaran umur dari 20
sampai dengan 50 tahun dan income 5.000 sampai dengan 20.000.
8. Data Cleaning / Standarisasi Data
Kegiatan klasifikasi data adalah mencari kemiripan dari data dan meberikan penilaian terhadap
kemiripan tersebut. Sehingga Gap yang terlalu besar pada data akan menyebabkan kesuliatan
dalam melakukan klasifikasi.
Untuk menjaga supaya Gap antar fiture tidak terlalu besar, maka dilakukan standarisasi dengan
menggunakan import modul sklearn seperti pada bagian import library dengan perintah:
from sklearn.preprocessing import StandardScaler
Melakukan standarisasi data dengan perintah:
scaler =StandardScaler()
data_std = scaler.fit_transform(data)
Perintah diatas selain bertujuan untuk menstandarisasi data, juga menyimpan data hasil
standarisai pada variabel baru bernama data_std
9. Melakukan Clustering Data dengan metode Hirarcical Clustering
Hirarki cluster merupakan salah satu metode klasifikasi dari dimana terdapat 2 metode yaitu
Devisive dan Agglomerative. Klasifikasi dengan metode top down (Divisive), Dimana klasifikasi
dimulai pada ciri umum dari data kemudian dipecah menjadi beberapa ciri yang lebih spasifik.
Terdapat juga metode klasifikasi hirariki yang bersifat buttom up dimana data disklasifikasi datri
ciri spesifik menuju ciri data yang lebih umum (Agglomerative)
tapi sebelumnya telah dilakukan import library diperlukan seperti scipy, dengogram dan linkage :
import scipy
from scipy.cluster.hierarchy import dendrogram, linkage
seletah itu lakukan proses klasifikasi dengan perintah berikut:
hirarki_cluster = linkage(data_std, method='ward')
10. Melakukan visualisasi pada Hirarcical Clustering dengan menggunan dengigram pada perintah
berikut:
plt.figure(figsize=(12,9))
plt.title("Cluster Hirarki")
plt.xlabel("Observasi")
plt.ylabel("Jarak")
dendrogram(hirarki_cluster,
truncate_mode='level',
p=5,
show_leaf_counts=False,
no_labels=True
)
plt.show()
Hasilnya sebagai berikut:
Dari gambar diatas dapat dilihat bahwa terdapat 4 kluster dari data yang telah diolah.
11. Melakukan Flat Clustering menggunakan K-means Clustering dengan telebih dahulu melakukan
import terhadap library yang dibutuhkan seperti pada perintah awal
from sklearn.cluster import KMeans
12. Mencari jumlah kluster yang paling sesuai dengan percobaan menggunakan WCSS sesuai
perintah berikut:
wcss = []
for i in range(1,11):
kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42)
kmeans.fit(data_std)
wcss.append(kmeans.inertia_)
Baris perintah diatas adalah melakukan percobaan klustering sebanyak 10 kali dengan random
state 42 terhadap data pada variabel data_std dengan algoritma k-means++ untuk kemudian
menyimpan hasilnya pada variabel array wcss
13. Menampilkan hasil pada valiabel wcss dengan menggunakan perintah berikut:
plt.figure(figsize=(12,9))
plt.plot(range(1,11), wcss, marker = 'o', linestyle = '--')
plt.ylabel('WCSS')
plt.title('K-means Clustering')
plt.show()
Hasilnya sebagai berikut:
Dari tampilan grafik diatas terlihat semakin menurun, namun untuk menentukan letak jumlah
cluster, digunakan elbow method dimana terlihat bahwa terdapat signifikan perubahan arah
pada tanda panah terdapat pada angka 4.
Namun dapat dilakukan pengecekan ulang untuk lebih meyakinkan berapa jumlah kluster yang
terbaik.
14. Melakukan Clustering dengan jumlah Cluster 4 dengan perintah berikut:
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)
kmeans.fit(data_std)
15. Melakukan analisa terhadap hasil clustering, namun terlebih dahulu melakukan backup terhadap
data yang terlah cluster dengan perintah berikut:
data_kmeans = data.copy()
data_kmeans['segment'] = kmeans.labels_
Setelah itu, pada varibel dataset data_kmens dibuat kolom baru bernama “segment” untuk
menyimpan hasil skalifikasi dari data
16. Melakukan analisa pada hasil Cluster untuk melihat nilai rata-rata dengan perintah berikut:
data_kmeans_analisis = data_kmeans.groupby('segment').mean()
data_kmeans_analisis
Hasilnya sebagai berikut:
Pada segment 0 terlihat sex 0,50 yang berarti pada segment ini jumlah Man dan Women hampir
sama, Marital Status 0,69 menandakan kebanyakan dari segement ini telah menikah, serta Age
55, Education 2,1 lebih tinggi dari kluster yang lain dan Satlement Size 1,11 tinggi menandakan
cluster ini kebanyakan hidup di kota besar menandakan bahwa ini adalah kluster tertua dan
berpendidikan untuk itu diberi nama Kluster Well-off.
Pada segment 1, terlihat bahwa 35% adalah laki-laki yang hampir semuanya adalah single
ditandai dengan marital status 0.019, rata-rata age 35 tahun, level education 0,74 termasuk yang
paling rendah dari kluster yang lain, income 97859 paling rendah dibandingkan kluster lain
menandakan kluster ini adalah yang paling miskin. Kluster ini juga tinggal dikota kecil dilihat dari
Settlement Size 0.04 untuk itu diberi nama Kluster Fewer-Opprtunity.
Pada segment 2, Marital Status 0,99 dan Age 28 menandakan ini adalah kluster yang kebanyakan
adalah keluarga baru yang usia muda. Selain itu segmen ini memiliki tingkat pendidikan
menengah dengan education 1,0, pendapatan standar dengan income 105.759 dan jabatan
manajemen menengah ditandai Occupation 0.63 dan hampir 40% tinggal dikota besar. Untuk itu
kluster ini diberi nama Standard
Pada segment 3, sebagian besar adalah laki-laki dengan sex 0,02, kurang dari 20% yang menikah,
tingkat pendidikan yang rendah dengan education 0,7. Nilai income 141.218 dan Occupantion
1,27 serta kebanyakan segment ini tinggal di kota besar ditandai nilai Settlement Size 1,5. Untuk
itu kluster ini dinamakan Carrer Focus
17. Melakukan perhitungan jumlah anggota dari setiap kluster dengan menggunakan perintah
berikut:
data_kmeans_analisis['jumlah_customer']=data_kmeans[['segment','Sex']].groupby(['segment']).count()
data_kmeans_analisis
Hasilnya sebagai berikut:
18. Menetahui berapa banyak proporsi rata-rata segment terhadap jumlah keseluruhan data dengan
perintah berikut:
data_kmeans_analisis['rata2'] = data_kmeans_analisis['jumlah_customer']/data_kmeans_analisis
['jumlah_customer'].sum()
data_kmeans_analisis
Hasilnya sebagai berikut:
19. Melakukan perubahan terhadap nama segment yang telah ditetapkan dengan perintah berikut:
data_kmeans_analisis.rename({0:'Well-Off',
1:'Fewer-Oppotinities',
2:'Standard',
3:'Career-Focus'})
Hasilnya sebagai berikut:
Terlihat bahwa segment Well-Off adalah segment terkecil dengan 13% (263) dan segment
terbesar adalah Standar dengan 35% (705)
20. Melakukan visualisasi pada data dengan menggunakan data awal pada variabel data_kmeans,
bukan data yang telah distandarisasi dengan terlebih dahulu mengubah nama segment sesuai
yang telah ditetapkan dan disimpan pada kolom “labels”
data_kmeans['Labels'] = data_kmeans['segment'].map({0:'Well-Off',
1:'Fewer-Oppotinities',
2:'Standard',
3:'Career-Focus'})
Setelah itu dilakukan visualisasi dengan perintah berikut:
x_axis = data_kmeans['Age']
y_axis = data_kmeans['Income']
plt.figure(figsize = (10, 8))
sns.scatterplot(x_axis, y_axis, hue = data_kmeans['Labels'], palette = ['g', 'r', 'c', 'm'])
plt.title('Segmentation K-means')
plt.show()
Hasilnya sebagai berikut:
Terihat bahwa segment Well-Off dengan warna hijau yang paling jelas dan terpisah dari cluster
yang lain. Namun 3 segment yang lain masih sulit dibedakan sehingga scatter plot dari segment
belum sempurna.
21. Melakukan kombinasi antara K-Means dengan Principal Component Analysis (PCA) dengan
melakukan import pada library yang dibutuhkan
from sklearn.decomposition import PCA
dan lanjutkan dengan perintah berikut:
pca = PCA()
pca.fit(data_std)
22. Melihat variasi ratio dari data dengan perintah:
pca.explained_variance_ratio_
Hasilnya sebagai berikut:
Pada hasil diatas terlihat bahwa terdapat 7 komponen. Komponen 1 mewakili 35% (0,35) dari
variabilitas dari data, komponen 26% (0,26) dan seterusnya.
23. Mencari himpuanan dari data dan memvisualisasikan data tersebut dengan perintah:
plt.figure(figsize=(12,9))
plt.plot(range(1,8), pca.explained_variance_ratio_.cumsum(),marker='o', linestyle='--')
plt.title('Variasi Komponen')
plt.xlabel('Jumlah Komponen')
plt.ylabel('Cumulative Explained Variance')
plt.show()
Hasilnya sebagai berikut:
Tidak ada metode yang benar dalam menentukan jumlah komponen, namun sebagai metode
yang sering digunakan oleh Data Analyst adalah minimal 80% dari Variance dimana bila
diterapkan pada grafik diatas, dapat terlihat jumlah komponen adalah 3
24. Memangil kembali data PCA dengan memasukkan jumlah komponen 3
pca=PCA(n_components=3)
pca.fit(data_std)
25. Menampilkan komponen hasil PCA
pca.components_
Hasilnya sebagai berikut:
Hasil komponennya adalah array dengan ukuran 3x7
26. Memindahkan nilai PCA komponen array 3x7 kedalam dataset dengan nama data_std_pca
data_std_pca = pd.DataFrame(data=pca.components_,
columns=data.columns.values,
index=['Component 1','Component 2','Component 3'])
data_std_pca
Hasilnya sebagai berikut:
27. Menampilkan tabel data_std_pca dalam bentuk visual dengan perintah berikut:
sns.heatmap(data_std_pca,
vmin=-1,
vmax=1,
cmap='RdBu',
annot=True)
plt.yticks([0, 1, 2],
['Component 1', 'Component 2', 'Component 3'],
rotation = 45,
fontsize = 9)
Hasilnya sebagai berikut:
Analisa dari Component diatas:
Component 1 dimana age (umur), income (gaji), Occupation (jabatan) dan Settlement Size (kota
tempat tinggal) mejadi faktor penting. Ini berelasi terhadap ciri dari Career
Component 2 dimana sex, marital status dan education memiliki pengaruh besar. Dan semua
feature yang berhubungan dengan pekerjaan seperti income, occupation dan seattlement size
tidak terlalu berpengaruh. Artinya Component 2 tidak berhubungan pada karir namun lebih
kearah tingkat pendidikan dan gaya hidup (Education & Life Style)
Component 3 dimana marital status, age dan occupation memiliki korelasi yang cukup kuat.
Marital Status dan Occupation memiliki pengeruh negatif namun tetap mejadi perhatian. Hal ini
menunjukkan bahwa Component 3 lebih mengindikasikan pengalaman customer tidak perduli
apakah hal tersebut pengalaman pekerjaan atau pengelaman hidup (Experience)
28. Melakukan transformasi pada data dengan perintah berikut:
pca.transform(data_std)
Hasilnya sebagai berikut:
29. Menyimpan hasil transformasi diatas pada variabel score_pca
skor_pca = pca.transform(data_std)
30. Melakukan segmentasi ulang pada data menggunakan K-Means dan PCA Feature dengan langkah
awal menentukan jumlah cluster dengan data dari variabel skor_pca
wcss = []
for i in range(1,11):
kmeans_pca = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)
kmeans_pca.fit(skor_pca)
wcss.append(kmeans_pca.inertia_)
31. Melakukan visualisasi jumlah cluster dengan perintah berikut:
plt.figure(figsize = (10,8))
plt.plot(range(1, 11), wcss, marker = 'o', linestyle = '--')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.title('K-means with PCA Clustering')
plt.show()
Hasilnya sebagai berikut:
Dari gambar diatas jumlah Cluster dapat ditetapkan dengan 4 Cluster
32. Melakukan kmeans clustering pada data skor_pca
kmeans_pca = KMeans(n_clusters = 4, init = 'k-means++', random_state = 42)
kmeans_pca.fit(skor_pca)
33. Menampilkan hasil segmentasi secara detail
data_pca_kmeans = pd.concat([data.reset_index(drop = True), pd.DataFrame(skor_pca)], axis = 1)
data_pca_kmeans.columns.values[-3: ] = ['Component 1', 'Component 2', 'Component 3']
data_pca_kmeans['segment'] = kmeans_pca.labels_
Hasilnya sebagai berikut:
34. Melakukan analisa pada hasil Cluster untuk melihat nilai rata-rata dengan perintah berikut:
data_pca_kmeans_freq = data_pca_kmeans.groupby(['segment']).mean()
data_pca_kmeans_freq
Hasilnya sebagai berikut:
Terlihat dari tabel diatas bahwa segment 0 memiliki relasi yang tinggi pada Education & Life Style
ini bisa disebut dengan segment Standar, Segement 1 memiliki relasi yang tinggi pada Career bisa
disebut sebagai Career-Focus, Segment 2 memiliki relasi yang tinggi pada Experience namun
rendah pada Career dan Education & Life Style disebut Fewer Opportunity dan terakhir Segment
3 memiliki relasi tinggi pada semua komponen disebut Well-Off
35. Mengubah nama segement sesuai hasil analisa sebelumnya dan menghitun jumlah serta rata-rata
dari data setiap segment dengan perintah berikut:
data_pca_kmeans_freq['jumlah'] = data_pca_kmeans[['segment','Sex']].groupby(['segment']).count()
data_pca_kmeans_freq['rata2'] = data_pca_kmeans_freq['jumlah'] / data_pca_kmeans_freq['jumlah'].sum()
data_pca_kmeans_freq = data_pca_kmeans_freq.rename({0:'Standard',
1:'Career-Focus',
2:'Fewer-Opportunity',
3:'Well-Off'})
data_pca_kmeans_freq
Hasilnya sebagai berikut:
Career Education
& Life Style
Experience
36. Menambahkan nama segment pada kolom legend pada data dengan perintah berikut:
data_pca_kmeans['Legend'] = data_pca_kmeans['segment'].map({0:'Standard',
1:'Career-Focus',
2:'Fewer-Opportunity',
3:'Well-Off'})
data_pca_kmeans
Hasilnya sebagai berikut:
37. Menampilkan data pada scatter plot dengan menggunakan component 1 (Career) dan
Component 2 (Education & Life Style)
x_axis = data_pca_kmeans['Component 2']
y_axis = data_pca_kmeans['Component 1']
plt.figure(figsize = (10, 8))
sns.scatterplot(x_axis, y_axis, hue = data_pca_kmeans['Legend'], palette = ['g', 'r', 'c', 'm'])
plt.title('Kluster Setelah PCA Components')
plt.show()
Hasilnya sebagai berikut:
Dari gambar diatas sudah dapat terlihat dengan jelas ciri khas dari setiap segment. Hal ini
disimpulkan bahwa cukup dengan 2 Component sudah dapat melihat perbedaan dari setiap
segment.
38. Export model yang telah dibuat dengan import library pickle dan menggunakan perintah berikut:
import pickle
Selanjutnya simpan model, pca dan kmeans_pca dengan perintah berikut
pickle.dump(scaler,open('skalar.pickel','wb'))
pickle.dump(pca,open('pca.pickel','wb'))
pickle.dump(kmeans_pca,open('kmeans_pca.pickel','wb'))

More Related Content

What's hot

Pengantar statistika slide 3
Pengantar statistika slide 3Pengantar statistika slide 3
Pengantar statistika slide 3Az'End Love
 
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 Populasi
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 PopulasiAPG Pertemuan 5 : Inferensia Vektor Rata-rata 1 Populasi
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 PopulasiRani Nooraeni
 
19759534 statistik-run-test-satu-sampel
19759534 statistik-run-test-satu-sampel19759534 statistik-run-test-satu-sampel
19759534 statistik-run-test-satu-sampelRidwan Samsoni
 
Ppt korelasi sederhana
Ppt korelasi sederhanaPpt korelasi sederhana
Ppt korelasi sederhanaLusi Kurnia
 
Power Point Korelasi
Power Point KorelasiPower Point Korelasi
Power Point Korelasiguest027789
 
Laporan Pratikum analisis regresi linier sederhana
Laporan Pratikum analisis regresi linier sederhanaLaporan Pratikum analisis regresi linier sederhana
Laporan Pratikum analisis regresi linier sederhanagita Ta
 
Makalah distribusi binomial, poisson, distribusi normal
Makalah distribusi binomial, poisson, distribusi normalMakalah distribusi binomial, poisson, distribusi normal
Makalah distribusi binomial, poisson, distribusi normalAisyah Turidho
 
APG Pertemuan 5 : Inferensia Vektor Rata-rata
APG Pertemuan 5 : Inferensia Vektor Rata-rataAPG Pertemuan 5 : Inferensia Vektor Rata-rata
APG Pertemuan 5 : Inferensia Vektor Rata-rataRani Nooraeni
 
Teori Peluang | Pengantar Statistik Matematis
Teori Peluang | Pengantar Statistik MatematisTeori Peluang | Pengantar Statistik Matematis
Teori Peluang | Pengantar Statistik MatematisJujun Muhamad Jubaerudin
 
APG Pertemuan 3 : SAMPLE GEOMETRI AND RANDOM SAMPLING (2)
APG Pertemuan 3 : SAMPLE GEOMETRI  AND RANDOM SAMPLING (2)APG Pertemuan 3 : SAMPLE GEOMETRI  AND RANDOM SAMPLING (2)
APG Pertemuan 3 : SAMPLE GEOMETRI AND RANDOM SAMPLING (2)Rani Nooraeni
 
Laporan praktikum statistik deskriptif
Laporan praktikum statistik deskriptif Laporan praktikum statistik deskriptif
Laporan praktikum statistik deskriptif EnvaPya
 
12. contoh soal uts statistika
12. contoh soal uts statistika12. contoh soal uts statistika
12. contoh soal uts statistikaaliyudin007
 
ITP UNS SEMESTER 2 Pendugaan nilai tengah
ITP UNS SEMESTER 2 Pendugaan nilai tengahITP UNS SEMESTER 2 Pendugaan nilai tengah
ITP UNS SEMESTER 2 Pendugaan nilai tengahFransiska Puteri
 
Uji Beda Dua Mean Independen
Uji Beda Dua Mean IndependenUji Beda Dua Mean Independen
Uji Beda Dua Mean Independenmirzal tawi
 
Nilai Egien Dan Vektor Eigen
Nilai Egien Dan Vektor EigenNilai Egien Dan Vektor Eigen
Nilai Egien Dan Vektor EigenRizky Wulansari
 
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) edit
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) editPertemuan 10 (distribusi binomial, poisson, distribusi normal) edit
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) editreno sutriono
 
STATISTIKA-Pengujian hipotesis
STATISTIKA-Pengujian hipotesisSTATISTIKA-Pengujian hipotesis
STATISTIKA-Pengujian hipotesisYousuf Kurniawan
 
Beberapa distribusi peluang diskrit (1)
Beberapa distribusi peluang diskrit (1)Beberapa distribusi peluang diskrit (1)
Beberapa distribusi peluang diskrit (1)Raden Maulana
 

What's hot (20)

Statistik Non Parametrik
Statistik Non ParametrikStatistik Non Parametrik
Statistik Non Parametrik
 
Pengantar statistika slide 3
Pengantar statistika slide 3Pengantar statistika slide 3
Pengantar statistika slide 3
 
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 Populasi
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 PopulasiAPG Pertemuan 5 : Inferensia Vektor Rata-rata 1 Populasi
APG Pertemuan 5 : Inferensia Vektor Rata-rata 1 Populasi
 
Analisis biplot
Analisis biplotAnalisis biplot
Analisis biplot
 
19759534 statistik-run-test-satu-sampel
19759534 statistik-run-test-satu-sampel19759534 statistik-run-test-satu-sampel
19759534 statistik-run-test-satu-sampel
 
Ppt korelasi sederhana
Ppt korelasi sederhanaPpt korelasi sederhana
Ppt korelasi sederhana
 
Power Point Korelasi
Power Point KorelasiPower Point Korelasi
Power Point Korelasi
 
Laporan Pratikum analisis regresi linier sederhana
Laporan Pratikum analisis regresi linier sederhanaLaporan Pratikum analisis regresi linier sederhana
Laporan Pratikum analisis regresi linier sederhana
 
Makalah distribusi binomial, poisson, distribusi normal
Makalah distribusi binomial, poisson, distribusi normalMakalah distribusi binomial, poisson, distribusi normal
Makalah distribusi binomial, poisson, distribusi normal
 
APG Pertemuan 5 : Inferensia Vektor Rata-rata
APG Pertemuan 5 : Inferensia Vektor Rata-rataAPG Pertemuan 5 : Inferensia Vektor Rata-rata
APG Pertemuan 5 : Inferensia Vektor Rata-rata
 
Teori Peluang | Pengantar Statistik Matematis
Teori Peluang | Pengantar Statistik MatematisTeori Peluang | Pengantar Statistik Matematis
Teori Peluang | Pengantar Statistik Matematis
 
APG Pertemuan 3 : SAMPLE GEOMETRI AND RANDOM SAMPLING (2)
APG Pertemuan 3 : SAMPLE GEOMETRI  AND RANDOM SAMPLING (2)APG Pertemuan 3 : SAMPLE GEOMETRI  AND RANDOM SAMPLING (2)
APG Pertemuan 3 : SAMPLE GEOMETRI AND RANDOM SAMPLING (2)
 
Laporan praktikum statistik deskriptif
Laporan praktikum statistik deskriptif Laporan praktikum statistik deskriptif
Laporan praktikum statistik deskriptif
 
12. contoh soal uts statistika
12. contoh soal uts statistika12. contoh soal uts statistika
12. contoh soal uts statistika
 
ITP UNS SEMESTER 2 Pendugaan nilai tengah
ITP UNS SEMESTER 2 Pendugaan nilai tengahITP UNS SEMESTER 2 Pendugaan nilai tengah
ITP UNS SEMESTER 2 Pendugaan nilai tengah
 
Uji Beda Dua Mean Independen
Uji Beda Dua Mean IndependenUji Beda Dua Mean Independen
Uji Beda Dua Mean Independen
 
Nilai Egien Dan Vektor Eigen
Nilai Egien Dan Vektor EigenNilai Egien Dan Vektor Eigen
Nilai Egien Dan Vektor Eigen
 
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) edit
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) editPertemuan 10 (distribusi binomial, poisson, distribusi normal) edit
Pertemuan 10 (distribusi binomial, poisson, distribusi normal) edit
 
STATISTIKA-Pengujian hipotesis
STATISTIKA-Pengujian hipotesisSTATISTIKA-Pengujian hipotesis
STATISTIKA-Pengujian hipotesis
 
Beberapa distribusi peluang diskrit (1)
Beberapa distribusi peluang diskrit (1)Beberapa distribusi peluang diskrit (1)
Beberapa distribusi peluang diskrit (1)
 

Similar to CUSTOMER SEGMENTATION ANALYSIS WITH PYTHON.pdf

Statistik perwakilan data (word)-hantar
Statistik perwakilan data (word)-hantarStatistik perwakilan data (word)-hantar
Statistik perwakilan data (word)-hantarMiccaill Casparov
 
Mobile Price Prediction
Mobile Price PredictionMobile Price Prediction
Mobile Price PredictionFridaPutriassa
 
Mobile Price Prediction
Mobile Price PredictionMobile Price Prediction
Mobile Price PredictionFridaPutriassa
 
2.adp penyajian algoritma
2.adp penyajian algoritma2.adp penyajian algoritma
2.adp penyajian algoritmaHardini_HD
 
9.adp penyajian algoritma
9.adp penyajian algoritma9.adp penyajian algoritma
9.adp penyajian algoritmaHardini_HD
 
2 adp penyajian algoritma
2   adp penyajian algoritma2   adp penyajian algoritma
2 adp penyajian algoritmaFaisal Amir
 
2 adp penyajian algoritma
2   adp penyajian algoritma2   adp penyajian algoritma
2 adp penyajian algoritmaFaisal Amir
 
Klasterisasi - Algoritma K-Means Clustering.pdf
Klasterisasi - Algoritma K-Means Clustering.pdfKlasterisasi - Algoritma K-Means Clustering.pdf
Klasterisasi - Algoritma K-Means Clustering.pdfElvi Rahmi
 
Tugas selamat riady algoritma
Tugas selamat riady algoritmaTugas selamat riady algoritma
Tugas selamat riady algoritmaSelamatriady
 
[ESPA4123] INISIASI 2.ppt
[ESPA4123] INISIASI 2.ppt[ESPA4123] INISIASI 2.ppt
[ESPA4123] INISIASI 2.pptMarliLusi
 
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v27. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2ArdianDwiPraba
 
INSERT DATA WITH ADO.NET TECHNOLOGY
INSERT DATA WITH ADO.NET TECHNOLOGYINSERT DATA WITH ADO.NET TECHNOLOGY
INSERT DATA WITH ADO.NET TECHNOLOGYVeronica Anggraini
 
scikit-learn cheat sheet untuk data science
scikit-learn cheat sheet untuk data sciencescikit-learn cheat sheet untuk data science
scikit-learn cheat sheet untuk data sciencesoftscients
 
Mi1274 alpro lanjut 6 - perulangan - 2 - for, do-while
Mi1274 alpro lanjut   6 - perulangan - 2 - for, do-whileMi1274 alpro lanjut   6 - perulangan - 2 - for, do-while
Mi1274 alpro lanjut 6 - perulangan - 2 - for, do-whileDefina Iskandar
 
Metode statistik multivariat
Metode statistik multivariatMetode statistik multivariat
Metode statistik multivariatkartiko edhi
 

Similar to CUSTOMER SEGMENTATION ANALYSIS WITH PYTHON.pdf (20)

File
FileFile
File
 
Statistik perwakilan data (word)-hantar
Statistik perwakilan data (word)-hantarStatistik perwakilan data (word)-hantar
Statistik perwakilan data (word)-hantar
 
Mobile Price Prediction
Mobile Price PredictionMobile Price Prediction
Mobile Price Prediction
 
Mobile Price Prediction
Mobile Price PredictionMobile Price Prediction
Mobile Price Prediction
 
2.adp penyajian algoritma
2.adp penyajian algoritma2.adp penyajian algoritma
2.adp penyajian algoritma
 
9.adp penyajian algoritma
9.adp penyajian algoritma9.adp penyajian algoritma
9.adp penyajian algoritma
 
2 adp penyajian algoritma
2   adp penyajian algoritma2   adp penyajian algoritma
2 adp penyajian algoritma
 
2 adp penyajian algoritma
2   adp penyajian algoritma2   adp penyajian algoritma
2 adp penyajian algoritma
 
Pengurutan (Sorting)
Pengurutan (Sorting)Pengurutan (Sorting)
Pengurutan (Sorting)
 
Klasterisasi - Algoritma K-Means Clustering.pdf
Klasterisasi - Algoritma K-Means Clustering.pdfKlasterisasi - Algoritma K-Means Clustering.pdf
Klasterisasi - Algoritma K-Means Clustering.pdf
 
Tugas selamat riady algoritma
Tugas selamat riady algoritmaTugas selamat riady algoritma
Tugas selamat riady algoritma
 
[ESPA4123] INISIASI 2.ppt
[ESPA4123] INISIASI 2.ppt[ESPA4123] INISIASI 2.ppt
[ESPA4123] INISIASI 2.ppt
 
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v27. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2
7. ta 2021-07-visualisasi-modul-ariw-2021-07-17-v2
 
INSERT DATA WITH ADO.NET TECHNOLOGY
INSERT DATA WITH ADO.NET TECHNOLOGYINSERT DATA WITH ADO.NET TECHNOLOGY
INSERT DATA WITH ADO.NET TECHNOLOGY
 
scikit-learn cheat sheet untuk data science
scikit-learn cheat sheet untuk data sciencescikit-learn cheat sheet untuk data science
scikit-learn cheat sheet untuk data science
 
LN s10-machine vision-s2
LN s10-machine vision-s2LN s10-machine vision-s2
LN s10-machine vision-s2
 
Statistika data tunggal
Statistika data tunggalStatistika data tunggal
Statistika data tunggal
 
Mi1274 alpro lanjut 6 - perulangan - 2 - for, do-while
Mi1274 alpro lanjut   6 - perulangan - 2 - for, do-whileMi1274 alpro lanjut   6 - perulangan - 2 - for, do-while
Mi1274 alpro lanjut 6 - perulangan - 2 - for, do-while
 
Metode statistik multivariat
Metode statistik multivariatMetode statistik multivariat
Metode statistik multivariat
 
17 statistika
17 statistika17 statistika
17 statistika
 

CUSTOMER SEGMENTATION ANALYSIS WITH PYTHON.pdf

  • 1. Analisa Segementasi Pasar Dengan Python Machine Learning (Algoritma K-Means) Oleh : Rahmat Taufiq Sigit Perkenalan Studi Kasus: Pada artikel ini akan dibahas tentang bagaimana cara membuat sebuah Machine Learning berbasis bahasa pemrograman python dengan algoritma K –Means. Dalam studi kasus ini terdapat sebuah data pelanggan, kita diminta untuk mengkliasifikasi data tersebut dan melihat segmentasi pasar yang menjadi customer perusahaan. Untuk itu sebagai langkah awal akan dilakukan pemrosesan klasifikasi untuk melihat berapa jenis klasifikasi pelanggan yang terjadi. Dalam dataset pelanggan diasumsikan bahwa data sudah melalui proses data cleaning dan feature enginering. Sehingga langkah selanjutnya adalah melakukan analisa statistik dan klasifikasi. Mengenali Dataset Segmantasi Analysis Pada gambar diatas terdapat struktur dari dataset segementasi yang akan diolah, dimana terdapat 8 Kolom yang terdiri dari ID, Sex, Marital Status, Age, Education, Income, Occupation dan Settlement Size. Selanjutnya kita mulai melakukan pemrograman python untuk analisa dataset tersebut dimulai dengan langkah sebagai berikut: 1. Mengimport library yang akan digunakan import pandas as pd import numpy as np Variable Data type Range Description ID numerical Integer Shows a unique identificator of a customer. Sex categorical {0,1} Biological sex (gender) of a customer. In this dataset there are only 2 different options. 0 male 1 female Marital status categorical {0,1} Marital status of a customer. 0 single 1 non-single (divorced / separated / married / widowed) Age numerical Integer The age of the customer in years, calculated as current year minus the year of birth of the customer at the time of creation of the dataset 18 Min value (the lowest age observed in the dataset) 76 Max value (the highest age observed in the dataset) Education categorical {0,1,2,3} Level of education of the customer 0 other / unknown 1 high school 2 university 3 graduate school Income numerical Real Self-reported annual income in US dollars of the customer. 35832 Min value (the lowest income observed in the dataset) 309364 Max value (the highest income observed in the dataset) Occupation categorical {0,1,2} Category of occupation of the customer. 0 unemployed / unskilled 1 skilled employee / official 2 management / self-employed / highly qualified employee / officer Settlement size categorical {0,1,2} The size of the city that the customer lives in. 0 small city 1 mid-sized city 2 big city
  • 2. import matplotlib.pyplot as plt import seaborn as sns sns.set() from sklearn.preprocessing import StandardScaler import scipy from scipy.cluster.hierarchy import dendrogram, linkage from sklearn.cluster import KMeans from sklearn.decomposition import PCA import pickle 2. Meangkses dataset dan menyimpan hasilnya kedalam variabel data = pd.read_csv("data/segmentation data.csv", index_col = 0) Pada code tersebut dapat dilihat bahawa dataset yang akan diolah berada pada folder data yang dengan nama segmentation data.csv. Dalam code tersebut ditambahkan parameter index_col = 0 untuk menjadikan kolom ID pada dataset sebagai index. 3. Melihat hasil dari akses dataset dengan code berikut: data.head() Hasilnya adalah sebagai berikut: 4. Melihat statistic deskriptif dari dataset dengan perintah: data.describe() Hasilnya adalah sebagai berikut: Dari table diatas dapat dibaca statistic descriptif sebagai berikut:  Bagian Count dapat dilihat terdapat 2000 data yang ada pada dataset.
  • 3.  Bagian Mean menunjukkan bahwa rata-rata umur pada data adalah 35 tahun dan rata- rata income adalah 120.954, untuk kolom dengan nilai kategorical pembacaan rata- ratanya tidak diperlukan  Bagian Min, Max data serta sebaran 25%, 50% dan 75% dapat pula dijadikan rujukan apabila dianggap perlu untuk memahami penyebaran dari data 5. Melihat korelasi data menggunakan pearson method dengan perintah berikut: data.corr() Hasilnya adalah sebagai berikut: Pada gambar diatas terdapat nilai korelasi dari -1 sampai dengan 1, dimana -1 bernilai korelasi negatif dan 1 berarti korelasi kuat positif. Korelasi dengan nilai 0 berarti kedua variabel tidak saling berhubungan. Dari tabel diatas terlihat korelasi yang kuat antara age dan education dengan nilai korelasi 0.65 ini bisa dibilang masuk akal karena orang yang berumur kemunkinan memiliki pendidikan lebih tinggi. Dapat pula dilihat korelasi antara income dengan occupation dengan nilai 0.68 ini berarti bahwa semakin tinggi income yang diperoleh maka rumah lebih besar 6. Menampilkan korelasi data dengan lebih mudah menggunakan heatmap dengan perintah berikut: import matplotlib.pyplot as plt import seaborn as sns sns.set() Pada perintah diatas sudah diketik pada bagian awal akses library diman fungsinya adalah untuk melakukan import paket yang dibutuhkan untuk visualisasi data dengan menggunakan paket matplotlib dan seborn. Tampilkan heatmap dengan perintah berikut: plt.figure(figsize=(12,9)) s = sns.heatmap(data.corr(), annot=True, cmap="RdBu", vmin=-1, vmax=1) s.set_yticklabels(s.get_yticklabels(), rotation = 0, fontsize = 12) s.set_xticklabels(s.get_xticklabels(), rotation = 90, fontsize = 12)
  • 4. plt.title('Correlation Heatmap') plt.show() Hasinya adalah sebagai berikut: Gambar diatas menunjukkan bahwa semakin biru warna dari korelasi menandakan maka korelasi positif yang semakin kuat. Dan semakin merah menandakan hubungan korelasi negatif yang semakin tinggi. Gambar diatas memiliki hasil yang sama dengan tabel pada langkah sebelumnya, namun dengan heatmap menampilkan dalam bentuk visual sehingga lebih mudah dipahami. 7. Melakukan visualisasi terhadap data dengan menggunakan scatter plot. Dari gambar heatmap kita sudah dapat memahami secara logis korelasi antara age dengan education, income dengan occupantion. Selanjutnya dilakukan analisa menggunakan grafik scatter plot untuk korelasi antara age dengan income. Menggunakan perinta berikut: plt.figure(figsize=(12,9)) plt.scatter(data.iloc[:,2],data.iloc[:,4]) plt.xlabel("Age/Umur") plt.ylabel("Income/Gaji") plt.title("Scatter Plot Korelasi Antara Age dan Income") Hasilnya adalah sebagai berikut:
  • 5. Dari gambar diatas terlihat penyebaran data age terhadap income dimana sebaran umur dari 20 sampai dengan 50 tahun dan income 5.000 sampai dengan 20.000. 8. Data Cleaning / Standarisasi Data Kegiatan klasifikasi data adalah mencari kemiripan dari data dan meberikan penilaian terhadap kemiripan tersebut. Sehingga Gap yang terlalu besar pada data akan menyebabkan kesuliatan dalam melakukan klasifikasi. Untuk menjaga supaya Gap antar fiture tidak terlalu besar, maka dilakukan standarisasi dengan menggunakan import modul sklearn seperti pada bagian import library dengan perintah: from sklearn.preprocessing import StandardScaler Melakukan standarisasi data dengan perintah: scaler =StandardScaler() data_std = scaler.fit_transform(data) Perintah diatas selain bertujuan untuk menstandarisasi data, juga menyimpan data hasil standarisai pada variabel baru bernama data_std 9. Melakukan Clustering Data dengan metode Hirarcical Clustering Hirarki cluster merupakan salah satu metode klasifikasi dari dimana terdapat 2 metode yaitu Devisive dan Agglomerative. Klasifikasi dengan metode top down (Divisive), Dimana klasifikasi dimulai pada ciri umum dari data kemudian dipecah menjadi beberapa ciri yang lebih spasifik.
  • 6. Terdapat juga metode klasifikasi hirariki yang bersifat buttom up dimana data disklasifikasi datri ciri spesifik menuju ciri data yang lebih umum (Agglomerative) tapi sebelumnya telah dilakukan import library diperlukan seperti scipy, dengogram dan linkage : import scipy from scipy.cluster.hierarchy import dendrogram, linkage seletah itu lakukan proses klasifikasi dengan perintah berikut: hirarki_cluster = linkage(data_std, method='ward') 10. Melakukan visualisasi pada Hirarcical Clustering dengan menggunan dengigram pada perintah berikut: plt.figure(figsize=(12,9)) plt.title("Cluster Hirarki") plt.xlabel("Observasi") plt.ylabel("Jarak") dendrogram(hirarki_cluster, truncate_mode='level', p=5, show_leaf_counts=False, no_labels=True ) plt.show() Hasilnya sebagai berikut: Dari gambar diatas dapat dilihat bahwa terdapat 4 kluster dari data yang telah diolah.
  • 7. 11. Melakukan Flat Clustering menggunakan K-means Clustering dengan telebih dahulu melakukan import terhadap library yang dibutuhkan seperti pada perintah awal from sklearn.cluster import KMeans 12. Mencari jumlah kluster yang paling sesuai dengan percobaan menggunakan WCSS sesuai perintah berikut: wcss = [] for i in range(1,11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42) kmeans.fit(data_std) wcss.append(kmeans.inertia_) Baris perintah diatas adalah melakukan percobaan klustering sebanyak 10 kali dengan random state 42 terhadap data pada variabel data_std dengan algoritma k-means++ untuk kemudian menyimpan hasilnya pada variabel array wcss 13. Menampilkan hasil pada valiabel wcss dengan menggunakan perintah berikut: plt.figure(figsize=(12,9)) plt.plot(range(1,11), wcss, marker = 'o', linestyle = '--') plt.ylabel('WCSS') plt.title('K-means Clustering') plt.show() Hasilnya sebagai berikut: Dari tampilan grafik diatas terlihat semakin menurun, namun untuk menentukan letak jumlah cluster, digunakan elbow method dimana terlihat bahwa terdapat signifikan perubahan arah pada tanda panah terdapat pada angka 4.
  • 8. Namun dapat dilakukan pengecekan ulang untuk lebih meyakinkan berapa jumlah kluster yang terbaik. 14. Melakukan Clustering dengan jumlah Cluster 4 dengan perintah berikut: kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42) kmeans.fit(data_std) 15. Melakukan analisa terhadap hasil clustering, namun terlebih dahulu melakukan backup terhadap data yang terlah cluster dengan perintah berikut: data_kmeans = data.copy() data_kmeans['segment'] = kmeans.labels_ Setelah itu, pada varibel dataset data_kmens dibuat kolom baru bernama “segment” untuk menyimpan hasil skalifikasi dari data 16. Melakukan analisa pada hasil Cluster untuk melihat nilai rata-rata dengan perintah berikut: data_kmeans_analisis = data_kmeans.groupby('segment').mean() data_kmeans_analisis Hasilnya sebagai berikut: Pada segment 0 terlihat sex 0,50 yang berarti pada segment ini jumlah Man dan Women hampir sama, Marital Status 0,69 menandakan kebanyakan dari segement ini telah menikah, serta Age 55, Education 2,1 lebih tinggi dari kluster yang lain dan Satlement Size 1,11 tinggi menandakan cluster ini kebanyakan hidup di kota besar menandakan bahwa ini adalah kluster tertua dan berpendidikan untuk itu diberi nama Kluster Well-off. Pada segment 1, terlihat bahwa 35% adalah laki-laki yang hampir semuanya adalah single ditandai dengan marital status 0.019, rata-rata age 35 tahun, level education 0,74 termasuk yang paling rendah dari kluster yang lain, income 97859 paling rendah dibandingkan kluster lain menandakan kluster ini adalah yang paling miskin. Kluster ini juga tinggal dikota kecil dilihat dari Settlement Size 0.04 untuk itu diberi nama Kluster Fewer-Opprtunity. Pada segment 2, Marital Status 0,99 dan Age 28 menandakan ini adalah kluster yang kebanyakan adalah keluarga baru yang usia muda. Selain itu segmen ini memiliki tingkat pendidikan menengah dengan education 1,0, pendapatan standar dengan income 105.759 dan jabatan manajemen menengah ditandai Occupation 0.63 dan hampir 40% tinggal dikota besar. Untuk itu kluster ini diberi nama Standard Pada segment 3, sebagian besar adalah laki-laki dengan sex 0,02, kurang dari 20% yang menikah, tingkat pendidikan yang rendah dengan education 0,7. Nilai income 141.218 dan Occupantion 1,27 serta kebanyakan segment ini tinggal di kota besar ditandai nilai Settlement Size 1,5. Untuk itu kluster ini dinamakan Carrer Focus
  • 9. 17. Melakukan perhitungan jumlah anggota dari setiap kluster dengan menggunakan perintah berikut: data_kmeans_analisis['jumlah_customer']=data_kmeans[['segment','Sex']].groupby(['segment']).count() data_kmeans_analisis Hasilnya sebagai berikut: 18. Menetahui berapa banyak proporsi rata-rata segment terhadap jumlah keseluruhan data dengan perintah berikut: data_kmeans_analisis['rata2'] = data_kmeans_analisis['jumlah_customer']/data_kmeans_analisis ['jumlah_customer'].sum() data_kmeans_analisis Hasilnya sebagai berikut: 19. Melakukan perubahan terhadap nama segment yang telah ditetapkan dengan perintah berikut: data_kmeans_analisis.rename({0:'Well-Off', 1:'Fewer-Oppotinities', 2:'Standard', 3:'Career-Focus'}) Hasilnya sebagai berikut: Terlihat bahwa segment Well-Off adalah segment terkecil dengan 13% (263) dan segment terbesar adalah Standar dengan 35% (705) 20. Melakukan visualisasi pada data dengan menggunakan data awal pada variabel data_kmeans, bukan data yang telah distandarisasi dengan terlebih dahulu mengubah nama segment sesuai yang telah ditetapkan dan disimpan pada kolom “labels” data_kmeans['Labels'] = data_kmeans['segment'].map({0:'Well-Off', 1:'Fewer-Oppotinities', 2:'Standard', 3:'Career-Focus'})
  • 10. Setelah itu dilakukan visualisasi dengan perintah berikut: x_axis = data_kmeans['Age'] y_axis = data_kmeans['Income'] plt.figure(figsize = (10, 8)) sns.scatterplot(x_axis, y_axis, hue = data_kmeans['Labels'], palette = ['g', 'r', 'c', 'm']) plt.title('Segmentation K-means') plt.show() Hasilnya sebagai berikut: Terihat bahwa segment Well-Off dengan warna hijau yang paling jelas dan terpisah dari cluster yang lain. Namun 3 segment yang lain masih sulit dibedakan sehingga scatter plot dari segment belum sempurna. 21. Melakukan kombinasi antara K-Means dengan Principal Component Analysis (PCA) dengan melakukan import pada library yang dibutuhkan from sklearn.decomposition import PCA dan lanjutkan dengan perintah berikut: pca = PCA() pca.fit(data_std) 22. Melihat variasi ratio dari data dengan perintah: pca.explained_variance_ratio_ Hasilnya sebagai berikut:
  • 11. Pada hasil diatas terlihat bahwa terdapat 7 komponen. Komponen 1 mewakili 35% (0,35) dari variabilitas dari data, komponen 26% (0,26) dan seterusnya. 23. Mencari himpuanan dari data dan memvisualisasikan data tersebut dengan perintah: plt.figure(figsize=(12,9)) plt.plot(range(1,8), pca.explained_variance_ratio_.cumsum(),marker='o', linestyle='--') plt.title('Variasi Komponen') plt.xlabel('Jumlah Komponen') plt.ylabel('Cumulative Explained Variance') plt.show() Hasilnya sebagai berikut: Tidak ada metode yang benar dalam menentukan jumlah komponen, namun sebagai metode yang sering digunakan oleh Data Analyst adalah minimal 80% dari Variance dimana bila diterapkan pada grafik diatas, dapat terlihat jumlah komponen adalah 3 24. Memangil kembali data PCA dengan memasukkan jumlah komponen 3 pca=PCA(n_components=3) pca.fit(data_std) 25. Menampilkan komponen hasil PCA pca.components_
  • 12. Hasilnya sebagai berikut: Hasil komponennya adalah array dengan ukuran 3x7 26. Memindahkan nilai PCA komponen array 3x7 kedalam dataset dengan nama data_std_pca data_std_pca = pd.DataFrame(data=pca.components_, columns=data.columns.values, index=['Component 1','Component 2','Component 3']) data_std_pca Hasilnya sebagai berikut: 27. Menampilkan tabel data_std_pca dalam bentuk visual dengan perintah berikut: sns.heatmap(data_std_pca, vmin=-1, vmax=1, cmap='RdBu', annot=True) plt.yticks([0, 1, 2], ['Component 1', 'Component 2', 'Component 3'], rotation = 45, fontsize = 9) Hasilnya sebagai berikut:
  • 13. Analisa dari Component diatas: Component 1 dimana age (umur), income (gaji), Occupation (jabatan) dan Settlement Size (kota tempat tinggal) mejadi faktor penting. Ini berelasi terhadap ciri dari Career Component 2 dimana sex, marital status dan education memiliki pengaruh besar. Dan semua feature yang berhubungan dengan pekerjaan seperti income, occupation dan seattlement size tidak terlalu berpengaruh. Artinya Component 2 tidak berhubungan pada karir namun lebih kearah tingkat pendidikan dan gaya hidup (Education & Life Style) Component 3 dimana marital status, age dan occupation memiliki korelasi yang cukup kuat. Marital Status dan Occupation memiliki pengeruh negatif namun tetap mejadi perhatian. Hal ini menunjukkan bahwa Component 3 lebih mengindikasikan pengalaman customer tidak perduli apakah hal tersebut pengalaman pekerjaan atau pengelaman hidup (Experience) 28. Melakukan transformasi pada data dengan perintah berikut: pca.transform(data_std) Hasilnya sebagai berikut: 29. Menyimpan hasil transformasi diatas pada variabel score_pca skor_pca = pca.transform(data_std) 30. Melakukan segmentasi ulang pada data menggunakan K-Means dan PCA Feature dengan langkah awal menentukan jumlah cluster dengan data dari variabel skor_pca wcss = [] for i in range(1,11):
  • 14. kmeans_pca = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) kmeans_pca.fit(skor_pca) wcss.append(kmeans_pca.inertia_) 31. Melakukan visualisasi jumlah cluster dengan perintah berikut: plt.figure(figsize = (10,8)) plt.plot(range(1, 11), wcss, marker = 'o', linestyle = '--') plt.xlabel('Number of Clusters') plt.ylabel('WCSS') plt.title('K-means with PCA Clustering') plt.show() Hasilnya sebagai berikut: Dari gambar diatas jumlah Cluster dapat ditetapkan dengan 4 Cluster 32. Melakukan kmeans clustering pada data skor_pca kmeans_pca = KMeans(n_clusters = 4, init = 'k-means++', random_state = 42) kmeans_pca.fit(skor_pca) 33. Menampilkan hasil segmentasi secara detail data_pca_kmeans = pd.concat([data.reset_index(drop = True), pd.DataFrame(skor_pca)], axis = 1) data_pca_kmeans.columns.values[-3: ] = ['Component 1', 'Component 2', 'Component 3'] data_pca_kmeans['segment'] = kmeans_pca.labels_ Hasilnya sebagai berikut:
  • 15. 34. Melakukan analisa pada hasil Cluster untuk melihat nilai rata-rata dengan perintah berikut: data_pca_kmeans_freq = data_pca_kmeans.groupby(['segment']).mean() data_pca_kmeans_freq Hasilnya sebagai berikut: Terlihat dari tabel diatas bahwa segment 0 memiliki relasi yang tinggi pada Education & Life Style ini bisa disebut dengan segment Standar, Segement 1 memiliki relasi yang tinggi pada Career bisa disebut sebagai Career-Focus, Segment 2 memiliki relasi yang tinggi pada Experience namun rendah pada Career dan Education & Life Style disebut Fewer Opportunity dan terakhir Segment 3 memiliki relasi tinggi pada semua komponen disebut Well-Off 35. Mengubah nama segement sesuai hasil analisa sebelumnya dan menghitun jumlah serta rata-rata dari data setiap segment dengan perintah berikut: data_pca_kmeans_freq['jumlah'] = data_pca_kmeans[['segment','Sex']].groupby(['segment']).count() data_pca_kmeans_freq['rata2'] = data_pca_kmeans_freq['jumlah'] / data_pca_kmeans_freq['jumlah'].sum() data_pca_kmeans_freq = data_pca_kmeans_freq.rename({0:'Standard', 1:'Career-Focus', 2:'Fewer-Opportunity', 3:'Well-Off'}) data_pca_kmeans_freq Hasilnya sebagai berikut: Career Education & Life Style Experience
  • 16. 36. Menambahkan nama segment pada kolom legend pada data dengan perintah berikut: data_pca_kmeans['Legend'] = data_pca_kmeans['segment'].map({0:'Standard', 1:'Career-Focus', 2:'Fewer-Opportunity', 3:'Well-Off'}) data_pca_kmeans Hasilnya sebagai berikut: 37. Menampilkan data pada scatter plot dengan menggunakan component 1 (Career) dan Component 2 (Education & Life Style) x_axis = data_pca_kmeans['Component 2'] y_axis = data_pca_kmeans['Component 1'] plt.figure(figsize = (10, 8)) sns.scatterplot(x_axis, y_axis, hue = data_pca_kmeans['Legend'], palette = ['g', 'r', 'c', 'm']) plt.title('Kluster Setelah PCA Components') plt.show() Hasilnya sebagai berikut:
  • 17. Dari gambar diatas sudah dapat terlihat dengan jelas ciri khas dari setiap segment. Hal ini disimpulkan bahwa cukup dengan 2 Component sudah dapat melihat perbedaan dari setiap segment. 38. Export model yang telah dibuat dengan import library pickle dan menggunakan perintah berikut: import pickle Selanjutnya simpan model, pca dan kmeans_pca dengan perintah berikut pickle.dump(scaler,open('skalar.pickel','wb')) pickle.dump(pca,open('pca.pickel','wb')) pickle.dump(kmeans_pca,open('kmeans_pca.pickel','wb'))