用户画像实战:基于Kmeas的电商潜在客户识别

article/2025/3/18 19:33:04

电商潜在客户识别

前言

1、任务描述

此数据集仅用于学习客户细分概念,也称为市场篮子分析。我将以最简单的形式使用无监督的ML技术(KMeans聚类算法)来演示这一点。

通过超市商场会员卡信息,我们可以得到一些关于客户的基本数据,如客户ID、年龄、性别、年收入和支出得分。其中,支出得分是商场根据客户行为和购买数据等为用户计算出来的综合得分。

我们想要进一步的了解客户,比如哪一类客户是我们的目标客户,这样就可以给营销团队提供一些有价值的东西,并相应地规划策略。

2、潜在客户识别概述

在任何有交易的领域,尤其是电商、零售、金融、生活服务这类有深厚的数据积累的行业,识别潜在客户可以进一步的降低营销成本,缩短营销周期和提高转化率,因此潜在客户的识别非常关键。基于潜在客户识别的数据驱动策略可以直接面向目标客户,因此,客户细分是客户智能领域的一个核心应用。

我们通通过聚类来实现用户分类,将根据不同的属性(可能是购买习惯或行为习惯)将人们划分成不同的类别,打上不同的标签。这是一个无监督学习的应用,机器学习模型试图将相似的数据点聚集在一起,使得簇内距离最小,簇间距离最大。使这些人群相互之间是有差别的,同一个人群的行为和属性又尽可能的相似。

3、分析目标

在精准营销中,我们不仅要聚焦核心用户的需求,为我们的核心用户提供好的产品和服务,还需要聚焦潜在用户的挖掘以及强关联用户向核心用户的转化,这样可以实现销售规模进一步扩大。我们的目标就是识别出潜在的用户,为后续潜在用户的深入分析奠定基础,以设计专门针对该类人群的活动,开拓该类人群聚集的广告投放渠道,或者加强覆盖该类人群渠道的营销力度等。

在这里,我们使用的数据集包含了人们在商场的购买属性。数据集很简单,有5个特征,即客户ID、年龄、性别、信用评分和收入。我们需要从200条电商交易数据集中识别出目标用户和潜在用户。这对我们企业进一步实现精准营销落地有很大的价值和意义。

一、数据准备与数据预处理

1、导入包和库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
from sklearn.cluster import DBSCAN
# 自定义可视化样式
sns.set_palette("Reds")
sns.set(style="white", color_codes=True)
plt.style.use('seaborn')
mycmap = plt.get_cmap('gnuplot2')
plt.style.context('dark_background')
# 忽略警告
import warnings
warnings.filterwarnings("ignore")

2、读取数据

df = pd.read_csv('Mall_Customers.csv')
df.head()
CustomerIDGenderAgeAnnual Income (k$)Spending Score (1-100)
01Male191539
12Male211581
23Female20166
34Female231677
45Female311740

3、查看空值情况

df.isna().sum()
CustomerID                0
Gender                    0
Age                       0
Annual Income (k$)        0
Spending Score (1-100)    0
dtype: int64

二、数据探索

1、查看数据集是否平衡

print(df["Gender"].value_counts())
sns.countplot(x= df['Gender'])
Female    112
Male       88
Name: Gender, dtype: int64<AxesSubplot:xlabel='Gender', ylabel='count'>

在这里插入图片描述

数据集基本是平衡的,因为男性和女差距并不大。

2、显示各种特征排列的成对图

sns.pairplot(df)
<seaborn.axisgrid.PairGrid at 0x7fc244fcc0d0>

在这里插入图片描述

最后一行可以比较清楚的展示出来数据的分群

3、查看特征间的核密度

(1)消费分数和年龄的核密度图

g = sns.jointplot(x = df['Age'], y = df['Spending Score (1-100)'], kind="kde",thresh=0,shade=True,height=7, space=0,cmap= mycmap,color = "b")

在这里插入图片描述

如果你仔细观察这幅图,那么,你会发现核心区域密度非常高。也许,在不同的年龄段有两种不同的消费习惯。

(2)支出得分与年收入的核密度图

g = sns.jointplot(x = df['Annual Income (k$)'], y = df['Spending Score (1-100)'], kind="kde",thresh=0,shade=True,height=7, space=0,cmap= mycmap,color = "b")

在这里插入图片描述

