人工智能开发实战k‐均值聚类电商用户分类

内容提要

  1. 项目分析
  2. 预备知识
  3. 项目实战

一、项目分析

1、提出问题

随着信息技术的快速发展和电商市场线上消费日趋壮大,使得众多的企业将营销重点从产品转向客户,维持良好的客户关系逐渐成为企业的核心问题。

那如何精准区分电商系统中用户目前的状态,并根据用户群分结果采取不同的措施保持客户户粘度是一个挑战性的问题。

这里将基于该场景采用聚类分析算法将电商用户进行合理群分,并基于不同类别用户群体特征采用不同的营销措施来保持用户活跃度。

2、解决方案

以“客户为中心”的营销模式在电商世界中被提升到前所未有的高度,这与下面的一些营销经验密切相关:

(1)企业80%以上的收入来自20%的重要客户

(2)绝大数利润来自现有的客户

(3)由于客户群分不准确,浪费了多数营销经费

(4)对潜力客户进行升级,就意味着利润成倍增加

无论上述经验是否完全准确,但它至少说明了对客户群分的重要性,如果企业想获得长期发展,不断提升销售利润,就必须对客户进行有效的识别和管理。

为此,我们对某知名电商公司的销售数据从消费间隔、消费频次和消费总金额三个维度进行统计,并对数据进行适当的清洗和标准化,然后迭代寻找最佳聚类数k,最后进行用户群分,结合业务场景提供营销建议。

解决方案如下图所示:

二、预备知识

客户群分就是通过客户数据来识别不同价值的客户,那靠什么来识别客户呢?

这就要构建相应的客户评价指标,RFM模型就是应用最广的识别客户的模型。

1、RFM模型介绍

2、k-means模型主要属性

k-means模型主要属性:

属性名

含义

备注

cluster_centers_

聚类质心,表示各簇的均值

是一个ndarray向量

labels_

聚类标签,表示各样本所属的簇的标记

是一个ndarray向量

inertia_

组内方差和,表示各样本到各自簇质心的距离的平方和

是一个float值

对比聚类后三种鸢尾花的质心数据:

iris_datas=pd.read_csv(r'data\iris.csv',sep=',')
kmeans3=KMeans(n_clusters=3,random_state=151).fit(iris_datas)
cluster_centers=kmeans3.cluster_centers_   #获取各簇的质心
feature = ['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']
angles=np.linspace(0, 2*np.pi,len(feature), endpoint=False)
angles=np.concatenate((angles,[angles[0]]))  
#定义鸢尾花的花萼长度、花萼宽度、花蕊长度、花蕊宽度在极坐标系上对应的角度坐标。
plt.figure(figsize=(8,4))
ax1=plt.subplot(111, polar=True)     #在子图ax1上按极坐标系绘制图形
i=0
for values in cluster_centers:       #代码10-13以循环的方式依次绘制出各类质心的雷达图
    values=np.concatenate((values,[values[0]]))   
    ax1.plot(angles, values, 'o-', linewidth=2,label='类'+str(i) +'质心')
    i+=1
ax1.set_thetagrids(angles * 180/np.pi, feature)      #为质心的各数据点定义标签
plt.legend()
plt.show()

三类鸢尾花质心分布图:

由上图可以看出,三个品种的鸢尾花在花萼长度、花萼宽度方面的特征差异并明显,但在花蕊长度、花蕊宽度方面的特征值有明显差异,说明不同品种鸢尾花的花蕊表现特征显著不同。

基于该特征描述,就可以据此来辨别鸢尾花的种类,该结论与案例1的分析结果一致。

三、项目实战

3.1 选择最佳的客户群分数目k

下面我们根据RFM模型来统计出客户三个重要的特征值,对客户原始的消费记录进行汇总统计,计算出客户最近的一次消费间隔R、近半年的消费频次F和消费总金额M,这涉及到数据的统计和预处理方法,在这里,直接给出处理后的结果,保存在RFM.csv文件中。

任务目标:对文件RFM.csv进行聚类分析,通过不同k值的聚类性能评价指标的对比,选择最佳的客户群分数目k,为后续的客户分群及营销对策打下基础。

实现步骤:

(1)清洗掉无关的数据。

(2)对数据进行标准化处理

(3)求不同k值下客户群分的性能指标

(4)绘制三个内部性能指标的变化图

1、清洗掉无关的数据

通过以下了代码导入数据:

from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn import preprocessing
import matplotlib.pyplot as plt
import pandas as pd
kfm_datas=pd.read_csv(r'data\RFM.csv')

