今回はQlikを使ってRFM分析を行う方法を紹介しようと思います。
RFM分析とは、Recency(最新購買日)、Frequency(購買頻度)、Monetary(購買金額)の3軸で顧客をスコアリングし、セグメント化する手法です
探索型BIであるQlikでは、ロードスクリプトで事前にランクを振る方法とは別に、シート上でランクの基準値を変動させ、動的にRFM分析をすることが可能です。
前提
下記のデータモデルを使用することとします。

R・F・Mのメジャー(計算式)は下記とします。
// Recency(最終購入日からの経過日数)
Floor(vCur_MaxDate - Max(売上日))
// 変数vCur_MaxDateには本日の日付を格納
// Frequency(購入回数)
Count(distinct 伝票番号)
// Monetary(購入金額)
Sum(売上金額)Input boxの活用
データモデルの準備が終わったので、シートの作成に入ります。
まず、ランクの基準値をシート上で変動させるための、変数とInput boxを作成します。
RのランクR5~R1の基準値となる変数を作成します。
今回は、最終確認日からの経過日数が7日以内の場合R5、30日以内の場合R4、60日以内の場合R3、120日以内の場合、R2、121日以上の場合R1としました。

次にチャートの変数入力(Variable input)をシートに4つ配置し、作成した変数vRFM_R5~R2とInput Boxを指定します。
これをFとMでも同様に行うことで、下図のような基準値を変動させるためのオブジェクトができました。
(変数入力にあわせて、見やすいようにレイアウトコンテナとテキストのオブジェクトを活用しています。)

棒グラフの作成
シートに棒チャートを3つ配置し、R・F・Mのぞれぞれのランクの顧客数を可視化していきます。
棒グラフの数式は下記の通りです。
// R(最終購入日からの経過日数)
// 軸
If(Aggr(Floor(vCur_MaxDate - Max(売上日)),顧客ID) <= vRFM_R5, 'R5',
If(Aggr(Floor(vCur_MaxDate - Max(売上日)),顧客ID) <= vRFM_R4, 'R4',
If(Aggr(Floor(vCur_MaxDate - Max(売上日)),顧客ID) <= vRFM_R3, 'R3',
If(Aggr(Floor(vCur_MaxDate - Max(売上日)),顧客ID) <= vRFM_R2, 'R2',
'R1'
))))
// メジャー
Count(distinct[顧客ID])
// F(購入回数)
// 軸
If(Aggr(Count(distinct 伝票番号),顧客ID) >= vRFM_F5, 'F5',
If(Aggr(Count(distinct 伝票番号),顧客ID) >= vRFM_F4, 'F4',
If(Aggr(Count(distinct 伝票番号),顧客ID) >= vRFM_F3, 'F3',
If(Aggr(Count(distinct 伝票番号),顧客ID) >= vRFM_F2, 'F2',
'F1'
))))
// メジャー
Count(distinct[顧客ID])
// R(購入金額)
// 軸
If(Aggr(Sum(売上金額),顧客ID) >= vRFM_M5, 'M5',
If(Aggr(Sum(売上金額),顧客ID) >= vRFM_M4, 'M4',
If(Aggr(Sum(売上金額),顧客ID) >= vRFM_M3, 'M3',
If(Aggr(Sum(売上金額),顧客ID) >= vRFM_M2, 'M2',
'M1'
))))
// メジャー
Count(distinct[顧客ID])
R・F・Mのそれぞれのランクごとに顧客数が可視化されました。
(棒グラフの下にテキストのチャートを使い、現在のランクの基準を表示しています。)
うまくセグメント化できていない、別の基準値を試してみたいと思ったら、上のInput boxで値を変更することで、各ランクの顧客数も変動します。
さいごに
以上で、シート上でランクの基準値を変動させ、動的にRFM分析を行うことができるようになりました。
グラフとしては、棒グラフに加えてR×F、F×M、R×Mのヒートマップなども追加してみてください。