这里,在年收入与支出分数之间,有一个密度非常高的区域在中间。以及其他四个用户显示不同模式的区域。这可能是因为顾客的购买力不同,消费习惯也不同。观察结果中可以破译的五组是:

  • 低收入和高消费习惯

  • 低收入和低消费习惯

  • 中等收入和中等消费习惯

  • 高收入和高消费习惯

  • 高收入低消费习惯

(3)年收入和年龄的核密度图

g = sns.jointplot(x = df['Annual Income (k$)'], y = df['Age'], kind="kde",thresh=0,shade=True,height=7, space=0,cmap= mycmap,color = "b")

在这里插入图片描述

30多岁的人平均收入约为8万美元

如果我们比较一下年收入超过10万的人,就会发现男性在30岁出头时的收入超过10万,而女性则在40岁左右,这也许是由于男女之间的收入差距。

sns.relplot(x="Age", y="Annual Income (k$)", hue="Gender",sizes=(40, 400), alpha=.5, palette="muted",height=6, data=df)
<seaborn.axisgrid.FacetGrid at 0x7fc2466bd940>

在这里插入图片描述

4、深入探索性别与各特征间的关系

(1)编码性别(0-1)

df['Gender']= df['Gender'].map({'Male':1,'Female':0})

(2)不同性别消费得分的方框图

ax = sns.boxplot(x="Gender", y="Spending Score (1-100)", hue="Gender",  data=df, palette="Set3")

在这里插入图片描述

女性的平均消费得分略高于男性。(男性->1和女性->0)

(3)男女年收入

sns.catplot(x="Gender", y="Annual Income (k$)", hue="Gender",kind="violin", split=False, data=df,palette='inferno')
<seaborn.axisgrid.FacetGrid at 0x7fc246aaa280>

在这里插入图片描述

注意图中的凸起部分,它显示了平均值。因此,男性的平均收入低于女性。

5、查看特征分布

(1)用户年龄分布

根据我们的数据,大多数人都不到45岁。

sns.distplot(df['Age'],kde=True,rug = True,color = "r" )
<AxesSubplot:xlabel='Age', ylabel='Density'>

在这里插入图片描述

(2)支出得分分布

sns.distplot(df['Spending Score (1-100)'], hist=True, rug=True,color ="r")
<AxesSubplot:xlabel='Spending Score (1-100)', ylabel='Density'>

在这里插入图片描述

对于大多数客户来说,消费得分中心在40到60分之间。

6、特征相关性分析

sns.heatmap(df.corr(), annot=True,cmap='inferno_r')
<AxesSubplot:>

在这里插入图片描述

年收入与性别呈正相关。而且,年收入与支出得分呈正相关!

三、基于Kmeans的客户细分

1、Kmeans简介

Kmeans算法:

  • 是一种迭代算法,它试图将数据集划分为Kpre定义的不同的非重叠子组(簇),其中每个数据点只属于一个组。

  • 它试图使集群内的数据点尽可能相似,同时也尽可能保持集群的不同(远)。

  • 它将数据点分配给一个簇,使得数据点和簇形心之间的平方距离之和(属于该簇的所有数据点的算术平均值)最小。

  • 我们在簇内的变化越小,数据点在同一簇内的同质性(相似性)就越高。

from sklearn.cluster import KMeans

可以使用StandardScaler来缩放特性,但是在这个数据集中不需要它,因为值已经在相同的范围内。

2、构建Kmeans聚类模型

(1)使用sklearn的Kmeans方法

def kmeans(X, n_clusters):#ss = StandardScaler()#X = ss.fit_transform(X)km = KMeans(n_clusters=n_clusters)km.fit(X)y_pred = km.predict(X)return y_preddef plot_clusters(algo_name, y_pred, x_label,y_label):plt.scatter(X[:,0], X[:,1],c=y_pred,cmap='Paired')plt.title(algo_name)plt.xlabel(x_label)plt.ylabel(y_label)

(2)在Kmeans中找到“K”的正确值:

在选择k值时,传统方法中使用肘部图较多,可以选择下降最快的转折点为最佳k值,但是有时候,有些时没有明确的转折点,我们只能选择其他可行的方法。另外一个健壮的方法是使用轮廓分数,选择轮廓最大的点可以帮助我们确定最佳k值。

