上一篇博客,已经为大家介绍了基于RFM(用户价值模型)的挖掘型标签开发过程(👉大数据【企业级360°全方位用户画像】基于RFM模型的挖掘型标签开发),本篇博客,我们来学习基于RFE(用户活跃度模型)的挖掘型标签开发。
RFE模型引入
在正式开始实现需求之前,肯定要给各位朋友们解释下。
RFE模型可以说是RFM模型的变体 。RFE模型基于用户的普通行为(非转化或交易行为)产生,它跟RFM类似都是使用三个维度做价值评估。
RFE详解
RFE 模型是根据会员最近一次访问时间R( Recency)、访问频率 F(Frequency)和页面互动度 E(Engagements)计算得出的RFE得分。 其中:
- 最近一次访问时间 R( Recency): 会员最近一次访问或到达网站的时间。
- 访问频率 F( Frequency):用户在特定时间周期内访问或到达的频率。
- 页面互动度 E( Engagements):互动度的定义可以根据不同企业或行业的交互情况而定,例如可以定义为页面 浏览时间、浏览商品数量、视频播放数量、点赞数量、转发数量等 。
在RFE模型中,由于不要求用户发生交易,因此可以做未发生登录、 注册等匿名用户的行为价值分析, 也可以做实名用户分析。该模型常用来做用户活跃分群或价值区分, 也可用于内容型(例如论坛、新闻、资讯等)企业的会员分析。
RFM和 RFE模型的实现思路相同, 仅仅是计算指标发生变化。 对于RFE的数据来源, 可以从企业自己监控的用户行为日志获取,也可以从第三方网站分析工具获得。
基于RFE模型的实践应用
在得到用户的RFE得分之后, 跟 RFM 类似也可以有两种应用思路:
1:基于三个维度值做用户群体划分和解读,对用户的活跃度做分析。 RFE得分为 313 的会员说明其访问频率低, 但是每次访问时的交互都非常不错, 此时重点要做用户回访频率的提升,例如通过活动邀请、 精准广告投放、会员活动推荐等提升回访频率。
2:基于RFE的汇总得分评估所有会员的活跃度价值,并可以做活跃度排名; 同时,该得分还可以作为输入维 度跟其他维度一起作为其他数据分析和挖掘模型的输入变量,为分析建模提供基础。
比如:
- 6忠诚 (1天内访问2次及以上,每次访问页面不重复)
- 5活跃 (2天内访问至少1次)
- 4回流 (3天内访问至少1次)
- 3新增 (注册并访问)
- 2不活跃 (7天内未访问)
- 1流失 (7天以上无访问)
具体代码实现
大家看到这里,应该都发现了,RFE模型和之前我们介绍过的RFM模型非常类似,只不过一个是用户价值模型,一个是用户活跃度模型。
因为同为挖掘型标签的开发,所以流程上大部分的内容都是相似的,下面博主就不详细分步骤介绍了😅,关于代码中有任何的疑惑,可以私信联系我哟~
import com.czxy.base.BaseModel
import org.apache.spark.ml.clustering.{
KMeans, KMeansModel}
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.sql.expressions.UserDefinedFunction
import org.apache.spark.sql.{
Column, DataFrame, SparkSession, functions}
import scala.collection.immutable
/*
* @Author: Alice菌
* @Date: 2020/6/24 08:25
* @Description:
用户的活跃度标签开发
*/
object RFEModel extends BaseModel{
override def setAppName: String = "RFEModel"
override def setFourTagId: String = "176"
override def getNewTag(spark: SparkSession, fiveTagDF: DataFrame, hbaseDF: DataFrame): DataFrame = {
// 展示MySQL的五级标签数据
fiveTagDF.show()
//+---+----+
//| id|rule|
//+---+----+
//|177| 1|
//|178| 2|
//|179| 3|
//|180| 4|
//+---+----+
// 展示HBase中的数据
hbaseDF.show(false)
//+--------------+--------------------+-------------------+
//|global_user_id| loc_url| log_time|
//+--------------+--------------------+-------------------+
//| 424|http://m.eshop.co...|2019-08-13 03:03:55|
//| 619|http://m.eshop.co...|2019-07-29 15:07:41|
//| 898|http://m.eshop.co...|2019-08-14 09:23:44|
//| 642|http://www.eshop....|2019-08-11 03:20:17|
//RFE三个单词
//最近一次访问时间R
val recencyStr: String = "recency"
//访问频率 F
val frequencyStr: String = "frequency"
//页面互动度 E
val engagementsStr: String = "engagements"
// 特征单词
val featureStr: String = "feature" // 向量
val predictStr: String = "predict" // 分类
// 计算业务数据
// R(会员最后一次访问或到达网站的时间)
// F(用户在特定时间周期内访问或到达的频率)
// E(页面的互动度,注意:一个页面访问10次,算1次)
// 引入隐式转换
import spark.implicits._
//引入java 和scala相互转换
import scala.collection.JavaConverters._
//引入sparkSQL的内置函数
im