常见业务应用场景如下
聚类分析的其他应用场景
1. 聚类产生的类别作为一个新的字段加入其他的模型搭建过程中,作为细分群体的建模依据。
2. 通过对变量进行聚类,可以检查数据的共线性,对同一分组内的变量相关性较高,通过数据变换或筛选精简变量
常用聚类分析方法
sklearn.cluster主要函数列表
1. 直接删除哪些比其他任何数据点都要原理聚类中心点的异常值,为了防止误删,需在多次聚类循环中监控这些异常值,然后依据业务逻辑与多次循环的结果进行对比,再决定是否删除异常值。
2. 随机抽样,作为稀有事件的数据噪声和异常值能被随机抽进样本中的概率会小很多,而且其聚类后的结果作为聚类模型可以应用到剩余的数据集中(直接用该聚类模型对剩余的数据集进行判断)
1. 围绕具体分析的目的和业务需求挑选聚类变量
2. 通过相关性检查,对明显线性相关的几个变量通过数据变换或者选取其中一个进入聚类分析
3. 主成分分析法降维(会造成聚类结论的可解释性,可理解性上相对原始变量而言更复杂)
4. 聚类核心指标与非聚类业务指标结合(先通过用户行为属性里的核心字段进行聚类分群,在得到比较满意的聚类分类人群后,针对每个具体细分对象群体,再分别考察用户的个人属性,如工作,年龄,收入。如果个人属性在聚类分类后的群体仍有明显的区别或特征,将丰富业务特征)
1. 通过聚类指标来看
2. 通过散点图看,是否聚类的是你想要的。
聚类结果可视化工具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)
#绘制散点图,以颜色区分簇
3. 看每个聚类的各个指标的平均值,如果各个指标的值都很明显区分,可以业务上解释,即为聚类效果好。
案例为一般消费场景中,通过将客户的消费行为数据转换成RFM特征数据,通过聚类分析对目标客户进行群体分类,找出有价值的特定群体。
RFM是指影响企业销售和利润的客户行为字段里的最重要的3个变量
R(Recency)客户消费新鲜度,指客户最后一次购买的时间距离目前的天数(或月数)
F(Frequency)客户消费频度,是指客户迄今为止的特定时间段内购买公司产品的总次数
M(Monetary)客户消费金额,是指客户迄今为止的特定时间段内购买公司产品的总金额
3个变量的排列顺序是严格的,对于客户是否会再次购买,R最重要,F其次,M最末
os.chdir('D:\数据挖掘实战')
data = pd.read_excel(r'consumption_data.xls',index_col='Id')#读取数据
消费行为特征数据
样本无缺失值,通过对样本绘制分布散点图,可以看到客户数据消费频数低,但消费金额高,由于并不清楚样本的业务类型及业务情况,无法判断这些数据是否为异常值,不处理这些数据。
plt.figure()
sns.stripplot(x='F',y='M',data=data)#绘制分布散点图
分布散点图
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均值','样本个数','样本个数占比']]
聚类数据结论表格
考虑到部分群体内样本数量太少,在实际应用中可以忽略不计,上述聚类结论中比较代表性的群体如下