こんにちは!スタビジ編集部です!
今回はRFM分析について実用例も交えながら解説をしていきます。
記事の後半では、実際にPythonでの分析のやり方についても紹介します!
・RFM分析とは!?
・RFM分析の実例について紹介!
・PythonでのRFM分析の実行
以下の動画でも解説しているのであわせてチェックしてみてください!
目次
RFM分析とは!?
それでは早速、RFM分析とは何なのか?について解説していきます!
まず、どういった場面でこの言葉が使われるのか?についてです。
RFM分析は、ビジネスにおけるマーケティングでよく使われます。
その中でもお客様の分析をし、売上や利益を上げていこう!という顧客分析の手法の1つとなっています。
このRFM、3つの英単語の頭文字となっており、それぞれ以下を表します。
・Recency:直近いつ商品を購入したか?
・Frequency:購入の頻度はどれくらいか?
・Monetary:購入金額はどれくらいか?
RFM分析では、この「直近いつ?頻度は?購入額は?」の3軸で顧客を評価し、顧客のグループ分けをしていきます。
それぞれのグループにはどんな特徴があるか?その違いは?ということを考えます。
そのうえで、最終的にはグループごとに最適なマーケティング施策を考え実行していこうという目的で行うものになります!
RFM分析ではその名の通り、R・F・Mの3つの軸を考えるということがとても重要になります。
例えば、「Monetary:購入金額はどれくらいか?」のみを意識して顧客の評価をするとします。
購入金額が高いヘビーユーザーには、あるクーポンを配布しようという施策を打つとしましょう。
すると、以下のように施策の効果が不十分になりかねません。
このように、合計購入金額が高いユーザーという1軸でグルーピングを行っただけでは、ユーザーに刺さる施策に繋がる可能性は低下してしまうのです。
なので3軸を意識することが重要になります!
RFM分析の実用例についてご紹介!
ここでは、実際にRFM分析がどのように使われているか?についてわかりやすい具体例を紹介します!
「ある靴屋さんでのRFM分析による顧客ランク付け」について見ていきましょう。
今回の事例では、直近購入・頻度・金額の項目でそれぞれ5段階にランク分けし、それぞれに得点が付いているものとします。
RFM分析表は以下の通り設定しています。
※ここでR(直近の購入)は、最低評価値(1)でも1年以内と設定し、それよりも購入が昔の顧客は点数0もしくはこの分析の対象外と想定しています。
分析の目的や、そもそもの商品の購入頻度の特性などによって、ここは半年以下全てをスコア1とする、などの様々な設定方法が考えられます。
ちなみに、グルーピングは、合計値によって分ける方法、重みづけして算出する方法、R・F・Mそれぞれの項目に範囲を設けて分類する方法などがあります。
これによりRFMのスコアがそれぞれどれくらいなのかで、顧客のセグメントを詳細に分けることができます。
ではどうやってこのRFM分析表を使っていくのか?
まず、これらのセグメントにどのくらいの顧客がいるか集計します。
そして、どのセグメントを増やすべきかを議論しまし施策に落とし込んでいきましょう!
例えば、売上を上げるという至上命題を元に考えるとMonetaryが5のユーザーを増やすべきだと考えられます。
このセグメント内の顧客数が月ごとにどう遷移しているかモニタリングして、Monetaryが4のユーザーをどうやって5に増やすかを検討します。
しかしMonetaryが4でも頻繁に購入しているのかたまにしか購入しないのかでユーザーの特性は分かれます。RとFを見ながらいくつかのセグメントに効果的な施策を実施し4を5にしていくのが1つの良さそうなアプローチです。
また、Monetaryが5のユーザーが4に下がらないようにするのも1つのアプローチになりえますね。Monetaryが5だけどRecencyが1のユーザーは前まで太客だったけど今では離れつつあるユーザーかもしれませんので、そのようなユーザーをなんとかつなぎとめサービスに戻ってきてもらう施策を何か打つべきかもしれません。
このようにRFMの観点から無限に施策は考えられます。
重要なのは、RFMを軸に自社の課題がどこにあるのかを特定し、それを元に適切な施策を打っていくこと。
どの事業・サービスにも当てはめられる正解はありませんが、RFMの軸を意識して分析していくことで筋の良い施策に落とし込めるはずです!
ぜひ実践していきましょう!
顧客分析には様々な手法がありますが、RFM分析のメリットは以下などが挙げられます。
<俯瞰性>
広い視野で顧客を評価できる
<柔軟性>
求める粒度に対応して、グルーピングを細かくも大まかにも
取ることが出来る
PythonでのRFM分析の実行
ここから、実際にPython上で、RFM分析を実行していきます!
以下の流れで分析を進めていきます。
1. 必要なモジュールをインポート
2. ダミーのデータを生成
3. RFMスコアを計算する関数の定義
4. データに対してRFMスコアを算出する関数を適用
5. 各指標のRFMスコアをランク分け
1. 必要なモジュールをインポート
まず、分析で使用するモジュール等をimportしておきます。
今回はダミーデータ生成の際にランダムな値を用いるため、randomもimportします。
import pandas as pd
import random
2. ダミーのデータを生成
以降で、ダミーデータを生成させ、そのデータに対してRFMスコアを求めていきます。
まずはデータは以下のように設定し生成します。
実際のビジネスの分析では、顧客IDと購入金額、購入日がわかるデータを抽出し、利用しましょう。
# ダミーデータを生成
random.seed(1)
n_samples = 1000 # サンプル数
data = {
'CustomerID': [random.randint(1, 100) for _ in range(n_samples)], # 1から100のランダムな顧客IDを生成
'PurchaseDate': pd.date_range(start='2021-01-01', periods=n_samples, freq='D'),
'PurchaseAmount': [random.randint(10, 2000) for _ in range(n_samples)], # 10から2000のランダムな購入金額を生成
}
df = pd.DataFrame(data)
顧客購入データ(data)に、顧客ID(CustomerID)、購入日(PurchaseDate)、購入金額(PurchaseAmount)を設定しています。
ここでは顧客IDと購入金額にrandomを用いています。
それではデータフレームとして設定したdfの中身を見てみましょう。
df.head(10) # dfの最初の10行を表示
下記が出力結果です。
しっかりと購入データが入っていることが確認できますね!
3. RFMスコアを計算する関数の定義
続いて、データをRFM分析でランク付けができる形へと変形するための関数を定義します。
コードは以下になります。
def calculate_rfm(df):
# 最終購入日を取得
max_purchase_date = df['PurchaseDate'].max()
# RFMスコアを計算
rfm_df = df.groupby('CustomerID').agg({
'PurchaseDate': lambda x: (max_purchase_date - x.max()).days, # 最終購入日から何日経っているか計算
'CustomerID': 'count', # 同じ顧客IDが何個あるかの計算によって購入回数を求める
'PurchaseAmount': 'sum' # 合計購入金額の計算
})
# カラムの名称を変更
rfm_df.rename(columns={
'PurchaseDate': 'Recency',
'CustomerID': 'Frequency',
'PurchaseAmount': 'Monetary'
}, inplace=True)
return rfm_df
4. データに対してRFMスコアを算出する関数を適用
3.で作成した関数calculate_rfmを使用し、実際のデータに対してRFMスコアを計算します!
# RFMスコアを計算
rfm_scores = calculate_rfm(df)
# 結果の表示
print(rfm_scores.head(10))
表示させた結果(頭の10行)は以下の通りです。
R・F・Mそれぞれを数値データで表すことで、定量的に評価をすることが可能になりました。
ここでは、Rは小さいほど直近で買われている、Fは大きいほど購入頻度が高い、Mは大きいほど購入金額が高いと解釈できます!
5. 各指標のRFMスコアをランク分け
最後になりますが、4.で求めたRFMスコアを、その大小によってここでは5つのランクに振り分けていきます。
# 最終的なR・F・Mのスコアを5段階で算出
rfm_scores['R_score'] = pd.qcut(rfm_scores['Recency'], 5, labels=['5','4','3','2','1']).astype(int)
rfm_scores['F_score'] = pd.qcut(rfm_scores['Frequency'].rank(method='first'), 5, labels=['1','2','3','4','5']).astype(int)
rfm_scores['M_score'] = pd.qcut(rfm_scores['Monetary'], 5, labels=['1','2','3','4','5']).astype(int)
rfm_scores # スコア振り分け後の最終的な結果の表示
今回は、値を均等に5分割し1~5にスコアリングしましたが、この基準はデータの分布などを基に判断すると良いでしょう。※ここでは前の章の靴屋の例の分類を使ってるわけではありません。
また実際には、最終的に求めたRFMスコアによって顧客をグルーピングし、それぞれの特徴を踏まえた施策を行っていくことがこのRFM分析の主な目的となります。
例えば、スコア5、5、5(最良評価)の顧客には優先的なサービスの機会や限定クーポンを配布するなどのアプローチが考えられます。
RFM分析 まとめ
本記事では、RFM分析の中身やPythonでの具体的な実装方法についてまとめました!
顧客分析の基本であるRFM分析を理解し、使えるようになることで、効率的なマーケティング施策を打ち出すことに繋げていきましょう!
また、RFM分析はもっとお手軽に、Excelでも簡単な実装ができます!
DATEDIF関数などを用いてRFM分析を実際に行ってみることでより理解が深まると思います!
そして、RFM分析以外に顧客の解約率を分析するチャーン分析についてもまとめております。
Pythonでの実装まで行っているのでこちらの記事も合わせてご活用ください!
このようなデータサイエンスの力を身に付けるためにはスタビジの記事やスクールを活用すると良いでしょう。
そして僕の経験を詰め込んだデータサイエンス特化のスクール「スタアカ(スタビジアカデミー)」を運営していますので,興味のある方はぜひチェックしてみてください!
AIデータサイエンス特化スクール「スタアカ」
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
当メディアが運営するスクールです。
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ
データサイエンスに関する記事はこちら!
データサイエンスを勉強できるスクールやサイトは、ぜひこちらを参考にしてみてください!