轮廓系数1、使用每个样本的平均簇内距离(a)和平均最近簇距离(b)计算轮廓系数。样本的轮廓系数为
(b - a) / max(a, b)2、请注意,仅当标签数为:2 <= n_labels <= n_samples - 1时,b是样本与样本不属于的最近簇之间的距离。
X=df.iloc[:,3:].to_numpy()silhouette_scores ={}
for k in range(2,10):y_pred = kmeans(X,k)silhouette_scores[k]= silhouette_score(X,y_pred)
silhouette_scores
{2: 0.2968969162503008,3: 0.46761358158775435,4: 0.4931963109249047,5: 0.553931997444648,6: 0.5379675585622219,7: 0.5281944387251989,8: 0.4558493609925033,9: 0.461684164916706}

由于K=5时轮廓得分最大,所以最好将数据分为5个子组

(3)当k=5时聚类的结果

y_pred= kmeans(X,5)
plot_clusters("KMeans",y_pred,"Annual Income(k$)","Spending Score")

在这里插入图片描述

根据上述的客户细分,我们可以制定具体的营销策略,以便将产品销售给目标受众,例如:

  • 黄色点的客户的年收入比较高。然而,他们他们消费并不高。也许这类用户并不是吝啬鬼,而是因为这类用户并不是我们产品的忠实用户。这类用户我们称其为潜在客户,我们在精准营销工作中,就有一部分工作是将潜在用户转化为强相关用户或核心用户,以及将强相关用户转化为核心用户。这类用户恰巧是我们需要聚焦的“潜在用户群体-目标群体”转化群体,我们不得不投入更多的努力让这类用户更多的为我们的产品买单。
  • 绿色点的人群是每个销售人员都想瞄准的目标客户,因为他们不仅有极强的消费能力,还有极强的消费欲望。
  • 棕色人群是那些非常依赖信用卡的人,他们的收入很低,但却挥霍无度,因此称为拖欠还款的几率更高。

http://chatgpt.dhexx.cn/article/5sF4VXi1.shtml

相关文章

数据分析,把握商机 关键词采集工具助你挖掘潜在客户

数据分析&#xff0c;是指对大量的数据进行收集、处理、分析和解析的过程&#xff0c;从而发现其中隐含的规律、趋势和价值信息。而在商业领域&#xff0c;数据分析则是一种能力&#xff0c;可以帮助企业更好地了解市场、客户和竞争对手&#xff0c;把握商机&#xff0c;提高效…

营销自动化如何帮助你挖掘潜在客户?

点击上方“AI公园”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶” 作者&#xff1a;Xen Chia 编译&#xff1a;ronghuaiyang 导读 看看如何使用营销自动化工具来得到潜在客户。 你如何争取潜在客户&#xff1f; 如果你的答案将是“购买潜在客户”&#xff0c;那…

Python实现预测信用卡潜在客户

一、数据集 有一家名为Happy Customer Bank (快乐客户银行) 的银行&#xff0c;是一家中型私人银行&#xff0c;经营各类银行产品&#xff0c;如储蓄账户、往来账户、投资产品、信贷产品等。 该银行还向现有客户交叉销售产品&#xff0c;为此他们使用不同类型的通信方式&…

数据挖掘(二)预测潜在贷款发放客户

注&#xff1a;参考多篇csdn及b站文章所得 一、实验背景 某机构想要预测哪些客户可能会产生贷款违约行为&#xff61;他们搜集了历史客户行为的部分数据以及目标客户的信息,希望通过历史数据对目标客户进行预测哪些客户会是潜在的违约客户,从而缩小目标范围,实现低风险贷款发…

淘宝客服话术《挖掘每一个潜在客户》

在这个电商行业的时代&#xff0c;作为一名淘宝客服人员&#xff0c;与店铺之间的关系是密不可言的&#xff0c;客服相当于店铺的门面&#xff0c;也是和客户第一接触者&#xff0c;重要性可想而知。 随着客服岗位的泛滥&#xff0c;客服之间的能力也是参差不齐的&#xff0c;想…

依据数据简单分析,发掘潜在客户

大数据概论作业(一) 信息技术的不断发展让人们离不开科技,我们每天使用各类电子产品所产生的信息数据不计其数,而这些数据的合理利用将会使我们的生活更加的便捷,所以,大数据俨然已成为现在前沿科技。的研究热点,大数据来源于我们生活的方方面面,也必将影响着我们…

生成微信小程序码、URL Scheme和URL Link

