Pythonを使ったRFMを使用して顧客価値と製品価値を評価する

## １.RFM分析を使用して顧客の価値を判断する
RFMは、顧客の活動度と取引金額の貢献に基づいて、顧客の価値を細分化する方法を指します。主に精緻な運営、ユーザー層の分析、ユーザーメンバーシップシステムの構築などに応用されます。

最近の消費（Recency）
消費頻度（Frequency）
消費金額（Monetary）

なぜユーザー層を作るのか、それは異なるユーザー群が異なる価値、異なる需要、異なるドライブを持っているからです。ユーザー層を作ることでリソースの配置を最適化し、運営のリターンを向上させることができます。

| R | F | M | ユーザータイプ |
|---|---|---|----------------|
| 高 | 高 | 低 | 一般的な価値ユーザー |
| 高 | 高 | 高 | 重要な価値ユーザー |
| 高 | 低 | 低 | 一般的な開発ユーザー |
| 高 | 低 | 高 | 重要な開発ユーザー |
| 低 | 高 | 低 | 一般的な保持ユーザー |
| 低 | 高 | 高 | 重要な保持ユーザー |
| 低 | 低 | 低 | 一般的な引き留めユーザー |
| 低 | 低 | 高 | 重要な引き留めユーザー |

例：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/5f76abe1-d905-4295-d0d7-c6c96c22febd.png)

```Python

bins = rfm.最近一回の消費.quantile(q=np.linspace(0,1,6),interpolation='nearest')  
bins[0] =0  
labels =[5, 4, 3, 2, 1]  
R1 = pd.cut(rfm.最近一回の消費,bins,labels=labels);
bins = rfm.消費頻度.quantile(q=np.linspace(0,1,6),interpolation='nearest')  
bins[0]=0 
labels=[1,2,3,4,5] 
F1 = pd.cut(rfm.消費頻度,bins,labels=labels);
bins = rfm.消費金額.quantile(q=np.linspace(0,1,6),interpolation='nearest')  
bins[0]=0  
labels=[1, 2, 3, 4, 5]  
M1 = pd.cut(rfm.消費金額,bins,labels=labels);
rfm['R1']=R1  
rfm['F1']=F1  
rfm['M1']=M1
rfm.head()

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/a7b12d57-db60-1322-01ab-eaaeb598a763.png)


```Python
bins = rfm.RFM.quantile(q=[0,0.125,0.25,0.375,0.5,0.625,0.75,0.875,1],interpolation='nearest')  
bins[0] =0
labels =['顧客離反','一般維持顧客顧客','一般発展顧客','ポテンシャル顧客','重要な離反防止顧客','重要維持顧客','重要発展顧客','重要価値顧客']
rfm['ユーザー層分け'] = pd.cut(rfm.RFM,bins,labels=labels)


rfm=rfm.rename(columns={'最近一回の消費':'last_sale_day','消費頻度':'sale_frq','消費金額':'sale_amt','ユーザー層分け':'customer_classification',})
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/64774bf4-5f55-3f24-14e3-d6284f545927.png)

このように、私たちはPythonを用いて数万人の顧客をFRMに基づいてユーザーレベルに分け、対応するマーケティング戦略の差別化活動を行うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/c6e9e9c9-33cf-e002-cd1f-4f1c1c4291b8.png)

## 2.RFM分析を使用して製品価値を判断する
RFM1M2モデルを使用する


具体的な実際のビジネスにおいて、スコアリングの範囲をどのように定義するかは、具体的なビジネスに応じて柔軟に定める必要があり、統一された基準はありません。


- 関連するパッケージのインポート。
- データのインポート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/2249c38b-1bb3-7791-e64e-18db26ce21aa.png)

- データクレンジング

- RFM指標の構築
R-Recency 最後にベストセラーリストに出現してから現時点までの日数
F-Frequency リスト掲載回数
M1-トップ10に入った回数
M2-最近3日間でトップ10に入った回数

