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

RFM模型


在众多的客户价值分析模型中,RFM模型是被广泛应用的,尤其在零售和企业服务领域堪称经典的分类手段。它的核心定义从基本的交易数据中来,借助恰当的聚类算法,反映出对客户较为直观的分类指示,对于没有数据分析和机器学习技术支撑的初创企业,它是简单易上手的客户分析途径之一。

640?wx_fmt=png

RFM模型主要有三项指标:

Recency:最近消费时间间隔

Frequency:消费频率

Monetary:消费金额

我们为客户在这三项指标上进行打分,那么总共会有27种组合的可能,使用K-Means算法,能够缩减到指定的有限数量的分箱(一般会为5类),计算出每个客户在分箱的位置即客户的价值。

当然RFM模型还有更多衍生版本,可以参考WiKi:RFM (customer value)。

ML.NET和K-Means


ML.NET自v0.2版本就提供了K-Means++ clustering的实现,也是非监督学习最常见的训练,正好适用于为RFM模型的分类执行机器学习。

动手实践


基本要求

  • Visual Studio 2017 或者 Visual Studio Code

  • DotNet Core 2.0+

  • ML.NET v0.3

数据来源

本案例数据来自UCI:Online Retail,这是一个跨国数据集,其中包含2010年12月1日至2011年12月9日期间在英国注册的非商店在线零售业务中发生的所有交易。该公司主要销售独特的全场礼品。该公司的许多客户都是批发商。

属性信息:

InvoiceNo:发票编号。标称值,为每个事务唯一分配的6位整数。如果此代码以字母'c'开头,则表示取消。

StockCode:产品(项目)代码。标称值,为每个不同的产品唯一分配的5位整数。

Description:产品(项目)名称。标称。

Quantity:每笔交易的每件产品(项目)的数量。数字。

InvoiceDate:发票日期和时间。数字,生成每个事务的日期和时间。

UnitPrice:单价。数字,英镑单位产品价格。

CustomerID:客户编号。标称值,为每个客户唯一分配的5位整数。

Country:国家名称。每个客户所在国家/地区的名称。

数据处理

  1. 使用Excel,对原始数据增加4个字段,分别是Amount(金额,单价与数量相乘的结果)、Date(InvoiceDate的整数值)、Today(当天日期的整数值)、DateDiff(当天与Date的差值)。

640?wx_fmt=png

  1. 建立透视图,获取每个客户在Amount上的总和,DateDiff的最大和最小值,并且通过计算公式Amount/(DateDiff最大值-DateDiff最小值+1)算出频率值。

640?wx_fmt=png

  1. 按照以下规则计算RFM的评分

  • R:(DateDiff最大值- DateDiff最小值-2000)的差值,小于480计3分,480-570之间计2分,570-750之间计1分,大于750计0分。

  • F:频率值,大于1000计5分,500-1000之间计4分,100-500之间计3分,50-100之间计2分,0-50之间计1分,小于0计0分。

  • M:Amount总和值,大于10000计5分,5000-10000之间计4分,2000-5000之间计3分,1000-2000之间计2分,0-1000之间计1分,小于0计0分。

640?wx_fmt=png

有小伙伴可能存在疑问,为什么要这么划分,其实这就是对数据分布合理分段的一种思想,为了减小数据源的不平衡性对机器学习的影响,我们尽量使得数据的分布是自然的。

编码部分

还是熟悉的味道,创建DotNet Core控制台应用程序,通过Nuget添加对ML.NET的引用。

  • 创建用于学习的数据结构

640?wx_fmt=png

训练部分

640?wx_fmt=png

评估部分

640?wx_fmt=png

预测部分

640?wx_fmt=png

调用部分

640?wx_fmt=png

运行结果

640?wx_fmt=png

可以看到,我用于测试的客户,被分到了第2类上面。

尽管完成了聚类的工作,对于学习出来的这5个类别,仍然需要按原始数据集全部遍历预测出对应的分类,根据客户的RFM评分与分类的对应关系,才能够对每个类别的意义进行有效地解释。

结尾


这个简单的案例为大家展示了使用ML.NET完成聚类的机器学习。对于想要上手针对自己公司的业务,进行一些门槛较低的客户分析,使用ML.NET将是一个不错的选择。当然ML.NET还在不断迭代中,希望大家持续关注新的特性功能发布。

原文地址:https://www.cnblogs.com/BeanHsiang/p/9438581.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Reordering the Cows

牛客网传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format:%lld 链接:https://ac.nowcoder.com/acm/contest/4860/B 来源:牛客网 题目描述 Farmer John’s N cows (…

回顾4180天在腾讯使用C#的历程,开启新的征途

今天是2018年8月8日,已经和腾讯解除劳动关系,我的公司正式开始运营,虽然还有很多事情需要理清,公司官网也没有做,接下来什么事情都需要自己去完成了,需要一步一个脚印去完善,开启一个新的征途。…

稳定工作和创业之间的抉择

