Power BIにて、顧客分析の一つであるRFM分析を行ってみた。
・自己紹介
佐賀県の小売業で情シスを行っています。
着物を取り扱っている業種で多店舗展開なので、なかなかパッケージやERP等がなく(古い商習慣(明治から続く))、内製開発が多いです。
・前回まで
顧客分析の登竜門のひとつであるデシル分析を行ってみました。
・今回の内容
顧客分析でデシル分析よりも、さらに高度なRFM分析を行ってみました。デシル分析だけだと売上金額のみの分析なので、来店数、直近購入日まで考慮したワンランク上の分析をPowerBIでやってみたいと考えました。
・RFM分析とは
・Recency=直近いつ利用したのか
直近の購入日を拾い出す。
・Frequency=利用頻度はどれくらいか
顧客の購買履歴から過去に何回購買したかを拾い出す。
・Monetary=購入金額はいくらぐらいか
購入金額の累計を拾い出す
・最初に書いたDAX計算式
最初は、単純にデシル分析の応用で、最終売上日と来店数(伝票単位)で計算を行った。
M_RFM =
CALCULATETABLE(
ADDCOLUMNS(
VALUES ('売上台帳'[顧客CD] ),
"顧客別売上金額",CALCULATE(SUM('売上台帳'[売上金額])),
"最終売上日",CALCULATE(MAX('売上台帳'[売上伝票日付])),
"来店数",CALCULATE(sum('売上台帳'[取引行NO]),'売上台帳'[取引行NO]=1)
),
'売上台帳'[売上伝票日付] >= DATE(YEAR(NOW()) - 2,月,日)
)
・内容を確認と課題
Recency(直近)とMonetary(利用金額)については、望む値が表示されたが、Frequency(利用頻度)について、伝票単位で計算してしまうと同じ日に伝票を複数発行した場合、利用頻度が高くなり望む結果が得られなかったので別の方法を考える。
日付やイベント単位での来店数を取得する必要がり、重複を一つにまとめるような関数があるかどうかを探してみました
・DISTINCTCOUNT(ディスティンクトカウント)関数(重複除外)
SQLでもDISTINCTという重複を一つにまとめる構文があるのだが、同様な関数がDAX関数があるか調べたところ、DISTINCTCOUNT関数で実現可能だと考えました。
・計算式を直した後
DISTINCTCOUNT関数にて来店数をイベント単位(催事)にしてDAXを計算してみる。
M_RFM =
CALCULATETABLE(
ADDCOLUMNS(
VALUES ('売上台帳'[顧客CD] ),
"顧客別売上金額",CALCULATE(SUM('売上台帳'[売上金額])),
"最終売上日",CALCULATE(MAX('売上台帳'[売上伝票日付])),
"来店数",CALCULATE(DISTINCTCOUNT('売上台帳'[催事CD]))
),
'売上台帳'[売上伝票日付] >= DATE(YEAR(NOW())-2,月,日)
)
・RFMマスタから列の追加
最終売上日より、R_経過日数を計算
R_経過日数 =
VAR __RFM = DATEDIFF('M_RFM4'[最終売上日],MAX('M_RFM4'[最終売上日]),DAY)
RETURN __RFM
・結果
RFM分析のグラフによく似た結果が返ってきたので満足。
・次回の挑戦
RFM分析のみだと不十分な部分もあり、RFM分析 + 年齢やカテゴリ(商品分類)等に挑んでいきたいと思う。
この記事が気に入ったらサポートをしてみませんか?