はじめに

顧客のセグメンテーションやターゲット・マーケティングを行うために、一般的に用いられる手法としてRFM分析があります。これは、どの程度最近顧客が購入をおこなったかの「Recency(最終購入日)」、どの程度頻繁に購入をおこなったかの「Frequency(購入頻度)」、そしてどの程度の金額の購入をおこなったかの「Monetary(購入金額)」の3つの軸でランク分けし、「優良顧客」、「準優良顧客」といったセグメント分けやマーケティングの対象顧客の絞り込みなどを行います。ここではQlik Senseでこの「RFM分析」を行うためのチャート作成方法をご説明します。

image

尚、今回は数式軸として「Qlik SenseのAggrによる高度な集計処理」でご説明しているAggr関数を利用します。Aggr関数についてはこちらのエントリをご参照ください。

事前の準備

以下のリンクからサンプルデータをダウンロードし、ダウンロードしたZIPファイルを任意の場所に解凍してください。

>>サンプルデータ(顧客購入分析データ)のダウンロード

まず、Qlik Sense Desktopを開いて「RFM分析」という名前の新規アプリを作成します。そして、ダウンロードしたZIPファイルに含まれるファイルを取り込んでください。もし、これらの手順が分からない場合には以下のエントリを参照してください。

10分で試すQlik Senseでデータ分析

RFM分析用のテーブル作成

「R(最終購入日)」

画面左下の「変数」アイコンをクリックします。

image

変数のウインドウ上で「新規作成」をクリックします。

image

まず、「ある顧客は直近ではいつ購入したか?」という最終購入日(Recency)を算出するための基準日を設定するために「vBaseDate」という変数を作成します。以下の形で「名前」に「vBaseDate」、「定義」に「2015/12/1」と入力して右上の「保存」アイコンをクリックします。

image

以下の形で変数が作成されたことを確認します。

image

上記と同様の手順で以下の変数を作成します。これらは「最終購入日は何日以内か?」を判別してランク分けするための閾値として利用され、例えば「vR1 = 30日」以内の場合は最上位のRank5、30日を超えて「vR2 = 60日」以内の場合にはRank4という形でランク分けを行います。

変数の名前 変数の定義
vR1 30
vR2 60
vR3 90
vR4 120

以下の形で変数が作成されたことを確認して「閉じる」をクリックします。

image

左側のパネルから「テーブル」を空白スペースに配置します。

image

テーブルの「軸を追加」をクリックし、「数式エディタを開く」のアイコンをクリックします。

image

以下の数式を入力して「適用」をクリックします。


if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR1 ,'ランク5 (~' & vR1 & '日)' ,
 if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR2 ,'ランク4 (~' & vR2 & '日)' ,
 if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR3 ,'ランク3 (~' & vR3 & '日)' ,
 if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR4 ,'ランク2 (~' & vR4 & '日)' ,
 if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) > vR4, 'ランク1 (' & vR4 & '日超)',
 )))))

image

追加した列のラベルを「ランク」に変更します。

image

「列の追加」をクリックして「メジャー」を選択します。

image

以下の数式を入力します。


Count(DISTINCT [顧客コード])

image

追加したメジャーのラベルを「人数」に変更します。

image

「ソート」タブを選択し、自動のスイッチをクリックしてOFFにします。

image

「アルファベット順でソート」のチェックボックスをONにし、「降順」を選択します。

image

「スタイル」タブの「基本設定」を開き、「タイトル」に「R(最終購入日)」と入力します。

image

以下の様な形で、最終購入日ごとに顧客をランク分けし、人数を表示するテーブルが作成されたことを確認します。

image

「F(購入頻度)」

