综上所述,我们可以将计算PSM的目标进一步变成计算以下四个数据,只要将它们计算出来,PSM就迎刃而解。
优惠次数
总购买次数
优惠总金额
应收总金额
前三个数据,我们可以提供统计型函数计算得出, 而 应收总金额= 优惠金额 + 成交金额 这一点我们明确了之后,就可以很好的上手代码了。
业务代码
算上这次,博主已经是第三次开发挖掘型标签了。所以就不单独把每一步具体实现的业务拿出来慢慢叙述了。更多的细节已经每步实现的效果已经用注释的方式贴在代码中了,有兴趣尝试的朋友,或者想要借鉴结果的朋友可以一睹代码究竟。
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._
import org.apache.spark.sql.expressions.UserDefinedFunction
import scala.collection.immutable
/\*
\* @Author: Alice菌
\* @Date: 2020/6/26 11:17
\* @Description:
基于PSM模型,对用户的价格敏感度进行挖掘
\*/
object PSMModel extends BaseModel {
override def setAppName: String = "PSMModel"
override def setFourTagId: String = "181"
override def getNewTag(spark: SparkSession, fiveTagDF: DataFrame, hbaseDF: DataFrame): DataFrame = {
// 五级标签的数据
fiveTagDF.show()
//+---+----+
//| id|rule|
//+---+----+
//|182| 1|
//|183| 2|
//|184| 3|
//|185| 4|
//|186| 5|
//+---+----+
// HBase的数据
hbaseDF.show()
//+---------+--------------------+-----------+---------------+
//| memberId| orderSn|orderAmount|couponCodeValue|
//+---------+--------------------+-----------+---------------+
//| 13823431|gome\_792756751164275| 2479.45| 0.00|
//| 4035167|jd\_14090106121770839| 2449.00| 0.00|
//| 4035291|jd\_14090112394810659| 1099.42| 0.00|
//| 4035041|amazon\_7877495617...| 1999.00| 0.00|
// tdonr 优惠订单占比(优惠订单数 / 订单总数)
// adar 平均优惠金额占比(平均优惠金额 / 平均每单应收金额)
// tdar 优惠金额占比(优惠总金额 / 订单总金额)
//psm = 优惠订单占比 + 平均优惠金额占比 + 优惠总金额占比
//只需要求取下面的字段,即可获取到最终的结果
//优惠次数
//总购买次数
//优惠总金额
//应收总金额 = 优惠金额+成交金额
// 引入隐式转换
import spark.implicits._
//引入java 和scala相互转换
import scala.collection.JavaConverters._
//引入sparkSQL的内置函数
import org.apache.spark.sql.functions._
// 优惠次数
var preferentialCount:String = "preferential"
// 订单总数
var orderCount:String = "orderCount"
// 总优惠金额
var couponCodeValue:String = "couponCodeValue"
// 应收总金额
var totalValue:String = "totalValue"
// 优惠次数
var getPreferentialCount:Column= count(