# 自定义好的包,亲测可用 原数据和代码思想来自以下网址
# 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. 【题解】Luogu P2447 [SDOI2010]外星千足虫

    原题传送门 根据题意,题目给的每个操作就相当于异或上选中的那几只虫子的足数(mod 2)等于0/1 这是一个异或方程组,珂以用高斯消元解出每个虫子的足数(mod 2).所需最小次数或判断有多解 但是看 ...

  2. [SOJ #721]第三送分题(2019-11-14考试)/[CF675E]Trains and Statistic

    题目大意 在一条直线上有\(n\)个点.在第\(i\)个点可以花费\(1\)的代价到达\((i,a_i]\)中任意一点,用\(S[i][j]\)表示从点\(i\)到点\(j\)的最少花费,求\(\su ...

  3. 数据库权限优化,权限设计BigInteger

    最近看到了一个项目的权限是根据bigineger来进行计算的菜单权限,觉得还是不错,存储上只需要存储在一个字段里就可以了,通过计算算出该角色的菜单权限即可,效率也非常的快,放在session中也非常的 ...

  4. vim:spell语法

    先说结论,在vim配置文件加入: setlocal spell spelllang=en_us,cjk 1.spell指开启检查模式. 2.spelllang用于指定检查的种类. 3.cjk,指中国, ...

  5. framework7 总结之前遇到的问题和踩过的坑

    官网上写的案例比较简单明了,我这里就将我使用时踩过的坑做一个总结,与大家共勉! 最近使用framework,基本全靠浏览官方文档,当然,有遇到了许多的错误,开始不知道哪里出问题也很着急,到最后发现问题 ...

  6. C# 转成金额每三位逗号隔开

    long aaaa = 14200666; Console.WriteLine(aaaa.ToString("N0")); Console.WriteLine(string.For ...

  7. C#读写修改设置调整UVC摄像头画面-滚动

    有时,我们需要在C#代码中对摄像头的滚动进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...

  8. MySQL常用sql语句大全

    创建数据库 1 create database dbname; 删除数据库 1 drop database dbname; 选择数据库 1 use dbname; 创建表 12345678 CREAT ...

  9. Texture(ASDK)、ComponentKit、LayoutKit、YogaKit

    YogaKit 最轻量,改动量最小,目的最纯粹,同时也最类似于使用 frame ,需要自己造一波在 UITableView 中使用的轮子(各类 frame 结果缓存方案).同类的备选方案是 FlexB ...

  10. 安全SECUERITY英文SECUERITY证券

    security Alternative forms secuerity (mostly obsolete) English Alternative forms secuerity Pronuncia ...