前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型训练完才是业务的开始?说说模型监控 | CSDN博文精选

模型训练完才是业务的开始?说说模型监控 | CSDN博文精选

作者头像
AI科技大本营
发布2019-12-10 16:10:37
1.3K0
发布2019-12-10 16:10:37
举报

扫码参与CSDN“原力计划”

作者 | A字头

来源 | 数据札记倌(ID:Data_Groom)

“模型训练结束后才是业务真正的开始”

简述

每次模型训练完成后,并不意味着项目的结束,在训练模型后,我们还需要将其稳定上线,然后部署一套相应的监控体系,这时候模型才开始稳定运行在业务场景中。在我们以往接触的大多文章都只是告诉你如何构建模型,但是在模型上线后的监控同样重要,我们需要通过对模型的监控来掌握模型运作情况,了解业务变化趋势。

在我看来对模型的监控主要有两方面:一方面是对模型本身的性能进行监控;另外一方面是监控业务信息,更了解业务发展情况。

对模型本身性能的监控主要涉及以下几个关键指标:

0、Confusion Matrix

1、AUC(binary)

2、KS(binary)

3、PSI

4、Lift & Gain

5、MSE(Regression)

对业务信息的监控主要会设计以下指标:

1、评分监控(评分模型)

2、响应率监控

3、模型变量监控(缺失值,平均值,最大值,最小值等,变量分布)

4、模型调用次数

对模型本身性能的监控

0、Confusion Matrix

混淆矩阵有几个古老的概念:TP(实际为正预测为正),FP(实际为负但预测为正),TN(实际为负预测为负),FN(实际为正但预测为负)

通过混淆矩阵我们可以给出各指标的值:

查全率(召回率,recall):样本中的正例有多少被预测准确了,衡量的是查全率,预测对的正例数占真正的正例数的比率:

查全率=TP / (TP+FN)

Precision:针对预测结果而言,预测为正的样本有多少是真正的正样本,衡量的是查准率,预测正确的正例数占预测为正例总量的比率:

Precision=TP / (TP+FP)

Accuracy:反应分类器统对整个样本的判定能力,能将正的判定为正,负的判定为负的能力,计算公式:

Accuracy=(TP+TN) / (TP+FP+TN+FN)

但是往往准确率并不能直观地反应模型的预测能力:

例如一个集合里有100个样本,99个正样本和1个负样本,全预测为正样本都有99%的准确度,但是没有任何预测能力,后续的KS和AUC可以弥补这些不足。

F1度量

先看公式:

其中β表示查全率与查准率的权重

1. β=1,查全率的权重=查准率的权重,就是F1

2. β>1,查全率的权重>查准率的权重

3. β<1,查全率的权重<查准率的权重

那么问题又来了,如果说我们有多个二分类混淆矩阵,应该怎么评价F1指标呢?

很简单嘛,直接计算平均值就可以:可以计算出查全率和查准率的平均值,再计算F1;或者先计算TP,FP,FN,TN的平均值,再计算F1。

参考来源:

https://www.zhihu.com/question/30643044/answer/48955833

1. KS&AUC

模型在上线应用后,也需要及时地进行验证,在每一次样本走完表现期后,需要及时地选取样本进行验证。关于这两个指标应该不用做过多介绍,和我们在建模时使用的逻辑是一样的。

计算公式:

关于KS&AUC推荐一个资料,里面介绍相当详细:

http://rosen.xyz/2018/02/01/AUC%E5%92%8CKS%E6%8C%87%E6%A0%87/

KS&AUC 反映了模型开发期间与当前客户的客群变化,当KS和AUC相比建模时的数据没有较大下降时都可以不重新训练模型:

代码语言:javascript
复制
# target rate & KS监控
logging.info('生成Targer rate & KS监控')
monitor_fst.score_target_monitor(df_target_fst, lag_days=8, interval_days=7, date=run_date)
monitor_fst.score_target_plot(show_days=10, lag_days=8, interval_days=7, keep_base=False, date=run_date)
monitor_fst.ks_monitor_plot(show_days=10)
logging.info('Targer rate & KS监控生成结束')

2. 模型分数稳定性分析-PSI

目的在于分析衡量两段时间(模型开发期间与目前)客户的客层变化,作为评分卡有效性的早期预警,并了解通过率的变动是否来自于客群的变动。

PSI的计算公式:

PSI = sum((实际占比-预期占比)* ln(实际占比/预期占比))

举例:

比如训练一个logistic回归模型,预测时候会有个概率输出p。

测试集上的输出设定为p1,将它从小到大排序后10等分,如0-0.1,0.1-0.2,......。

现在用这个模型去对新的样本进行预测,预测结果叫p2,按p1的区间也划分为10等分。

实际占比就是p2上在各区间的用户占比,预期占比就是p1上各区间的用户占比。

如果p1和p2上各区间的用户相近,占比变化不会很大,预测的结果有额不会有较大差距,那么模型相对比较稳定。

通过观测这些PSI的大小和走势,从而实现对评分卡稳定性的监测。通常PSI会以日、周和月为维度进行计算,同时也会对评分卡模型中各个特征变量分别做PSI监测。

判断标准:

