pyspark计算RFM模型
时间: 2023-08-03 18:16:20 浏览: 122
Python pandas RFM模型应用实例详解
RFM模型是一种用于客户价值分析的常用工具,它根据客户最近一次购买时间(Recency)、购买频率(Frequency)和购买金额(Monetary)三个维度来对客户进行分类。在pyspark中,我们可以使用Spark SQL和DataFrame API来计算RFM模型。
首先,读入包含客户购买信息的数据集,并将其转换成DataFrame格式。假设数据集包含以下列:customer_id、transaction_date、transaction_amount。
```python
from pyspark.sql.functions import *
from pyspark.sql.window import Window
# 读入数据集
df = spark.read.csv("path/to/dataset", header=True, inferSchema=True)
# 计算RFM模型
rfm = df.groupBy("customer_id") \
.agg(max("transaction_date").alias("recency"),
count("transaction_amount").alias("frequency"),
sum("transaction_amount").alias("monetary"))
# 计算最近一次购买时间与当前时间的差值(以天为单位)
rfm = rfm.withColumn("recency_days", datediff(current_date(), col("recency")))
# 计算频率和金额的排名
w1 = Window.orderBy(desc("frequency"))
w2 = Window.orderBy(desc("monetary"))
rfm = rfm.withColumn("frequency_rank", rank().over(w1)) \
.withColumn("monetary_rank", rank().over(w2))
# 计算RFM得分
rfm = rfm.withColumn("recency_score", when(col("recency_days") <= 30, 5)
.when((col("recency_days") > 30) & (col("recency_days") <= 90), 4)
.when((col("recency_days") > 90) & (col("recency_days") <= 180), 3)
.when((col("recency_days") > 180) & (col("recency_days") <= 365), 2)
.otherwise(1)) \
.withColumn("frequency_score", when(col("frequency_rank") <= 20, 5)
.when((col("frequency_rank") > 20) & (col("frequency_rank") <= 50), 4)
.when((col("frequency_rank") > 50) & (col("frequency_rank") <= 100), 3)
.when((col("frequency_rank") > 100) & (col("frequency_rank") <= 200), 2)
.otherwise(1)) \
.withColumn("monetary_score", when(col("monetary_rank") <= 20, 5)
.when((col("monetary_rank") > 20) & (col("monetary_rank") <= 50), 4)
.when((col("monetary_rank") > 50) & (col("monetary_rank") <= 100), 3)
.when((col("monetary_rank") > 100) & (col("monetary_rank") <= 200), 2)
.otherwise(1))
# 计算总得分
rfm = rfm.withColumn("rfm_score", col("recency_score") + col("frequency_score") + col("monetary_score"))
```
最后,我们可以根据RFM得分对客户进行分类,例如将得分在10-15分之间的客户分类为“重要保持”(important retain)类别,将得分在5-9分之间的客户分类为“重点发展”(focus development)类别等等。
以上就是在pyspark中计算RFM模型的一个示例。当然,具体的RFM模型计算方式可能因不同业务场景而有所不同,需要根据实际情况进行调整。
阅读全文