观察前5行数据的结构,如下图所示:

原始样本数据中,第一列user_id的数据只是标识客户的编号,不能作为聚类的特征值来使用,因此要把该列从原样本集从剔除掉,实现代码如下:

kfm_datas1=kfm_datas.iloc[:,1:]

这样,我们按索引对原始样本集进行切片,只取第一列以后的所有行数据。

2、对数据进行标准化处理

三类鸢尾花质心分布图:

从上图可以看出,R、F、M三个特征值大小差距很大,为消除不同量纲对聚类模型的影响,加快模型计算效率,通过以下代码对样本数据进行标准化处理。

X=preprocessing.StandardScaler().fit_transform(kfm_datas1)

标准化处理后,得到新的样本数据集X。

3、求不同k值下客户群分的性能指标

由于样本事先没有标注簇号,因此我们采用聚类的内部指标:轮廓系数CH分数 惯性方差inertia来评价聚类效果,代码如下。

ch_score = []     #保存CH分数
ss_score = []      #轮廓系数
inertia = []         #惯性方差值
for k in range(2,10):
    kmeans = KMeans(n_clusters=k,max_iter=1000)
    pred = kmeans.fit_predict(X)
    #对样本集X进行聚类,返回聚类标签保存在变量pred中
    ch = metrics.calinski_harabasz_score(X,pred)
    ss = metrics.silhouette_score(X,pred)
    ch_score.append(ch)
    ss_score.append(ss)
    inertia.append(kmeans.inertia_)

把客户按R、F、M三个特征值分别划分为3个等级,等同于最多可以将客户划分为3×3×3=27种类型,但划分太细不利于营销活动的开展和客户管理,因此,此处将客户类型个数k的取值范围指定在[2,9]之间,然后计算每个k值对应的聚类指标。

4、绘制三个内部性能指标的变化图

3.2 计算三类客户的RFM均值

根据最佳k值3重新对客户进行聚类,根据各类的质心来了解不同客户群体在R、F、M三个特征上的均值情况,据此结合业务实情来辨别三个具体的客户类型,如哪类是重要客户,哪类是重要发展或挽留客户,哪类是一般或低价值客户等。

新建文件task2.ipynb,根据任务目标,按照以下步骤和操作完成任务。

任务目标:对样本数据按k=3重新聚类,求聚类结果的质心。

实现步骤:

(1)重新聚类。

(2)求质心数据

1、重新聚类

按簇类数3对客户进行重新聚类,得到各客户群的质心和对应的标签,因为在聚类前对原始数据进行了标准化处理,所有要对质心进行反标准化转换,得到质心的原始值,即RFM指标的原始平均值。代码如下。

kfm_datas=pd.read_csv(r'data\RFM.csv')
kfm_datas1=kfm_datas.iloc[:,1:]
stand_scaler=preprocessing.StandardScaler()
X=stand_scaler.fit_transform(kfm_datas1)
kmeans = KMeans(n_clusters=3,random_state=151,max_iter=1000)                
#按聚类数目3对客户进行聚类,迭代次数为1000次。
labels = pd.Series(kmeans.fit_predict(X))
#得到聚类后的各样本标签。

2、求质心数据

centers=stand_scaler.inverse_transform(kmeans.cluster_centers_)
#对各类质心进行反标准化转换,以便得到原始数据值。
centers = pd.DataFrame(centers)
#将质心数据由数组类型转换成数据框架类型,方便观察和后续数据处理

各客户类型在RFM三个指标方向的平均数据centers如图所示。

对质心数据进行处理:

result = pd.concat([centers,labels.value_counts().sort_index(ascending=True)],axis=1)
#对聚类后的标签进行分类计数,并按标签升序对计数结果排序,然后将排序结果与质心数据组合起来。
result.columns = list(kfm_datas1.columns)+ ['counts']
#为分类计数结果添加一个列名“'counts'”。

执行代码后效果如图:

3.3 为三类客户提出营销建议

根据对各个客户群进行特征分析,对各类客户群进行价值排名,针对不同类型的客户群提供不同的产品或服务,以达到提升客户消费水平的目的。

新建文件task3.ipynb,根据任务目标,按照以下步骤和操作,完成任务。

任务目标:分析各客户群特征,提供相应的营销建议或策略。

实现步骤:

(1)绘制客户群的R、F、M指标折线图

(2)提供营销建议

1、绘制客户群的R、F、M指标折线图

2、提供营销建议

客户群价值排名及建议:

更多精彩内容请持续关注本站!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值