RFM模型与Spark实现

article/2025/10/22 18:23:51

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}}

http://chatgpt.dhexx.cn/article/pLrq7kGf.shtml

相关文章

RFM模型实战

什么是RFM模型 RFM模型是衡量客户价值和客户创利能力的重要工具。该模型通过一个客户的近期购买行为、购买的总体频率&#xff0c;以及花了多少钱三项指标来描述该客户的价值状况。 如何构建RFM模型 最近一次消费 (Recency) 最近一次消费意指上一次购买的时间——用户上一次…

RFM模型总结

RFM模型 1. 什么是RFM模型&#xff1f;2. RFM有什么作用&#xff1f;3. 怎么构建RFM模型 1. 什么是RFM模型&#xff1f; RFM名词解释 R&#xff1a;最近一次消费&#xff08;recency&#xff09; 代表用户距离当前最后一次消费的时间 反向值 R越大 用户价值越低F&#xff1a;消…

tableau-RFM模型

解释 R-最近一次消费&#xff08;Recency&#xff09;&#xff0c;通常影响因素为店铺的记忆强度&#xff0c;接触机会的多少&#xff0c;回购周期等。这个指标会用于决定客户接触策略&#xff0c;接触频次&#xff0c;刺激力度等。 F-消费频率&#xff08;Frequency&#xf…

【笔记】电商RFM模型

一、理论基础 &#xff08;1&#xff09;RFM模型 R&#xff1a;Recency 最近一次购买–付款日期-按照买家昵称 groupby 取付款日期的信息 F&#xff1a;Frequency 购买频次-付款日期-按照买家昵称 groupby 取付款曰期次数 M&#xff1a;Monetary 购买金额-实付金额-按照买家…

RFM模型分析

1.RFM的重要意义 RFM模型是衡量用户价值和用户创利能力的重要工具和手段 通过用户的近期交易行为、交易频次以及交易金额三个指标描述客户价值 指标解释意义 R(Recency) 用户最近一次交易的时间间隔R值越大&#xff0c;表示越久没有发生交易 F(Frequency) 用户在最近一段…

RFM 模型

RFM 模型 顾客价值分析 顾客价值分析 由于激烈的市场竞争&#xff0c;各个公司相继推出了多样灵活的优惠方式来吸引更多的客户。 对一个没有购买力的顾客&#xff0c;你打电话推销优惠活动毫无作用&#xff0c;可一个高价值顾客&#xff0c;会说有优惠活动怎么不通知我呢&…

数据分析八大模型:详解RFM模型

大家好&#xff0c;我是爱学习的小xiong熊妹。 今天跟大家分享的是一个经常被提及&#xff0c;但是价值被严重低估的模型&#xff1a;RFM模型。 一、RFM的基本思路 RFM模型由三个基础指标组成&#xff1a; R&#xff1a;最近一次消费至今的时间 F&#xff1a;一定时间内重复…

线性代数:如何求特征值和特征向量?

一、特征值和特征向量的定义 1 首先让我们来了解一下特征值和特征向量的定义&#xff0c;如下&#xff1a; 2 特征子空间基本定义&#xff0c;如下&#xff1a; END 二、特征多项式 1 特征多项式的定义&#xff0c;如下&#xff1a; 2 推论&#xff1a;n阶方阵A可逆的充…

如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量

利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了好久 1.我要求特征值和特征向量. 2.找到一种算法QR分解矩阵求解特征值 3.QR矩…

【考研线代】五. 特征值和特征向量

文章目录 第五章 特征值和特征向量5.1 特征值&#xff0c;特征向量5.1.1 概念5.1.2 性质 & 定理 & 推论 ⭐5.1.3 求特征值和特征向量的方法数值型矩阵抽象型矩阵巧解矩阵特征值方法⭐ 5.2 相似矩阵5.2.1 概念5.2.2 性质5.2.3 求可逆矩阵P使得A可相似对角化方法 5.3 实对…

线性代数特征值

