1.题干
客户细分是将市场细分为具有相似特征的离散客户群体。客户细分可以成为识别未满足客户需求的有力手段。利用上述数据,公司可以通过开发具有独特吸引力的产品和服务来超越竞争对手。
现有某超市客户的特征数据集,包括客户编号(ID),性别,婚姻状况(Marital status),年龄,受教育程度,收入,职业,居住小区规模(Settlement size)。读取数据,查看数据的基本情况,输出基本统计量,查看有无缺失值,数据标准化,利用KMeans,层次聚类AgglomerativeClustering,基于密度的聚类DBSCAN,输出DB指数等评价指标轮廓系数(Silhouetie Coeficient)。
2.数据格式
3.代码
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, AgglomerativeClustering, DBSCAN
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_csv('dataset/segmentation data.csv')
printf(100, '查看数据基本信息')
print(data.info())
printf(100, '输出基本统计量')
print(data.describe())
printf(100, '查看是否有缺失值')
print(data.isnull().sum())
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data.drop(columns=['ID']))
models = {
"KMeans": KMeans(n_clusters=3, random_state=42),
"AgglomerativeClustering": AgglomerativeClustering(n_clusters=3),
"DBSCAN": DBSCAN(eps=0.5, min_samples=5),
}
for name, model in models.items():
printf(100,f'{name}模型聚类结果为')
clusters = model.fit_predict(scaled_data)
# print(clusters)
# print(len(clusters))
print("KMeans Silhouette Score:", silhouette_score(scaled_data, clusters)) # 轮廓系数
print("DBSCAN Davies-Bouldin Index:", davies_bouldin_score(scaled_data, clusters)) # 戴维森-鲍威尔指数
print("calinski_harabasz_score:", calinski_harabasz_score(scaled_data, clusters)) # 卡林斯基-哈拉巴斯指数