前言
RFM模型是衡量客户价值和客户创造利益能力的重要工具和手段,通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况,应用广泛。
就本案例而言,目的不是筛选优质客户,而是筛选非优质客户,因为对于保险公司而言,不出险的客户都可以算是优质客户,而已赔案件都是出险的客户,通过构建RFM指标,筛选金额较大、赔付周期较长、出险频率较高的客户,来为承保部门提供参考。
一、指标构建
以车牌号为索引通过数据透视表构建指标,部分已构建数据展示如下:
二、数据建模
1.读取数据
import numpy as np
import pandas as pd
df=pd.read_csv(".../RFM数据.csv",encoding="gbk")
# 查看数据分布
desc_pd =df.describe().T
数据分布如下
2.数据分箱
# 定义区间边界
r_bins = [-1,1,4,11,2600] # 左开右闭区间,起始边界小于最小值
f_bins = [0,2,11]
m_bins = [50,1840,7745,410000]
# RFM分箱得分
df['r_score'] = pd.cut(df['R'], r_bins, labels=[i for i in range(len(r_bins)-1)]) # 计算R得分 倒序排列
df['f_score'] = pd.cut(df['F'], f_bins, labels=[i+1 for i in range(len(f_bins)-1)]) # 计算F得分
df['m_score'] = pd.cut(df['M'], m_bins, labels=[i+1 for i in range(len(m_bins)-1)]) # 计算M得分
# 计算RFM总得分
df[['r_score','f_score','m_score']] = df[['r_score','f_score','m_score']].apply(np.int32)
df['rfm_score'] = df['r_score'] + df['f_score'] + df['m_score']
分箱后的数据
分箱的边界是通过分位数进行定界,也可以结合经验进行定界。
对于金额及周期比较好实现,但出险频率涉及交商关联,即一次双车事故,在数据上会体现为2次频率,但实际只出险1次,所以频率在分箱时以2为边界,分为两个区间,即将出险次数大于1次与只有1次的客户区分出来,分值从2-8,接下来只需要分析得分为7分和8分的客户即可。
3.合并及导出数据
df1=pd.read_csv(".../原始数据.csv",encoding="gbk")
f_df=pd.merge(df1,df,on='车牌号',how='outer') # 将两个数据合并
f_df.to_csv('.../f_rfm_score.csv') 导出数据
三、数据可视化展示
1.类别占比
得分为2-8,其中7分与8分的数据量占比16%,但支付金额占比57.8%,也就是16%的客户需要反馈至承保部门。
2.车型及险种占比
车型主要是家庭自用车及营业货车支付金额较高,这与公司承保比例有一定关系。
险种以商业险为主。(0:交强险,1:商业险)
3.承保部门数据占比
通过排序可以分析出这些车辆是哪个承保部门占比较大,将数据反馈至承保部门,由承保部门结合自己的承保环境来进行判断这些客户是否属于非优质客户。
总结
1.RFM是一种比较常见的客户分类方法,适用于很多场景,代码实现也很简单,甚至可以在excel上通过函数实现,不需要用Python,这对于不熟悉Python的小伙伴也是友好的。
2.想实现自动化的朋友也可以将指标构建那段通过代码实现,将代码封装,这样就可以直接运行,不用每次自己编写。
3.最终RFM得分还可以有两种方式,一种是通过数字组合区分,比如323,223这种方式细分,另一种则是需要事先对客户等级进行划分,引入回归模型对客户等级下的RFM进行权重判断,获得权重信息,进行加权得分,得到最终分值。
4.对于得分较高的客户,还需要结合承保进行区分,比如这个客户的车辆价值较高,或者属于公司法人,名下车辆较多,又或者该车与出单地点关系密切等很多因素需要考量,就不一一赘述。