通用第一步,获取access_token,需要服务端去获取并缓存 (APPID和APPSECRET在微信小程序后台查看获取) https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET 1.获取小程序码(通过该接口生成的小程序码&#xff0c;永久有…

如何生成小程序太阳码

近期在小程序管理后台发现了生成太阳码的工具&#xff0c;以此来记录下。 登录微信公众平台&#xff08;https://mp.weixin.qq.com/&#xff09; 菜单栏工具->生成小程序码 输入页面路径->点击确定->右击保存太阳码 注意&#xff1a; 生成的页面路径必须是已发布的&am…

php小程序码生成并保存,小程序中如何生成小程序码

导语&#xff1a; 小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念&#xff0c;用户不用关心是否安装太多应用的问题。应用将无处不在&#xff0c;随时可用&am…

uniapp小程序生成小程序码

文章目录 前言一、自测版本二、线上版本三、测试总结 前言 需求&#xff1a;用户通过扫描小程序码&#xff0c;直接跳转到小程序的登陆页&#xff0c;并自动填充推荐码 一、自测版本 用于前端自己测试如何生成小程序码 <!-- 以图片的形式展示 --> <image :src"…

微信小程序开发实战9_1 生成小程序码

9.1 小程序的入口场景 为了便于商家进行小程序的推广&#xff0c;微信提供了多种小程序入口的方式&#xff0c;用户可以通过常规的方式来使用小程序&#xff1a;例如用户可以通过搜索关键字来搜索并进入小程序&#xff0c;也可以通过附近的小程序来选择并进入小程序。用户还可…

微信小程序生成小程序码和展示

云函数代码&#xff1a; // 云函数入口文件 const cloud require(wx-server-sdk) cloud.init({env: cloud.DYNAMIC_CURRENT_ENV })// 云函数入口函数 exports.main async (event, context) > {try {const result await cloud.openapi.wxacode.getUnlimited({scene:event…

【微信小程序】 java如何生成小程序码,并跳转到指定落地页 demo

前言&#xff1a; 需求场景&#xff0c;用户通过扫描小程序码&#xff0c;到指定的页码&#xff0c;希望能帮到大家&#xff0c;切记&#xff0c;要等到小程序发版测能测试。 1、微信官网 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.…

uni-app跨端开发之生成小程序码和调试scene参数爬坑指南

前段时间&#xff0c;公司的小程序中有一个分享小程序码邀请好友的功能。前前后后也踩过不少坑&#xff0c;然后就有了这篇笔记。如果看官正在因生成微信小程序码或调试scene参数而苦恼&#xff0c;不妨继续往下看看&#xff0c;或许这篇文章能够帮助到您哟。 1、如何生成微信…

微信小程序实现前端自己生成小程序码并且带参数

hxrhwxacode.getUnlimited | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html后端开发希望我们前端自己去生成小程序码并且带上用户信息。于是查到了官网上有相关的文档。开始着手去…

小程序云函数生成小程序码

云函数生成小程序码的Demo # 云函数 config.json配置,云调用wxacode.get API 的权限 {"permissions": {"openapi": ["wxacode.get"]} }index.js const cloud require(wx-server-sdk) cloud.init()exports.main async (event, context) > {t…

微信小程序生成小程序码以及参数的获取

一、小程序码介绍 通过后台接口可以获取小程序任意页面的小程序码&#xff0c;扫描该小程序码可以直接进入小程序对应的页面&#xff0c;所有生成的小程序码永久有效&#xff0c;可放心使用。 目前小程序码有两种形式&#xff0c;推荐生成并使用小程序码&#xff0c;它具有更好…

小程序指定页面生成小程序码(任意页面),所有运营在小程序端就可以自主得到页面链接,再也不用每次去协助看页面链接了~

写在前面&#xff1a; 业主运营经常会咨询&#xff0c;公众号放小程序链接&#xff0c;或者小程序后台使用&#xff0c;分类链接是哪一个&#xff0c;商品具体链接是哪一个&#xff0c;拼团砍价秒杀链接是哪一个。这里是设置好&#xff0c;解决以上所有不定期的咨询。 一、官方…

小程序-云开发-实现生成小程序码

虽互不曾谋面,但希望能和您成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 标星公众号&#xff08;ID&#xff1a;itclanCoder&#xff09; 如果不知道如何操作 点击这里,标星不迷路 前言 小程序因为传播快,易分…

超强、超详细Redis入门教程

转载自&#xff1a; http://www.h5min.cn/article/56448.htm 这篇文章主要介绍了超强、超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 【本教程目录】 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动r…