使用Python进行RFM分析

使用Python进行RFM分析

在这篇文章中,我们将看到使用Python的Recency, Frequency, Monetary value分析。但首先,让我们简单了解一下RFM分析。

什么是RFM分析?

RFM是指经常性、频率、货币价值。在商业分析中,我们经常使用这个概念将客户分为不同的部分,如高价值客户、中价值客户或低价值客户,以及类似的许多其他客户。

让我们假设我们是一家公司,我们的公司名称是geek,让我们对我们的客户进行RFM分析

1.经常性。客户最近与我们进行了多少次交易
2.频率。客户从我们这里订购/购买某种产品的频率是多少?
3.货币。客户花多少钱从我们这里购买产品。

开始

加载必要的库和数据

这里我们将导入所需的模块(pandas、DateTime和NumPy),然后读取数据框中的数据。

使用的数据集: RFM

# importing necessary libraries
import pandas as pd
import datetime as dt
import numpy as np
 
# importing the data
df = pd.read_excel( < my excel file location > )
df.head()
Python

使用Python进行RFM分析

计算过去的时间

在这里,我们计算的是曾在某公司购买过的客户的经常性。

df_recency = df.groupby(by='Customer Name',
                        as_index=False)['Order Date'].max()
df_recency.columns = ['CustomerName', 'LastPurchaseDate']
recent_date = df_recency['LastPurchaseDate'].max()
df_recency['Recency'] = df_recency['LastPurchaseDate'].apply(
    lambda x: (recent_date - x).days)
df_recency.head()
Python

使用Python进行RFM分析

计算频率

我们在这里计算的是客户从公司订购/购买某种产品的频繁交易频率。

frequency_df = df.drop_duplicates().groupby(
    by=['Customer Name'], as_index=False)['Order Date'].count()
frequency_df.columns = ['CustomerName', 'Frequency']
frequency_df.head()
Python

使用Python进行RFM分析

计算货币价值

这里我们计算的是客户从公司购买产品所花费的货币价值。

df['Total'] = df['Sales']*df['Quantity']
monetary_df = df.groupby(by='Customer Name', as_index=False)['Total'].sum()
monetary_df.columns = ['CustomerName', 'Monetary']
monetary_df.head()
Python

使用Python进行RFM分析

在一个数据框架中合并所有三栏

在这里,我们使用合并函数将所有的数据框架列合并到一个实体中,以显示经常性、频率、货币价值。

rf_df = df_recency.merge(frequency_df, on='CustomerName')
rfm_df = rf_df.merge(monetary_df, on='CustomerName').drop(
    columns='LastPurchaseDate')
rfm_df.head()
Python

使用Python进行RFM分析

根据客户的经常性、频率和货币分值对其进行排名

在这里,我们将一个公司内的客户排名归一化,以分析排名。

rfm_df['R_rank'] = rfm_df['Recency'].rank(ascending=False)
rfm_df['F_rank'] = rfm_df['Frequency'].rank(ascending=True)
rfm_df['M_rank'] = rfm_df['Monetary'].rank(ascending=True)
 
# normalizing the rank of the customers
rfm_df['R_rank_norm'] = (rfm_df['R_rank']/rfm_df['R_rank'].max())*100
rfm_df['F_rank_norm'] = (rfm_df['F_rank']/rfm_df['F_rank'].max())*100
rfm_df['M_rank_norm'] = (rfm_df['F_rank']/rfm_df['M_rank'].max())*100
 
rfm_df.drop(columns=['R_rank', 'F_rank', 'M_rank'], inplace=True)
 
rfm_df.head()
Python

使用Python进行RFM分析

计算RFM分数

RFM得分是根据经常性、频率、货币价值的正常化等级来计算的。基于这个分数,我们对客户进行划分。在这里,我们以5分制对他们进行评分。用于计算RFM分数的公式是:0.15经常性分数+0.28频率分数+0.57*货币分数

rfm_df['RFM_Score'] = 0.15*rfm_df['R_rank_norm']+0.28 * \
    rfm_df['F_rank_norm']+0.57*rfm_df['M_rank_norm']
rfm_df['RFM_Score'] *= 0.05
rfm_df = rfm_df.round(2)
rfm_df[['CustomerName', 'RFM_Score']].head(7)
Python

使用Python进行RFM分析

根据RFM得分对客户进行评级

  • RFM评分>4.5 : 顶级客户
  • 4.5 > RFM得分 > 4 : 高价值客户
  • 4>RFM得分>3 : 中等价值客户
  • 3>rfm得分>1.6 : 低价值客户
  • rfm评分<1.6 :失去客户
rfm_df["Customer_segment"] = np.where(rfm_df['RFM_Score'] >
                                      4.5, "Top Customers",
                                      (np.where(
                                        rfm_df['RFM_Score'] > 4,
                                        "High value Customer",
                                        (np.where(
    rfm_df['RFM_Score'] > 3,
                             "Medium Value Customer",
                             np.where(rfm_df['RFM_Score'] > 1.6,
                            'Low Value Customers', 'Lost Customers'))))))
rfm_df[['CustomerName', 'RFM_Score', 'Customer_segment']].head(20)
Python

使用Python进行RFM分析

视觉化的客户群体

在这里,我们将使用饼状图来显示所有细分的客户。

plt.pie(rfm_df.Customer_segment.value_counts(),
        labels=rfm_df.Customer_segment.value_counts().index,
        autopct='%.0f%%')
plt.show()
Python

使用Python进行RFM分析

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册