iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0
AI & Data

一服見效的 AI 應用系列 第 3

Day 03:客戶分群(Customer Segmentation) -- 那些客戶是我的VIP? (續)

前言

上一篇我們將購買記錄轉化為 RFM 指標,接著,就可以使用各種集群分析(Clustering)的演算法,將客戶自動分群,進而找出 VIP 客戶。

集群分析

由於我們的目標只是要將現有的客戶分群,並沒有要預測新客戶,所以,不需要切割出測試資料,直接將全部資料丟進演算法作訓練。

這裡使用最簡單的 k-means 演算法,它必須先決定分幾群(即k),通常,我們會使用elbow方法,計算 k=1,2,3,4, ..,n群時的損失函數(wcss),找到CP值最高的k,程式如下:

Cust_All.drop(Cust_All.columns[0], axis=1, inplace=True)
from sklearn.cluster import KMeans
wcss = []
# 計算 k=1~10 的損失函數
for i in range(1,11):
    kmeans = KMeans(n_clusters=i, init='k-means++', random_state=0)
    kmeans.fit(Cust_All)
    # kmeans.inertia_
    wcss.append(kmeans.inertia_)

損失函數(wcss)為Y軸,k為X軸,作圖如下:

%matplotlib inline
import matplotlib.pyplot as plt 

plt.plot(range(1,11), wcss, marker='o')
plt.title('Elbow graph')
plt.xlabel('Cluster number')
plt.ylabel('WCSS')
plt.show()

https://ithelp.ithome.com.tw/upload/images/20190913/20001976DER986RJbX.png

從上圖看,分成3、4、5、6群,都不錯,損失函數(wcss)都已壓低到一個程度,假設選4,我們就可以進一步計算每一群的質心:

kmeans = KMeans(n_clusters=4, init='k-means++', random_state=0)
Cust_All['clusters'] = kmeans.fit_predict(Cust_All)
print(round(pd.DataFrame(kmeans.cluster_centers_),2))

註:也可以使用 Silhouette Coefficient 來判別,避免篇幅過長,就請有興趣的讀者自行google一下。

結果如下,觀看R、F、M值,最大者就是VIP,由下表看就是第3集群(Cluster),我們就可以列出VIP名單,好好的照顧他們,猛發EDM,攻佔他們的荷包。
https://ithelp.ithome.com.tw/upload/images/20190911/20001976M12w8wu2F7.png

Cust_All[Cust_All.clusters== 2]

3D 散佈圖

可以依據R、F、M畫個3D 散佈圖,驗證資料分群是否成功,其中質心以紅色三角形表示,確認同一群的資料是否聚集在一起,由於圖形無法在jupyter內旋轉,故另外作一個 Customer Segmentation.py,可以用滑鼠操作旋轉,看得更加清楚。

https://ithelp.ithome.com.tw/upload/images/20190913/20001976ozP6h43mqW.png

程式如下:

from mpl_toolkits.mplot3d import Axes3D 
colors=['purple', 'blue', 'green', 'gold']
fig = plt.figure()
fig.set_size_inches(12, 8)
ax = fig.add_subplot(111, projection='3d')
for i in range(kmeans.n_clusters):
    df_cluster=df2[df2['clusters']==i]
    ax.scatter(df_cluster['Recency_Flag'], df_cluster['Monetary_Flag'],df_cluster['Freq_Flag'],s=50,label='Cluster'+str(i+1), c=colors[i])
plt.legend()

ax.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],kmeans.cluster_centers_[:,2],s=200,marker='^', c='red', alpha=0.7, label='Centroids')

加強

實務上我們可以做得更精緻一點,例如:

  1. 可以分地區,每個地區個別作RFM,因為,各地區消費習慣可能不同,或者行銷活動的目標客群只鎖定某一區域。
  2. 篩選出來的客戶數,可經由K值控制,若篩選出來的客戶數太多,可以加大K值,或改變RFM的分類。
  3. 可以使用更精良的演算法,例如GMM(Gaussian Mixture Model)等,k-means 使用歐幾里得距離,通常使集群作正圓形的切分,而GMM可以依各種形狀切分,亦即GMM會考慮依各特徵離散程度作調整。

https://ithelp.ithome.com.tw/upload/images/20190911/20001976nlQ5hwVSCc.png
圖片來源:Clustering metrics better than the elbow-method

RFM 只是特徵工程的一種作法,實務上就是要找到真正影響目標變數的關鍵因素,最近看了一篇很好的報導,真好玩遊戲開發商董事長周玄昆指出幾個迷思:

  1. 寒暑假旺季? 上班族才是主力 ==> 業者要爭取的是金字塔上層的玩家,他們才是獲利的主要客群。
  2. 線上人數? 用戶留存率才是關注點 ==> 真正忠誠的客戶有多少。

因此他提出三項指標:

  1. 用戶留存率
  2. 付費率
  3. ARPU值(玩家付費的平均金額)

看了很有感,告訴自己,不要緊抱 RFM 教條式的作法,要掌握產業知識,找到獲利模式的關鍵特徵,才是決勝商場的利器。

相關程式碼放在這裡 的 Day02 Customer Segmentation 目錄。


上一篇
Day 02:客戶分群(Customer Segmentation) -- 那些客戶是VIP?
下一篇
Day 04:客戶留存率與流失率 -- 同類群組分析(Cohort Analysis)
系列文
一服見效的 AI 應用14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言