客户分群分析

1 客户分群分析

“PDFMV框架是问题-数据-特征-模型-价值五个英文字母的首字母组合而成,它是以问题为导向,数据为驱动,利用特征和模型从数据中学习到知识,以创造价值的系统化过程。”

当我们面对一批客户时,如何读懂你的客户(KYC)

我们可以做全量分析,整体洞察这些客户;我们可以做分群分析,物以类聚,人以群分;我们可以做个性分析,每个人都有其特性,实现千人千面。

本文介绍客户的分群分析,以UCI提供的线上零售数据集为研究对象,采用RFM分析方法,以实现客户的分群研究和理解。

数据集获取链接:

http://archive.ics.uci.edu/ml/machine-learning-databases/00352/

1 客户分群概述

客户分群是一种根据客户共同特征将客户分组或者分群的方法

客户分群的价值,帮助你读懂你的客户,从而给客户提供更好地服务和体验,让客户的全生命周期价值(CLV)最大化

2 RFM分析方法

RFM(Recency,Frequency,Monetary)分析是一种基于客户行为数据做分群的方法。RFM的含义,说明如下。

  • Recency(R):谁最近购买了?与最近一次购买的间隔天数。
  • Frequency(F):谁频繁购买?表示最近一段时间购买的数量(例如:高频或者低频)。
  • Monetary(M):谁购买金额高?表示最近一段时间购买的所花费的金钱数。

如果RFM的三个变量,每个变量分成两组,总共会有8种分群。如下图所示。

图1 8种客户分群情况

3 客户分群(Python语言)

客户分群,Python语言参考代码,建议使用jupyter notebook测试

# 导入 Python库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt

import warnings
warnings.filterwarnings('ignore')

# 加载数据集
data = pd.read_excel('./datasets/Online_Retail.xlsx')

# 数据准备工作
data = data[pd.notnull(data['CustomerID'])]
filtered_data = data[['Country','CustomerID']].drop_duplicates() # 删除重复记录

# 对英国的客户做分群分析
uk_data = data[data.Country=='United Kingdom']

# 描述性统计分析
print(uk_data.describe().T)

# 数据清洗
uk_data = uk_data[(uk_data['Quantity']>0)]

# 选择需要的列
uk_data=uk_data[['CustomerID','InvoiceDate','InvoiceNo','Quantity','UnitPrice']]

# 变量类型转换
uk_data['InvoiceDate'] = pd.to_datetime(uk_data['InvoiceDate'])

# 设置观测时间点
PRESENT = dt.datetime(2011,12,10)

# RFM分析
rfm = uk_data.groupby('CustomerID').agg({'InvoiceDate': lambda date: (PRESENT - date.max()).days,
                                        'InvoiceNo': lambda num: len(num),
                                        'TotalPrice': lambda price: price.sum()})

# 列重命名
rfm.columns = ['monetary','frequency','recency']

# 变量类型转换
rfm['recency'] = rfm['recency'].astype(int)

# 变量分组
rfm['r_quartile'] = pd.qcut(rfm['recency'], 2, ['1','2'])
rfm['f_quartile'] = pd.qcut(rfm['frequency'], 2, ['2','1'])
rfm['m_quartile'] = pd.qcut(rfm['monetary'], 2, ['2','1'])

# RFM评分
rfm['RFM_Score'] = rfm.r_quartile.astype(str)+ rfm.f_quartile.astype(str) + rfm.m_quartile.astype(str)
print(rfm.head())

# 客户分群的分布情况
rfm.reset_index(inplace=True)
rfm['RFM_Score'].value_counts()

# 客户分群的可视化分析
rfm['RFM_Score'].value_counts().plot(kind='bar')

RFM分析的结果

RFM_Score的分布情况和可视化

RFM_Score取值"111",表示重要价值客户。其它的取值,你可以参照图1理解。

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【数据分析】大数据机制下银行客户的情绪分析和行为预测

    大数据的概念早已风靡全球,怎么应用、怎么落地也都是众说纷纭,好不热闹。单就银行来说,利用大数据来对客户的情绪进行分析,然后对客户可能的购买意向进行预测,是当前可...

    陆勤_数据人网
  • 【数据分析】客户细分

    何为客户细分?是技术,更是艺术 客户细分是20世纪50年代中期由美国学者温德尔史密斯提出的,其理论依据在于顾客需求的异质性和企业需要在有限资源的基础上进行有效地...

    陆勤_数据人网
  • 【金融数据】挖掘数据价值,打造智能银行

    今天移动互联网正狂飙突进、网上购物平台和网上社交平台也方兴未艾,包括结构化数据、半结构化数据、非结构化数据的大数据爆炸式增长。早在2012年,大数据已经登上美国...

    陆勤_数据人网
  • awk(报告生成器),grep(文本过滤器),sed(流编辑器)使用入门

    三剑客 linux下的文本三剑客 grep egrep,grep,fgrep 文本查找的需要 grep:根据模式搜索文本,并将符合模式的文本行显示出来。 pa...

    若与
  • 如何将文字转换为对应的PathGeometry

    其实我们可以使用FormattedText的BuildGeometry将字符串转成对应的Geometry

    黄腾霄
  • Go 语言面向对象教程 —— 通过组合实现类的继承

    Go 语言不是像 PHP 等传统面向编程实现那样通过 extends 关键字来显式定义子类与父类之间的继承关系,而是通过组合方式实现类似功能,显式定义继承关系的...

    学院君
  • 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)

    题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。 ...

    attack
  • C/C++宏之#与##

    Qt君
  • UCloud上市后的新苦海:净利一路下坡

    IDC发布的报告显示,受疫情影响,云计算技术将从互联网走向非互联网,深刻影响整个社会的生产生活方式,并指出2018年至2022年我国公有云市场复合增长率达 39...

    刘旷
  • 云计算第一股UCloud:生死博弈刚刚开始

    这些年,优刻得营收规模上去了,但成本的增长更甚一步,使其难以实现盈利,甚至出现大幅度的亏损。而在优刻得上市之后最新发布的首份半年报里,亏损乌云同样笼罩。“云计算...

    刘旷

扫码关注云+社区

领取腾讯云代金券