双十一来了!我用Python写了个客户的消费数据细分!三天挣十万!
很多人都说过这样的一句玩笑话!就是马云是女人养活的!其实说没有道理也有道理!但是马云是改变了整个国家的消费方式啊,虽然是货比流通不大了,但是也减少了假币的流通性!更让人放心和安心!这点非常满意,现在基本大部分的人,在大城市的话,二线三线之类的基本都很少带现金出门了吧!反正小编是已经半年多没摸过钱了!今天的话就带来一个小项目,就是对客户的一些东西做细分和分析,那样商家可以更好的策划方案来喜欢顾客或者是回头客了,这样的盈利可想而知!更别说是双十一如此重大的活动了!好了废话不多说,马上来到咱们的正文! 进群“548377875? ” 即可获取从零到项目实战的PDF数十本呢! 细分客户群是向客户提供个性化体验的关键。它可以提供关于客户行为、习惯与偏好的相关信息,帮助企业提供量身定制的营销活动从而改善客户体验。在业界人们往往把他吹嘘成提高收入的万能药,但实际上这个操作并不复杂,本文就将带你用简单的代码实现这一项目。 我们将使用什么技术? 我们将使用RFM模型从消费交易数据中创建所需变量。RFM模型代表:
该模型通常被用于在三个属性交叉处寻找高价值客户。但在本例中,我们将仅适用R(最近消费)与M(消费金额)来创建二维矩阵。 我们使用什么数据? 我们将使用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),1) df_RFM['M']=np.where(df_RFM['Monetary']>=int(quantiles.Monetary.values),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(),'R': lambda y: round(y.mean(),'M': lambda y: round(y.mean(),'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',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 源码地址留下了哈!希望大家能学到技能哦!当然你想转这样的外快,是需要团队的,毕竟不如文章上写的这么简单,你的有你的客户来源,写这样的东西才有用不!好了到此结束! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在不同的pdb(pp)会话之间保存状态?
- 这产品经理当的也太烦了!天天各种报表,我用Python实现自动
- 如何方便地使用Python和Pandas来匿名信息!保护客户的敏感信
- 如果追加失败,如何有效地重建pandas hdfstore表
- 利用python程序生成word和PDF文档的方法
- 资深程序员用Python实现每秒处理 120 万次 HTTP 请求!什么
- python 简单备份文件脚本v1.0的实例
- 使用libvirt抓取linux kvm虚拟机的缩略图
- 我有两个相同的CSV文件,但是由于UnicodeDecodeError而无法将
- python – 如何通过xmlrpc安全地获得对supervisord的编程访