美文网首页
KMeans聚类:商城客户细分数据

KMeans聚类:商城客户细分数据

作者: 坐下等雨 | 来源:发表于2019-03-30 18:26 被阅读0次

    数据集来自DataFountain,一共包含200名顾客,记录包含顾客的ID,性别,年龄,收入和支出分数。首先先查看一下数据的前五行

    1、描述分析

    df = pd.read_csv('Mall_Customers.csv', index_col=0)
    df.columns = [ 'Gender', 'Age', 'Income', 'Score']
    df.head()
    

    在进行聚类之前,首先进行描述性分析,了解一下顾客的大体情况。

    • 年龄分布
    df.Age.plot(kind='kde')
    plt.xlabel('年龄')
    plt.ylabel('和密度值')
    

    年龄大致呈正态分布,大多数分人年龄在20-60之间,这个年龄段为此商家的消费主力。

    • 收入分布
    df.Income.plot(kind='kde')
    plt.xlabel('收入')
    plt.ylabel('和密度值')
    

    收入也整体呈正态分布,消费的主力人群收入为3-10万美元之间。

    • 男女比例


    • 男女消费能力比较


    • 男女收入对比



      可见女性消费人数和消费能力略有优势,但是收入比男性稍少一些。

    2、KMeans聚类分析

    这里选择收入和积分两个维度用于顾客聚类的依据。首先收入和积分之间的散点图。

    plt.scatter(df['Income'], df['Score'])
    

    可以看到数据分布还是比较有规律的,仅凭肉眼观察,似乎能凭感觉将数据分为5类,那么我们的直觉是否准确呢。下面通过KMeans进行测试。

    • 数据标准化
      由于收入和积分的量纲不一致,需要进行标准化处理
    from sklearn.preprocessing import minmax_scale
    x = df[['Income','Score']]
    X = minmax_scale(x)
    X = pd.DataFrame(X, columns=['Income', 'Score'])
    
    • 确定最佳K值
      这里离差平方和拐点法以及轮廓系数法确定最佳K值
    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_score
    import numpy as np
    
    K = range(2,11)
    TSSE = []
    score = []
    for k in K:
        SSE = []
        kmeans = KMeans(n_clusters=k)
        kmeans.fit(X)
        labels = kmeans.labels_
        centers = kmeans.cluster_centers_
        score.append(silhouette_score(X, labels))
        for label in set(labels):
            SSE.append(np.sum((X.loc[label == labels] - centers[label,:])**2))
        TSSE.append(np.sum(SSE))
    plt.figure(figsize=(10,5))
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.subplot(1,2,1)
    plt.plot(K, TSSE, 'b*-')
    plt.xlabel('簇的个数')
    plt.ylabel('各簇内离差平方和之和')
    
    plt.subplot(1,2,2)
    plt.plot(K, score, 'ro-')
    plt.xlabel('簇的个数')
    plt.ylabel('轮廓系数')
    

    从左图可以看到,簇的个数为5时有个明显的拐点,并且右图可以看到,簇个数为5时,轮廓系数最大。所以可以将K值确定为5,这也印证了我们开始肉眼观察的结果。

    • 查看聚类效果
      接下来我们通过可视化,观察一下KMeans是怎么将数据进行聚类的。
    kmeans = KMeans(n_clusters=5)
    kmeans.fit(X)
    df['cluster'] = kmeans.labels_
    for i in range(5):
        plt.scatter(df[df.cluster == i]['Income'], df[df.cluster == i]['Score'])
        plt.scatter(df[df.cluster == i]['Income'].mean(), df[df.cluster == i]['Score'].mean(), marker='*', c='black',s=100)
    plt.xlabel('收入')
    plt.ylabel('积分')
    

    五种颜色的点集代表五个簇,黑色的星星则代表各自簇的质心。它将顾客分为了五种类型。我这里将这五种客户归类为:高收入高消费、低收入高消费的重要客户,高输入低消费、中等收入中等消费的潜力客户和低收入低消费的一般客户。

    相关文章

      网友评论

          本文标题:KMeans聚类:商城客户细分数据

          本文链接:https://www.haomeiwen.com/subject/xpjsbqtx.html