大数据分析案例-基于KMeans和DBSCAN算法对汽车行业客户进行聚类分群

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分析案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

 4.3.1不同组别的性别分布

4.3.2不同组别的年龄分布

4.3.3不同组别的工作经验vs消费得分

4.3.4不同组别的客户分布

4.3.5不同组别的家庭规模

4.3.6客户年龄分布

4.3.7工作经验分布

4.3.8家庭规模分布

4.4特征工程

4.5模型构建

4.5.1KMeans

4.5.2DBSCAN

5.实验总结

源代码


1.项目背景

        随着汽车行业的快速发展和竞争日益激烈,汽车制造商和销售商需要更好地了解其客户群体,以提供个性化的产品和服务,提高客户满意度,并在市场中取得竞争优势。对于汽车行业来说,客户群体是非常多样化的,包括不同地区、不同年龄、不同收入水平、不同购车动机等的消费者。

        在这种背景下,使用聚类分析算法,如KMeans和DBSCAN,可以帮助汽车行业进行客户细分,即将客户划分为具有相似特征的群体。通过这样的细分,汽车企业可以更好地了解不同客户群体的需求和行为,根据客户的特点量身定制产品和服务,提高客户满意度和忠诚度。

        KMeans算法是一种常用的聚类分析方法,它将数据点分为预先定义的K个簇,使得每个数据点与所属簇的质心之间的距离最小化。通过KMeans算法,汽车企业可以将客户群体划分为K个不同的类别,每个类别具有相似的购车特征和行为习惯,从而为市场营销和产品推广提供有针对性的策略。

        DBSCAN算法是另一种常用的聚类算法,它基于数据点的密度来发现不同形状和大小的簇。DBSCAN算法适用于发现具有不同密度和形状的簇,这对于汽车行业来说尤为重要,因为不同地区的客户群体可能具有不同的密度和规模。

        综上所述,基于KMeans和DBSCAN算法对汽车行业客户进行聚类分群的实验具有重要意义,它可以帮助汽车企业深入了解不同客户群体的特征,制定精准的营销策略,提高客户满意度,增加销售额,并在激烈的市场竞争中取得优势。

2.项目简介

2.1项目说明

        本实验旨在通过对汽车行业客户数据进行分析,找出不同客户类型的属性和行为特征,最后使用KMeans聚类算法进行聚类分群,根据客户的特点量身定制产品和服务,提高客户满意度和忠诚度,增加销售额,并在激烈的市场竞争中取得优势。

2.2数据说明

本数据集来源于kaggle,原始数据集共有8068条,11个特征变量,各变量含义解释如下:

ID:客户ID
Gender:客户性别
Ever_Married:客户婚姻状况
Age:客户年龄
Graduated:客户是毕业生吗?
Profession:客户的职业
Work_Experience:多年工作经验
Spending_Score:客户的消费评分
Family_Size:客户家庭成员人数(含客户)
Var_1:客户的匿名类别
Segmentation:(目标)客户的客户群

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

4.项目实施步骤

4.1理解数据

 首先导入本次实验用到的第三方库,然后加载数据集

 查看数据大小

查看数据基本信息

数值型变量描述性统计

非数值型变量描述性统计

4.2数据预处理

 统计缺失值情况

 删除缺失值

检测数据集是否存在重复值,结果为False说明没有 

4.3探索性数据分析

 4.3.1不同组别的性别分布

4.3.2不同组别的年龄分布

4.3.3不同组别的工作经验vs消费得分

4.3.4不同组别的客户分布

4.3.5不同组别的家庭规模

4.3.6客户年龄分布

4.3.7工作经验分布

4.3.8家庭规模分布

4.4特征工程

先删除无关变量ID和目标变量

 对非数值变量进行编码

做出相关性热力图 

 

数据标准化处理 

 

4.5模型构建

4.5.1KMeans

 肘部法可视化

 训练模型

获取聚类标签

 模型结果评估

4.5.2DBSCAN

