几行Python代码:对消费数据做客户细分

2018-10-2809:25:13后端程序开发Comments2,694 views字数 3099阅读模式

细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息,帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提高收入的万能药,但实际上这个操作并不复杂,本文就将带你用简单的代码实现这一项目。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们需要创建什么?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

通过使用消费交易数据,我们将会通过创建一个2 x 2的有价值属性的矩阵来得到4个客户群。每一个客户群将与其他群体有两大区别,即当前客户价值和潜在客户价值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们将使用什么技术?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们将使用RFM模型从消费交易数据中创建所需变量。RFM模型代表:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

• 最近消费(Recency):他们最近一次消费是什么时候?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

• 消费频率(Frequency):他们多久消费一次、一次消费多久?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

• 消费金额(Monetary):他们消费了多少?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

该模型通常被用于在三个属性交叉处寻找高价值客户。但在本例中,我们将仅适用R(最近消费)与M(消费金额)来创建二维矩阵。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

RFM模型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们使用什么数据?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们将使用Tableau提供的消费数据样本——它也被称为“Global Superstore”。它通常被用于预测与时间序列分析。该数据集包含超过1500位不同客户4年的消费数据。既然我们做的是行为细分而非人口细分,我们将通过仅选择B2C领域的消费者以及美国区域的消费数据来去除潜在的人口偏差。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

我们采取什么方法?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第0步:导入、筛选、清理、合并消费者层级数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第1步:为每一位消费者创建RFM变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第2步:为实现自动细分,我们将使用R与M变量的80%分位数;我们其实还可以用k均值聚类(K-mean Clustering)或者利用商业背景知识来进行群体区分——比如,全球超市企业用户将活跃客户定义为最近一次订单在100天内的客户。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第3步:计算RM分数,并对客户进行排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第4步:可视化价值矩阵,并对关键指标进行进一步分析。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

Python实现:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第0步:导入、筛选、清理、合并消费者层级数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

import matplotlib as plt文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

import numpy as np文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

%matplotlib inline文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

import warnings文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

warnings.filterwarnings(‘ignore’)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

import pandas as pd文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

url = ‘https://github.com/tristanga/Data-Analysis/raw/master/Global%20Superstore.xls’文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df = pd.read_excel(url)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df = df[(df.Segment == ‘Consumer’) & (df.Country == ‘United States’)]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df.head()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第1步:为每一位消费者创建RFM变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM = df.groupby(‘Customer ID’).agg({‘Order Date’: lambda y: (df[‘Order Date’].max().date() – y.max().date()).days,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘Order ID’: lambda y: len(y.unique()),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘Sales’: lambda y: round(y.sum(),2)})文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM.columns = [‘Recency’, ‘Frequency’, ‘Monetary’]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM = df_RFM.sort_values(‘Monetary’, ascending=False)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM.head()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第2步:使用R与M变量的80%分位数实现自动细分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

# We will use the 80% quantile for each feature文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

quantiles = df_RFM.quantile(q=[0.8])文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

print(quantiles)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM[‘R’]=np.where(df_RFM[‘Recency’]<=int(quantiles.Recency.values), 2, 1)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM[‘F’]=np.where(df_RFM[‘Frequency’]>=int(quantiles.Frequency.values), 2, 1)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM[‘M’]=np.where(df_RFM[‘Monetary’]>=int(quantiles.Monetary.values), 2, 1)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM.head()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第3步:计算RM分数,并对客户进行排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

# To do the 2 x 2 matrix we will only use Recency & Monetary文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM[‘RMScore’] = df_RFM.M.map(str)+df_RFM.R.map(str)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM = df_RFM.reset_index()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_SUM = df_RFM.groupby(‘RMScore’).agg({‘Customer ID’: lambda y: len(y.unique()),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘Frequency’: lambda y: round(y.mean(),0),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘Recency’: lambda y: round(y.mean(),0),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘R’: lambda y: round(y.mean(),0),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘M’: lambda y: round(y.mean(),0),文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

‘Monetary’: lambda y: round(y.mean(),0)})文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_SUM = df_RFM_SUM.sort_values(‘RMScore’, ascending=False)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_SUM.head()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

第4步:可视化价值矩阵,并对关键指标进行进一步分析。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

# 1) Average Monetary Matrix文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_M = df_RFM_SUM.pivot(index=’M’, columns=’R’, values=’Monetary’)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_M= df_RFM_M.reset_index().sort_values([‘M’], ascending = False).set_index([‘M’])文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_M文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

# 2) Number of Customer Matrix文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_C = df_RFM_SUM.pivot(index=’M’, columns=’R’, values=’Customer ID’)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_C= df_RFM_C.reset_index().sort_values([‘M’], ascending = False).set_index([‘M’])文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

df_RFM_C文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

# 3) Recency Matrix文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

最终矩阵(左上:流失客户;右上:明星客户;左下:次要客户;右下:新客户)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

一些简单的销售与营销策略的启发性实例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

“流失客户”分类中的客户人数不是很多,并且从他们身上得到的的平均收入高于“明星客户”分类。既然人数不多,从客户层面与业务部门合作对这些客户进行分析研究并制定一个留住他们的策略应该不难:给他们打电话或者直接见面,说不定就可以把他们挪到“明星客户”分类(例如,高参与度客户)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

“次要客户”分类的平均最近消费时间非常久远(超过1年,而参与度较高的客户平均来说该数据只有60至70天)。发起一些发放优惠券一类的营销活动可能能够带来新的消费,并帮助把该类客户挪至“新客户”分类(例如,高参与度客户)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

几行Python代码:对消费数据做客户细分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

简单策略实例(上:打电话;下:电邮营销)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

在Github上可以找到本Jupyter Notebook文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

https://github.com/tristanga/Data-Analysis/blob/master/Notebooks/Automatic文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

Customer Segmentation with RFM %28Python%29.ipynb文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7522.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/7522.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定