项目背景

假设你是一家电子商务公司的数据分析师,公司希望根据客户的购买行为数据进行客户细分,以便制定更有针对性的营销策略。你需要使用K-means聚类算法对客户进行分组,并使用轮廓系数确定最佳K值。

数据集

我们将使用Kaggle上的"Customer Segmentation"数据集:

"""""
项目背景
假设你是一家电子商务公司的数据分析师,公司希望根据客户的购买行为数据进行客户细分,以便制定更有针对性的营销策略。你需要使用K-means聚类算法对客户进行分组,并使用轮廓系数确定最佳K值。
数据集
我们将使用Kaggle上的"Customer Segmentation"数据集:
- 数据集链接: https://www.kaggle.com/datasets/vjchoudhary7/customer-segmentation-tutorial-in-python
- 数据集包含客户ID、性别、年龄、年收入(千美元)和消费分数(1-100)
"""""
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
import pandas as pd

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

data=pd.read_csv("./Mall_Customers.csv")

print(data)

x=data[["Annual Income (k$)","Spending Score (1-100)"]]
print(x)

sc = []
range_k = range(2,11)

for i in range_k:
    kmeans = KMeans(n_clusters=i,random_state=42)

    pred_labels= kmeans.fit_predict(x)

    score = silhouette_score(x,pred_labels)

    sc.append(score)
    print(f"K={i}时的轮廓系数:{score:.3f}")

plt.figure()
plt.plot(range_k, sc)
plt.xlabel('K 值')
plt.ylabel('轮廓系数')
plt.title('轮廓系数法确定最佳K值')
plt.grid(linestyle="--")
plt.show()

kmeans=KMeans(n_clusters=5,random_state=42)

kmeans.fit(x)
y_pred=kmeans.predict(x)
labels=kmeans.fit_predict(x)
center=kmeans.cluster_centers_
print(center)

score=silhouette_score(x,labels)
print(score)

plt.figure()
plt.scatter(x=x["Annual Income (k$)"],y=x["Spending Score (1-100)"],c=y_pred)
plt.scatter(center[:,0],center[:,1],c="r",marker="*")
plt.xlabel('年收入(k$)')
plt.ylabel('消费分数')
plt.title('客户细分')
plt.grid(linestyle="--")
plt.show()

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