训练模型

 模型评估

5.实验总结

        针对以上四个细分类别的汽车行业客户,可以制定相应的精准营销策略,以满足不同客户群体的需求和偏好,提高市场营销效果。

1. 细分D:年龄在35岁以下的未婚人士,消费得分低,主要在医疗保健行业工作。
   - 营销策略:针对这一群体的客户,可以推出经济实惠的汽车型号,注重车辆的安全性和燃油经济性。强调汽车的安全性和便捷性,例如配备先进的安全技术和智能连接功能,以吸引年轻消费者。同时,可利用社交媒体和互联网广告来宣传,以吸引这一年龄段的年轻人。

2. 细分A:年龄在25岁到53岁之间,结婚率约为55%,消费得分低。职业包括市场营销、娱乐、工程等。主要的家庭规模是1人和2人。
   - 营销策略:针对这一群体,可以推出多样化的车型,注重个性化定制服务。考虑到主要是小家庭,可以强调车辆的空间利用和舒适性,以满足家庭出行的需求。另外,可以提供更多的金融方案和促销活动,吸引这一群体的购车兴趣。

3. 细分B:约75%的结婚率,通常在33岁到55岁之间。混合支出得分分布(低:平均:高的比例为4:3:2)。通常在市场营销部门工作。这部分的家庭通常由2个成员组成。
   - 营销策略:针对这一群体,可以推出豪华、高品质的汽车型号,注重车辆的品牌价值和科技配置。强调汽车的豪华感和驾驶体验,吸引这一群体对高品质车型的购买。同时,可提供个性化的购车方案和定制服务,满足这一群体的个性化需求。

4. 细分C:80%左右的结婚率,年龄在32 - 70岁之间。各个细分市场的消费得分各不相同(低:平均:高的比例为3:4:2)。主要从事市场营销工作。这部分的家庭规模通常在2到4人之间。
   - 营销策略:针对这一群体,可以推出具有较高性价比的汽车型号,注重车辆的耐用性和性能表现。强调汽车的经济实惠和可靠性,满足这一群体对性价比的追求。此外,可以开展与企业合作的促销活动,吸引这一群体的购车兴趣。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

