# RFM分析をわかりやすく解説！実例とPythonでの分析のやり方を紹介！

> 当サイト【スタビジ】の本記事では、マーケティングの分野で良く使われる、RFM分析について詳しく解説していきます！RFM分析はずばり、Recency・Frequency・Monetaryの略なんです！

- URL: https://toukei-lab.com/rfm-analysis
- 公開: 2023.09.05 / 更新: 2025.06.14
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、マーケティングの分野で良く使われる、RFM分析について詳しく解説していきます！RFM分析はずばり、Recency・Frequency・Monetaryの略なんです！
:::

こんにちは！スタビジ編集部です！

今回は**RFM分析**について実用例も交えながら解説をしていきます。

記事の後半では、実際に<mark>Pythonでの分析のやり方</mark>についても紹介します！

:::point
**・RFM分析とは！？**\
**・RFM分析の実例について紹介！\
・PythonでのRFM分析の実行**
:::

以下の動画でも解説しているのであわせてチェックしてみてください！

::youtube{#ygLq_1tKPOE}

## RFM分析とは！？

![そもそも推定とは？](/wp-content/uploads/2023/08/001c43e0065230e0d9382843bf5f3914-1024x1024.jpg)

それでは早速、**RFM分析とは何なのか？**&#x306B;ついて解説していきます！

まず、<mark>どういった場面でこの言葉が使われるのか？</mark>についてです。

RFM分析は、ビジネスにおけるマーケティングでよく使われます。

その中でもお客様の分析をし、<mark>売上や利益を上げていこう！という顧客分析の手法</mark>の1つとなっています。

このRFM、**３つの英単語の頭文字**となっており、それぞれ以下を表します。

:::box
**・Recency：直近いつ商品を購入したか？\
・Frequency：購入の頻度はどれくらいか？\
・Monetary：購入金額はどれくらいか？\&#xA;**
:::

RFM分析では、この<mark>「直近いつ？頻度は？購入額は？」の3軸で顧客を評価</mark>し、顧客の<mark>グループ分け</mark>をしていきます。

:::talk{who="umatan"}
3軸によるグループ分けを行っていきますが、グルーピングを行ったらそこで終わりではありません！
:::

<mark>それぞれのグループにはどんな特徴があるか？その違いは？</mark>ということを考えます。

そのうえで、最終的には**グループごとに最適なマーケティング施策を考え実行していこうという目的**で行うものになります！

![RFM分析のイメージ](/wp-content/uploads/2023/09/aeaae5370f3f67e00537e1d24564cfe9.jpg)

RFM分析ではその名の通り、R・F・Mの3つの軸を考えるということがとても重要になります。

例えば、**「Monetary：購入金額はどれくらいか？」のみを意識して顧客の評価**をするとします。

購入金額が高いヘビーユーザーには、あるクーポンを配布しようという施策を打つとしましょう。

すると、以下のように施策の効果が不十分になりかねません。

:::talk{who="man" side="left"}
購入頻度が高いが1回の購入額は安いユーザー：**「1万円以上で使えるクーポンを貰ったけどそんなに1回で購入しないしなあ。。」**
:::

:::talk{who="woman" side="left"}
購入頻度は低いが1回で大きな買い物をするユーザー：**「300円クーポンが届いたがそこまで魅力的には感じないな。。」**
:::

このように、<mark>合計購入金額が高いユーザーという1軸でグルーピングを行っただけでは、ユーザーに刺さる施策に繋がる可能性は低下してしまう</mark>のです。

なので**3軸を意識**することが重要になります！

## RFM分析の実用例についてご紹介！

![RFM分析の実用例](/wp-content/uploads/2023/09/031ac1a4c92f1f4020a278fce41ac9a4.jpg)

ここでは、<mark>実際にRFM分析がどのように使われているか？</mark>についてわかりやすい具体例を紹介します！

<mark>「ある靴屋さんでのRFM分析による顧客ランク付け」</mark>について見ていきましょう。

今回の事例では、**直近購入・頻度・金額**の項目でそれぞれ5段階にランク分けし、それぞれに得点が付いているものとします。

RFM分析表は以下の通り設定しています。

![RFM分析表](/wp-content/uploads/2023/09/f50f35ef43c83923203c96491d03ab26-1024x381.jpg)

※ここで<mark>R（直近の購入）は、最低評価値(1)でも1年以内と設定し、それよりも購入が昔の顧客は点数０もしくはこの分析の対象外と想定</mark>しています。

分析の目的や、そもそもの商品の購入頻度の特性などによって、ここは半年以下全てをスコア１とする、などの様々な設定方法が考えられます。

ちなみに、グルーピングは、<mark>合計値によって分ける方法、重みづけして算出する方法、R・F・Mそれぞれの項目に範囲を設けて分類する方法</mark>などがあります。

これによりRFMのスコアがそれぞれどれくらいなのかで、顧客のセグメントを詳細に分けることができます。

ではどうやってこのRFM分析表を使っていくのか？

まず、これらのセグメントにどのくらいの顧客がいるか集計します。

そして、どのセグメントを増やすべきかを議論しまし施策に落とし込んでいきましょう！

例えば、売上を上げるという至上命題を元に考えるとMonetaryが5のユーザーを増やすべきだと考えられます。

このセグメント内の顧客数が月ごとにどう遷移しているかモニタリングして、Monetaryが4のユーザーをどうやって5に増やすかを検討します。

しかしMonetaryが4でも頻繁に購入しているのかたまにしか購入しないのかでユーザーの特性は分かれます。

<mark>RとFを見ながらいくつかのセグメントに効果的な施策を実施し4を5にしていく</mark>のが1つの良さそうなアプローチです。

また、Monetaryが5のユーザーが4に下がらないようにするのも1つのアプローチになりえますね。

Monetaryが5だけどRecencyが1のユーザーは前まで太客だったけど今では離れつつあるユーザーかもしれませんので、そのようなユーザーをなんとかつなぎとめサービスに戻ってきてもらう施策を何か打つべきかもしれません。

このようにRFMの観点から無限に施策は考えられます。

<mark>重要なのは、RFMを軸に自社の課題がどこにあるのかを特定し、それを元に適切な施策を打っていくこと。</mark>

どの事業・サービスにも当てはめられる正解はありませんが、RFMの軸を意識して分析していくことで筋の良い施策に落とし込めるはずです！\
ぜひ実践していきましょう！

:::talk{who="umatan"}
RFM分析を活用することで顧客の特性に合わせて適切にマーケティングの施策が打ち込めるようになるんだね！
:::

顧客分析には様々な手法がありますが、**RFM分析のメリット**は以下などが挙げられます。

:::box
**＜俯瞰性＞\&#xA;**__広い視野で顧客を評価できる__

**＜柔軟性＞\
求める粒度に対応して、グルーピングを細かくも大まかにも\&#xA;**__取ることが出来る__
:::

## PythonでのRFM分析の実行

![信頼区間の計算方法](/wp-content/uploads/2023/08/a714533919c158a5ff4d2d4acf413361-1024x1019.jpg)

ここから、実際にPython上で、RFM分析を実行していきます！

以下の流れで分析を進めていきます。

:::box
**1. 必要なモジュールをインポート\
2\. ダミーのデータを生成\
3\. RFMスコアを計算する関数の定義\
4\. データに対してRFMスコアを算出する関数を適用\
5\. 各指標のRFMスコアをランク分け\&#xA;**
:::

### 1. 必要なモジュールをインポート

まず、<mark>分析で使用するモジュール等をimport</mark>しておきます。

今回はダミーデータ生成の際にランダムな値を用いるため、randomもimportします。

```python
import pandas as pd
import random
```

### 2. ダミーのデータを生成

以降で、ダミーデータを生成させ、そのデータに対してRFMスコアを求めていきます。

まずは**データは以下のように設定し生成**します。

<mark>実際のビジネスの分析では、顧客IDと購入金額、購入日がわかるデータを抽出し、利用しましょう。</mark>

```python
# ダミーデータを生成
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)
```

<mark>顧客購入データ(data)に、顧客ID(CustomerID)、購入日(PurchaseDate)、購入金額(PurchaseAmount)を設定</mark>しています。

ここでは顧客IDと購入金額にrandomを用いています。

それではデータフレームとして設定した**dfの中身**を見てみましょう。

```python
df.head(10) # dfの最初の10行を表示
```

下記が出力結果です。

しっかりと購入データが入っていることが確認できますね！

![](/wp-content/uploads/2023/09/df.jpg)

### 3. RFMスコアを計算する関数の定義

続いて、<mark>データをRFM分析でランク付けができる形へと変形するための関数を定義</mark>します。

コードは以下になります。

```python
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スコアを算出する関数を適用

<mark>3.で作成した関数calculate_rfmを使用し、実際のデータに対してRFMスコアを計算します！</mark>

```python
# RFMスコアを計算
rfm_scores = calculate_rfm(df)
# 結果の表示
print(rfm_scores.head(10))
```

表示させた結果（頭の10行）は以下の通りです。

![](/wp-content/uploads/2023/09/f31b1cd5e0bd0bcf7df05cfb89115224.jpg)

R・F・Mそれぞれを数値データで表すことで、<mark>定量的に評価をすることが可能</mark>になりました。

ここでは、**Rは小さいほど直近で買われている、Fは大きいほど購入頻度が高い、Mは大きいほど購入金額が高い**と解釈できます！

### 5. 各指標のRFMスコアをランク分け

最後になりますが、<mark>4.で求めたRFMスコアを、その大小によってここでは5つのランクに振り分け</mark>ていきます。

```python
# 最終的な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 # スコア振り分け後の最終的な結果の表示
```

![](/wp-content/uploads/2023/09/448774e3550f2f096e6f49d2be5517aa.jpg)

:::talk{who="umatan"}
R_score、F_score、M_scoreにしっかりと5段階のスコアが格納されていることが確認できるね！
:::

今回は、値を均等に5分割し1～５にスコアリングしましたが、この基準は**データの分布などを基に判断**すると良いでしょう。※ここでは前の章の靴屋の例の分類を使ってるわけではありません。

また実際には、<mark>最終的に求めたRFMスコアによって顧客をグルーピングし、それぞれの特徴を踏まえた施策を行っていくことがこのRFM分析の主な目的</mark>となります。

例えば、スコア5、5、5（最良評価）の顧客には優先的なサービスの機会や限定クーポンを配布するなどのアプローチが考えられます。

## RFM分析　まとめ

![Happy](/wp-content/uploads/2020/08/Celebration-amico-min-e1618926172675-1024x932.png)

本記事では、<mark>RFM分析の中身やPythonでの具体的な実装方法</mark>についてまとめました！

顧客分析の基本であるRFM分析を理解し、使えるようになることで、<mark>効率的なマーケティング施策を打ち出すことに繋げていきましょう！</mark>

また、RFM分析はもっとお手軽に、**Excel**でも簡単な実装ができます！

**DATEDIF関数などを用いてRFM分析を実際に行ってみる**ことでより理解が深まると思います！

そして、RFM分析以外に<mark>顧客の解約率を分析するチャーン分析</mark>についてもまとめております。

Pythonでの実装まで行っているのでこちらの記事も合わせてご活用ください！

<https://toukei-lab.com/churn-analysis>

このようなデータサイエンスの力を身に付けるためにはスタビジの記事やスクールを活用すると良いでしょう。

そして僕の経験を詰め込んだデータサイエンス特化のスクール[「スタアカ（スタビジアカデミー）」](https://toukei-lab.com/achademy/)を運営していますので，興味のある方はぜひチェックしてみてください！

### AIデータサイエンス特化スクール「スタアカ」

![スタアカトップ](/wp-content/uploads/2021/11/2bc9f22d0f8dfe24080b83884b7a5ec6-1024x576.jpg)

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1280円/月<br>
プレミアムプラン：149,800円</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>データサイエンスを網羅的に学ぶ<br>
実践的なビジネスフレームワークを学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
マーケティングの実行プラン策定<br>
マーケティングとデータ分析の掛け合わせで集客マネタイズ</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

当メディアが運営するスクールです。

<mark>24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定\
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ**
:::

＼今すぐ試す／

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/"}

データサイエンスに関する記事はこちら！

<https://toukei-lab.com/statistics-freshman>

<https://toukei-lab.com/datascience-book>

データサイエンスを勉強できるスクールやサイトは、ぜひこちらを参考にしてみてください！

<https://toukei-lab.com/datascientist-school>