客户细分帮助公司深入了解客户行为,并提供量身定制的服务以满足其需求。RFM 聚类是一种根据客户购买行为进行细分的强大方法。在尼日利亚金融科技平台 Cowrywise,我们使用 RFM 客户细分和 K-Means 聚类进行客户细分,以分析客户活动并提供个性化的金融解决方案。通过使用 RFM 指标,我们可以根据用户的消费习惯对其进行分类,并通过量身定制的产品增强他们的体验。
在尼日利亚金融科技平台 Cowrywise,我们正在使用 Metabase 可视化这些洞察,并通过结合以下方式提供解决方案:
- RFM(最近一次购买时间、购买频率和消费金额),
- 每日管理资产(AUM)指标,以及
- K-Means 聚类。
以下是关于它们的更多信息。
理解 RFM(最近一次购买时间、购买频率和消费金额)
RFM 的含义是指三个关键的客户参与度指标
- 最近一次购买时间(距上次交易的时间)
- 购买频率(进行的交易次数)
- 消费金额(在平台上消费的总金额)
为了计算 RFM 分数,我们为每个指标分配值。分数越高表示客户参与度越高。例如,昨天进行交易、交易频繁且消费金额较大的用户会获得更高的 RFM 分数。
以下是我们用于计算 RFM 分数的 Python 脚本
import pandas as pd
import datetime as dt
# Load transaction data
df = pd.read_csv("transactions.csv")
# Convert transaction_date to datetime
df["transaction_date"] = pd.to_datetime(df["transaction_date"])
# Calculate Recency, Frequency, and Monetary Value
snapshot_date = df["transaction_date"].max() + dt.timedelta(days=1)
df_rfm = df.groupby("user_id").agg({
"transaction_date": lambda x: (snapshot_date - x.max()).days,
"transaction_id": "count",
"amount": "sum"
}).reset_index()
# Rename columns
df_rfm.rename(columns={
"transaction_date": "Recency",
"transaction_id": "Frequency",
"amount": "MonetaryValue"
}, inplace=True)
# Print the first five rows of the RFM dataframe
print(df_rfm.head())
使用 AUM(管理资产)改进 RFM
虽然 RFM 客户细分是有效的,但它忽略了客户的投资行为。为了更全面地了解客户的投资习惯和行为,我们将每日管理资产(AUM)添加到 RFM 分数中。
AUM 是客户投资的资产总价值,除以他们开始投资以来的天数。以下是我们用于创建此混合指标的脚本
# Load AUM data
df_aum = pd.read_csv("aum.csv")
# Convert start_date to datetime
df_aum["start_date"] = pd.to_datetime(df_aum["start_date"])
# Calculate the number of days since the customer started investing
df_aum["InvestmentDays"] = (snapshot_date - df_aum["start_date"]).dt.days
# Calculate AUM per day
df_aum["AUMperDay"] = df_aum["aum"] / df_aum["InvestmentDays"]
# Merge RFM and AUM dataframes
df_hybrid = pd.merge(df_rfm, df_aum[["user_id", "AUMperDay"]], on="user_id", how="inner")
# Print the first five rows of the hybrid dataframe
print(df_hybrid.head())
使用 K-Means 聚类进行客户细分
计算 RFM 指标和 AUM 分数后,我们运行 K-Means 聚类进行客户细分,以将相似的客户分组。K-Means 聚类是一种机器学习算法,它根据共同特征将数据组织成 K 个聚类。为了找到正确的聚类数量,我们使用肘部法则,该方法可以确定添加更多聚类不再显著改善分组的点。
from sklearn.cluster import KMeans
# combine RFM and AUM data into a single dataframe
rfm_aum_data = pd.concat([rfm_scores, aum_scores], axis=1)
# determine optimal number of clusters using elbow method
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(rfm_aum_data)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
# fit k-means clustering to data
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(rfm_aum_data)
# assign clusters to each customer
customer_clusters = kmeans.predict(rfm_aum_data)
在 Metabase 中可视化客户细分
将每个客户分配到一个聚类后,您就可以开始在 Metabase 中可视化客户细分了!首先,请确保您拥有 Metabase 账户并已将 Metabase连接到您的数据源。连接后,请执行以下操作:
- 选择 + 新建 > 问题。
- 选择您的
customer_segmentation
表作为起点(或您存储rfm_score
、aum_per_day
和segment
字段的表的名称)。 - 编写查询后,点击可视化以创建您的可视化。
- 您可以使用查询构建器来筛选和汇总数据,然后选择您想要使用的可视化类型。例如,使用条形图显示客户在不同细分中的分布,或使用散点图显示 RFM 分数和每日 AUM 之间的关系。
- 当您获得一些有趣的结果时,点击保存按钮。
- 您可以将保存的问题添加到 Metabase 仪表盘中,并设置过滤器,以便人们可以按细分、日期范围或您选择的其他变量查看数据。