源代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import seaborn as sns
from sklearn.cluster import DBSCANdf_train = pd.read_csv('Train.csv')
df_train.head()
df_train.shape
df_train.info()
df_train.describe()
df_train.describe(include='O')
df_train.isnull().sum() # 统计缺失值
df_train.dropna(inplace=True) # 删除缺失值
df_train.shape
any(df_train.duplicated()) # 检测数据集是否存在重复值
# 不同组别的性别分布
sns.countplot(x='Segmentation', hue='Gender', data=df_train)
plt.title("Segmentation based on Gender")
plt.show()
# 不同组别的年龄分布
sns.boxplot(x='Segmentation', y='Age', data=df_train)
plt.title("Age Distribution based on Segmentation")
plt.show()
# 不同组别的工作经验vs消费得分
sns.boxplot(x='Work_Experience', y='Spending_Score', hue='Segmentation', data=df_train)
plt.title("Work Experience vs Spending Score based on Segmentation")
plt.show()
sns.violinplot(x='Segmentation', y='ID', data=df_train)
plt.title("Profession Distribution based on Segmentation")
plt.show()
# 不同组别的家庭规模
plt.figure(figsize=(8,8))
df_train['Family_Size'].value_counts().plot.pie(autopct='%1.1f%%')
plt.title("Family Size Distribution based on Segmentation")
plt.show()
# 客户年龄分布
plt.figure(figsize=(10,5))
sns.histplot(df_train['Age'], kde=True)
plt.title("Distribution of 'Age'")
plt.xlabel("Age")
plt.ylabel("Frequency")
plt.show()
# 工作经验分布
plt.figure(figsize=(10,5))
sns.histplot(df_train['Work_Experience'], kde=True)
plt.title("Distribution of 'Work_Experience'")
plt.xlabel("Work_Experience")
plt.ylabel("Frequency")
plt.show()
# 家庭规模分布
plt.figure(figsize=(10,5))
sns.histplot(df_train['Family_Size'], kde=True)
plt.title("Distribution of 'Family_Size'")
plt.xlabel("Family_Size")
plt.ylabel("Frequency")
plt.show()
# 删除目标变量
df_train_kmeans = df_train.drop(['Segmentation', 'ID'], axis=1)
df_train_kmeans
# 将分类列转换为标签编码列
from sklearn.preprocessing import  LabelEncoder
encoder = LabelEncoder()
df_train_kmeans['Gender'] = encoder.fit_transform(df_train_kmeans['Gender'])
df_train_kmeans['Ever_Married'] = encoder.fit_transform(df_train_kmeans['Ever_Married'])
df_train_kmeans['Graduated'] = encoder.fit_transform(df_train_kmeans['Graduated'])
df_train_kmeans['Profession'] = encoder.fit_transform(df_train_kmeans['Profession'])
df_train_kmeans['Spending_Score'] = encoder.fit_transform(df_train_kmeans['Spending_Score'])
df_train_kmeans['Var_1'] = encoder.fit_transform(df_train_kmeans['Var_1'])
df_train_kmeans.head()
# 相关系数矩阵
corr = df_train_kmeans.corr()
# 绘制热力图
plt.figure(figsize=(10,10))
sns.heatmap(corr, annot=True)
plt.show()
# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_train_kmeans_scaler = scaler.fit_transform(df_train_kmeans)
df_train_kmeans_scaler
KMeans
# 肘部法寻找最佳簇数
Sum_of_squared_distances = []
K = range(2,15)
for k in K:km = KMeans(n_clusters=k)km = km.fit(df_train_kmeans_scaler)Sum_of_squared_distances.append(km.inertia_)print("For k =", k, ", the inertia is", km.inertia_)
# 肘部法可视化
import matplotlib.pyplot as plt
plt.plot(K, Sum_of_squared_distances, 'bx-')
plt.xlabel('k')
plt.ylabel('Sum_of_squared_distances')
plt.title('Elbow Method For Optimal k')
plt.show()
# 根据肘部法确定最佳聚类数
best_k = 4
# 训练KMeans模型
kmeans = KMeans(n_clusters=best_k)
kmeans.fit(df_train_kmeans_scaler)
# 预测聚类标签
labels = kmeans.predict(df_train_kmeans_scaler)
# 统计每个集群中的客户数量
from collections import Counter
counts = Counter(labels)
# 在“Segmentation”列中获得目标类别“A”、“B”、“C”和“D”
target_categories = df_train['Segmentation']
# 找出每个簇中出现频率最高的目标类别
cluster_categories = {}
for label, count in counts.items():cluster_data = target_categories[labels == label]most_frequent_category = cluster_data.value_counts().idxmax()cluster_categories[label] = most_frequent_category
# 将预测的标签映射到目标类别
mapped_labels = [cluster_categories[label] for label in labels]
# 将列'n_Clusters'添加到具有映射标签的数据框
df_train['n_Clusters'] = mapped_labels
df_train
# 计算正确预测的次数
correct_predictions = sum(df_train['Segmentation'] == df_train['n_Clusters'])
# 计算预测的总数
total_predictions = df_train.shape[0]
# 以百分比计算准确度
accuracy = (correct_predictions / total_predictions) * 100
print("-- Accuracy for KMeans: {:.2f}%".format(accuracy))
DBSCAN
# 训练DBSCAN模型
dbscan = DBSCAN(eps=0.6, min_samples=5)
dbscan.fit(df_train_kmeans_scaler)
# 预测聚类标签
labels = dbscan.labels_
# 统计每个集群中的客户数量
from collections import Counter
counts = Counter(labels)
# 在` Segmentation `列中获得目标类别` A `, ` B `, ` C `和` D `
target_categories = df_train['Segmentation']
# 找出每个簇中出现频率最高的目标类别
cluster_categories = {}
for label, count in counts.items():cluster_data = target_categories[labels == label]most_frequent_category = cluster_data.value_counts().idxmax()cluster_categories[label] = most_frequent_category
# 将预测的标签映射到目标类别
mapped_labels = [cluster_categories[label] if label in cluster_categories else 'Noise' for label in labels]
# 将列'n_Clusters'添加到具有映射标签的数据框
df_train['n_Clusters'] = mapped_labels
df_train
# 计算正确预测的次数
correct_predictions = sum(df_train['Segmentation'] == df_train['n_Clusters'])
# 计算预测的总数
total_predictions = df_train.shape[0]
# 以百分比计算准确度
accuracy = (correct_predictions / total_predictions) * 100
print("-- Accuracy for DBSCAN: {:.2f}%".format(accuracy))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89432.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wireshark有线网卡抓包报错The capture session could not be initiated on capture device