特征值的性质&#xff1a; 下面是例题&#xff1a; 要注意单位阵的特征值是替换成1 注意下面两个&#xff1a; 例题5&#xff1a; 仔细看解题过程。 例题6&#xff1a; 运用了特征值相加等于矩阵主对角线元素之和 、特征值相乘等于矩阵的行列式、求特征值的定义。列出以上三…

eigen求特征值和特征向量

Eigen::Matrix2d matrix_22;matrix_22 << 2,3,2,1;cout << "matrix \n"<< matrix_22<<endl;//Eigen::SelfAdjointEigenSolver<Eigen::Matrix2d> eigen_solver1 ( matrix_22 );/这句是啥不清楚Eigen::EigenSolver<Eigen::Matrix2d&…

特征多项式法(characteristic polynomial )求特征值(结合lanczos和householder)(python,数值积分)

第三十四篇 特征多项式法求对称三对角矩阵的特征值 特征多项式 在之前的篇章中介绍过的&#xff0c;一个矩阵的特征值可以形成一个n阶多项式的根&#xff0c;称为“特征多项式”。线性方程的求解方法可以用来求这些根&#xff0c;详情可以翻看我之前写过的文章。但这并不是一…

Matlab求特征值和特征向量 + find函数的基本简单用法

A[1 5 4; 3 2 1;5 6 6] 计算矩阵A的特征值和特征向量的函数是eig&#xff08;A&#xff09;&#xff0c;常用方法为&#xff1a; 1.求矩阵的特征值 每一列有一个特征值&#xff0c;可知A有三个特征值 设矩阵A的全部特征值构成向量E Eeig(A) 执行选中内容命令行窗口如下&…

Eigen求特征值与特征向量

这里列举三种方式求矩阵的特征值与特征向量 #include <stdio.h> #include <stdlib.h> #include<Eigen/Eigen>using namespace std; using namespace Eigen;void main() {MatrixXd m(3, 3);m << 1,-2,2,-2,-2,4,2,4,-2;cout << m << endl …

matlab 求特征值的命令,matlab怎么求特征值

matlab怎么求特征值&#xff1f; 求矩阵的特征值和特征向量方法 方法/步骤 第一步我们首先需要知道计算矩阵的特征值和特征向量要用eig函数&#xff0c;可以在命令行窗口中输入help eig&#xff0c;查看一下eig函数的用法&#xff0c;如下图所示&#xff1a; 第二步在命令行窗口…

转: 特征值和特征向量--1

转&#xff1a;https://jingyan.baidu.com/article/27fa7326afb4c146f8271ff3.html 一、特征值和特征向量的定义 1 首先让我们来了解一下特征值和特征向量的定义&#xff0c;如下&#xff1a; 2 特征子空间基本定义&#xff0c;如下&#xff1a; END 二、特征多项式 1 特征多项…

线性代数(8):特征值、特征向量和相似矩阵

一、特征值和特征向量 &#xff08;2&#xff09;定义 有矩阵 A 为 n 阶矩阵&#xff0c;Ax λx &#xff08; λ 为一个实数&#xff0c;x为 n 维非零列向量 &#xff09;&#xff0c;则称 λ 为方阵 A 的特征值&#xff0c; x 为特征向量&#xff1b; &#xff08;2&#x…

mosquitto入门教程

参考大神的博客&#xff1a; http://mqtt.org/ MQTT 是一个轻型协议&#xff0c;使用基于 TCP/IP 协议的发布/订阅消息转发模式&#xff0c;专门用于机器对机器 (M2M) 通信。 MQTT 协议的中心是 MQTT 服务器或代理 (broker) &#xff0c;支持发布程序和订阅程序进行访问&…

mosquitto源码分析(一)

关于mqtt、mosquito的技术交流&#xff0c;可入群&#xff1a;221779856 本文由逍遥子撰写&#xff0c;转发请标注原址&#xff1a; http://blog.csdn.net/houjixin/article/details/21461225 一、 Mosquitto简介 mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理…