同様の手順で「F(購入頻度)」の変数とテーブルも作成します。

  • 変数(購入頻度の閾値を2回、4回、6回、8回で設定しています。)

      変数の名前 変数の定義
      vF1 2
      vF2 4
      vF3 6
      vF4 8
    • テーブル軸の数式
    
    if (aggr(count([受注コード]),[顧客コード]) <= vF1 ,'ランク1 (~' & vF1 & '回)' ,
     if (aggr(count([受注コード]),[顧客コード]) <= vF2 ,'ランク2 (~' & vF2 & '回)' ,
     if (aggr(count([受注コード]),[顧客コード]) <= vF3 ,'ランク3 (~' & vF3 & '回)' ,
     if (aggr(count([受注コード]),[顧客コード]) <= vF4 ,'ランク4 (~' & vF4 & '回)' ,
     if (aggr(count([受注コード]),[顧客コード]) > vF4 ,'ランク5 (' & vF4 & '回超)' ,
    )))))
    
    • テーブルのメジャーの数式
    Count(DISTINCT [顧客コード])

    「M(購入金額)」

    同様の手順で「M(購入金額)」の変数とテーブルも作成します。

    • 変数(購入金額の閾値を2000円、4000円、6000円、8000円で設定しています。)

        変数の名前 変数の定義
        vM1 2000
        vM2 4000
        vM3 6000
        vM4 8000
              • テーブル軸の数式
              
              if (aggr(sum([販売価格]),[顧客コード]) <= vM1 ,'ランク1 (~' & num(vM1 , '#,##0') & '円)' ,
               if (aggr(sum([販売価格]),[顧客コード]) <= vM2 ,'ランク2 (~' & num(vM2 , '#,##0') & '円)' ,
               if (aggr(sum([販売価格]),[顧客コード]) <= vM3 ,'ランク3 (~' & num(vM3 , '#,##0') & '円)' ,
               if (aggr(sum([販売価格]),[顧客コード]) <= vM4 ,'ランク4 (~' & num(vM4 , '#,##0') & '円)' ,
               if (aggr(sum([販売価格]),[顧客コード]) > vM4 ,'ランク5 ('   & num(vM4 , '#,##0') & '円超)',
              )))))
              
              • テーブルのメジャーの数式
              Count(DISTINCT [顧客コード])

              以下の様な形で3つのテーブルが作成されたことを確認します。

              image

              RFM分析の実践

              ここでは、先ほど作成したRFMのテーブルに商品売上ランキングの棒グラフと顧客一覧のテーブルを追加しています。

              image

              ここでは、全てのランクが5の範囲に絞って、その顧客セグメントの商品売上ランキングと顧客一覧を分析したいと思います。まず、「R(最終購入日)」のテーブルから「ランク5(~30日)」を選択します。

              image

              同様に「F(購入頻度)」と「M(購入額)」のテーブルからランク5のみを選択します。

              image

              この顧客セグメントが購入している商品の売上ランキングと、顧客の一覧を表示することができました。

              image

              RFMマトリクスの作成

              次に以下の様な形で、縦軸に「購入頻度(Frequency)」、横軸に「最終購入日(Recency)」でクロス表形式としたマトリクスを作成します。

              image

              左側のパネルから「ピボットテーブル」をシートの空白スペースに配置します。

              image

              右側の「プロパティ」を開いて「データ」タブを選択して「データの追加」をクリックし、「行」を選択します。

              image

              「数式エディタを開く」のアイコンをクリックします。

              image

              以下の数式を入力して「適用」をクリックします。

              
              if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR1 ,'ランク5 (~' & vR1 & '日)' ,
               if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR2 ,'ランク4 (~' & vR2 & '日)' ,
               if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR3 ,'ランク3 (~' & vR3 & '日)' ,
               if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) <= vR4 ,'ランク2 (~' & vR4 & '日)' ,
               if (aggr(vBaseDate - max(date(受注日)) ,[顧客コード]) > vR4, 'ランク1 (' & vR4 & '日超)',
               )))))
              

              image

              追加した行のラベルを「Recency」に変更し、「NULL値を表示」のチェックをOFFにします。

              image

              「データの追加」をクリックし、「列」を選択します。

              image

              「数式エディタを開く」のアイコンをクリックします。

              image

              以下の数式を入力して「適用」をクリックします。

              
              if (aggr(count([受注コード]),[顧客コード]) <= vF1 ,'ランク1 (~' & vF1 & '回)' ,
               if (aggr(count([受注コード]),[顧客コード]) <= vF2 ,'ランク2 (~' & vF2 & '回)' ,
               if (aggr(count([受注コード]),[顧客コード]) <= vF3 ,'ランク3 (~' & vF3 & '回)' ,
               if (aggr(count([受注コード]),[顧客コード]) <= vF4 ,'ランク4 (~' & vF4 & '回)' ,
               if (aggr(count([受注コード]),[顧客コード]) > vF4 ,'ランク5 (' & vF4 & '回超)' ,
              )))))
              

              image

              追加した行のラベルを「Frequency」に変更し、「NULL値を表示」のチェックをOFFにします。

              image

              「データの追加」をクリックし、「メジャー」を選択します。

              image

              「数式エディタを開く」のアイコンをクリックします。

              image

              以下の数式を入力して「適用」をクリックします。

              
              Count(DISTINCT [顧客コード])
              

              image

              「ソート」タブを選択し、「Recency」の自動のスイッチをクリックしてOFFにします。

              image

              「アルファベット順でソート」のチェックボックスをONにし、「降順」を選択します。

              image

              同様に、「Recency」の自動のスイッチをクリックしてOFFにして、「アルファベット順でソート」のチェックボックスをONにし、「降順」を選択します。

              image

              「スタイル」タブの「基本設定」を開き、「タイトル」に「RFマトリクス」と入力します。

              image

              以下の様な形で縦軸に「購入頻度(Frequency)」、横軸に「最終購入日(Recency)」でクロス表を作成し、それぞれのランクの組み合わせにおける顧客数を表示することが出来ました。

              image

              尚、「Monetary(購入金額)」を軸として設定する場合には以下の式を入力します。


              if (aggr(sum([販売価格]),[顧客コード]) <= vM1 ,'ランク1 (~' & num(vM1 , '#,##0') & '円)' ,
              if (aggr(sum([販売価格]),[顧客コード]) <= vM2 ,'ランク2 (~' & num(vM2 , '#,##0') & '円)' ,
              if (aggr(sum([販売価格]),[顧客コード]) <= vM3 ,'ランク3 (~' & num(vM3 , '#,##0') & '円)' ,
              if (aggr(sum([販売価格]),[顧客コード]) <= vM4 ,'ランク4 (~' & num(vM4 , '#,##0') & '円)' ,
               if (aggr(sum([販売価格]),[顧客コード]) > vM4 ,'ランク5 ('   & num(vM4 , '#,##0') & '円超)',
              )))))

              「購入頻度(Frequency)」、「最終購入日(Recency)」とこの「Monetary(購入金額)」を組み合わせ、上記の「RFマトリクス」のテーブルを作成したのと同じ手順で「FMマトリクス」、「MRマトリクス」の計3つのテーブルを作成することができます。

              image

              まとめ

              以上、Qlik Senseでこの「RFM分析」を行うためのチャート作成方法をご紹介しました。