最近在使用Wireshark进行抓包排错时,选择网卡后提示报错,在此之前从未出现过,报错内容如下: 提示内容是The capture session could not be initiated on capture device,无法在捕获设备上启动捕获会话要求操作是Please…

Python—行命令搭建HTTP服务器并外网访问本地SQL Server数据库【无公网IP内网穿透】

在强者的眼中,没有最好,只有更好。我们是移动开发领域的优质创作者,同时也是阿里云专家博主。 ✨ 关注我们的主页,探索iOS开发的无限可能! 🔥我们与您分享最新的技术洞察和实战经验,助您在移动…

Java课题笔记~ JSTL

使用EL表达式已经实现了页面输出显示的优化,为什么还需要使用JSTL呢? 这是因为使用EL表达式无法实现逻辑处理,如循环、条件判断等,因此还需要与Java代码混合使用,而JSTL则可以实现逻辑控制,从而进一步优化…

css实现文字首行缩进的效果

<div class"content"><p>站在徐汇滨江西岸智塔45楼&#xff0c;波光粼粼的黄浦江一览无余。近处&#xff0c;是由龙华机场储油罐改造而来的油罐艺术中心和阿里巴巴上海总部办公处。远处&#xff0c;历史悠久的龙华塔挺拔秀丽&#xff0c;总投资逾600亿元…

提高 After Effects 效率的 40 个最佳快捷键

After Effects 是运动图形和视觉效果的强大工具&#xff0c;但它也可能让人不知所措。拥有如此多的特性和功能&#xff0c;很容易让人迷失在软件中。但是&#xff0c;有一种方法可以简化您的工作流程并提高工作效率 - 使用键盘快捷键。 After Effects素材文件巨大、占用电脑内…

腾讯云服务器镜像操作系统大全_Linux_Windows清单

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

解决macOS执行fastboot找不到设备的问题

背景 最近准备给我的备用机Redmi Note 11 5G刷个类原生的三方ROM&#xff0c;MIUI实在是用腻了。搜罗了一番&#xff0c;在XDA上找到了一个基于Pixel Experience开发的ROM&#xff1a;PixelExperience Plus for Redmi Note 11T/11S 5G/11 5G/POCO M4 Pro 5G (everpal)&#xf…

oracle12C的概念及安装和卸

一. 数据库的引入 以前将数据用变量、数组、对象存在内存&#xff0c;而内存只能短暂存储数据。如果我们想长久存数据用文件将数据存在磁盘上&#xff0c;不方便存取和管理数据&#xff0c;因此可以使用数据库来存数据。 二. 数据库基础概念 2.1 数据库(database,简称DB) 以…

sql高频面试题-去除最高最低的平均

面试或者笔试的过程中会设定各种各样的场景&#xff0c;在这些场景下考查我们SQL的查询能力&#xff0c;但是万变不离其宗&#xff0c;业务场景只是一个表现形式&#xff0c;抽象为SQL问题后其实基本上就是几类问题&#xff1a;计算累计、连续&#xff0c;分类TopN等。只要掌握…

