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

标签: python 消费 数据 | 发表时间:2018-10-26 12:01 | 作者:大数据文摘
出处:https://www.jiqizhixin.com/

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

客户细分我们需要创建什么?

通过使用消费交易数据,我们将会通过创建一个2 x 2的有价值属性的矩阵来得到4个客户群。每一个客户群将与其他群体有两大区别,即当前客户价值和潜在客户价值。

我们将使用什么技术?

我们将使用RFM模型从消费交易数据中创建所需变量。RFM模型代表:

  • 最近消费(Recency):他们最近一次消费是什么时候?

  • 消费频率(Frequency):他们多久消费一次、一次消费多久?

  • 消费金额(Monetary):他们消费了多少?

该模型通常被用于在三个属性交叉处寻找高价值客户。但在本例中,我们将仅适用R(最近消费)与M(消费金额)来创建二维矩阵。

RFM模型我们使用什么数据?

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

我们采取什么方法?

第0步:导入、筛选、清理、合并消费者层级数据。

第1步:为每一位消费者创建RFM变量。

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

第3步:计算RM分数,并对客户进行排序。

第4步:可视化价值矩阵,并对关键指标进行进一步分析。

Python实现:

第0步:导入、筛选、清理、合并消费者层级数据。

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 = pd.read_excel(url) df = df[(df.Segment == 'Consumer') & (df.Country == 'United States')] df.head()

第1步:为每一位消费者创建RFM变量。

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) df_RFM.head()

第2步:使用R与M变量的80%分位数实现自动细分。

# 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) df_RFM.head()

第3步:计算RM分数,并对客户进行排序。

# 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) df_RFM_SUM.head()

第4步:可视化价值矩阵,并对关键指标进行进一步分析。

# 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天)。发起一些发放优惠券一类的营销活动可能能够带来新的消费,并帮助把该类客户挪至“新客户”分类(例如,高参与度客户)。

简单策略实例(上:打电话;下:电邮营销)

在Github上可以找到本Jupyter Notebook: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

相关 [python 消费 数据] 推荐:

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

- - 机器之心
细分客户群是向客户提供个性化体验的关键. 它可以提供关于客户行为、习惯与偏好的相关信息,帮助企业提供量身定制的营销活动从而改善客户体验. 在业界人们往往把他吹嘘成提高收入的万能药,但实际上这个操作并不复杂,本文就将带你用简单的代码实现这一项目. 通过使用消费交易数据,我们将会通过创建一个2 x 2的有价值属性的矩阵来得到4个客户群.

Python连接数据库之DB-API

- - 标点符
在Python中如果要连接数据库,不管是 MySQL、 SQL Server、 PostgreSQL亦或是SQLite,使用时都是采用游标的方式,所以就不得不学习Python DB-API. Python所有的数据库接口程序都在一定程度上遵守 Python DB-API 规范. DB-API定义了一系列必须的对象和数据库存取方式,以便为各种底层数据库系统和多种多样的数据库接口程序提供一致的访问接口.

Neo4j 推出基于 Python 的嵌入式图数据存储

- wang - python.cn(jobs, news)
Neo4j很早就在说,会推出一个嵌入在Python中的图数据库模块,让Python可以通过图数据库的API操作本地文件以存储图结构的数据(类似于很多支持SQLite的类库). 而今天Neo4j终于在官方博客上兑现了其承诺,并为自己的多次跳票表示抱歉. 目前最新版本在CPython2.7.2  Windows和Linux下都经过测试,在Python2.6版本下也可以正常工作.

飘逸的python - 大数据TopK问题的quick select解法

- - CSDN博客推荐文章
TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词.. 先排序,然后截取前k个数.. 时间复杂度:O(n*logn)+O(k)=O(n*logn). 维护容量为k的最小堆.根据最小堆性质,堆顶一定是最小的,如果小于堆顶,则直接pass,如果大于堆顶,则替换掉堆顶,并heapify整理堆,其中heapify的时间复杂度是logk..

使用python抓取并分析京东商品评论数据

- - 蓝鲸的网站分析笔记
本篇文章是python爬虫系列的第三篇,介绍如何抓取京东商城商品评论信息,并对这些评论信息进行分析和可视化. 下面是要抓取的商品信息,一款女士文胸. 这个商品共有红色,黑色和肤色三种颜色, 70B到90D共18个尺寸,以及超过700条的购买评论. 京东商品评论信息是由JS动态加载的,所以直接抓取商品详情页的URL并不能获得商品评论的信息.

用Python爬取微博数据生成词云图片

- - 编程学习网
很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,放在今天应该比较应景. 一年一度的虐汪节,是继续蹲在角落默默吃狗粮还是主动出击告别单身汪加入散狗粮的行列就看你啦,七夕送什么才有心意,程序猿可以试试用一种特别的方式来表达你对女神的心意.

使用Python对数据进行归一化规格化

- - 标点符
数据归一化问题是数据挖掘中特征向量表达时的重要问题,当不同的特征成列在一起的时候,由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据“吃掉”的情况,这个时候我们需要做的就是对抽取出来的features vector进行归一化处理,以保证每个特征被分类器平等对待. 先前的文章中已经介绍了几种常见的 数据归一化的方法,这里对主要整理了如何将这些公式和方法转化程Python代码.

关于Python数据分析,这里有一条高效的学习路径

- -
谷歌的数据分析可以预测一个地区即将爆发的流感,从而进行针对性的预防;淘宝可以根据你浏览和消费的数据进行分析,为你精准推荐商品;口碑极好的网易云音乐,通过其相似性算法,为不同的人量身定制每日歌单……. 数据正在变得越来越常见,小到我们每个人的社交网络、消费信息、运动轨迹……,大到企业的销售、运营数据,产品的生产数据,交通网络数据…….

面向数据科学和 AI 的开发库推荐:Python、R 各 7 个

- - 雷锋网
雷锋网 AI 科技评论按:本文作者 Favio Vázquez 是一位数据科学家、物理学家和计算机工程师,他从 2018 年初开始写作并发布《数据科学和人工智能每周文摘:Python & R》系列文章,为数据科学家介绍,能真正帮助他们更好地完成各项任务的最好的开发库、开源项目、安装包以及工具. 随着一年结束,Favio Vázquez 也应读者需要,从该系列文章中盘点出了 Python/R 语言 7 大开发库.

dropbox讲python

- chuang - Initiative
dropbox定制优化CPython虚拟机,自己搞了个malloc调度算法. 那个 !!!111cos(0). 期待这次PyCon China 2011.