Skip to content
Last updated

RFM分析

Recency(最終購入日)、Frequency(購入頻度)、Monetary Value(購入金額)(RFM)は、企業の顧客ベースを購入パターンでセグメント化するマーケティング分析モデルです。具体的には、顧客のRecency(最後に購入してからの経過時間)、Frequency(購入頻度)、Monetary Value(支出金額)を評価します。Recency、Frequency、Monetary Valueのそれぞれに対して分位数によるランキングが実行されます。顧客はk-meansアルゴリズムを使用してRFMスコアによってクラスタリングされ、ロイヤリスト、チャンピオン、失われた顧客などのカテゴリに分類されます。

想定される入力

このノートブックは、input_table オプションで指定されたトランザクションテーブルに対してRFM分析を実行します。想定される入力テーブルのスキーマは、パラメータ aggregated_input に依存します。

aggregated_inputFalse に設定されている場合、input_table のスキーマは次のように想定されます:

usertstampamount
31052859682011-04-05115
18509857342011-11-231037
2743828082011-04-2517
3582731442011-04-0260
.........

各ユーザーに対して、

  • Recencyは最新のtstampからの経過日数によって定義されます
  • Frequencyはトランザクション数によって定義されます
  • Monetaryは合計金額によって定義されます

Recencyを定義するための基準日として、input_table 内の最大 tstamp 値が使用されます。

aggregated_inputTrue に設定されている場合、input_table のスキーマは次のように想定されます:

userrecencyfrequencymonetary_value
3105285968103200.12
1850985734205500.3
27438280830150.4
.........

