使用Python进行RFM分析2025年1月5日 | 阅读 7 分钟 作为一名数据分析师、营销人员或项目经理,您深知数据驱动洞察的力量。使用 Python 有效地进行 RFM 分析可以成为这方面的游戏规则改变者。本指南旨在为您提供掌握客户数据全部力量所需的知识和工具。毕竟,您可以提供可操作的见解,将您的组织推向新的高度。在深入探讨之前,让我们先简要概述一下 RFM 分析。 ![]() 理解 RFM 分析RFM 方法被广泛用于对绩效分析进行分类。RFM 分析代表了近度、频率和货币分析,广泛用于根据客户的交易行为对客户进行细分。这是一份附带示例的分步指南。
通过分析每个客户的这三个指标,RFM 分析可以帮助企业识别各种客户细分,例如高价值客户、忠诚客户、有风险客户和休眠客户。这些细分客户可以针对其独特的特征和需求,通过特定的营销策略进行定位。RFM 分析提供了可操作的见解,使企业能够优化营销工作、提高客户保留率并最大化收入。 RFM 分析旨在将客户划分为不同的细分,例如高价值、中等价值或低价值客户。假设我们的公司名为“javaTpoint”,我们将对客户数据执行 RFM 分析。 现在我们理解了近度、频率和货币的价值,可以继续前进。 计算近度我们计算进行购买的客户的近度。近度是指自上次购买以来的天数。 导入必要的库 使用以下代码行读取下载的数据集。 查看数据框的头部。 完整代码输出 ![]() 说明 在上面的代码中,我们首先导入了必要的 pandas、numpy 和 datetime 模块。之后,代码从名为“RFM_Analysis.csv”的 CSV 文件读取数据到名为 'df' 的 Pandas DataFrame 中。 计算近度我们计算进行购买的客户的近度。近度是指自上次购买以来的天数。 示例 输出 Customer_Name Purchase_Date Recency 0 Aaron Ross 2024-11-05 56 1 Abigail Martin 2023-06-14 566 2 Addison Gomez 2024-08-25 128 3 Alexander Allen 2024-09-13 109 4 Alexander Powell 2024-12-11 20 ... ... ... ... 92 Victoria Foster 2023-08-01 518 93 William Clark 2024-07-07 177 94 William Ward 2024-01-10 356 95 Wyatt Gonzales 2023-07-17 533 96 Zoe Evans 2023-11-20 407 97 rows × 3 columns 说明 上面的代码将 DataFrame 中的 'Purchase_Date' 列转换为 datetime 格式,按 'Customer_Name' 对数据进行分组,查找每个客户的最大购买日期,根据最近的购买日期计算近度,并显示具有客户姓名及其相应近度值的 DataFrame。 计算频率接下来,计算每个客户的交易频率。 示例 输出 Customer_Name Frequency 0 Aaron Ross 1 1 Abigail Martin 1 2 Addison Gomez 1 3 Alexander Allen 1 4 Alexander Powell 1 说明 上面的代码计算 DataFrame 中每个唯一客户姓名的订单频率,删除重复行,按客户姓名对数据进行分组,计算每个客户的订单数量,重命名列,并显示显示客户姓名及其相应订单频率的 DataFrame。 计算货币价值通过汇总每个客户的总销售额来计算货币价值。 示例 输出 Customer_Name Monetary 0 Aaron Ross 70.25 1 Abigail Martin 5983.25 2 Addison Gomez 2887.62 3 Alexander Allen 4983.11 4 Alexander Powell 2355.69 说明 上面的代码将 DataFrame ('df') 中的 'Sales' 列乘以 'Quantity' 列,并将结果分配给另一个名为 'Total' 的列。然后,它按 'Customer Name' 对 DataFrame 进行聚合,计算每个客户的 'Total' 金额,并将结果存储在新 DataFrame ('monetary_df') 中。最后,它重命名 'CustomerName' 和 'Monetary' 列,并显示结果 DataFrame 的前几行。 合并所有列将近度、频率和货币列合并到一个 DataFrame 中。 示例 输出 Customer_Name Recency Frequency Monetary 0 Aaron Ross 56 1 70.25 1 Abigail Martin 566 1 5983.25 2 Addison Gomez 128 1 2887.62 3 Alexander Allen 109 1 4983.11 4 Alexander Powell 20 1 2355.69 说明 此代码根据 'Customer_Name' 列合并三个 DataFrame ('df_recency', 'frequency_df', 'monetary_df'),从而生成一个新 DataFrame ('rfm_df')。然后,它从合并后的 DataFrame 中删除 'Purchase_Date' 列,并显示前几行。 对客户进行排名根据他们的近度、频率和货币分数对客户进行标准化排名。 代码 输出 ![]() 说明 上面的代码计算 DataFrame 'rfm_df' 中近度、频率和货币值的排名。然后,它将这些排名标准化到 0 到 100 的尺度上。最后,它删除原始排名列,并显示修改后的 DataFrame 的前几行。 计算 RFM 分数根据每个变量的客户行为分配分数。
选择刻度您的刻度取决于您的客户群大小。
在这里,我们将使用 5 的刻度。用于计算 RFM 分数的公式是:0.15*近度分数 + 0.28*频率分数 + 0.57*货币分数 代码 输出 Customer_Name RFM_Score 0 Aaron Ross 3.54 1 Abigail Martin 3.01 2 Addison Gomez 3.48 3 Alexander Allen 3.49 4 Alexander Powell 3.57 ... ... ... 92 Victoria Foster 3.06 93 William Clark 3.43 94 William Ward 3.22 95 Wyatt Gonzales 3.05 96 Zoe Evans 3.16 97 rows × 2 columns 说明 上面的代码通过将近度、频率和货币的标准化排名与特定权重结合起来,为 DataFrame 'rfm_df' 中的每个客户计算 RFM 分数。然后,它将 RFM 分数乘以 0.05 进行缩放,四舍五入到小数点后两位,并选择 DataFrame 中前七个客户的 'Customer_Name' 和 'RFM_Score' 列。 根据 RFM 对客户进行评级根据细分,分配评级(例如,从 1 到 5)。
程序 输出 Customer_Name RFM_Score Customer_segment 0 Aaron Ross 3.54 Medium Value Customer 1 Abigail Martin 3.01 Medium Value Customer 2 Addison Gomez 3.48 Medium Value Customer 3 Alexander Allen 3.49 Medium Value Customer 4 Alexander Powell 3.57 Medium Value Customer ... ... ... ... 92 Victoria Foster 3.06 Medium Value Customer 93 William Clark 3.43 Medium Value Customer 94 William Ward 3.22 Medium Value Customer 95 Wyatt Gonzales 3.05 Medium Value Customer 96 Zoe Evans 3.16 Medium Value Customer 97 rows × 3 columns 说明 上面的代码基于 RFM 分数分析客户数据。它将客户细分(如“顶级客户”(分数较高)或“流失客户”(分数较低))分配给新的“Customer_segment”列,然后显示具有客户名称、分数和分配类别的输出。 可视化客户细分现在,我们将使用饼图在饼图中显示所有客户细分。您可以使用 Python 中的 matplotlib 或 seaborn 可视化库来实现此目的。这里我们使用的是 maplotlib。 代码 输出 ![]() 说明 上面的代码使用 Matplotlib 可视化库创建了一个饼图,显示了客户在不同细分之间的分布。它使用 value_counts() 方法计算每个细分中的客户数量。然后,它绘制一个饼图,其中包含细分标签,并在饼图切片中显示客户百分比。然后使用 plt.show() 显示饼图。 结论总而言之,使用 Python 进行的 RFM 分析为企业提供了一个强大的工具来理解客户行为并优化营销策略。通过利用 Python 的数据分析和可视化功能,组织可以从客户数据中提取有价值的见解,有效地细分客户群,并实施有针对性的方法来增强客户参与度并推动业务增长。 |
我们请求您订阅我们的新闻通讯以获取最新更新。