RFM模型与Spark实现

  • RMF模型
    • 什么是RMF模型
    • 给R、F、M按价值打分
    • 基于RFM模型的用户价值划分
  • 代码实现

RMF模型

什么是RMF模型

  • R最近一次消费时间:R越小,客户价值越高
  • F消费频率:F值会受到品类的影响,不适合做跨类目比较
  • M消费金额:最有价值的指标

利用以上三个指标将用户分为以下几类

给R、F、M按价值打分

  • R打分:最近一次消费距离当前日期越近,分值越高
  • F:消费频率越高,得分越高
  • M:消费金额越高,得分越高

得分过后需要给R、F、M一定权重,权重根据业务进行选取

基于RFM模型的用户价值划分

  • 确定RFM三个指标的分段和每个分段的分值
  • 计算每个客户RFM三个指标的得分
  • 计算每个客户的总得分,按照值的大小进行人群细分

代码实现

class RFM {/*** 基于RFM模型的客户分群* @param dataSet 数据集* @return 带有RFM打分和标签的数据集*/def rfmGradation(dataSet:DataFrame):DataFrame={//一般情况下,做RFM模型,使用的是过去一年的订单数/**  计算RFM的值 *///计算R: 每个用户最近一次消费距今的时间间隔//datediff: 计算两个日期的间隔//to_date : String 转 dateval r_agg = datediff(max(to_date(col("current_time"))),max(to_date(col("finish_time"))) //获取finish_time的最大值).as("r")//计算F: 每个用户在指定时间范围内的消费次数val f_agg = count(col("*")).as("f")//计算M:每个用户在指定时间范围内的消费总额val m_agg = sum(col("final_total_amount")).as("m")//按用户id聚合获取RFMval rfm_data =dataSet.groupBy(col("user_id")).agg(r_agg,f_agg,m_agg)println("########计算RFM#############")rfm_data.show(false)/** 给RFM打分 (5分制) *///R_SCORE: 1-3天=5分,4-6天=4分,7-9天=3分,10-15天=2分,大于16天=1分val r_score = when(col("r")>=1&&col("r")<=3,5).when(col("r")>=4&&col("r")<=6,4).when(col("r")>=7&&col("r")<=9,3).when(col("r")>=10&&col("r")<=15,2).when(col("r")>=16,1).as("r_score")//F_SCORE: ≥100次=5分,80-99次=4分,50-79次=3分,20-49次=2分,小于20次=1分val f_score = when(col("f")>=100,5).when(col("f")>=80 && col("f")<=99,4).when(col("f")>=50 && col("f")<=79,3).when(col("f")>=20 && col("f")<=49,2).when(col("f")<20,1).as("f_score")//M_SCORE: ≥10000=5分,8000-10000=4分,5000-8000=3分,2000-5000=2分,<2000=1分val m_score = when(col("m")>=10000,5).when(col("m")>=8000 && col("m")<10000,4).when(col("m")>=5000 && col("m")<8000,3).when(col("m")>=2000 && col("m")<5000,2).when(col("m")<2000,1).as("m_score")val rfm_score = rfm_data.withColumn("r_score",r_score).withColumn("f_score",f_score).withColumn("m_score",m_score)println("###########R,F,M打分####################")rfm_score.show(false)//计算RFM的总分,权重根据实际业务进行更改val _rfm_w_score = (col("r_score")*0.6+col("f_score")*0.3+col("m_score")*0.1).as("rfm_score")val rfm_w_score = rfm_score.withColumn("rfm_score",_rfm_w_score)println("##########RFM的总分值###############")rfm_w_score.orderBy(desc("rfm_score")).show(false)val hive_rfm_w_score = rfm_w_score.select(col("user_id"),col("r"),col("f"),col("m"))println("##########准备写入到Hive数仓rfm表###############")hive_rfm_w_score.show(false)/** 打标签 *///重要价值用户  1//重要保持用户  2//一般价值用户  3//RFM_SCORE >= 9: 重要价值用户//RFM_SCORE >= 5 && RFM_SCORE < 9: 重要保持用户//RFM_SCORE < 5: 一般价值用户val tag_rule = when(col("rfm_score")>=9,1).when(col("rfm_score")>=5&&col("rfm_score")<9,2).when(col("rfm_score")<5,3)val _rfm_tag = rfm_w_score.withColumn("tag_rule",tag_rule)val rfm_tag = TagUtils.taggingByRule(_rfm_tag,"rfm客户模型")println("########RFM客户价值标签#############")val hive_rfm_tag = rfm_tag.select(col("user_id"),col("tag_name_cn").as("tag_id"),col("tag_name").as("tag_value"))hive_rfm_tag.show(false)dataSet}}

RFM模型与Spark实现相关推荐

