Cara menggunakan difflib python
Show
K-Means ClusteringK-Means merupakan salah satu algoritma clustering, dimana pada algoritma ini, komputer akan mengelompokkan sendiri data-data yang menjadi masukannya tanpa mengetahui terlebih dulu target kelasnya[2]. Pembelajaran ini termasuk dalam Unsupervised Learning. Input yang diterima berupa data (objek) dan k buah kelompok (cluster) yang diinginkan. Algoritma ini akan mengelompokkan data (objek) ke dalam k buah kelompok tersebut. Pada setiap cluster terdapat titik pusat (centroid) yang merepresentasikan cluster tersebut [2]. Algoritma K-Means ClusteringBerikut ini langkah-langkah dari algoritma untuk melakukan K-Means clustering [3]:
Proses pengelompokkan data ke dalam suatu cluster dapat dilakukan dengan cara menghitung jarak terdekat dari suatu data ke sebuah titik centroid. Rumus untuk menghitung jarak tersebut adalah [4] : dengan: Sedangkah untuk pembaharuan suatu titik centroid dapat dilakukan dengan rumus berikut [4]: The Business GoalTujuan dari penyelesaian permasalahan ini, yaitu untuk melakukan segmentasi customer berdasarkan RFM (Recency, Frequency dan Monetary), sehingga perusahaan dapat menargetkan segmentasi customer secara lebih efisien. Berikut ini, merupakan langkah-langkah untuk menyelesaikan permasalahan segmentasi customer pada dataset OnlineRetail menggunakan K-Means Clustering: Step 1 : Importing the LibraryHal pertama yang harus dilakukan adalah meng-import beberapa Library Python untuk kebutuhan dataframe, visualisasi dan clustering, dengan langkah-langkah sebagai berikut: # Library untuk dataframe dan visualisasi Step 2 : Reading and Understanding the DataLangkah selanjutnya, yaitu meng-input dataset. Dataset yang akan digunakan pada tulisan ini adalah dataset OnlineRetail. Klikdisini untuk mengakses dataset tersebut. Dataset OnlineRetail merupakan sekumpulan data transaksional dari toko-toko online/retail di UK yang terdaftar di suatu perusahaan retail online, dengan rentang waktu periode 1 Desember 2010 sampai dengan tanggal 9 Desember 2011. Berikut adalah langkah untuk meng-input dataset dan melihat detail informasi tentang dataset: # Load dataset OnlineRetail Berdasarkan output diatas, dapat disimpulkan bahwa dataset tersebut memiliki 8 atribut, diantaranya: InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID dan Country. Untuk detail info dan statistika deskriptif terkait dataset tersebut dapat diperoleh pada output-output dibawah ini: df.info() df.describe() Step 2 : Data CleansingLangkah selanjutnya yaitu akan dilihat komposisi persentase missing value yang terdapat pada dataset, dengan langkah sebagai berikut: df_null = round(100*(df.isnull().sum())/len(df), 2) Berdasarkan output tersebut, dapat disimpulkan bahwa masih terdapat beberapa atribut yang memiliki missing value. Oleh karena itu, akan dilakukan penghapusan terhadap baris-baris yang mengandung missing value, dengan langkah sebagai berikut: Pada output df.info(), diperoleh informasi bahwa atribut CustomerID memiliki tipe data float64, selanjutnya akan dilakukan pengubahan tipe data pada atribut tersebut menjadi str, dengan langkah sebagai berikut: df['CustomerID'] = df.CustomerID.astype(str) Step 3 : Data PreparationSeperti yang telah disebutkan sebelumnya bahwa, tujuan analisis yang dilakukan pada case ini adalah untuk memperoleh segmentasi dari atribut Customers, yang didasarkan pada 3 faktor berikut:
Maka, langkah pertama yang harus dilakukan adalah membuat atribut baru “Monetary” dengan detail dan perhitungan sebagai berikut: # Membuat atribut baru : Monetary Langkah selanjutnya, membuat atribut baru “Frequency” dengan detail dan perhitungan sebagai berikut: # Membuat atribut baru : Frequency Kemudian, akan dilakukan merging(penggabungan) antara dataframe rfm_m dan rmf_f, sebagai berikut: # Menggabungkan (merging) dua dataframe Langkah selanjutnya, yaitu membuat atribut baru “Recency” dengan cara meng-convert tipe data atribut “InvoiceDate” menjadi datetime terlebih dahulu, dengan langkah sebagai berikut: # Membuat atribut baru : Recency Kemudian, akan ditampilkan tanggal maksimal, untuk mengetahui tanggal terakhir kali melakukan transaksi : Selanjutnya akan dihitung selisih nilai antara tanggal terakhir melakukan transaksi (max_date) dengan masing-masing tanggal yang terdapat di atribut “InvoiceDate”. Dimisalkan nilai selisih tersebut didefinisikan sebagai atribut baru “Diff”: # Menghitung selisih antara max_date dengan InvoiceDate Selanjutnya, akan dihitung waktu terakhir customer melakukan transaksi guna mendefinisikan atribut Recency atau jumlah hari sejak pembelian terakhir. # Menghitung the last transaction date untuk atribut Recencyrfm_p = df.groupby('CustomerID')['Diff'].min() Oleh karena, pada atribut Recency hanya dibutuhkan data terkait jumlah hari saja, maka selanjutnya akan dilakukan ekstraksi, atau hanya akan diambil data keterangan hari saja. # Extract jumlah hari Setelah 3 atribut baru yaitu : Recency (dataframe : rfm_p), Frequency (dataframe : rfm_f)dan Monetary (dataframe : rfm_m) terbentuk, maka langkah selanjutnya yaitu menggabungkan ke-tiga atribut/ kolom tersebut menjadi RFM dataframe, dengan langkah sebagai berikut: # Menggabungkan dataframe Langkah selanjutnya akan dilakukan analisis terhadap outlier menggunakan boxplot, dengan langkah sebagai berikut: # Outlier Analysis of Monetary, Frequency and Recencyattributes = ['Monetary','Frequency','Recency'] Boxplot merupakan ringkasan distribusi sampel yang disajikan secara grafis sebagai penggambaran bentuk distribusi data, ukuran tendensi sentral dan ukuran penyebaran (keragaman) data pengamatan. Selain itu boxplot juga bisa menunjukkan ada tidaknya nilai outlier dan nilai ekstrem di data pengamatan. Nilai Outlier merupakan nilai data yang letaknya lebih dari 1.5 x panjang kotak (IQR), dengan formulasi detail sebagai berikut: Untuk langkah selanjutnya, akan dilakukan penghapusan terhadap outliers yang ada, dengan langkah sebagai berikut: # Removing (statistical) outliers for Monetary Tahap selanjutnya yaitu, akan dilakukan rescaling terhadap atribut-atribut yang ada. Rescaling atribut merupakan salah satu tahap yang penting agar masing-masing atribut memiliki skala yang sebanding. Pada case ini, akan digunakan Standardisation Scaling terhadap masing-masing atribut, dengan langkah sebagai berikut: # Rescaling Atribute rfm_df_scaled = pd.DataFrame(rfm_df_scaled) Output diatas merupakan hasil dari Standardisation Scaling yang telah dilakukan. Step 4 : Model BuildingLangkah selanjutnya, yaitu menentukan nilai K. Pada langkah ini, akan dikonfigurasi dan ditentukan nilai inisiasi k (n_clusters) sebesar 4 cluster. kmeans = KMeans(n_clusters=4, max_iter=50) Selanjutnya, akan dicari jumlah optimal dari cluster (k) dengan menggunakan metode Elbow Curve. Elbow Curve, merupakansalah satu metode yang bisa digunakan untuk menemukan jumlah optimal dari cluster (k), yang langkah-langkah pengerjaan adalah sebagai berikut: # Elbow-curve/SSD Pada elbow curve method, lokasi ‘tikungan’ yang terbentuk di plot, pada umumnya dianggap sebagai indikator jumlah
cluster yang tepat [5]. Oleh karena itu, langkah selanjutnya akan digunakan Silhouette Analysis guna mencari nilai k optimal. Silhouette Analysis dengan : Nilai dari Sillhouette ada diantara -1 sampai dengan 1. Jika nilainya mendekati angka 1, maka titik data akan sangat mirip dengan titik data lainnya di cluster yang sama. Jika mendekati -1 maka titik data tersebut tidak mirip dengan titik data di klusternya. # Silhouette Analysis Berdasarkan output tersebut, dapat disimpulkan bahwa untuk n_clusters=2 menghasilkan nilai silhouette yang tinggi. # Final model with k=2 Langkah selanjutnya yaitu menetapkan label cluster untuk setiap titik data sebagai berikut: # Assign the label # Boxplot untuk memvisualisasikan Cluster Id dan Monetary # Boxplot untuk memvisualisasikan Cluster Id vs Frequency # Boxplot untuk memvisualisasikan Cluster Id vs Recency Step 5 : Final AnalysisBerdasarkan langkah-langkah pengerjaan yang telah dilakukan, dapat disimpulkan bahwa :
Kelebihan K-Means Clustering :Terdapat beberapa kelebihan K-Means clustering, diantaranya [2]: Kekurangan K-Means Clustering :Sedangkan beberapa kekurangan dari K-Means clustering, adalah sebagai berikut: Referensi :[1] Usman & Sobari. (2013). Aplikasi Teknik Multivariate. Jakarta: Rajawali Pers |