aggregated_inputがFalseの場合、欠損値処理が実行されます。`aggregated_inputがTrueの場合、欠損値処理は実行されないため、事前に自分で前処理を行う必要があります。

想定される結果

recencyfrequencymonetary_value のそれぞれに対して分位数によるランキングが実行されます。r_quartile/f_quartile/m_quartileの分位数ランクは1から4の範囲で、値が高いほど良好です。RFMスコアは (r_quartile + f_quartile + m_quartile) / 3 によって定義されます。

サンプル output_table

61612318144115314R3F1M42.6667Promising0R3F2M2
9549322781456232R2F3M22.3333Need attention1R1F1M1
21495332662770123R1F2M32.0High Value Sleeping0R3F2M2
39408329094893244R2F4M43.3333Cannot lose them0R3F2M2
8120321651056211R2F1M11.3333Hibernating1R1F1M1
4511038182133111R1F1M11.0Lost customers1R1F1M1
....................................
userrecencyfrequencymonetary_valuer_quartilef_quartilem_quartilerfm_quartilerfm_scorerfm_segmentrfm_cluster_idrfm_cluster_rank

ユーザーはk-meansアルゴリズムを使用してRFMスコアによってクラスタリングされます。rfm_cluster_rank はクラスタの特性を説明します。クラスタサイズが3の場合、クラスタ R3F3M3recencyfrequencymonetary_value が高く、有望なクラスタであることを表します。一方、R1F1M1 はrecency、frequency、monetary_values が低いことを意味します。

最適なクラスタ数は min_clusters から max_clusters の範囲で自動的に計算されます。num_clusters オプションを設定することで、この計算を上書きできます。

audience_name が指定されている場合、output_table 内の recency、frequency、monetary_values、r_quartile、f_quartile、m_quartile、rfm_score、rfm_segment、rfm_cluster_rank がマスターセグメントの属性列として追加され、rfm_segmentrfm_cluster_rank を使用したセグメントが定義されます。

rfm_segment の名前は、複数のプレイヤーによって使用される業界標準の命名規則に従います。rfm_segment の命名規則については、このツリーマップと疑似コードを参照してください。

10のRFMセグメントの説明については、次の表を参照してください。

セグメント名説明RFM分位数値
Champions理想的な顧客。最近購入し、頻繁に購入し、最も多く支出しています。R4F4M4
Loyal Customers多額の支出をしています。プロモーションに反応が良い。これらは非常にアクティブで価値の高い顧客です。R4F4M3、R4F3M4、R4F3M3、R3F4M4、R3F4M3、R3F3M4、R3F3M3
Potential Loyalists最近の顧客で、適切な金額を支出し、複数回購入しています。R4F4M2、R4F3M2、R4F2M4、R4F2M3、R4F2M2、R3F4M2、R3F3M2、R3F2M4、R3F2M3、R3F2M2
Promising最近の買い物客で、比較的最近高額で購入したか、頻繁に購入しています。したがって、有望な顧客セグメントです。R4F4M1、R4F3M1、R4F2M1、R4F1M4、R4F1M3、R4F1M2、R3F4M1、R3F3M1、R3F2M1、R3F1M4、R3F1M3、R3F1M2
New Customers最近購入しましたが、頻繁ではありません。R4F1M1、R3F1M1
Cannot lose them大きな購入を頻繁に行いましたが、かなり前のことです。このセグメントから大きな収益が得られており、彼らの注意を失わないようにした方が良いでしょう。R2F4M4、R2F4M3、R2F3M4、R2F3M3、R2F2M4、R2F2M3、R2F1M4、R2F1M3
Need attention潜在的なロイヤリストが注意を失いつつあります。したがって、注意が必要です。R2F4M2、R2F3M2、R2F2M2
Hibernating低支出、低頻度、かなり前に購入。彼らに注意を払う価値はありません。R2F4M1、R2F3M1、R2F2M1、R2F1M2、R2F1M1
High Value Sleeping過去の潜在的ロイヤリストが眠っています。失われつつある関心を再び呼び覚ます価値があります。R1F4M4、R1F4M3、R1F4M2、R1F3M4、R1F3M3、R1F3M2、R1F2M4、R1F2M3、R1F2M2、R1F1M4、R1F1M3
Lost customers最も低いRecency、Frequency、Monetaryスコア。このセグメントは最も優先度が低いです。R1F4M1、R1F3M1、R1F2M1、R1F1M2、R1F1M1

グラフ出力例:

image

image

Screen Shot 2023-06-29 at 17 35 08

ワークフロー例

サンプルワークフローはTreasure Boxesにあります。

+rfm:
  ipynb>:
    notebook: RFM
    input_table: ml_datasets.cosmetics_store
    user_column: user_id
    tstamp_column: event_time
    amount_column: price

パラメータ

パラメータ名説明必須データ型デフォルト値値の例
input_tabledbname.table_nameのような形式でRFM分析に使用するTDテーブルを指定しますはいstring(dbname.table_name)
ml_dataset.td_rfm
user_columnユーザーのカラム名を指定しますいいえstringuseruser
tstamp_columnタイムスタンプのカラム名を指定しますいいえstringtstamptime
amount_column購入金額などのトランザクション金額のカラム名を指定しますいいえstringamountpurchase_amount
output_tableRFM結果をエクスポートするTDテーブルをdbname.table_nameとして指定しますいいえstring(dbname.table_name)
ml_output.rfm
min_clustersクラスタの最小数を指定しますいいえinteger25
max_clustersクラスタの最大数を指定しますいいえinteger825
num_clustersクラスタの固定数を指定しますいいえintegerNone3
hide_table_contentsテーブルコンテンツの表示を抑制しますいいえbooleanfalsefalse
audience_name属性テーブルをマージするためのオーディエンス名いいえstringNonemaster_segment_name
foreign_keyオーディエンス統合に使用されるマスターセグメントの外部キーカラム名。設定されていない場合はuser_column値が使用されます。いいえstringNonetd_canonical_id
disable_clusteringクラスタリングを無効にしますいいえbooleanfalsefalse
aggregated_input集約されたテーブルの入力を許可しますいいえbooleanfalsefalse