python数据分析与挖掘学习笔记(5)-公司客户价值判断分析与聚类算法

这一节是使用聚类算法来对公司客户价值进行判断和分析。

提到聚类算法,大家应该都会想到是K-means。这是比较简单和经典的一种聚类算法。

k-means聚类算法的原理比较简单,实现也容易,可以直接调用python的sklearn包中封装好的函数实现。

这部分主要记录如何将聚类算法与显示案例应用联系起来判断和分析。


对于这个项目的实现,在已知客户相关数据的情况下,需要发掘出忠实客户数据。实现的方法为:

1. 整理好相关数据,把非必要特征去除

2. 选择实现的算法

3. 构建模型

4. 绘图分析

关键在于第三步和第四步。

K-means聚类算法与分类算法都研究事物之间的划分,但是最大的区别在于,聚类是指在不确定类别的情况下对客户群体进行划分,而分类是已经有具体的类别标签。

K-mean算法的步骤具体为:

1. 将数据分为k个非空子集
2. 计算每个类中心点(k-means<centroid>中心点是所有点的average),记为seed point
3. 将每个object聚类到最近seed point
4. 返回2,当聚类结果不再变化的时候stop

概括起来就是,首先随机初始化聚类中心,然后计算事物到各个聚类中心的距离,选择距离最小的进行聚类;再计算新的聚类中心重新调整,重复以上步骤,直到聚类中心不再发生变化。

下面通过与项目结合起来看。

现在公司有以下的数据:

《python数据分析与挖掘学习笔记(5)-公司客户价值判断分析与聚类算法》

包括客户的年龄,平均每次消费金额和平均消费周期,消费周期为0的表示只来过一次。

现在想要寻找公司客户的潜在价值,比如设定为VIP客户/普通客户等,分析客户的分类以及特点,以便于对VIP等有更大价值的客户进行更加细节的推广,思考公司的战略决策等。

下面通过聚类分析客户价值:

# 通过聚类分析客户价值
import pandas as pda
import numpy as npy
import matplotlib.pylab as pyl
from sklearn.cluster import KMeans

fname = "XX/company.csv"
dataf = pda.read_csv(fname, encoding="GBK")
x = dataf.as_matrix()
kms = KMeans(n_clusters=3)
y = kms.fit_predict(x)
print(y)

这里得到聚类的结果,n_clusters的值表示k的值,也就是想要最后分成几类。

下面通过作图来分析客户价值:

# 年龄-消费金额图,消费时间-消费金额图,年龄-消费时间图
for i in range(0, len(y)):
    if(y[i] == 0):
        print(str(i)+"大众客户")
        pyl.subplot(2, 3, 1)
        # 年龄-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "*r")
        pyl.subplot(2, 3, 2)
        # 消费时间-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 2:3].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "*r")
        pyl.subplot(2, 3, 3)
        # 年龄-消费时间图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 2:3].as_matrix(), "*r")
    elif(y[i] == 1):
        print(str(i)+"超级VIP客户")
        pyl.subplot(2, 3, 1)
        # 年龄-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "sy")
        pyl.subplot(2, 3, 2)
        # 消费时间-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 2:3].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "sy")
        pyl.subplot(2, 3, 3)
        # 年龄-消费时间图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 2:3].as_matrix(), "sy")
    elif(y[i]==2):
        print(str(i)+"VIP客户")
        pyl.subplot(2, 3, 1)
        # 年龄-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "pb")
        pyl.subplot(2, 3, 2)
        # 消费时间-消费金额图
        pyl.plot(dataf.iloc[i:i+1, 2:3].as_matrix(), dataf.iloc[i:i+1, 1:2].as_matrix(), "pb")
        pyl.subplot(2, 3, 3)
        # 年龄-消费时间图
        pyl.plot(dataf.iloc[i:i+1, 0:1].as_matrix(), dataf.iloc[i:i+1, 2:3].as_matrix(), "pb")
pyl.show()



这里图片得出有点问题,就没有贴上来,大家可以自己试一试,可以分析得出 年龄与消费时间的关系并不明显。并且可以分析后定义第一类为普通用户,第二类为超级VIP用户,第三类为VIP用户。

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/ying_xu/article/details/54946057
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