目录:
1 项目背景和问题框架
2 客户还款模型搭建
2.1 数据介绍和特征体系
2.2 机器学习建模和模型评估
3 模型的应用
4 效果评估
1,项目项目背景和问题框架
还款提醒:在信贷场景中,金融机构给客户发放贷款后,在客户账单日前(一般是还钱前7天或5天)会通过短信、微信公众号信息、IVR或语音机器人等 方式进行一次或多次提醒,以告知客户还款时间、还款金额、还款账号等信息。适当的还款提醒有利于敦促客户及时还款,维护良好信用记录,同时也能降低机构账款逾期率,减轻催收成本。但过度的还款提醒,则容易引起客户反感甚至投诉,严重影响客户体验。因此,还款提醒需要寻求提醒效果(降低流入率)和客户体验(大部分客户不会逾期)之间的平衡
当前公司面临的问题:
-
一方面,流入率长期在两位数的高位,需要加强提醒频次和强度,减轻贷后催收压力;
-
另一方面,不断有客户反馈自己不会逾期但也频繁收到提醒信息,感觉自己被“催收”了。部分投诉至业务部门或渠道(公司线上线下、C端和小B业务都有),需降低提醒频次和强度,以提升客户体验
现状和解决方案:
公司目前采用相同的提醒频次和强度对所有客户无差别的提醒,现需要对还款客户进行分群,以区分“大概率会逾期”的客户进行重点提醒,降低流入率;“大概率不会逾期”的客户降低提醒频次,提升客户体验
2 客户还款模型搭建
2.1样本定义
数据观察点:还款前7天-0天客户(包含回流客户)
观察期:还款前7天-0天,如客户在此期间还款,则为好样本,如客户D0未还款流入M1,则为坏样本
2.2数据介绍和特征体系
(此处省略取数的大几段SQL和数据清洗过程中的10086个吐槽。。。)
数据集介绍:初始数据集:10154*18,经过特征工程后,剩余8623*12。由于数据为公司某一产品的真实生产数据,模型部亦部署上线,为避免信息泄露,在展示时对数据进行了脱敏处理。
数据特征集如下:
当产品跨度较大时,需要按产品分别建模。不同产品特征选用会有差异。
2.3 机器学习建模和模型比较
主要使用随机森林、逻辑回归进行模型比较。
#数据划分
train = df_d.iloc[:,df_d.columns != "是否流入"]
lab = df_d.iloc[:,df_d.columns == "是否流入"]
xtrain,xtest,ytrain,ytest=train_test_split(train,lab,test_size=0.4,random_state=100)
for i in [xtrain,xtest,ytrain,ytest]:
i.index = range(i.shape[0])
随机森林建模:
rdf = RandomForestClassifier(max_depth= 3
# ,criterion= "entropy"
,n_estimators=100)
rdf.fit(xtrain,ytrain)
rdf.score(xtrain,ytrain), rdf.score(xtest,ytest), cross_val_score(rdf,train,lab,cv=5).mean()
#输出:(0.8476705973323023, 0.8515942028985507, 0.8117818353004471)
网格搜索后可进一步优化参数。
查看特征重要性:
pd.DataFrame([xtrain.columns,rdf.feature_importances_]).T
特征重要性分布:
cutoff=0.5(系统默认)下, 查看混淆矩阵、ks、roc_auc、召回率
y_pred = rdf.predict(xtest)
cnf_matrix = confusion_matrix(ytest, y_pred)
recall_value = recall_score(ytest, y_pred)
precision_value = precision_score(ytest, y_pred)
acc = accuracy_score(ytest, y_pred)
cnf_matrix, recall_value, precision_value, acc
#输出:(array([[2680, 88],
[ 437, 245]], dtype=int64),
0.3592375366568915,
0.7357357357357357,
0.8478260869565217)
y_score_test = rdf.predict_proba(xtest)[:, 1]
fpr, tpr, thresholds = roc_curve(ytest, y_score_test)
roc_auc = auc(fpr, tpr)
ks = max(tpr - fpr)
ar = 2*roc_auc-1
ks,ar
#输出:(0.5277893139864052, 0.6120090519214143)
roc_auc_score(ytest,rdf.predict(xtest))
@输出:0.6786035899858797
逻辑回归建模:
sta = StandardScaler()
sta =sta.fit(train)
train_sta = sta.transform(train)
xtrain_sta = sta.transform(xtrain)
xtest_sta = sta.transform(xtest)
lr = LogisticRegression( C= 1,
penalty = 'l2',
# solver = 'sag',
class_weight ={0:1,1:3}
)
lr = lr.fit(xtrain_sta,ytrain)
lr.score(xtrain_sta,ytrain), cross_val_score(lr,train_sta,lab,cv=4).mean()
#输出:(0.8327856176300019, 0.8076076475728448)
模型评估:
roc_auc_score(ytest,lr.predict(xtest_sta)),
#输出:0.7348038114691573,
y_pred = lr.predict(xtest_sta)
cnf_matrix = confusion_matrix(ytest, y_pred)
recall_value = recall_score(ytest, y_pred)
precision_value = precision_score(ytest, y_pred)
acc = accuracy_score(ytest, y_pred)
cnf_matrix, recall_value, precision_value, acc
#输出:(array([[2485, 283],
[ 292, 390]], dtype=int64),
0.5718475073313783,
0.5794947994056464,
0.8333333333333334)
#y_score_test = lr.predict_proba(xtest_sta)[:, 1]
fpr, tpr, thresholds = roc_curve(ytest, y_score_test)
roc_auc = auc(fpr, tpr)
ks = max(tpr - fpr)
ar = 2*roc_auc-1
ks,ar
#输出(0.5168452189242791, 0.6334867060498706)
查看predict_proba下预测结果分布:
a = pd.DataFrame(lr.predict_proba(xtest_sta))
b = pd.DataFrame(lr.predict(xtest_sta),columns=['预测值'])
c = pd.DataFrame(ytest)
df_rsi = pd.concat([c,b,a],axis=1)
df_rsi.columns = ["是否流入","预测值","0的概率","1的概率"]
df_rsi
df_rsi["流入概率分箱"] = pd.cut(df_rsi["1的概率"],
bins=[0,0.12,0.25,0.36,0.48,0.6,0.72,1],
right=False,
labels=[1, 2, 3, 4, 5,6,7])
df_rsi
pt = pd.pivot_table(df_rsi,
index=['流入概率分箱'],
fill_value=0,
columns=['是否流入'],
values=['预测值'],
aggfunc=[len],
margins=True)
pd.DataFrame(pt)
w = pd.DataFrame(pt)
w.columns = ["zero","one","all"]
w["流入百分比"]= w["one"]/ w["all"]
print(w)
输出:
如上图:只需要对流入概率分箱中3-7约50%的客户进行还款提醒,即可覆盖85%的流入客户。
上线模型选择:
综合考虑:
-
模型指标和性能
-
业务实际情况
最终选用逻辑回归分类器进行模型搭建。变量衍生后,经分箱、woe转化,重新拟合模型。
3 模型应用
模型非常简单。部署上线后,在客户还款前七天开始跑数据,得到每个还款客户的predict_proba(流入概率),并同时输出权重得分最高的三个指标(在模型上线后优化)。不同产品策略略有差异,还款提醒策略如下:
4 效果评估
1,ABtest的2个月,客户还款前咨诉率下降55%,有抵押产品流入率下降18%(线下信用贷下降15%,消金产品下降11%)。
2,在客户咨诉时,可以看到影响客户流入概率权重最高的3个指标,因此在客服处理时,模型能快速定位问题,协助客服运营人员选用合适的处理话术。
3,目前模型主要应用于贷后风险、运营环节。模型已运行2年有余,期间迭代2次,当前运行平稳
做过的,简单且效果很好的项目之一