AlteryxでRFM分析をやってみようぜ!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

アルファベット3文字の用語ってなんかかっこいいですよね?(そんなことはない) 今回紹介するのはそんなアルファベット3文字のRFM分析です。

RFM分析とは

さて、では今回Alteryxで実装してくRFM分析とはどういったものなのでしょうか? これは、小売業界などでよく使われる"優良顧客"を定量的に判断したり、それをもとにマーケティング施策を行ったりするための手法となります。 RFM分析では、優良顧客の基準として以下の3つの指標を利用します。

項目 単語 意味 使い方
R Recency 最終購入日 最近も使ってくれてる人の方がまた使ってくれそう
F Frequency 利用頻度 一見さんより常連さんの方がいいよねー
M Monetary 利用金額 お金いっぱい使ってくれる人がより売上へのインパクト大きくね

これらの指標に対して、それぞれ境界値を設けていくつかのランクに分けます。 ランク分けは、パレート分析の時に行ったようにいい感じの人ほど高いランクにするようにします。

いくつのランクに分けるかに関して"必ずこの値じゃないとダメ"というものはありませんが、 RFM分析ではそれぞれ5つに分けて5x5x5=125パターンとすることが多いようです。

パレート分析では単一の指標をランク分けしてみていましたが、 複数の指標を用いることで、より多角的な見方が可能になるというわけです。 とはいえ、指標が3つもあるため、どれをどのように使うべきかやどれを優先してみるべきか迷う方も多いかもしれません。 3つ全部が最高ランクであればそれに越したことはないのですが、みんながみんなその状態というのもあり得ないことなので、いくつかの視点で見ていく必要があります。

まず、3つのうち最も最初に見るべき指標はRです。 Rは最後にいつ来てくれたか、という指標になりますので他2つがどんなに高くてもRが低いということは、 その顧客はもう来てくれない可能性が高いと考えられます。 そうなってしまっては、アプローチを掛けたところで無意味に終わってしまうでしょう。

続いてFとMについてですが、これらはどちらの方を優先的にみるべきかは一概には言えず、 商売の性質にも依存するでしょう。

例えば、コンビニなどでは1回に高額の買い物をする人はあまりいないと思われる一方で日常的によく使ってもらうことが前提となるためFを優先してみることになるかともいます。 もちろんMをおろそかにしていいというわけではなく、レジの裏にあるお菓子などを買ってくれればそれはとても嬉しいことです。

一方、百貨店のような店で考え見ます。 子供にとって百貨店のレストランといえば非日常のワクワクが詰まった場所ですね(ひょっとするともう古い考え?w)。 そういった環境だと、伸ばしたくなるのはMの方の値となります。 高い購買力を持った人に対していかに"大人の買い物"をさせるかとなるわけです。

さて、一例として、RとFを使った顧客分析を見てみましょう。

はじめてきた顧客は左側に流れるようにいい感じに持っていきたいわけです。 また、「常連さん」ポジションの人は何としてもさよならバイバイさせないように優良顧客として扱っていく必要があります。

Alteryxでやってみる

では、Alteryxでやってみましょう。 今回作成するワークフローは以下のようになります。

扱うデータは以下のものになります。

最初にSelectツールでいらない列を取り除きます。 今回は扱うデータは

  • 受注日
  • 売り上げ
  • 顧客名

の3つとなりますので、それらのみにチェックが入った状態にします。

続いて、RFM分析のRとなる最終購入日を求めるために、上記の受注日列からの経過日数を計算します。 Formulaツールでは、 DateTimeToday 関数で、今日の日付を取得できるのでこの値から引けば経過日数がわかります。

しかし、このデータはあるタイミングのスナップショットとなっているため、日付が2012年のものまでしかありません。 すでに数年が経過した状態となっていますので、そのまま計算すると誰も直近での購入を行っていないことになってしまいます。 困りました。

そこで、今回は"今日は2013/01/01である"という前提で進めることにします。 今回のように実行のタイミングに依存して値が変わるワークフローを実装する際には、結果の再現性という観点から都度、その時に必要な値で固定してしまうというのもアリでしょう。 これによって、実行のタイミングに依存せずに常に同じ結果が得られるようになります。