早上写的文章《回顾4180天在腾讯使用C#的历程,开启新的征途》是我在腾讯写的最后一篇对过往10年在腾讯使用C#语言的总结,今天收到反馈有人在造谣腾讯开始去.net,我被迫辞职了。这非常的不负责任,我必须写这篇文章来辟谣。要说腾讯…

牛客2020年愚人节比赛

欢乐的一晚上 题目链接 其实做做也挺好,脑筋急转弯,不需要算法不需要数据结构,纯娱乐 还有不知道是哪位哥的,心疼一下 题解 注:一下题解没必要较劲,欢乐局而已 对不对无所谓,换了最重要奥 A题ra…

IdentityServer4 知多少

1. 引言现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于IOS、Android的App,基于Windows系统的桌面应用和UWP应用等等,这么多种类的应用,就给应用的开发带来的挑战,…

牛客网【每日一题】4月2日 月月查华华的手机

牛客网链接 时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 月月和华华一起去吃饭了。期间华华有事出去了一会儿,没有带手机。月月出于人类最单纯的好奇心&#…

【二分】Best Cow Fences(poj 2018)

Best Cow Fences poj 2018 题目大意: 给出一个正整数数列,要你求平均数最大,长度不小于M的字串,结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽N⩽100,0001\leqslant N \leqslant 100,0001⩽…

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候,发现了一个号称专门针对离散实序列的变换,经分析总运算量为普通\(FFT\)的几乎一半,而且完全没有复数。这么强的吗?于是花了一个下午,去…

.NET Core 2.1中的分层编译(预览)

如果您是.NET性能的粉丝,最近有很多好消息,例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1,但我们还有更多的好消息。分层编译是一项重要的新特性功能,我们可以作为预览供任何人试用,从.NET Core 2.1开始。在我们测…

选择IT事业,意味着终身学习

八月,炎阳如火。 前几天书记找我交流,问我离职的原因,我跟他仔细的分析了一下我的职业发展规划和我对于未来的预期,书记也向我分析了一下他所认为的原因,他说,无外乎是三个原因:第一个是钱的问…

牛客网【每日一题】Shortest Path 4月3日题目精讲 DFS

题号 NC13886 Shortest Path 西南交通大学第十三届ACM决赛 题意: 一棵偶数节点的树,分成n/2对,两两一组,所有组的路径之和最小是多少? 题解: 如果两个点之间相连将另外两个相连的点覆盖,那么完全…

使用Jexus服务器运行Asp.Net Core2.0程序

前段时间写了篇关于.net core跨平台部署的文章。https://my.oschina.net/lichaoqiang/blog/1861977主要讲述了,利用NginxCentOSSupervisor.NetCore2.1,来运行.net core程序,感兴趣的朋友可以看一下。今天向大家介绍.net core使用jexus服务器的…

【结论】棋盘(jzoj 2297)

棋盘 jzoj 2297 题目大意: 在棋盘上有一个特殊的象,他可以向四个方向行走若干步(左上,左下,右上,右下),现在问从某一个点是否能到另外一个点 输入样例 5 1 1 2 2 2 3 2 2 1 2 4…

RRRR_wys' Blog 3.0 准备上线啦!

RRRR_wys Blog 3.0 准备上线啦! 今年马上要过完啦,打算在年前把博客翻翻新之前的布局太复杂了,感觉很视觉疲劳,这一版我打算能删就删完善了\(markdown\)还有一些地方要修,放假再说辣在vj上交了道cf,有惊喜 …

WebApiClient的JsonPatch局部更新

1. 文章目的随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,本文将介绍使用WebApiClient来完成JsonPatch提交的新特性。2. json patch介绍在服务端WebApi开发的时候,如果设计一个更新登录用户的个人信息的接…

【bfs】神殿(jzoj 2296)

神殿 jzoj 2296 题目大意: 用一个n∗mn*mn∗m的矩阵,每个单位都是一个1∗11*11∗1的房间,房间的四个方向只有某些方向有门(说明如下图),要从一个房间走向相邻的房间(算一个单位时间&#xff…

如何在本地数据中心安装Service Fabric for Windows集群

概述首先本文只是对官方文档(中文,英文)的一个提炼,详细的安装说明还请仔细阅读官方文档。虽然Service Fabric的官方名称往往被加上Azure,但是实际上(估计很多人不知道)Service Fabric可以安装到…

Asp.Net Core实战

序言使用.NET Core,团队可以更容易专注的在.net core上工作。比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP.NET Core或Entity Framework Core可以更轻松地进行实质性更改,而不…

DFS序讲解

我们经常会遇到树的问题,但树是非线性的结构,操作起来始终还是麻烦,如果我们能把树改造成线性结构,有什么方法?对,就是今天要讲的DSF序; dfs序呢,就是把一棵树区间化,我们…

利用Asp.Net Core的MiddleWare思想处理复杂业务流程

最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助。背景一个流程初始化接口,接口中根据传入的流程类型,需要做一些不同的工作。1.有的工作是…