rfm模型python开发环境
时间: 2025-02-24 13:36:20 浏览: 33
### 构建和应用RFM模型
#### 数据准备
为了构建RFM模型,需要有客户的交易数据。这些数据应至少包含三个字段:客户ID、交易金额以及交易时间[^2]。
```python
import pandas as pd
# 创建一个简单的DataFrame作为示例数据集
data = {
'CustomerID': ['A', 'B', 'C'],
'TransactionAmount': [100, 200, 300],
'TransactionDate': ['2023-09-01', '2023-08-15', '2023-07-10']
}
df = pd.DataFrame(data)
# 将日期字符串转换成datetime对象以便后续处理
df['TransactionDate'] = pd.to_datetime(df['TransactionDate'])
```
#### 计算R(Recency)、F(Frequency)和M(Monetary)
基于上述的数据框架,可以计算每位顾客的最近一次购买天数(R),购买次数(F),总花费(M)[^1]:
```python
snapshot_date = df.TransactionDate.max() + pd.DateOffset(days=1)
rfm_table = df.groupby('CustomerID').agg({
'TransactionDate': lambda x: (snapshot_date - x.max()).days,
'CustomerID': 'count',
'TransactionAmount': 'sum'
}).rename(columns={
'TransactionDate': 'Recency',
'CustomerID': 'Frequency',
'TransactionAmount': 'MonetaryValue'
})
```
#### 维度打分与分值计算
对于每一个维度——即R、F 和 M,可以根据业务需求设定评分标准来量化各个指标的重要性,并据此给定分数;之后再通过加权求和等方式得出综合得分用于客户分类[^1]。
```python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_rfm = scaler.fit_transform(rfm_table[['Recency', 'Frequency', 'MonetaryValue']])
rfm_table_scaled = pd.DataFrame(scaled_rfm, index=rfm_table.index, columns=['Scaled_Recency', 'Scaled_Frequency', 'Scaled_Monetary'])
def score(x):
if x >= 0.6:
return 5
elif x >= 0.4:
return 4
elif x >= 0.2:
return 3
elif x >= 0.1:
return 2
else:
return 1
for col in rfm_table_scaled.columns:
rfm_table[col+'_Score'] = rfm_table_scaled[col].apply(score)
rfm_table['Total_Score'] = rfm_table[[col+'_Score' for col in rfm_table_scaled]].sum(axis=1)
```
#### 客户分层
最后一步是对不同类型的客户群体进行划分,这通常依据之前得到的整体评分来进行聚类分析或其他形式的分割操作,从而识别出高价值客户群以及其他潜在目标市场。
```python
quantiles = rfm_table.Total_Score.quantile(q=[0.25, 0.5, 0.75])
conditions = [
(rfm_table.Total_Score <= quantiles.iloc[0]),
(rfm_table.Total_Score > quantiles.iloc[0]) & (rfm_table.Total_Score <= quantiles.iloc[1]),
(rfm_table.Total_Score > quantiles.iloc[1]) & (rfm_table.Total_Score <= quantiles.iloc[2]),
(rfm_table.Total_Score > quantiles.iloc[2])]
choices = ["Low", "Medium-Low", "Medium-High", "High"]
rfm_table["Segment"] = np.select(conditions, choices, default="Unknown")
print(rfm_table)
```
阅读全文
相关推荐


















