1. 聚类分析的典型应用场景
聚类分析的一个重要用途就是针对目标群体进行多指标的群体划分,类似这种目标群体的分类就是精细化经营,个性化运营的基础和核心,只有进行了正确的分类,才可以有效进行个性化和精细化的运营,服务及产品支持等。
常见业务应用场景如下
1.1 目标用户的群体分类
通过对特定运营目的和商业目的所挑选出的指标变量进行聚类分析,把目标群体划分成几个具有明显特征区别的细分群体,从而可以在运营活动中为这些细分群体采取精细化,个性化的运营和服务,最终提升运营的效率和商业效果(如把付费用户按照几个特定维度,如利润贡献,用户年龄,续费次数等聚类分析后得到不同特征的群体)
1.2不同产品的价值组合
企业可以按照不同的商业目的,并依照特定的指标标量来为众多的产品种类进行聚类分析,把企业的产品体系进一步细分成具有不同价值,不同目的的多维度的产品组合,并且在此基础分别制定和相应的开发计划,运营计划和服务规划(如哪些产品畅销毛利率又高,哪些产品滞销且毛利又低)
1.3探测,发现离群点,异常值
这里的离群点指相对于整体数据对象而言的少数数据对象,这些对象的行为特征与整体的数据行为特征很不一致(***如某B2C电商平台上,比较昂贵,频繁的交易,就有可能隐含欺诈的风险尘封,需要风控部门提前关注,监控)
聚类分析的其他应用场景
- 聚类产生的类别作为一个新的字段加入其他的模型搭建过程中,作为细分群体的建模依据
- 通过对变量进行聚类,可以检查数据的共线性,对同一分组内的变量相关性较高,通过数据变换或筛选精简变量
2. 常用聚类分析算法
3. 聚类分析在实践应用中的重点注意事项
在数据挖掘中,由于针对大规模数据集所采用的聚类算法主要是K-Means算法,**本节的具体内容都是针对K-Means算法进行阐述
3.1处理数据噪声和异常值
K-Means算法对噪声和异常值非常敏感,针对聚类中数据噪声和异常值,常用处理方法
- 直接删除哪些比其他任何数据点都要原理聚类中心点的异常值,为了防止误删,需在多次聚类循环中监控这些异常值,然后依据业务逻辑与多次循环的结果进行对比,再决定是否删除异常值。
- 随机抽样,作为稀有事件的数据噪声和异常值能被随机抽进样本中的概率会小很多,而且其聚类后的结果作为聚类模型可以应用到剩余的数据集中(直接用该聚类模型对剩余的数据集进行判断)
3.2 Z-Score标准化
可以为聚类计算中的各个标量赋予相同的权重,也可以有效化解不同属性因度量单位不统一所带来的潜在的数量等级差异
3.3 聚类变量的筛选
参与聚类的指标变量如果太多,会显著增加运算时间,更重要的变量之间的相关性会严重损害聚类的效果,并且太多的变量参与会使随后的聚类群体的业务解释变得更加复杂
- 围绕具体分析的目的和业务需求挑选聚类变量
- 通过相关性检查,对明显线性相关的几个变量通过数据变换或者选取其中一个进入聚类分析
- 主成分分析法降维(会造成聚类结论的可解释性,可理解性上相对原始变量而言更复杂)
- 聚类核心指标与非聚类业务指标结合(先通过用户行为属性里的核心字段进行聚类分群,在得到比较满意的聚类分类人群后,针对每个具体细分对象群体,再分别考察用户的个人属性,如工作,年龄,收入。如果个人属性在聚类分类后的群体仍有明显的区别或特征,将丰富业务特征)
4.聚类分析在实际应用中的优缺点
优点
- 算法成熟,可靠。长期的商业事件应用已经证明它是一个非常不错的数据群体细分的工具和方法
- 比较容易用商业和业务的逻辑来理解和解释,可理解,可解释在数据化运营实践中非常重要
- K-Means算法具有简介高效的特点,其算法的事件复杂度与数据集的大小呈正相关性
- K-Means算法不依赖顺序的算法,给定一个初始类分布,无论样本算法的顺序如何,聚类分类的结果都是一样的
缺点
- 需事先指定聚类的类目K,在实践中,需测试多个不同的K值才能根据效果比较来选择最适合的K值
- 算法对数据噪声和异常值比较敏感,由于K-Means算法是采用均值作为每个聚类的聚类中心,所以异常值会严重干扰正常聚类中心的计算,造成聚类失真
5.聚类分析结果的评价体系和评价指标
对于任何模型的评估,包括聚类分析的评估纪要考虑统计学意义上的指标,维度,同时更要关注其实践效果上的价值及业务背景下的价值
5.1 业务专家的评估
业务专家对聚类结果进行评判时不仅只是对结果的合理性,理解性进行评判,跟重要的是结合具体应用的业务场景进行评判,聚类结果是否具有落地应用价值或者说落地应用前景。
5.2 聚类技术的评价指标
- 通过聚类指标来看
Python 分群指标
https://blog.csdn.net/sinat_26917383/article/details/70577710
- 通过散点图看,是否聚类的是你想要的。
聚类结果可视化工具TSNE,TSNE提供一种有效的数据降维方法,让我们可以在2维或者3维空间中展示聚类结果
from sklearn.manifold import TSNE
tsne = TSNE()
tsne.fit_transform(data_zs)
#进行数据降维,data_zs样本数据Z-score标准化后数据
tsne = pd.DataFrame(tsne.embedding_,index=data_zs.index)
tsne['type'] = model.labels_ #聚类分类后簇标签
sns.stripplot(x=0,y=1,hue='type',data=tsne ,jitter = True)
#绘制散点图,以颜色区分簇
- 看每个聚类的各个指标的平均值,如果各个指标的值都很明显区分,可以业务上解释,即为聚类效果好。
5 聚类分析典型案例
5.1 案例背景
案例为一般消费场景中,通过将客户的消费行为数据转换成RFM特征数据,通过聚类分析对目标客户进行群体分类,找出有价值的特定群体。
RFM是指影响企业销售和利润的客户行为字段里的最重要的3个变量
R(Recency)客户消费新鲜度,指客户最后一次购买的时间距离目前的天数(或月数)
F(Frequency)客户消费频度,是指客户迄今为止的特定时间段内购买公司产品的总次数
M(Monetary)客户消费金额,是指客户迄今为止的特定时间段内购买公司产品的总金额
3个变量的排列顺序是严格的,对于客户是否会再次购买,R最重要,F其次,M最末
5.2 数据摸底
os.chdir('D:\数据挖掘实战')
data = pd.read_excel(r'consumption_data.xls',index_col='Id')#读取数据
样本无缺失值,通过对样本绘制分布散点图,可以看到客户数据消费频数低,但消费金额高,由于并不清楚样本的业务类型及业务情况,无法判断这些数据是否为异常值,不处理这些数据。
plt.figure()
sns.stripplot(x='F',y='M',data=data)#绘制分布散点图
5.3 基于消费行为特征数据聚类分析的初步结论
data_zs =1.0*(data-data.mean())/data.std()
#数据标准化处理
from sklearn.cluster import KMeans
k = 8 #聚类簇数
model = KMeans(n_clusters= k,n_jobs = 4)
#n_jobs并发数,一般与CPU核数相同
model.fit(data_zs)#开始聚类
data['type']=model.labels_
r = data.groupby('type').mean()
r['样本个数'] =data['type'].value_counts()
r['样本个数占比'] = r['样本个数']/data['type'].count()
r['样本个数占比'] = r['样本个数占比'].map(lambda x:'%.2f%%'%(x*100))
r.columns =[['R均值','F均值','M均值','样本个数','样本个数占比']]
考虑到部分群体内样本数量太少,在实际应用中可以忽略不计,上述聚类结论中比较代表性的群体如下
- 第0组,该组用户数量229个,占样本总量24%,消费新鲜度均值15天,消费频数均值3.72次,消费金额均值323.57元,根据业务理解,该群体消费能力较低,可理解为低价值用户。
- 第1组,该组用户数量128个,消费新鲜度均值14.6天,消费频数均值18.06次,消费金额均值1673.92元,该组与第5组(用户数量124个,消费新鲜度均值15天,消费频数均值19次,消费金额均值1055.56元)各指标非常相识(除消费金额差别较大以外),合计共占样本总量26.8%,该群体可理解为高价值客户
- 第2组,该组用户数量175个,消费新鲜度均值15.6天,消费频数均值5.7次,消费金额均值1024.37元,该组与第3组(用户数量167个,消费新鲜度均值14.4天,消费频数均值5.38次,消费金额均值1024.37元)各指标非常相识(除消费金额差别较大以外),合计共占样本总量26.8%,该群体可理解为中等值客户