结合RFM模型利用K-means算法进行用户分群
2020-02-27 233浏览
- 1.2017/11/10 结合RFM模型利用K-means算法进行用户分群 一、项目背景 模型是客户管理中的经典方法,它用以衡量消费用户的价值和创利能力,是一个典型的分群手段。RFM 模型的主流分群方式有两种。一种是建立指标,指标的建立需要丰富的业务经验。而另外的一种方法,则是通 过机器学习算法来完成,不需要人工划分,是个不错的分群方式。由于指标的建立比较复杂,为此我们可以通 过尝试结合数据挖掘,应用到RFM模型,提供用户的消费轮廓,能给市场、销售、产品和运营人员提供精细化 运营的依据。 1.RFM 项目数据:某电商用户的消费数据,共约7万条数据。 2. 二、加载必要库 In [43]: import pandas as pd import numpy as np import matplotlib.pyplot as plt from datetime import datetime %matplotlib inline plt.style.use('ggplot') import seaborn as sns 三、数据预处理 从原始数据中提炼出:F--消费次数,代表消费频率;M--消费金额;R--消费距今天数 1. In [44]: columns = ['user_id','order_dt','order_products','order_amount'] df = pd.read_table('Purchase_data.txt',names = columns,sep='\s+') In [45]: df['order_date'] = pd.to_datetime(df.order_dt,format= '%Y%m%d') In [46]: df_rfm = pd.DataFrame(df.groupby("user_id").order_date.count()) In [47]: df_rfm.columns = ['F'] In [48]: last_date = df.order_date.max() date_trans = lambda s : s / np.timedelta64(1,'D') df_rfm['R'] = (last_date - df.groupby('user_id').order_date.max()).apply(date_tr ans) file:///Users/CZH/Desktop/%E7%BB%93%E5%90%88RFM%E6%A8%A1%E5%9E%8B%E5%88%A9%E7%94%A8K-means%E7%AE%97%E6%B3%95%… 1/5
- 2.结合RFM模型利用K-means算法进行用户分群 2017/11/10 In [49]: df_rfm['M'] = df.groupby('user_id').order_amount.sum() In [50]: df_rfm.head() Out[50]: F R M 1 1 545.0 11.77 2 2 534.0 89.00 3 6 33.0 4 4 200.0 100.50 5 11 178.0 385.61 user_id 156.46 四、对特征进行标准化处理 由于不同的数据具有不同的量纲,如果不消除量纲的影响,往往会影响聚类模型的效果,如下,通过Sklearn 进行数据预处理 1. In [51]: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() rfm_scaled = scaler.fit_transform(df_rfm) In [52]: df_rfm_scaled = pd.DataFrame(scaler.fit_transform(df_rfm)) In [53]: df_rfm_scaled.columns = ['F','R','M'] df_rfm_scaled.head() Out[53]: F R M 0 -0.412842 0.981077 -0.391459 1 -0.201714 0.920373 -0.070897 2 0.642799 -1.844416 0.209113 3 0.220543 -0.922819 -0.023163 4 1.698440 -1.044227 1.160258 file:///Users/CZH/Desktop/%E7%BB%93%E5%90%88RFM%E6%A8%A1%E5%9E%8B%E5%88%A9%E7%94%A8K-means%E7%AE%97%E6%B3%95%… 2/5
- 3.2017/11/10 结合RFM模型利用K-means算法进行用户分群 五、K-means聚类 数据处理好后,便可导入模型中进行聚类分析 1. In [54]: from sklearn.cluster import KMeans In [55]: km = KMeans(n_clusters=4) In [56]: km.fit(df_rfm_scaled ) Out[56]: KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=30 0, n_clusters=4, n_init=10, n_jobs=1, precompute_distances='auto', random_state=None, tol=0.0001, verbose=0) 聚类完成,将聚类后的标签放入原始数据中,创造新的一列 2. In [57]: df_rfm['cluster'] = km.labels_ 六、绘图观察 通过上面的聚类,算法已经自动完成用户的分类,致此,我们可以通过绘图来观察,绘图观察有利于做出较 直观的分析,绘图如下: 1. In [58]: from pandas.tools.plotting import scatter_matrix cluster_centers = km.cluster_centers_ In [59]: centers = df_rfm.groupby("cluster").mean().reset_index() In [60]: colors = np.array(['red', 'green', 'blue', 'black','purple']) file:///Users/CZH/Desktop/%E7%BB%93%E5%90%88RFM%E6%A8%A1%E5%9E%8B%E5%88%A9%E7%94%A8K-means%E7%AE%97%E6%B3%95%… 3/5
- 4.2017/11/10 结合RFM模型利用K-means算法进行用户分群 In [61]: plt.rcParams['font.size'] = 14 plt.scatter(df_rfm["R"], df_rfm["M"],c=colors[df_rfm["cluster"]]) plt.scatter(centers.R, centers.M, linewidths=3, marker='+', s=300, c='white') plt.xlabel("R") plt.ylabel("M") Out[61]:上图的不同颜色,就是算法计算出的用户群体。 2. 黑色用户群体:代表的是高消费金额,因为数量稀少,所以在最近一次消费时间上没有明显区分,不过并不久 远。这些都是产品的爸爸和金主,属于重要价值客户。 绿色用户群体:代表的是近期消费,且消费金额中档的用户,可以适当保持。 蓝色用户群体:代表的是近期消费,消费金额较少的用户,运营需要挖掘他们的价值,去发展和培养。 红色用户群体:代表的是有流失倾向的用户,这些用户消费金额不太多,运营可以采取适当的挽回策略。 七、多角度绘图观察 从单一角度若观察可能比较片面,我们可以绘制矩阵图,从多角度进行观察,虽然从数据分布上,长尾形态 会一定程度影响可读性,但运营还是能针对不同群体作出相应的运营手段。 1. In [62]: from pandas.tools.plotting import scatter_matrix file:///Users/CZH/Desktop/%E7%BB%93%E5%90%88RFM%E6%A8%A1%E5%9E%8B%E5%88%A9%E7%94%A8K-means%E7%AE%97%E6%B3%95%… 4/5
- 5.2017/11/10 结合RFM模型利用K-means算法进行用户分群 In [63]: scatter_matrix(df_rfm[["R","F","M"]],s=100, alpha=1, c=colors[df_rfm["cluster"]], figsize=(15,15)) plt.suptitle("With 5 Cluster") /Users/CZH/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1:FutureWarning:'pandas.tools.plotting.scatter_matrix' is depre cated, import 'pandas.plotting.scatter_matrix' instead. """Entry point for launching an IPython kernel. Out[63]:file:///Users/CZH/Desktop/%E7%BB%93%E5%90%88RFM%E6%A8%A1%E5%9E%8B%E5%88%A9%E7%94%A8K-means%E7%AE%97%E6%B3%95%… 5/5