RFM 指標の計算

Pythonで学ぶカスタマーセグメンテーション

Karolis Urbonas

Head of Data Science, Amazon

定義

  • Recency:最後の取引からの経過日数
  • Frequency:直近12か月の取引回数
  • Monetary Value:直近12か月の合計支出
Pythonで学ぶカスタマーセグメンテーション

データセットと準備

  • 以前のレッスンと同じ online データセット
  • いくつか前処理が必要
  • 新しい TotalSum 列 = Quantity × UnitPrice

top_5_rows

Pythonで学ぶカスタマーセグメンテーション

前処理の手順

最新12か月のみを含む前処理済みの online DataFrame から始めます。

print('Min:{}; Max:{}'.format(min(online.InvoiceDate),
                              max(online.InvoiceDate)))
Min:2010-12-10; Max:2011-12-09

直近の分析を想定し、仮の snapshot_day を作成します。

snapshot_date = max(online.InvoiceDate) + datetime.timedelta(days=1)
Pythonで学ぶカスタマーセグメンテーション

RFM 指標の計算

# 顧客単位で集計
datamart = online.groupby(['CustomerID']).agg({
    'InvoiceDate': lambda x: (snapshot_date - x.max()).days,
    'InvoiceNo': 'count',
    'TotalSum': 'sum'})

# 解釈しやすいように列名を変更 datamart.rename(columns = {'InvoiceDate': 'Recency', 'InvoiceNo': 'Frequency', 'TotalSum': 'MonetaryValue'}, inplace=True)
# 先頭行を確認 datamart.head()
Pythonで学ぶカスタマーセグメンテーション

最終的な RFM 値

RFM セグメンテーション用のテーブルが完成しました。

rfm_top_5

Pythonで学ぶカスタマーセグメンテーション

RFM 値を計算してみましょう!

Pythonで学ぶカスタマーセグメンテーション

Preparing Video For Download...