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-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 個群集中。在本例中,k 代表我們想要建立的客戶群組數量。我們將 RFM 和 AUM 資料合併到單一資料框架中。然後,我們使用手肘法來判斷資料的最佳群集數量。手肘法(如下例所示)涉及繪製群內平方和 (WCSS) 與群集數量的關係圖。我們在關係圖的「手肘」處選擇群集數量,此時新增更多群集並不會顯著減少 WCSS。以下是我們用來對資料執行 k-means 群集的指令碼。在我們的案例中,我們選擇四個群集作為最佳群集數量。我們將 k-means 群集演算法套用至我們的資料,並將每個客戶分配到一個群集。

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