说明:这是一个机器学习实战项目(附带数据+代码),如需数据+完整代码可以直接到文章最后获取。
1.问题定义
在日常银行、电商等公司中,随着时间的推移,都会积累一些客户的数据。在当前的大数据时代、人工智能时代,数据就是无比的财富。并且消费者需求显现出日益差异化和个性化的趋势。随着我国市场化程度的逐步深入,以及信息技术的不断渗透,对大数据的分析已是必然趋势。本案例就是使用机器学习聚类算法对客户进行分组,为销售人员进行精准营销提供帮助。
2.数据收集
本数据是模拟数据:
数据集:data.xcsv
在实际应用中,根据自己的数据进行替换即可。
特征:
Gender:性别
Age:年龄
Income:年收入
Spending:消费分数
3.数据预处理
1)原始数据描述:
2)数据完整性、数据类型查看:
3)数据缺失值查看:
可以看到数据不存在缺失值。
4.探索性数据分析
1)特征变量年收入分析:
2)特征变量消费分数分析:
3)相关性分析
说明:正值是正相关、负值时负相关,值越大变量之间的相关性越强。
5.聚类模型
1)确定K值
通过手肘图法进行确定K值,手肘图如下:
通过手肘图上判断,肘部数字大概是3或4,我们选择4作为聚类个数。
2)建立聚类模型,模型参数如下:
编号
参数
1
n_clusters=4
2
init='k-means++'
其它参数根据具体数据,具体设置。
3)聚类算法结果输出
从上述表格可以看出,分群1占比34%,分群2占比25%,分群3占比10%,分群4占比31%。
6.聚类可视化
1) 客户聚类结果图
通过上图可以看到,黄色高亮得大点是聚类的质心,可以看到算法中的质心并不止一个。
2)聚类概率密度图
聚类群1的概率密度图:
聚类群2的概率密度图:
聚类群3的概率密度图:
聚类群4的概率密度图:
1) 分群1特点:年收入集中在30万,消费分数集中在0.50左右;
2) 分群2特点:年收入集中在10万~15万,消费分数集中在0.25和0.75;
3)分群3特点:年收入集中在50万,消费分数集中在0.30和0.80;
4)分群4特点:年收入集中在35万~40万万,消费分数集中在0.10和0.80;
5)比对分析:分群3年收入高、分数高属于高价值人群;分群4年收入良好、消费分数综合良好,属于中等人群;分群1年收入一般、消费分数一般,属于一般人群;分群2年收入低、消费分数中等,属于价格较低的客户群体。
7.实际应用
根据数据聚类结果对客户的分组,在后面展开的营销活动中,我们可以采取差异化手段进行客户分类的精准营销,以提高消费成功率,使客户的整体消费感受更好。
聚类结果如下:
项目代码:
data['Income'].plot()
plt.title('Income of customers')
plt.xlabel('ID')
plt.ylabel('Income')
plt.show()
data['Spending'].plot()
plt.title('Spending of customers')
plt.xlabel('ID')
plt.ylabel('Spending')
plt.show()
# 项目资源如下:
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
df_tmp1 = data[['Age', 'Income', 'Spending']]
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.heatmap(df_tmp1.corr(), cmap="YlGnBu", annot=True)
plt.show()
X = data.iloc[:, [3, 4]].values
from sklearn.cluster import KMeans # 导入聚类模型