Chevron Left

查看所有社区故事

使用 RFM、AUM 和 K-means 聚类进行客户细分

2025 年 2 月 1 日

作者

Uchechukwu Emmanuel

Cowrywise

photo of Uchechukwu Emmanuel

Uchechukwu 是 Cowrywise 的一名软件工程师和技术作家,Cowrywise 是一家致力于为非洲人实现财富管理数字化的金融科技公司。他对数据工程和机器学习有着浓厚的兴趣,并乐于分享这些主题的见解。您可以在 Twitter @onlyoneuche领英上与他联系。

客户细分帮助公司深入了解客户行为,并提供量身定制的服务以满足其需求。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连接到您的数据源。连接后,请执行以下操作:

  1. 选择 + 新建 > 问题
  2. 选择您的 customer_segmentation 表作为起点(或您存储 rfm_scoreaum_per_daysegment 字段的表的名称)。
  3. 编写查询后,点击可视化以创建您的可视化。
  4. 您可以使用查询构建器来筛选和汇总数据,然后选择您想要使用的可视化类型。例如,使用条形图显示客户在不同细分中的分布,或使用散点图显示 RFM 分数和每日 AUM 之间的关系。
  5. 当您获得一些有趣的结果时,点击保存按钮。
  6. 您可以将保存的问题添加到 Metabase 仪表盘中,并设置过滤器,以便人们可以按细分、日期范围或您选择的其他变量查看数据。

作者

Uchechukwu Emmanuel

Cowrywise

photo of Uchechukwu Emmanuel

Uchechukwu 是 Cowrywise 的一名软件工程师和技术作家,Cowrywise 是一家致力于为非洲人实现财富管理数字化的金融科技公司。他对数据工程和机器学习有着浓厚的兴趣,并乐于分享这些主题的见解。您可以在 Twitter @onlyoneuche领英上与他联系。

您可能也喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据提供可靠指标

Frédéric Vion

Subclic

您可能也喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据提供可靠指标

Frédéric Vion

Subclic

© . All rights reserved.