一方、この場合別なタイミングでの結果を得たい場合には都度値を変更する必要があります。 スケジュール実行などで定期的に処理を行うようなワークフローの場合には DateTimeToday のような関数を使うのが得策と言えるでしょう。

以上を踏まえた、今日の日付の設定と最終購入日からの経過日数の計算は以下のようになります。

これで経過日数が計算できたので、続いて顧客ごとに集計します。

受注日列からの経過日数が最も短いものが"最終"購入日となるのでRはその値となります。 Fは回数のなのでカウント、Mは購入金額なので合計を求めています。 これで以下のような3つの値が求まります。

さて、続いてこの3つそれぞれを5段階でランク分けします。 そのために、まずはそれぞれの分布をヒストグラムで確認しましょう。 ヒストグラムはField Summaryツールの「I」出力で簡単に確認できます。

いやー、どれも予想通りおなじみの形ですねー(何が?)

さて、これをもとにランク5はx以上、ランク4はy以上x未満、ランク3は...のように決めていく部分が非常に重要になるわけです。 ですが、今回はせっかくなのでTileツールの使い方も見てみましょう。

上記はRについてになりますが、FとMも同様にTile numeric columnを変更することで実現可能です。

続いて、この値を元にランク分けするのですが、今回は以下のようにしています。

Rは少ない方がいいので逆順、FとMはそのままの順で5段階に変換しています。 なお、Rで実際にどんな値のデータがどのランクに所属したかを確認すると以下のようになってるようです。

実際の分析では、Tileツールの出した値を参考にして、この値が妥当かを判断しつつ適切な範囲に調整する必要があるかもしれません。

例えば、上記データであれば

  • ランク5はキリのいいところで2週間とする
  • ランク4は約2カ月だが現実に即すると1か月くらいでもいいかもしれない
  • ランク3は半年くくらいとする
  • ランク2はそんなに後ろまで取らなくていいので1年としてそれ以降は全部ランク1にする

などの調整が考えられます。 このようにして、人手での調整もしつつ、RFMそれぞれのランクが求められました。

あとはこの3つのデータを結合して1つにまとめます。 Join Multipleツールを使って3つをすべて顧客名で結合します。 重複してる列を取りのぞけば以下のような結果となります。

ランク分けができたので、この値を先ほど解説したような視点で見て顧客のタイプごとに行う施策を決定していきましょう!!

おまけ

さて、あとはデータを見てやることを決めていきましょう。 なのですが、ちょっとおまけとしてこの3つのランクでクラスタリングするとどうなるのか見てみましょう(ランク分けした値ではなく生の数値でやってもいい気がしますが...)。

K-Centroids Cluster Analysisツールを使って、k-meansによるクラスタリングをします。

k-meansではクラスタ数を決める必要があるのですが、ここではとりあえず「5」してみてます。 実際には適切な値を決定するプロセスもありますが、今回は割愛します。

出力されたモデルと元のデータをAppend Clusterツールに接続することで、クラスタ番号を付与できます。 設定値は出力列名のみなので、デフォルトのままで問題ありません。

このクラスタごとに各ランクの平均値をとってみましょう。

この結果を見ると

  • クラスタ1は優良顧客
  • クラスタ2, 4は優良顧客への育成対象
  • クラスタ3は呼び戻しをした方が良さそう
  • クラスタ5はバイバイ

のようなこの単位ごとに施策を設定できそうな雰囲気を醸し出しています。 RとFのメトリクスの図におおざっぱに照らし合わせると以下のような感じになります。

実際にはもうちょい深く分析したいところではありますが、簡易的にはこれで何かやってみるのもありかもしれません。

おわりに

今回はAlteryxでRFM分析を行いました。

顧客を分類するための手法ということで、人によっては「何事か!!」と思われる方もいるかもしれません。 これは、それぞれにあわせた適切なアプローチの方法を検討するためのもので、誰かが不遇な扱いを受けるために行うものでありません。

参考

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400