1.题干
基于购买行为数据对超市顾客进行市场细分。现有超市顾客购买行为的RFM数据集,利用各种聚类算法实现顾客群细分。请关注如下方面:分析顾客购买行为的RFM数据集中,R、F、M这三个变量有怎样的分布特征?尝试将顾客分成4类,并分析各类顾客的购买行为特征。评价模型,并分析聚成4类是否恰当。
2.数据格式
3.代码
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score, davies_bouldin_score, calinski_harabasz_score
def printf(n, strf):
print()
print('-' * n)
print(f"\033[1m{strf}\033[0m")
print()
data = pd.read_excel('RFM数据.xlsx')
printf(100, '查看数据基本信息')
print(data.info())
printf(100, '输出基本统计量')
print(data.describe())
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
axes[0].hist(data['R'], bins=20)
axes[0].set_title('R Distribution')
axes[1].hist(data['F'], bins=20)
axes[1].set_title('F Distribution')
axes[2].hist(data['M'], bins=20)
axes[2].set_title('M Distribution')
plt.show()
X = data.drop("CardID", axis=1)
scaler = StandardScaler()
X = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
data['Cluster'] = kmeans.labels_
cluster_summary = data.groupby('Cluster').agg({
'R': 'mean',
'F': 'mean',
'M': 'mean'
})
print(cluster_summary)
clusters = kmeans.fit_predict(X)
print("KMeans Silhouette Score:", silhouette_score(X, clusters))# 轮廓系数
print("DBSCAN Davies-Bouldin Index:",davies_bouldin_score(X, clusters))# 戴维森-鲍威尔指数
print("calinski_harabasz_score:",calinski_harabasz_score(X, clusters)) # 卡林斯基-哈拉巴斯指数