RFM模型是指根据最近购买时间(Recency)、购买频率(Frequency)和购买金额(Monetary)等指标对顾客进行分类的一种营销分析模型。在pyspark中,我们可以使用DataFrame进行数据处理和分析。
以下是一个简单的RFM模型示例,假设我们有一个顾客购买记录的DataFrame,结构如下:
+--------+----------+-------+--------+
| Date | Customer |Amount | Product|
+--------+----------+-------+--------+
|2021-01-01| A | 100 | X |
|2021-01-05| B | 50 | Y |
|2021-01-08| A | 80 | Z |
|2021-01-10| C | 150 | X |
|2021-01-15| B | 120 | Z |
|2021-02-01| A | 200 | Y |
|2021-02-05| C | 90 | X |
|2021-02-10| B | 70 | Y |
|2021-02-12| A | 50 | Z |
|2021-02-15| A | 120 | X |
+--------+----------+-------+--------+
我们可以根据顾客的购买行为计算出他们的RFM三个指标作为特征,具体代码如下:
import pyspark.sql.functions as F
# 计算每个顾客的Recency指标
recency_df = df.groupBy("Customer").agg(
F.max("Date").alias("last_date"),
F.datediff(F.current_date(), F.max("Date")).alias("recency")
)
# 计算每个顾客的Frequency指标
frequency_df = df.groupBy("Customer").agg(
F.countDistinct("Date").alias("frequency")
)
# 计算每个顾客的Monetary指标
monetary_df = df.groupBy("Customer").agg(
F.sum("Amount").alias("monetary")
)
# 将三个指标合并到一张表中
rfm_df = recency_df.join(frequency_df, "Customer").join(monetary_df, "Customer")
rfm_df.show()
# 输出结果
+--------+----------+-------+--------+
|Customer| last_date|recency|frequency|monetary|
+--------+----------+-------+---------+-------+
| A|2021-02-15| 11| 4| 550|
| B|2021-02-10| 16| 3| 240|
| C|2021-02-05| 21| 2| 240|
+--------+----------+-------+---------+-------+
通过计算每个顾客的Recency、Frequency和Monetary指标,我们将顾客分为了三个群体,并可以根据不同的RFM群体制定营销策略,例如:
-
RFM群体为"111":最近购买、购买频率和购买金额都很高的顾客,应该推送高价值商品或优惠券等奖励。
-
RFM群体为"311":最近购买虽然不太新,但购买频率和金额都很高的顾客,应该推送商品组合或打包促销等奖励。
-
RFM群体为"333":最近购买较旧且购买频率和金额都不高的顾客,需要加强促销、提供个性化推荐等手段来留住这部分客户。