  1. 企业级用户画像:开发RFM模型实例

    絮叨两句: 博主是一名数据分析实习生,利用博客记录自己所学的知识,也希望能帮助到正在学习的同学们 人的一生中会遇到各种各样的困难和折磨,逃避是解决不了问题的,唯有以乐观的精神去迎接生活的挑战 少年易老 ...

  2. python 估值模型_利用RFM模型建模,并通过聚类分析、分类,分别算出8中不同的价值会员...

    RFM-Clustering 利用RFM模型建模,并通过聚类分析.分类,分别算出8中不同的价值会员 RFM模型构建会员价值标签 R:最近一次消费(Recency) F:消费频率(Frequency) ...

  3. RFM模型分析与客户细分

    今天偶然看到沈浩老师的文章<数据挖掘应用案例:RFM模型分析与客户细分>(http://shenhaolaoshi.blog.sohu.com/201923838.html),感慨不少.这 ...

  4. r型聚类典型指标_聚类与RFM模型 —— 从5月的一道腾讯数据分析面试题说起

    作者:稀饭 本文约2200字,建议阅读12分钟. 5月份的时候曾经投过腾讯的数据分析实习,中午投的简历,午觉睡醒就被call,没有HR通知,南山必胜客直接就来技术面.当时准备的还不够充分,半小时后就感 ...

  5. 快速找出高价值用户,3分钟学会RFM模型分析

    在众多的客户关系管理分析模式中,应用最广泛的就是RFM模型,它可以通过一个客户的近期购买行为.购买的频率以及花了多少钱三项指标来描述客户的价值情况. RFM模型用户分群是介于千人千面的个性化运营和未加 ...

  6. 13.Excel业务建模——RFM模型

    文章目录 1.RFM模型介绍 1.1 基本简介 1.1.1 最近一次消费R 1.1.2 消费频率F 1.1.3 消费金额M 2.客户分类 3.实现步骤 4.用户分类模型RFM总结 5.分析报告 6.案 ...

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

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

  8. rfm模型分析与客户细分_如何使用基于RFM的细分来确定最佳客户

    rfm模型分析与客户细分 With some free time at hand in the midst of COVID-19 pandemic, I decided to do pro bono ...

  9. 电商用户行为分析与挖掘(MYSQL数据分析+SPSS构建RFM模型)

    前言 毫不夸张的说在中国除了婴幼儿及七八十以上的老年人,都有过网购经历.电商公司就如雨后春笋般迅速发展.了解用户的网购行为,有助于商家定品类,定营销方案等.利用数据分析与挖掘,争取做到比顾客自己还了解 ...

最新文章

  1. 串口服务器支持多台上位机,RS485多机通信一台上位机两台下位机问题,
  2. DOM修改元素的方法总结
  3. kubernetes的安装
  4. 模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇
  5. html5调用系统声音1s响一次_记录一次系统性能调优过程
  6. php alias 报错,PHP(FastCGI)在Nginx的alias下出现404错误的解决方法
  7. 存储服务器的操作系统,存储服务器是什么操作系统
  8. 探讨Netty获取并检查Websocket握手请求的两种方式
  9. java 注解报错_eclipse编译项目:Java @Override 注解报错的解决方法
  10. java try 性能损耗_Java 中的 try catch 影响性能吗?
  11. WIN32_FIND_DATA详解
  12. 红旗6.0 sp2 永中office2009不能启动的原因
  13. ibm主机安装服务器系统安装系统安装系统安装方法,IBM系列服务器安装操作系统安装方法.ppt...
  14. 苹果如何修改无线DNS服务器,苹果手机修改无线wifi的DNS是否能够提升网速?
  15. 802.11a/b/g/n/ac速率表
  16. 关于Win10资源管理器总是崩溃的问题解决方案
  17. 二本学生四年的求职经历
  18. 详细解析集成运算放大电路比例运算的工作原理
  19. 计算机能直接执行的语言程序是,计算机能够直接执行的程序是什么语言
  20. 在VMware上安装macOS

热门文章

  1. ReflectionTestUtils.invokeMethod方法的使用
  2. ie浏览器怎么打开html,win10ie浏览器不能打开html设置怎么办
  3. javaeye上对李刚的书的差评
  4. Unity 图形 - 摄像机
  5. 2021年金属非金属矿山井下电气考试内容及金属非金属矿山井下电气免费试题
  6. 维度表,实体表,事实表之间的关系
  7. tomcat加大内存配置
  8. 微信域名防封的方法以及技术原理
  9. VC6.0MFC下使用GDI++编译链接通不过的解决方案之一(syntax error : identifier 'Count')
  10. 高斯噪声和高斯白噪声相关介绍