# 自定义好的包,亲测可用 原数据和代码思想来自以下网址
# https://github.com/joaolcorreia/RFM-analysis
import datetime as dt
import pandas as pd
def RFM(data_,ri_qi,user_id,money,*time_):
'''
return:
dataframe表格
列有r,f,m,r_四分位分数,f_四分位分数,m_四分位分数,RFM,用户分类
行为用户id,唯一,分类汇总后
desc:
如 : RFM(orders,'order_date','customer','grand_total',2018,1,2)
返回df数据会复制到粘贴板
params:
data_ : 表格数据 pandas dataframe (表格中的字段名)
ri_qi : 订单日期 (表格中的字段名)
user_id : 用户id (表格中的字段名)
money : 消费金额 (表格中的字段名)
*time_ : 不定长参数 不写默认当天 ''' # 设置参考时间点,无参数则默认为当天
if time_ == ():
NOW = dt.datetime.now()
else:
y,m,d = time_
NOW = dt.datetime(y,m,d) # 日期列进行格式转换
data_[ri_qi] = pd.to_datetime(data_[ri_qi]) # 创建RFM标签
rfmTable = data_.groupby(user_id).agg({ri_qi: lambda x: (NOW - x.max()).days, # Recency 顾客最近一次购买距今天数(days)
'order_id': lambda x: len(x), # Frequency 按顾客分组后次数,即顾客订单频次
money: lambda x: x.sum()}) # Monetary Value 顾客消费金额总和
# 日期列转换数据类型
rfmTable[ri_qi] = rfmTable[ri_qi].astype(int)
# 列名重命名
rfmTable.rename(columns={ri_qi: 'recency',
'order_id': 'frequency',
money: 'monetary_value'}, inplace=True) # 确定RFM四分位数
quantiles = rfmTable.quantile(q=[0.25,0.5,0.75])
quantiles = quantiles.to_dict() # 创建RFM分割表
rfmSegmentation = rfmTable.copy(deep=True)
# Arguments (x = value, p = recency, monetary_value, frequency, k = quartiles dict)
# 日期间隔越小越好
def RClass(x,p,d):
# p,d = args = ('recency',quantiles,)
# x即rfmSegmentation['recency'].apply(RClass) 日期间隔数据
if x <= d[p][0.25]:
return 1
elif x <= d[p][0.50]:
return 2
elif x <= d[p][0.75]:
return 3
else:
return 4 # Arguments (x = value, p = recency, monetary_value, frequency, k = quartiles dict)
# 消费频次和金额越大越好
# 分数范围1-4
def FMClass(x,p,d):
if x <= d[p][0.25]:
return 4
elif x <= d[p][0.50]:
return 3
elif x <= d[p][0.75]:
return 2
else:
return 1 # 评分应用 R F M
rfmSegmentation['R_Quartile'] = rfmSegmentation['recency'].apply(RClass, args=('recency',quantiles,))
rfmSegmentation['F_Quartile'] = rfmSegmentation['frequency'].apply(FMClass, args=('frequency',quantiles,))
rfmSegmentation['M_Quartile'] = rfmSegmentation['monetary_value'].apply(FMClass, args=('monetary_value',quantiles,)) # 评分应用 RFMClass
rfmSegmentation['RFMClass'] = rfmSegmentation.R_Quartile.map(str) \
+ rfmSegmentation.F_Quartile.map(str) \
+ rfmSegmentation.M_Quartile.map(str) def type_(x,R,F,M):
'''
r,f,m即每行的r,f,m分值
'''
r,f,m = x[R],x[F],x[M]
if r > 2 and f > 2 and m > 2:
return '高价值客户'
elif r <= 2 and f > 2 and m > 2:
return '高重点保护客户'
elif r > 2 and f <= 2 and m > 2:
return '重点发展客户'
elif r <= 2 and f <= 2 and m > 2:
return '重点挽留客户'
elif r > 2 and f > 2 and m <= 2:
return '一般价值客户'
elif r <= 2 and f > 2 and m <= 2:
return '一般保持客户'
elif r > 2 and f <= 2 and m <= 2:
return '一般发展客户'
elif r <= 2 and f <= 2 and m <= 2:
return '潜在客户'
else:
return rfmSegmentation['type_'] = rfmSegmentation.apply(type_,args=('R_Quartile','F_Quartile','M_Quartile'),axis=1)
rfmSegmentation.to_clipboard() # 数据复制到 粘贴板
return rfmSegmentation

调用函数处理后:

