233 Views

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')




 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

÷ 2 = 3