STABLE DIFFUSION模型及插件的存放路径

记录下学习SD的一些心得&#xff0c;使用的是秋叶大佬的集成webui&#xff0c;下载了之后点击启动器即可开启&#xff0c;文件夹中的内容如下 主模型存放在models文件下的stable-diffusion文件夹内&#xff0c;一些扩展类的插件是存放在extensions文件夹下

双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构

Deque接口简介 Deque译为双端队列&#xff0c;在双向都能作为队列来使用&#xff0c;同时可用作栈。Deque接口的方法是对称成比例的。 Deque接口继承Queue接口&#xff0c;因此具有Queue&#xff0c;Collection&#xff0c;Iterable的方法属性。 双端队列的工作原理 在常规队…

NAS搭建指南一——服务器的选择与搭建

一、服务器的选择 有自己的本地的公网 IP 的请跳过此篇文章按需求选择一个云服务器&#xff0c;目的就是为了进行 frp 的搭建&#xff0c;完成内网穿透我选择的是腾讯云服务器&#xff0c;我的配置如下&#xff0c;仅供参考&#xff1a; 4. 腾讯云服务器官网地址 二、服务器…

计算机网络实验4:HTTP、DNS协议分析

文章目录 1. 主要教学内容2. HTTP协议3. HTTP分析实验【实验目的】【实验原理】【实验内容】【实验思考】 4. HTTP分析实验可能遇到的问题4.1 捕捉不到http报文4.2 百度是使用HTTPS协议进行传输4.3 Wireshark获得数据太多如何筛选4.4 http报文字段含义不清楚General&#xff08…

Oracle-如何判断字符串包含中文字符串(汉字),删除中文内容及保留中文内容

今天遇见一个问题需要将字段中包含中文字符串的筛选出来 --建表 CREATE TABLE HADOOP1.AAA ( ID VARCHAR2(255) ); --添加字段INSERT INTO HADOOP1.AAA(ID)VALUES(理解);....--查询表内容SELECT * FROM HADOOP1.AAA;在网上查找了一下有以下三种方式&#xff1a; 第一种&#…

安全远控如何设置?揭秘ToDesk、TeamViewer 、向日葵安全远程防御大招

写在前面一、远程控制&#xff1a;安全性不可忽略二、远控软件安全设置实测◉ ToDesk◉ TeamViewer◉ 向日葵 三、远控安全的亮点功能四、个人总结与建议 写在前面 说到远程办公&#xff0c;相信大家都不陌生。远程工作是员工在家中或者其他非办公场所上班的一种工作模式&…

每天一道leetcode:712. 两个字符串的最小ASCII删除和(动态规划中等)

今日份题目&#xff1a; 给定两个字符串s1 和 s2&#xff0c;返回 使两个字符串相等所需删除字符的 ASCII 值的最小和 。 示例1 输入: s1 "sea", s2 "eat" 输出: 231 解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入…

【Quarkus技术系列】打造基于Quarkus的云原生微服务框架实践(1)

前提介绍 本系列文章主要讲解如何基于Quarkus技术搭建和开发"专为Kubernetes而优化的Java微服务框架"的入门和实践&#xff0c;你将会学习到如何搭建Quarkus微服务脚环境及脚手架&#xff0c;开发Quarkus的端点服务&#xff0c;系统和应用层级的配置介绍与Quarkus的…

【MongoDB】数据库、集合、文档常用CRUD命令

目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 …

三维可视化平台有哪些?Sovit3D可视化平台怎么样?

随着社会经济的发展和数字技术的进步&#xff0c;互联网行业发展迅速。为了适应新时代社会发展的需要&#xff0c;大数据在这个社会经济发展过程中随着技术的进步而显得尤为重要。同时&#xff0c;大数据技术的快速发展进程也推动了可视化技术的飞速发展&#xff0c;国内外各类…

【Sklearn】基于随机森林算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于随机森林算法的数据分类预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理1.1 模型原理1.2 数学模型 2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法…