
1. 需求分析会员客户聚类分析。2. 数据说明这是 Kaggle 经典客户分群教学数据集共 200 条商场会员脱敏样本专门用于无监督聚类K-Means 为主入门练习为模拟商业数据无真实用户隐私。商场客户分群数据集来源Mall Customer Segmentation Data字段名含义数据类型CustomerID客户唯一编号整数主键Gender性别Male/Female分类变量Age客户年龄数值Annual Income (k$)年收入单位千美元数值Spending Score (1-100)商场消费打分1 最低、100 最高由消费金额 / 频次综合计算核心聚类数值数据特征无缺失值、无异常脏数据清洗成本极低包含人口属性性别、年龄与消费经济属性收入、消费分两类特征核心分析维度年收入 消费得分二者常用来划分典型客群。3. 建模import pandas as pd from matplotlib import pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score, calinski_harabasz_score3.1 加载数据# 1. 获取数据 data pd.read_csv(./data/customers.csv) data.head()3.2 数据预处理# 2. 数据预处理 # 2.1 提取特征 x data.iloc[:,3:5] x.head()3.3 特征工程无3.4 模型训练确定k值训练# 4. 模型训练 # 4.1 确定k值 # 定义sse_list, sc_list, 记录不同k值的评估效果 sse_list [] sc_list [] for k in range(2,20): estimator KMeans(n_clustersk, max_iter100, random_state1234) estimator.fit(x) y_pre estimator.predict(x) sse_list.append(estimator.inertia_) sc_list.append(silhouette_score(x, y_pre)) # 画图sse肘部图、轮廓系数sc图 # 两张图放在1个画布中 plt.figure(figsize(6,3)) plt.subplot(1,2,1) plt.plot(range(2,20), sse_list, markero, labelSSE) plt.grid() plt.title(SSE) plt.subplot(1,2,2) plt.plot(range(2,20), sc_list, markero, labelSC) plt.grid() plt.title(SC) plt.tight_layout() plt.show()# 4.2 模型训练 # 根据sse肘部图和sc图确定k值5 estimator KMeans(n_clusters5, max_iter100, random_state1234) estimator.fit(x) y_pre estimator.predict(x)3.5 模型评估# 5. 模型评估 print(sc指数:, silhouette_score(x, y_pre)) # [-1,1], 越接近1聚类效果越好0.5聚类良好负数为大量样本错分聚类失效 print(CH指数:, calinski_harabasz_score(x, y_pre)) # [0,inf], 越接近inf聚类效果越好 print(SSE的负数:, estimator.score(x)) # 越接近0聚类效果越好# 画图 plt.figure(figsize(6,5)) plt.scatter(x.iloc[:,0], x.iloc[:,1], cy_pre) plt.xlabel(x.columns.tolist()[0]) plt.ylabel(x.columns.tolist()[1]) plt.scatter(estimator.cluster_centers_[:,0], estimator.cluster_centers_[:,1], marker*, s200, cr) plt.title(K-Means) plt.show()