RFM客户价值分类的更多相关文章

  1. k-means实战-RFM客户价值分群

    数据挖掘的十大算法 基本概念 导入数据集到mysql数据库中 总共有940个独立消费数据 K-Means 算法 K-Means 算法是一个聚类算法.你可以这么理解,最终我想把物体划分成 K 类.假设每 ...

  2. 数据分析之客户价值模型(RFM)技术总结

    作者 | leo 管理学中有一个重要概念那就是客户关系管理(CRM),它核心目的就是为了提高企业的核心竞争力,通过提高企业与客户间的交互,优化客户管理方式,从而实现吸引新客户.保留老客户以及将已有客户 ...

  3. 如何通过CRM评估客户价值和提高客户忠诚度?

    随着市场经济的日益繁荣,同行业之间企业的竞争越来越激烈,企业纷纷各出奇招吸引和挖掘客户,力求让自己的品牌成为更多客户的第一选择.那么,我们可以用什么方法来评估客户价值,提高客户忠诚度呢? 在互联网时代 ...

  4. Python使用RMF聚类分析客户价值

    投资机构或电商企业等积累的客户交易数据繁杂.需要根据用户的以往消费记录分析出不同用户群体的特征与价值,再针对不同群体提供不同的营销策略. 用户分析指标 根据美国数据库营销研究所Arthur Hughe ...

  5. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  6. RFM模型+SOM聚类︱离群值筛选问题

        笔者寄语:一般情况下离群值不应该直接删除,应该进行筛选,然后进行专门的离群值分析.笔者在这进行一下思考,在聚类基础之上的一种离群点检验. 基于聚类的离群点检测的步骤如下:数据标准化--聚类-- ...

  7. 数据挖掘应用案例:RFM模型分析与客户细分(转)

    正好刚帮某电信行业完成一个数据挖掘工作,其中的RFM模型还是有一定代表性,就再把数据挖掘RFM模型的建模思路细节与大家分享一下吧!手机充值业务是一项主要电信业务形式,客户的充值行为记录正好满足RFM模 ...

  8. 航空客户价值分析特色LRFMC模型——RFM升级

    本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...

  9. 使用ML.NET实现基于RFM模型的客户价值分析

    RFM模型 在众多的客户价值分析模型中,RFM模型是被广泛应用的,尤其在零售和企业服务领域堪称经典的分类手段.它的核心定义从基本的交易数据中来,借助恰当的聚类算法,反映出对客户较为直观的分类指示,对于 ...

随机推荐

  1. 我的第一个netcore2.2 api项目搭建(三)

    上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二) 这一章实现目标三:api添加身份验证功能 在实现该目标之前,先得理解netcore运行机制. 这是微软 ...

  2. SQL小技巧(一)拼音首字母的模糊查询

    基于Microsoft SQL Server 的标量值函数fun_GetPy,借鉴其他优秀的博主文章,此处贴出源码,以及使用方法 1.打开新建查询,贴如下代码,F5 /****** Object: U ...

  3. SQL Server中查找包含某个文本的存储过程 SQL 查找存储过程中出现过的文字怎么查询 查询整个数据库中出现的文本 sql 全局搜索

    --将text替换成你要查找的内容SELECT name, *FROM sysobjects o, syscomments sWHERE o.id = s.id AND text LIKE '%tex ...

  4. Python面向对象继承案例

    面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活 ...

  5. WC2018 文艺汇演《退役的你》

    视频网址:https://www.bilibili.com/video/av19333297 谨以此歌献给那些曾与我们并肩前行的退役 OIer 填词 & 视频:Menci 演唱:wxh0109 ...

  6. 2019-07-31 Jquery

    Jquery是什么? jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是“ ...

  7. React 之 Redux 的使用

    Redux可以简单概况为:将需要修改的state都存入到store里,发起一个action用来描述发生了什么,用reducers描述action如何改变state tree .创建store的时候需要 ...

  8. 不知道密码情况下 进行docker数据库可视化连接

    1. 通过命令 docker inpect mysql容器id ,查询mysql容器的密码和绑定的端口号 2.通过vscode插件或者navicat等可视化工具,进行连接即可. 有问题请进群联系我,或 ...

  9. Laravel 实现前后台用户分离登录

    在很多时候,我们需要前台和后台进行不同的登录操作,以限制用户权限,现在用 Laravel 实现这个需求. 前戏 一.获取 Laravel 这个在文档中都有说明的,也比较简单,可以使用 composer ...

  10. 【OS_Windows】Win10应用商店闪退和点击Cortana搜索框闪退的解决方法

    Windows10用户遇到了打开应用商店时闪退和点击Cortana小娜搜索框闪退的问题,并且在微软社区求助,得到了一种可行的解决方法,那就是查看Network List Service(网络列表服务) ...