去除dataframe中的空行_寻找电子零售交易中的金牌客户——基于RMF的客户分层分析...

a7fa848b8b9d64270ec98b5fc0ab7354.png

1 背景与目标

1.1 背景

在面向客户制定运营策略、营销策略时,我们希望能够针对不同的客户推行不同的策略,实现精准化运营,以期获取最大的转化率。精准化运营的前提是客户关系管理,而客户关系管理的核心是客户分类。通过客户分类,对客户群体进行细分,区别出低价值客户、高价值客户,对不同的客户群体开展不同的个性化服务,将有限的资源合理地分配给不同价值的客户,实现效益最大化。

在客户分类中,RFM模型是一个经典的分类模型,模型利用通用交易环节中最核心的三个维度——最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)细分客户群体,从而分析不同群体的客户价值。

1.2 目标

本实例借助Kaggle数据集,探讨如何利用KMeans算法对客户群体进行细分,以及细分后如何利用RFM模型对客户价值进行分析,并识别出高价值客户。

数据源:Online Retail Data Set from UCI ML repo

2 分析过程

2.1 分析思路

本实例的数据包含了2010年12月1日至2011年12月9日期间的客户数据,共有54万余条记录。分析中需要用到KMeans算法,且需要将数据分析的结果可视化,便于后期的结论分析,于是采用以下两种工具进行分析:

  • jupyter notebook(Python 3.7 )
  • Excel 2016

同时数据的属性定义见下表所示,可见维度非常丰富。

c13e93b4b473f442c459093e1819c57f.png

2.2 数据预处理

2.2.1 数据探索

#导入所需分析包
import numpy as np
import pandas as pd
import datetime as dt
from sklearn.cluster import KMeans
#导入数据集
df = pd.read_excel(r"C:UsersDesktopsaleinfo.xlsx")
df.info() #获取数据集信息

ee7dcc00f77e78e5cb8d28c1497e2f54.png
 df.head() #预览数据集

94226275e23eac5316d2ef8bf62affe4.png

由此可以看到本数据集存在重复值和缺失值,对此采取删除的方法去除。

2.2.2 数据清洗

#删除重复值
df_NoDup=df.drop_duplicates(subset=['InvoiceNo','StockCode','Description','Quantity','InvoiceDate','UnitPrice','CustomerID','Country'])
dup=df.shape[0]-df_NoDup.shape[0]
print('duplicates =',dup)
#删除缺失值
df_NoDupNA=df_NoDup.dropna(subset=['InvoiceNo','CustomerID'],how='any')
missing=df_NoDup.shape[0]-df_NoDupNA.shape[0]
print('missings =',missing)
#检查有无异常值
df_NoDupNA.describe()

c0a4556ddba96a17376ba808effd72d7.png

从上图中可以发现,Quantity最小值为-80995,由常理可知,销量和售价应该都大于0,所以进行删除异常值的操作。

#删除异常值
df_NoDupNA=df_NoDupNA[(df_NoDupNA['Quantity']>0) & (df_NoDupNA['UnitPrice']>0)]
df_NoDupNA.describe() 

a0fa808b5d5ed4d00bbfe822728bd6cc.png

此时,完成数据的预处理工作,原数据集还有392692条记录。

d4cbc6f2ebf42bedc5b791a57512e10e.png

2.2.3 属性规约

根据RFM模型,选取与模型相关的字段'InvoiceNo','Quantity','InvoiceDate','UnitPrice','CustomerID',进行RFM计算。

  • R = LAST_TO_END. (最后一次消费时间至观测窗口结束天数)
  • F = FLIGHT_COUNT. (观测窗口内的购买次数)
  • M = SEG_KM_SUM. (观测窗口的总消费)
#计算R和F
df = df_NoDupNA
df['TotalSum'] = df['UnitPrice']* df['Quantity']
print('Min Invoice Date:',df.InvoiceDate.dt.date.min(),'max Invoice Date:',
       df.InvoiceDate.dt.date.max())

df.head()

04996adcfc49e7391ff1d28b6c8081fb.png
snapshot_date = df['InvoiceDate'].max() + dt.timedelta(days=1)
snapshot_date
rfm = df.groupby(['CustomerID']).agg({'InvoiceDate': lambda x : (snapshot_date - x.max()).days,
                                      'InvoiceNo':'count','TotalSum': 'sum'}).reset_index()
rfm.rename(columns={'InvoiceDate':'R','InvoiceNo':'F','TotalSum':'M'}
           ,inplace= True)
rfm = rfm.drop(["CustomerID"],axis=1)
rfm.head()

34d534db4ab8821e6cd57e0fcc5c2f63.png

从表中可以发现,每个指标的数据取值范围分布较广,为提高后续聚类分析的准确性,还需要将R、F、M三类数据进行标准化处理。标准化方法有极大极小标准化、标准差标准化等方法,此处采用标准差标准化的方法对数据进行处理。

dataZscore = (rfm - rfm.mean(axis=0)) / rfm.std(axis=0)
dataZscore.columns = ['Z' + i for i in rfm.columns]
dataZscore.head()

e1b6d5927430766bb0478b6960c459ed.png

2.3 数据建模

客户价值分析模型构建主要分为两个部分:

  1. 利用K-Means算法对客户进行聚类分析,得到细分的客户群
  2. 对细分的客户群进行特征分析,得到客户价值分析模型

2.3.1 聚类分析

采用K-Means聚类算法对客户数据进行分群,共分为3类。

from sklearn.cluster import KMeans

k = 3 # 共分为3类

kmodel = KMeans(n_clusters = k, n_jobs = 4)
kmodel.fit(dataZscore)
#转化为DataFrame对象
kmodel.cluster_centers_
kmodel.labels_
kmeansCenters = pd.DataFrame(kmodel.cluster_centers_, columns = dataZscore.columns)
labelsCounts = pd.DataFrame(kmodel.labels_)[0].value_counts()
kmeansLabels = pd.DataFrame(labelsCounts, index = None)
kmeansLabels.columns = ['Num']
kmeansResult = pd.concat([kmeansCenters, kmeansLabels], axis=1)
kmeansResult['Class'] = [1,2,3]
kmeansResult = kmeansResult[['Class','Num','ZR', 'ZF', 'ZM']]

0405392a302ec1fbd4244a20e68e768f.png

2.3.2 特征分析

对2.3.2中的聚类结果进行特征分析,如下图所示。

32abc55b852f7e0c2d505654f4d2ec68.png

5d61317f68e1f7831a3d466a26a1cb95.png

b2652fbc3fc6b71483612a27d86cc309.png

分析:

  • 群体1的R属性上最大
  • 群体2的R、M、F属性均排在第二位
  • 群体3的M、F属性最大,R属性最小

其中每项指标的实际业务意义为:

  • R:最近一次消费时间,越大代表越久没消费
  • F:消费次数,越大代表消费次数越多
  • M:消费总额,越大代表消费总额越多

3 分析结果

由此,可以推断出群体3是我们所寻找的金牌客户,公司应优先将资源投放到他们身上,维持这类客户的忠诚度;群体2则是我们的大众客户,此类客户我们可以采取折扣促销等营销活动,促进他们的消费;群体3则是低价值客户,需要根据他们的收入以及生活习惯针对性的提供生活必需品类的商品。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值