- RFMのスコア付けとラベルの描画

| 運用ニーズに基づくスコア付け | 最後にランクイン-R | ランクイン回数-F | トップ10入り回数-M1 | 最近3日間でのトップ10入り回数-M2 |
| --- | --- | --- | --- | --- |
| 1 | 80日以上 | 20回未満 | 5回未満 | 1回 |
| 2 | 30-80日 | 20-40回 | 5-20回 | 2回 |
| 3 | 15-30日 | 40-60回 | 20-60回 | 3回 |
| 4 | 3-15日 | 60-80回 | 60-80回 |   |
| 5 | 3日以内 | 85回以上 | 85回以上 |   |

``` Python
rfm['R_value']=rfm['R'].apply(lambda x:'高' if x> rfm['R'].mean() else '低')
rfm['F_value']=rfm['F'].apply(lambda x:'高' if x> rfm['F'].mean() else '低')
rfm['M1_value']=rfm['M1'].apply(lambda x:'高' if x> rfm['M1'].mean() else '低')
rfm['M2_value']=rfm['M2'].apply(lambda x:'高' if x> rfm['M2'].mean() else '低')
rfm['rfm_value']=rfm['R_value']+rfm['F_value']+rfm['M1_value']+rfm['M2_value']

rfm
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/37fe383b-e416-fe83-c330-29c82671a9b5.png)

異なるカテゴリには異なるタグを付け、異なるタグは異なる製品タイプを意味し、それは異なる対応策略を意味します。

層別化ルール
``` Python
# 分层规则
rfm2cat = {'高高高高':'竞合商品を持続的に注視する',
'高高低高':'旧製品を重点的に調査する',
'高低高高':'新製品を重点的に調査する',
'高高高低':'旧製品を重点的に維持する',
'低低低高':'新製品を一般的に調査する',
'高低低高':'新製品を一般的に調査する',
'低高高低':'旧製品を一般的に調査する',
'高高低低':'旧製品を一般的に注視する',
'低高低低':'旧製品を一般的に注視する',}
```

![截屏2024-04-23 00.33.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535759/423033c1-cc77-2814-e658-b9d238b9486d.png)

``` Python
rfm.to_csv('rfm.csv',encoding='gbk')
```

- このカテゴリーに基づいて、私たちは異なるマーケティング戦略ことができます。例えば：

- 竞合商品を持続的に注視する（'高高高高'）：私たちは競争商品の動向を持続的に注視し、その長所や革新的な部分を分析することで、私たちは学び、改善することができます。また、市場のトレンドと消費者の需要の変化にも密接に注意を払い、私たちの製品と戦略を適時に調整する必要があります。
- 旧製品を重点的に調査する（'高高低高'）：旧製品については、その性能とユーザーフィードバックを理解するために深く調査する必要があります。これは、製品の性能とユーザー満足度を向上させるための改善点を見つけるのに役立ちます。
- 新製品を重点的に調査する（'高低高高'）：新製品については、市場の需要と競争状況を理解するために、深い市場調査を行う必要があります。これは、効果的な市場推進戦略を策定し、市場シェアを迅速に獲得するのに役立ちます。
- 旧製品を一般的に調査する（'低高高低'，'高高低低'，'低高低低'）：これらの製品については、市場でのパフォーマンスと競争状況を理解するために、一般的な調査を行うことができます。調査の結果に基づいて、私たちは製品戦略と市場戦略を調整することができます。
- 新製品を一般的に調査する（'低低低高'，'高低低高'）：これらの新製品については、市場の反応と潜在的な競争状況を理解するために、一般的な市場調査を行うことができます。調査の結果に基づいて、私たちは製品設計と市場戦略を調整することができます。
- 
このような戦略を通じて、私たちは製品をより効果的に管理し、異なるタイプの製品に対して適切なマーケティング戦略を実施することができます。