我之前一直有个困扰,领导是一个很重视数据指标的人,我每天早上9点,领导准时呼唤我,为什么今天的数据是这样子,是有什么问题吗,刚开始吧,还好,但是每天都要问,我都害怕,但是吧,后来也觉得这样子也不合适,天天问再解决,要提前预警啊,所以立了这个项目,这篇文章就是跟大家系统的介绍数据指标预警系统的东西。
01指标的类型
一般的公司的数据指标会分布在以下几个维度:
1、用户数量检测
每天早会,一般都会对昨日的活跃用户,成交用户,新增用户的数据做回报,以确认过去的一天或者几天的用户数据是稳定的,但是假设不稳定,可能就需要找出不稳定的原因,找不稳定的原因这个工作就是数据分析师做,往往这个工作是最没有头绪的,之前出现相似的情况还好,假设之前没出现过相似情况,需要从数据源头一步一步分析,可能一两天下来,结论就是偶然现象,那就很狗血了,那么预警不能帮你分析,但是在你分析问题的路径上,建立主要指标,用来预警总体用户数量的变化是否正常。
假设你要看活跃用户的数据是否问题,假设现在你是不稳定的了哈,那么照着这个逻辑,就是查看每个时段活跃用户的占比,与之前的数据相对比,这时候你的数据指标预警体系中,活跃用户的时间段异常报警就需要有了,这个指标描述更通俗一点,就是例如这个指标就是统计每个时段活跃用户的总数占整体总数的占比与之前数据的差别,以及时段活跃用户人数与之前数据的差别,假设这两个差别不大,那么你在回报的时候至少你可以肯定跟领导说 时段差异这个没啥。
但是你会说,你这种指标我也有啊,我为什么要预警,预警是为了提醒你,因为不一定你每天都能看指标的数据,所以预警就是发现异常才推送给你,那么异常的阈值你设置的差别的差距,例如2点的活跃用户之前是3000多,今天是300,那明显就差很多,你要是实在不知道设置差别多少是异常,就问领导多少的差距是可以接受的。
2、关键事件的转化率。
关键事件的转化率,这个大部分服务于开发的产品经理,为什么呢,因为转化率的异常大部分是因为页面功能出现异常导致的,这种转化率的预警特别关键,可以及时提醒开发的产品经理页面错误,从而修复bug。例如前一晚发版迭代新功能,隔天的转化有变化,立马就可以响应起来了。
3、模型效果的监控。
这个应该是建模人员经常用到的,首先,模型效果监控是我们经常用到的,那么模型效果的指标就需要做预警。其次,还有模型的主要变量也是要监控预警的,因为部分纬度是来自于第三方,那么假设第三方的数据出错,或者接口失常,回来的数据可能是空的,你也不知道(这里我怎么会说数据是空的还不知道呢,因为往往很多时候,线上的情况多种多样,为了模型稳定运行,会做一些兼容,应对复杂的线上数据格式,就担心你把api返回的数据是空和这个数据本来是空给兼容成一样的了)。最后一点,我想重点跟大家说下是,调模型的api次数,为什么这个也要监控预警呢,因为数据调模型的条件,很多时候是过了前置规则的用户数据,那么正常情况下,一天各个时段有多少用户数据会调模型次数应该是差不多的(除非你们运营投入推广),假设突然有天变少了,你就要怀疑是不是你的规则的变量出错了,或者你的规则设置的时候把数字设置错误了。
02、指标预警方法。
1、比率占比法。
指标类型哪里,我也一直提到这个方法,其实就是看各个区间的占比是否跟之前的比较接近,但是这里需要注意的是,不要把“之前”拉的太长,一般是最近7天或者最近3天就可以了。那么这个时段之前的占比(或数据量),这个占比有以下几种方法可以参考:
- A、就是计算过去几天的每个时段的平均占比(或数据量)。
- B、过去7天,按照距离的时间越长,那么权重变少,例如最近往前推一天是0.5,最近往前推二天是0.3,这样子的权重计算。
- C、就是只用过去一天的数据做对比,但是这个不太实际,不过也要看你的业务是怎样的。
2、统计方法
- 1、时间序列分析。数据量在时间序列上是可以有规律可以遵循的,所以可以利用时间序列分析的方法,预测当天的数据量,若数据量与实际相差太多,则触发指标预警推送。(这种方法不推荐,在理论上可以过得去,但是实际的运用其实相对复杂并且效果也不一定好)
- 2、相关系数计算。第一点的占比法中,需要每个时段都去计算差别,产生的指标就会多,一旦这种数据量的类型多起来,就会很复杂,所以可以将这些占比列成一个向量,计算今天与之前的数据量组成的向量的相关系数的大小,当太小的时候,主动触发预警。
3、差值法&定值法。
这个方法是最简单的,这个在模型监控中常用到,其实就是将原先的模型效果与现在的模型效果做比较,或者直接计算模型KS后者auc值看是否低于某值,则预警,但是这里注意的是,这种模型的预警一般没办法以天为周期计算,因为模型的y值往往是有滞后性的。
4、孤立点检测。
上面的几个方法是在单一维度上的,有时候单一纬度看不出问题,需要用多维度观察是否异常的时候,可以通过纬度建立的向量,例如你要检测整体用户交易的数据是否存在异常,假设你有数据量为:新增用户数、单一用户提交订单数、单一用户申请数量、单一用户成功交易数量,这四个数据,列出过往7天,每天的数据构建出一个向量,里面上你有7个向量,如果你的数据没问题,那么这7个向量应该是聚集在一起的,假设你今天的数据有异常,那么你今天的数据构建出来的向量应该是离7天的那一撮聚集点是比较远的,远多少呢,可以用向量的距离表示,欧式距离呀,余弦距离啊之类,你自己选一个,距离多远需要预警推送,那你就自己定义啦。
03指标的预警通知方法:
1、钉钉机器人&企业微信机器人通知
钉钉机器人还有企业微信机器人都设置了群机器人的功能,大部分的开发会拿来检测任务是否正常运行,或者定时任务是否完成运行的提醒,所以你也可以拿来作为你的指标预警推送,网上都有响应的教程可以作为参考,写python即可实现。
2、邮件通知
当公司没有第一点的软件,或者机器不能链接外网的时候,可以借助邮件推送的方式,利用python中的smtplib包实现。
3、平台推送
到了特地为每个分析师都开发了这个预警平台或者自研的bi平台可以满足预警推送的功能化,也可以通过平台推送,但貌似没有邮件或者钉钉直接耶。
04、指标预警管理
1、指标重要性排序
预警的指标越多,越频繁,你越到后面其实会慢慢的不重视了,所以首先,预警指标需要做重要性排序,先实现会经常出现异常导致你经常加班分析的指标,先实现在业务层面的重要指标,预警指标推送时间不要挤在一起,不然你同时接受多个预警,你不会仔细去看,而且要是都是异常的话,一下子那么多异常出来,你会心慌,那么分析思路就不那么清晰了。
2、指标收件人。
如果你是以邮件的形式发送的话,建议可以新建一个py文件放置你要指定知道这些异常推送的人,然后以import的形式导入,那么你要每次增加收件人,就只需要修改这个文件就可以了。
3、指标定时任务设置
各家公司的定时任务设置不同,有些直接是在服务器,有些是在平台上就可以了,但是这里提醒一下就是,指标预警是需要跑代码的,所以你在设置这个自动任务的时候,需要再设置一个推送,则是否跑代码完成,以至于你可以检查到底是没报错,还是没跑代码。
往期推荐阅读:
python serise处理 60句 +字符串处理 40句