若PSI<0.1,表示客户群体从模型开发到实施的稳定性较高,模型不需要更新;

若0.1<= PSI <=0.25,表示客户群体发生了一定的变化,模型需要关注,随时需要更新;

若PSI >0.25, 表示客户群体发生较大变化,模型需要更新。

模型分数的变化可能由特征变化引起,也可能是模型本身不稳定引起,若是高分段总数量没变,而PSI值变动较大,认为需要重训模型。若是PSI值没变,高分段总数量变多,认为整体用户变好。

3.Lift 和Gain

Lift图衡量的是,与不利用模型相比,模型的预测能力“变好”了多少,lift(提升指数)越大,模型的运行效果越好。

Gain图是描述整体精准度的指标。

计算公式如下:

作图步骤:

1. 根据学习器的预测结果(注意,是正样本的概率值,非0/1变量)对样本进行排序(从大到小)-----这就是截断点依次选取的顺序

2. 按顺序选取截断点,并计算Lift和Gain

---也可以只选取n个截断点,分别在1/n,2/n,3/n等位置

例图(来自网络):

详细解释:

https://cosx.org/2009/02/measure-classification-model-performance-lift-gain/

4.MSE

MSE (Mean Squared Error)叫做均方误差。看公式

这里的y是测试集上的。

用 真实值-预测值 然后平方之后求和平均。

猛着看一下这个公式是不是觉得眼熟,这不就是线性回归的损失函数嘛!!!对,在线性回归的时候我们的目的就是让这个损失函数最小。那么模型做出来了,我们把损失函数丢到测试集上去看看损失值不就好了嘛。简单直观暴力!

有时计算均方根误差(RMSE)也可以。

不用解释了吧

线性回归算法评价指标三连,可以灵活搭配:MSE、RMSE、R2_score

上面提到的这么多指标不需要每一个都应用起来,可以根据需要选择几个核心指标应用就可以。

业务信息相关监控

1. 评分分布

通过对模型评分分布的监控,我们可以知道每一个评分周期模型评分的变化情况,可以反映每一个评分周期里不同分数段的占比情况,对应的可能是业务的通过率或者拒绝率等;

代码语言:javascript
复制
# 评分监控
import logging
monitor_fst = ModelMonitor(score_var='score', target='target', cut_points=fst_cut_points,
output_path=os.path.join(output_path, 'monitor_file', 'fst'))
logging.info('生成打分监控')
monitor_fst.score_monitor(df_score_fst, valid=np.array([0.1] * 10), date=run_date)
monitor_fst.score_monitor_plot(show_days=10, keep_base=False)
logging.info('打分监控结果生成结束')

2. 响应率变化情况

通过分析每一个表现期的响应率,可以清楚看到响应率的变化趋势,同时可以看出真实响应率与预测的响应率之间的差距。

不过这个有一定的滞后性,通常需要等到样本整个表现期走完,才能比较真实的target rate与预测值之间的差距。

3. 变量监控

除了了解结果,我们也需要掌握每一个变量的变化情况,通过对变量分布的监控,能很快的知道用户群体发生了哪些迁移,这些迁移对模型有哪些影响,这种变化是否是异常情况?还是有变化的趋势?如果变量存在这种变化,我们是否需要refit模型?我们都可以从变量监控里获取这些信息。当然,对于模型refit的问题,不能仅仅依靠这一点来判断,需要综合其他指标来衡量,尤其是对模型本身性能的监控上。

例如下图中对模型中一个变量分布的监控:

代码语言:javascript
复制
# 变量监控logging.info('生成变量监控')monitor_fst.var_monitor(df_orig_fst, file_name='var_distribution_monitor_daily_fst.csv',var_list=var_list_fst, cat_value_dict=cat_value_dict, date=run_date)monitor_fst.var_monitor_plot('var_distribution_monitor_daily_fst.csv', show_days=10, var_list=var_list_fst, cat_value_dict=cat_value_dict, keep_base=False, num=6) #输入你所需要的变量var_list_fstlogging.info('变量监控结果生成结束')

4.模型调用次数

对模型调用次数的监控在某种程度上不属于模型监控的范围,但是也有其存在的理由;尤其在特定的业务场景中,比如我们每天有固定数量的用户经过模型评分来判断是否被拒,如果某一天用户数量激增或者骤减,也能从模型评分过程中及时发现问题。

由于这个监控涉及了一些业务知识,就不放完整代码啦

点击阅读原文,查看作者更多文章。

技术的道路一个人走着极为艰难?

一身的本领得不施展?

优质的文章得不到曝光?

别担心,

即刻起,CSDN 将为你带来创新创造创变展现的大舞台,

扫描下方二维码,欢迎加入 CSDN 「原力计划」!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技大本营 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
前端性能监控
前端性能监控(Real User Monitoring,RUM)是一站式前端监控解决方案,专注于 Web、小程序等场景监控。前端性能监控聚焦用户页面性能(页面测速,接口测速,CDN 测速等)和质量(JS 错误,Ajax 错误等),并且联动腾讯云应用性能监控实现前后端一体化监控。用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面质量的全方位守护,真正做到低成本使用和无侵入监控。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档