# 手把手教你用几行Python和消费数据做客户细分

• 最近消费（Recency）：他们最近一次消费是什么时候？
• 消费频率（Frequency）：他们多久消费一次、一次消费多久？
• 消费金额（Monetary）：他们消费了多少？

RFM模型

Python实现：

```import matplotlib as plt
import numpy as np
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
url = 'https://github.com/tristanga/Data-Analysis/raw/master/Global%20Superstore.xls'
df = df[(df.Segment == 'Consumer') & (df.Country == 'United States')]

```df_RFM = df.groupby('Customer ID').agg({'Order Date': lambda y: (df['Order Date'].max().date() - y.max().date()).days,
'Order ID': lambda y: len(y.unique()),
'Sales': lambda y: round(y.sum(),2)})
df_RFM.columns = ['Recency', 'Frequency', 'Monetary']
df_RFM = df_RFM.sort_values('Monetary', ascending=False)

```# We will use the 80% quantile for each feature
quantiles = df_RFM.quantile(q=[0.8])
print(quantiles)
df_RFM['R']=np.where(df_RFM['Recency']<=int(quantiles.Recency.values), 2, 1)
df_RFM['F']=np.where(df_RFM['Frequency']>=int(quantiles.Frequency.values), 2, 1)
df_RFM['M']=np.where(df_RFM['Monetary']>=int(quantiles.Monetary.values), 2, 1)

```# To do the 2 x 2 matrix we will only use Recency & Monetary
df_RFM['RMScore'] = df_RFM.M.map(str)+df_RFM.R.map(str)
df_RFM = df_RFM.reset_index()
df_RFM_SUM = df_RFM.groupby('RMScore').agg({'Customer ID': lambda y: len(y.unique()),
'Frequency': lambda y: round(y.mean(),0),
'Recency': lambda y: round(y.mean(),0),
'R': lambda y: round(y.mean(),0),
'M': lambda y: round(y.mean(),0),
'Monetary': lambda y: round(y.mean(),0)})
df_RFM_SUM = df_RFM_SUM.sort_values('RMScore', ascending=False)

```# 1) Average Monetary Matrix
df_RFM_M = df_RFM_SUM.pivot(index='M', columns='R', values='Monetary')
df_RFM_M= df_RFM_M.reset_index().sort_values(['M'], ascending = False).set_index(['M'])
df_RFM_M

# 2) Number of Customer Matrix
df_RFM_C = df_RFM_SUM.pivot(index='M', columns='R', values='Customer ID')
df_RFM_C= df_RFM_C.reset_index().sort_values(['M'], ascending = False).set_index(['M'])
df_RFM_C

# 3) Recency Matrix```

“流失客户”分类中的客户人数不是很多，并且从他们身上得到的的平均收入高于“明星客户”分类。既然人数不多，从客户层面与业务部门合作对这些客户进行分析研究并制定一个留住他们的策略应该不难：给他们打电话或者直接见面，说不定就可以把他们挪到“明星客户”分类（例如，高参与度客户）。

“次要客户”分类的平均最近消费时间非常久远（超过1年，而参与度较高的客户平均来说该数据只有60至70天）。发起一些发放优惠券一类的营销活动可能能够带来新的消费，并帮助把该类客户挪至“新客户”分类（例如，高参与度客户）。

https://github.com/tristanga/Data-Analysis/blob/master/Notebooks/Automatic Customer Segmentation with RFM %28Python%29.ipynb

https://towardsdatascience.com/how-to-automatically-segment-customers-using-purchase-data-and-a-few-lines-of-python-36939fb587a4

0 条评论

• ### 4步用Python搞定客户细分！

细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息，帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提...

• ### 数据运营分析无从下手？给你分享10招！

很多方法朴实无华，却解决大量的问题。下面十个方法都是我这么多年做分析时一定会用到的最经典的方法。这些方法如果烂熟于心，其实只要掌握分析的最核心部分也就差不多了。...

• ### 背KPI，想要实现有效增长？先来搞懂这3个指标！

之前做过的数据分析项目挺多的，最近有一位朋友，他们公司是一家年销售额勉强破千万的电商企业，因为之前的品牌红利期，加上成本优势、野蛮生长，今年后端成本上涨，前端销...

• ### 手把手 | 教你用几行Python和消费数据做客户细分

细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息，帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提...

• ### 手把手 | 教你用几行Python和消费数据做客户细分

细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息，帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提...

• ### 4步用Python搞定客户细分！

细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息，帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提...

• ### python | 对时间点的处理

以我遇到的一个问题作为例子来说明。 2011-01-01 06:00:00 2011-01-01 07:00:00 2011-01-01 08:00...

• ### Apache 绿色版本官方版本下载

在网上搜了一圈，没有找到合适的精简Apache绿色版本，都要收取C币。 记录一下怎么在官网找到编译好的 windows 绿色版本，即加压即可用。

用户都是希望能够尽快找到自己问题的答案。研究表明，用户都比较关心页面的速度。虽然速度已经在排名中使用了一段时间，但该信号主要集中在PC端搜索上。谷歌官方宣布从2...