Video tutorial belajar Python bagian 6 telah kami terbitkan dengan topik bahasan mengenai analisis perilaku pelanggan menggunakan dataset RFM dengan teknik clustering FCM. Dilatari kebutuhan seorang sale manager untuk melihat perilaku pelanggan yang melakukan transaksi selama periode satu tahun. Melalui pengelompokan data pelanggan, maka kinerja dari sales canvaser menjadi lebih fokus dan terarah untuk melakukan reaktifasi pelanggan-pelanggan dalam kategori D (sedikit beli, sudah lama tidak melakukan pembelian, dan jarang melakukan transaksi).
Topik Bahasan di video ini:
- Apa itu RFM
- Gojek menggunakan RFM untuk segmentasi konsumennya
- Membuat dataset RFM
- Melakukan clustering data
- Visualisasi data RFM
- Clustering pelanggan kedalam level A, B, C, dan D
- Apa yang harus dilakukan terhadap pelanggan yang termasuk level D
RFM adalah sebuah teknik marketing yang digunakan untuk melihat perilaku pelanggan, seperti waktu terakhir pelanggan melakukan transaksi (recency), seberapa sering pelanggan melakukan transaksi (frequency) dan seberapa besar nilai uang dari pelanggan atas transaksinya (monetary)
Video Youtube
Untuk lebih jelasnya kalian bisa kunjungi link ini https://www.youtube.com/channel/UCs5XkYPkoyh2ns88y2is58Q. Cara melakukan pengolahahan dataset RFM menggunakan Pandas serta menyajikan informasi penting menggunakan visualisasi 3Dimensi
Dataset yang digunakan
dataset yang digunakan merupakan data transaksi penjualan 1 jenis penjualan barang (gula) selama periode januari-desember 2020 dengan format excel: data toko.xlsx
Hasil RFM yaitu
Dari 667 kali transaksi terdapat 95 toko yang melakukan pembelian dengan informasi hasil kategori RFM yaitu terdapat
- level A: 6 toko
- level B: 13 toko
- level C: 34 toko
- level D: 42 toko
Package FCM
Algoritma Clustering yang digunakan yaitu Fuzzy-C Means dengan source code yaitu https://github.com/omadson/fuzzy-c-means
Source Code
Berikut source code yang digunakan untuk melakukan FCM – Analisis Perilaku Pelanggan
# -*- coding: utf-8 -*- """ Created on Tue Dec 8 07:30:06 2020 @author: mulkan.ms@gmail.com """ #___BAGIAN 1 import pandas as pd import numpy as np from datetime import datetime #__BAGIAN 2 data = pd.read_excel('data toko.xlsx',sheet_name='Sheet1') #__BAGIAN 3 #menginput data string excel menjadi format tanggal data['format tanggal'] = pd.to_datetime(data['tanggal'], format='%d/%m/%Y') #__BAGIAN 4 kuantum = data[['kuantum','toko']].groupby(['toko']).sum() kuantum = kuantum.reset_index() #__BAGIAN 5 frekuensi = data[['no','toko']].groupby(['toko']).count() frekuensi = frekuensi.reset_index() #__BAGIAN 6 transaksi_terakhir = data[['format tanggal','toko']].groupby(['toko']).max() transaksi_terakhir = transaksi_terakhir.reset_index() tanggal_mulai = datetime.strptime('2020-01-01', '%Y-%m-%d') #__BAGIAN 7 RFM = pd.DataFrame() RFM['toko'] = kuantum['toko'] RFM['R'] = (transaksi_terakhir['format tanggal'] -tanggal_mulai).dt.days RFM['F'] = frekuensi['no'] RFM['M'] = kuantum['kuantum'] #RFM.to_excel('RFM.xlsx') #__BAGIAN 8 X = np.array([RFM['R'],RFM['F'],RFM['M']]) X = X.transpose() #__BAGIAN 9 from fcmeans import FCM n_clus = 4 fcm = FCM(n_clusters=n_clus) fcm.fit(X) #__BAGIAN 10 RFM['label'] = fcm.u.argmax(axis=1) c = fcm.centers nilai = c.sum(axis=1) kategori = pd.DataFrame(data=c,columns=["R","F","M"]) kategori['nilai'] = nilai kategori['label'] = np.arange(0,n_clus) kategori = kategori.sort_values(by=['nilai'],ascending=False) kategori['level'] = ['A','B','C','D'] RFM['level'] = RFM['label'] for i in range(0,n_clus): RFM['level'] = RFM['level'].replace([i],kategori.loc[i,['label','level']].level) from matplotlib import pyplot as plt targets = kategori['level'] colors=['red', 'green', 'blue','black'] fig = plt.figure() ax = fig.add_subplot(111, projection='3d') for target, color in zip(targets,colors): index = RFM['level'] == target ax.scatter(RFM.loc[index, 'R'], RFM.loc[index, 'F'], RFM.loc[index, 'M'], c = color, s = 200) ax.legend(targets) ax.grid() ax.set_xlabel('R') ax.set_ylabel('F') ax.set_zlabel('M') ax.set_title('Visualisasi Level Pelanggan') RFM_sort = RFM.sort_values(by=['level'],ascending=True) RFM_sort.to_excel('RFM result.xlsx')