Chevron Left

查看所有社区故事

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

2023 年 4 月 12 日

贡献者

Uchechukwu Emmanuel

Cowrywise

photo of Uchechukwu Emmanuel

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

客户细分有助于公司深入了解客户的行为,并定制服务以满足他们的需求。在尼日利亚金融科技平台 Cowrywise,我们正在使用 Metabase 来可视化这些见解,并通过以下组合提供解决方案:

  • RFM(最近一次消费、消费频率和消费金额),
  • 每日 AUM(资产管理规模)指标,以及
  • K-均值聚类。

了解 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 均值聚类对客户进行分组

一旦计算出 RFM 和 AUM 分数,我们使用 k 均值聚类根据这些指标对客户进行分组。k 均值聚类是一种无监督机器学习算法,它根据数据点的相似性将数据点分组到 k 个聚类中。在本例中,k 代表我们要创建的客户细分数量。我们将 RFM 和 AUM 数据合并到一个数据帧中。然后我们使用 肘部法则 来确定我们数据的最佳聚类数量。肘部法则(在下面的示例中使用)涉及绘制聚类内平方和 (WCSS) 与聚类数量的关系图。我们在图的“肘部”选择聚类数量,在该位置添加更多聚类不会显着减少 WCSS。以下是我们用于对数据执行 k 均值聚类的脚本。在我们的案例中,我们选择四个聚类作为最佳聚类数量。我们将 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 上 @onlyoneucheLinkedin 上与他联系。

您可能还会喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据交付可信赖的指标

Frédéric Vion

Subclic

数据驱动的产品管理

Victor Bolu

WebAutomation

您可能还会喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据交付可信赖的指标

Frédéric Vion

Subclic

数据驱动的产品管理

Victor Bolu

WebAutomation