0
点赞
收藏
分享

微信扫一扫

异常数据分析

DYBOY 2022-03-21 阅读 22
r语言

数据异常分析

文章目录

如何确定异常

数学上

一般以2倍标准差、3倍标准差作为判断标准

实战中

根据同比、环比、对比(例如竞品、相关指标(活跃用户与付费用户))
可以考虑《智能运维挑战赛》的思路

探索异常的原因

首先确定数据是否准确

  • 数据收集是否全面
  • 数据来源是否有更改变化
  • 数据任务ETL是否跑完
  • 统计口径是否发生变化

判断已知动作是否带来影响,计算影响量级

  • 产品是否改版(如:功能样式变化等)
  • 运营是否有行为(如:PUSH、热点、激励计划等)
  • 算法是否调整(如:分发策略等)
  • 渠道是否发生变化(如:新增投放渠道增减等)
  • 竞争对手是否有活动(如:电商天猫双11,京东618)

对异常指标拆解定位

  1. 第一步:将综合指标拆解成单一指标

  2. 第二步:将单一指标拆解分析

    1. 多维分析:用户属性、生命周期(新老、活跃)、进入方式(push、活动、搜索)、系统、版本
    2. 漏斗分析:转化类指标,如订单转化率
  3. 第三步:对异常指标,进行假设检验找出原因

    购买会员的销售总额 = 销售人数 * 平均单价

    销售人数 = 首次购买人数(老用户+其他渠道新用户)

    +再次购买人数(续费率(产品维度、顾客群体维度、缴费月数额度) * 上周期已购买人数)

量化角度

某个指标下降了,如何找到与之关联的最可能的原因

常见指标
  • 贡献度:
    D k = Δ A k ∣ Δ A ∣ D_{k} = \frac{\Delta A_{k}}{|\Delta A|} Dk=ΔAΔAk
    其中k代表A的一个细分维度,比如渠道(Android Channel)
  • TGI:
    T G I k = Δ A k / A k 0 Δ A / A 0 TGI_{k} = \frac{\Delta A_{k}/A_{k}^{0}}{\Delta A/A^{0}} TGIk=ΔA/A0ΔAk/Ak0
    其中 A k 0 A_{k}^{0} Ak0 T 0 T_{0} T0时刻的 A k A_{k} Ak

根因分析(Root Cause Analysis)算法

根因定位算法原理

  • 主题看板-指标树
    • 计算指标与指标之间的贡献:控制替代法
    • 维度影响指数采用下述mdrca法的surprise值(JS散度)计算。
  • 指标看板-根因定位&多维分析
    • TOP因子贡献度计算:

      • 原子指标(作品数、GMV、DAU等):采用超均贡献计算法
      • 均值指标(渗透率、CTR、人均付费等)采用综合贡献计算法
    • 多维分析维度影响指数同主题看板维度影响指数计算方法。

优化中算法:mdrca法

控制替代法
连环替代法

探讨什么是控制替代法之前,首先需要了解连环替代法。连环替代法属于财务分析领域中因素分析法的一种,其依据分析指标与其影响因素的关系,从数量上确定各因素对分析指标影响方向和影响程度。
连环替代法为其中广泛应用的方法论之一。

假设核心经营指标及计算公式为:M = a * b *c,
对比周期指标值为 M1 = a1 * b1 * c1,本期指标值为 M2 = a2 * b2 * c2;本期对比上期的偏移量为 M2 - M1
确定先后替换顺序为:a、b、c,找出最大的核心指标影响因子
先替换a,得到Ma = a2 * b1 * c1,那么因子a对核心指标的影响为 Ha = Ma - M1
再替换b,得到Mb = a2 * b2 * c1,那么因子b对核心指标的影响为 Hb = Mb - Ma
再替换c,得到Mc = a2 * b2 * c2,那么因子c对核心指标的影响为 Hc = Mc - Mb
比较影响因子a、b、c对核心指标的影响值Ha、Hb、Hc的大小,其中各因子的差异值之和等于核心指标差异值(Ha + Hb + Hc = M2 - M1),从而找到影响核心指标最大的因素。
进一步Ha / (M2 - M1)可以表示a指标带来的影响比例大小。跟预期相比,M2 - M1这么大差额由于a指标降低(提升)的影响,对实际总指标M造成了Ha大小的损失(提高)

适用场景:
适用于多指标关联归因中具有计算公式关系的指标间贡献值归因,并对各种计算公式同时适用。

优势&局限性:

优势:通过上面的拆解可以发现,该方法满足所有下级指标的波动之和等于核心指标的波动,使得波动可以用瀑布图完美呈现。

局限:

  • 贡献值的大小与替换顺序强相关,甚至会因为替换顺序的改变影响贡献值的排序结果;虽然理论上可以通过数量指标-质量指标-价值指标的顺序来尽量保证结果的可靠性,但对于大部分产品用户而言并不一定清楚了解内在逻辑并如此配置,会导致结论严谨性受损。
  • 无法保证下级指标的贡献度在[-100%,100%]的范围,业务解释性较差。
控制替代法

为解决连环替代法的问题,智策产品输出下级指标贡献值时实际使用的为针对业务场景优化过的“控制替代法”。还是以上述核心经营指标计算公式为例,控制替代法的执行过程为

控制其他指标不变,替换a指标,得到Ma = a2*b1*c1,那么因子a对核心指标的影响为 Ha = Ma - M1
控制其他指标不变,替换b指标,得到Mb = a1*b2*c1,那么因子b对核心指标的影响为 Hb = Mb - M1
控制其他指标不变,替换c指标,得到Mc = a1*b1*c2,那么因子c对核心指标的影响为 Hc = Mc - M1

a指标的贡献度可以计算为:Contri_a = Ha/|Ha|+|Hb|+|Hc|
b指标的贡献度可以计算为:Contri_b = Hb/|Ha|+|Hb|+|Hc|
c指标的贡献度可以计算为:Contri_c = Hc/|Ha|+|Hb|+|Hc|

可以发现,按照上述优化方式:

  • 替换顺序的影响被消除,无论先替换哪个指标,因子贡献值的组合唯一。
  • 每个因子的贡献值均落在[-100%,100%]的范围,业务解释性更强。

经过验证,在绝大部分情况下,控制替代法的贡献度排序结果与连环替代法按照建议的替换顺序得出的贡献度排序结果基本一致;因此,尽管控制替代法无法保证各指标影响之和为指标本身偏差(这在财务分析场景下更重要),控制替代法在异动分析定位的场景下有其特殊优势。

超均贡献计算法

超均贡献度的提出是为解决原子指标单看变化的绝对量级(偏移量、偏移量占比)和变化的相对快慢(波动率)导致的不准确问题:

  • 用变化的绝对量级进行根因定位:会导致量级较大的维度因子长期排在前列,可能无法识别非头部因子带来的影响。
  • 用变化的相对快慢进行根因定位:会导致量级较小但波动剧烈的因子排在前列,忽略了量级影响。

超均贡献度提供了一个综合变化量和波动率的量化依据,用于衡量维度因子对指标整体波动的贡献占比,较单独查看波动率和偏移量数值而言,综合两方面因素更为科学准确。

1.贡献度计算公式


详细解释如下:

当前按超均法判断超过指标大盘的因子:
(1)计算超均贡献值=(因子波动率-指标波动率)* 因子本期值
(2)因子贡献度 = 因子贡献值/维度下所有因子贡献值绝对值之和
即将维度下所有因子的贡献值,进行归一化,量化为100%以下的百分数,作为贡献度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xuANO3uk-1646013585882)(./pic/chaojungongxian.jpg)]

超均贡献值:I_i = (F_i - F_8) * (B_i), i = 2,3,..7
超均贡献度:J_i = I_i / SUM(ABS(I_i)), i from 2 to 7
2.超均贡献度的解释性

超均贡献度可以理解为“因子波动与指标值(均值)波动差异的相对大小”,超均贡献度越大,说明因子的变化偏离均值变化越大,越有可能是根因。
指标波动有上升或下降,因此贡献度也有正和负之分,全部维度因子贡献度加总约为0%。在查看原因时,更关注与指标值同向变化的维度因子。

  • 当指标波动上涨时,例如指标波动率为 +20%,正向贡献较大的因子将会排在头部,如TOP1影响因子很可能为贡献度>30%的某因子。
  • 当指标波动下降时,例如指标波动率为 -20%,负向贡献较大的因子将会排在头部,如TOP1维度因子很可能为贡献度<-30%的某因子。

但是,超均贡献度主要的意义还是在于(排序)定位因子,数字本身实际的解释性还有待加强。

综合贡献计算法
1.问题提出

提出用综合贡献来度量维度因子对均值指标的影响大小的出发点有二:

  • 由于均值指标在不同维度上的不可加和性(比如各商品类目的客单价加和不等于总的客单价),无论是使用偏移量还是超均贡献度,均无法准确度量不同因子对均值指标的影响程度
  • 均值指标的波动分析往往存在“辛普森悖论”问题,比如指标整体下降但维度下各细分因子均上升,因此需要区分结构内和结构外两种变动的影响。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iANpPGyc-1646013585887)(./pic/综合贡献.jpg)]
    通过对直播、增长、海外增长等多个FT的DA进行调研,发现基于分析投资组合收益率的BHB Model的均值指标拆解方式可以有效解决上述问题。
2 计算公式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDITAR7p-1646013585890)(./pic/综合贡献2.jpg)]
可以发现,均值指标本身的变化可以拆解为三部分:

  • 组间贡献值:衡量结构变化(因子分母占比变化)对指标变化的影响。
  • 组内贡献值:衡量因子量级变化对指标变化的影响。
  • 交叉贡献值:衡量组间和组内交叉效应对指标带来的变化影响,属于高阶项,一般可忽略。

上述拆解方式存在以下优点:

  • 可同时衡量结构内和结构外的变动,避免分析均值指标波动时产生“辛普森悖论”。
  • 不同贡献值之间完全可加和,加和等于指标本身的变动,可量化为0-100%的贡献度,易于理解。
  • 无需单独查看分子和分母的变动影响,通过不同贡献值即可对均值指标进行维度拆解。
3 案例说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFhmEU2S-1646013585891)(./pic/综合贡献3.jpg)]
上表是一个均值指标按照【年龄分层】维度进行的拆解过程,其中贡献值相关计算均按照上述流程进行。

对于需要具体计算字段做详细分析的用户,在指标看板的【多维分析】模块选择【数据明细】展示形式可以看到类似上表详细的字段数据,支持自定义字段显示、支持下载数据离线分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNnTvxVe-1646013585892)(./pic/综合贡献4.jpg)]
可参考知乎专栏

MDRCA(Multi-Dimensional Root Cause Analysis)算法

前身:应用在实时监控、智能运维场景,面对异常信息,快速分析定位根因。
智策迁移使用了该算法,对业务指标数值本身的波动,进行根因定位。

1算法背景

随着业务扩展,业务模块间的关系愈加复杂。通过单一对象的指标反映的状态已不能满足业务监控需求。业务异常往往体现在多个对象的指标异常,用户收到告警后需要在大量指标数据中剥丝抽茧般地分析异常原因。
这个状况伴生了运维痛点:一是告警量大;二是分析耗时长。
因此业内提出使用MDRCA法,在发生异常后根据维度下钻到因子进行分析,有规则地提供分析路径,避免盲目分析,减少分析耗时。

2原理介绍

对于指标我们分两类:单一变量指标和复合指标。
● 单一变量指标:请求量、响应量等不依赖其他变量独立统计的指标。
● 复合指标:成功率这类需要通过两个或多个变量做除法计算的指标。
这里我们用单一变量指标请求量来说明MDRCA算法的原理。
a.假设一个业务指标 X m X_{m} Xm的某一维度下有m个值,分解到各维度的请求量为 ( x 1 , x 2 , … , x m ) (x_{1},x_{2},…,x_{m}) (x1,x2,,xm) X m X_{m} Xm可用公式表示:
X m = ∑ i = 0 m x i   基 期 X_{m} = \sum_{i = 0}^{m}x_{i} \ 基期 Xm=i=0mxi 
b.在异常时刻 t t t观察到指标值为 A ( m ) A(m) A(m) A ( m ) A(m) A(m) 由各维度在 t t t时刻的值组成。 A ( m ) A(m) A(m)可用公式表示:
A m = ∑ i = 0 m a i   本 期 A_{m} = \sum_{i = 0}^{m}a_{i} \ 本期 Am=i=0mai 
也就是说观察到的总体请求量异常由各维度的异常分量组成。

c.根据历史观察值获得时刻 t t t的请求量预测值 F ( m ) F(m) F(m) F ( m ) F(m) F(m)由各维度的预测值组成。 F ( m ) F(m) F(m)可用公式表示:
F m = ∑ i = 0 m f i   预 测 F_{m} = \sum_{i = 0}^{m}f_{i} \ 预测 Fm=i=0mfi 
生成预测值算法有多种,一种方法是取前一天对于时刻 t t t的值。在本文的 MDRCA算法中,预测值取离前7天的 t − 20 t-20 t20, t t t时刻的平均值最近的一天的 t t t时刻作为参考点。

  1. 在MDRCA算法中定义一个值 Explanatory Power,简称EP来衡量观察维度i下维度值j对异常的占比,或称贡献度。EP的计算公式为:
    E P i j = A i j ( m ) − F i j ( m ) A ( m ) − F ( m ) EP_{ij} = \frac{A_{ij}(m)-F_{ij}(m)}{A(m)-F(m)} EPij=A(m)F(m)Aij(m)Fij(m)
    例如,异常时刻t的请求量为1000,根据历史数据预测时刻t的请求量为1500。维度 i 下的维度值 j 在异常时刻 t 的请求量值为200,根据j的历史数据预测时刻 t 下 j 的请求量值应为500。根据公式计算可知j的EP值为(200-500)/(1000-1500)=0.6。
    当维度下有值的变化方向与异常值变化方向相反时,EP取值为负数。这时其他维度值的EP取值也可能大于1。但是观察维度下所有维度值的EP和为1。

  2. MDRCA算法中定义另一个值Surprise来衡量观察维度 i 下维度值 j 的变化差异。为计算JSD,先计算两个变量 p 和 q 。其中 p 为维度值 j 在预测值中的占比,q 为维度值 j 在异常值中的占比。p 和 q 的计算公式如下:’
    p i j ( m ) = F i j ( m ) / F m q i j ( m ) = A i j ( m ) / A m p_{ij}(m) = F_{ij}(m)/F_{m} \\ q_{ij}(m) = A_{ij}(m)/A_{m} pij(m)=Fij(m)/Fmqij(m)=Aij(m)/Am
    p和 q 的取值为(0,1)。获得 p 和 q 后,维度值j的变化差异计算公式为:
    S i j ( m ) = 1 2 p i j log ⁡ 2 p i j p i j + q i j + 1 2 q i j log ⁡ 2 q i j p i j + q i j S_{ij}(m) = \frac{1}{2}p_{ij}\log\frac{2p_{ij}}{p_{ij}+q_{ij}} + \frac{1}{2}q_{ij}\log\frac{2q_{ij}}{p_{ij}+q_{ij}} Sij(m)=21pijlogpij+qij2pij+21qijlogpij+qij2qij
    至此,我们获得衡量维度值 j 的异常贡献值 EP 和变化差异值 Surprise。对这两个值用四象限方法解释如下
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCcCJPDE-1646013585893)(./pic/mdrca.jpg)]
    从四象限中可知,维度中 EP 和 Surprise 分类大的维度值可作为候选维度。对 EP 和Surprise 分类可采用前面介绍的 kmeans 分类方法。
    选出每个维度下的候选维度集合后,计算各集合的 Surprise 和用于衡量各维度的异常变化差异。差异越大的维度越有可能成为异常的主要影响因素。
    在这还用了另一个技巧: 异常的主要影响因素往往是少量维度值的集合。所以取后续集合的 Surprise均值大的维度作为优先选择的条件。选出维度后,在选择维度中贡献大的维度值作为优先条件。

MDRCA算法的多维根因原理如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJntmrjl-1646013585894)(./pic/mdrca2.jpg)]
以上为对单一变量的MDRCA算法介绍。对成功率这类复合指标EP计算为求分子分母两个变量的偏导,Surprise的计算方法为求分子和分母变量的Surprise值之和。

异常检测算法原理

考虑到不同算法适用于不同时间粒度的时序预测,按照天级粒度和天级粒度有两种算法。

天级异常检测

业内有大量异常检测模型和算法,常见的类型如3sigma,Holt-Winters,ARIMA,LSTM等,算法团队对业内离线天级别异常检测进行了广泛调研和预研,最终结合快手业务数据的情况,选择了prophet+残差分析法相结合的偶发点异常识别模式。
预研选择考虑内容:

1 预研选择

背景:公司有大量的天级别指标,对这些指标进行异常检测,能够在当数据发生异常时及时发现并报警(通过根因分析还能够快速定位问题原因

  1. 序特点
    (1)核心大盘指标大多具有相同周期性、季节性,按周波动
    (2)受节假日影响较大,且规律具有相似性

  2. 指标分类
    (1)按业务域分类
    ● DAU类总量指标
    ● 社交、生产类总量指标及衍生指标
    ● 时长类总量、衍生指标
    (2)按指标计算关系的分类
    ● 原子型指标
    ● 衍生型指标

  3. 时序分类
    (1)按时序稳定性分类
    ● 强稳定时序(理想情况,实际不存在)
    ● 弱稳定时序(通过差分,大部分指标应该符合)
    ● 非稳定时序(波动性太大,上蹿下跳,不支持异常检测)
    (2)按时序长短分类
    ● 较短时序(不够3个月时序),时序样本过少,波动性较大,异常检测不能太灵敏
    ● 较长时序(满两年),支持节假日建模,建模精度更高

2 异常场景定义

在做智能异常检测的过程中,其中最棘手的问题是获得一个明确的异常判断标准。比较遗憾的是,针对不同的业务、不同的指标甚至不同的使用方都会有不同的判断标准。因此,本文从另一个角度出发,先挖掘认可度高的基础异常波形,再以点到面逐步地解决异常判断问题。以dau上升异常检测为例,下图给出了常见的几种异常波形 1-4(各种异常波形都可认为是以下几种波形的变种或组合),根据各自不同的特性将其归纳为4种不同的类型:
● 1为偶发突变异常:异常点相比前后时序数据,具有显著的突变(剧烈上升或者剧烈下降)。
● 2为时序周期模式异常:时序的周期模式(周期形状、周期内时序波动性)发生了显著的变化。
● 3为趋势异常:时间序列的趋势发生了显著改变。
● 4为断崖式下跌(上涨):时序的整体均值发生了显著变化
天1
三类异常中,偶发异常当天即可检测出来,模式异常和趋势异常需要一定的时间积累才能发现。故一个历史上的偶发异常,随着数据积累,可能在后来被判定为模式异常或者趋势异常。每天再做当天异常检测的同时,也需要对历史上的异常做修正。

注意:目前异常检测算法仅能1和2两种异常类型(一般来说大部分异常可以通过1、2两种检测类型发现),3和4正在建设中,敬请期待。

3 算法适用范围

理论上来说,只有具有较强规律性的数据,算法预测才有意义;体现在时序上,时序要具有一定的周期性,算法预测才能比较准确。偶发异常和模式变更算法,主要也是针对周期性较强的时序。具体来讲,使用异常检测算法时,需要满足如下3个条件:

  • 历史数据长度大于等于60天
  • 检测当天的时序数据不能为空
  • 历史缺失值数量小于10天,连续缺失值数量小于等于4
  • 历史数据要具有较强的周期性、趋势性

上述前2条,建议接入方的后端采取过滤,后2条算法在数据预处理阶段会过滤。其中第4条,目前检测算法还在完善中,需要少量的人工参与。
我们通过周期检验算法来判断时序近期的周期性。根据周期算法检验结果,一般周期系数在0以上的时序,周期性较好,可以使用本算法做异常检测。
● 周相关系数在0.8以上的时序
时序特点:周期性很好,周期内的时序形状相似度很高,周期振幅差异很小
● 周相关系数在0.6~0.8的时序
时序特点:周期性较好,周期内的时序形状相似度较高,周期振幅有一定的差异
● 相关系数在0~0.6的时序
时序特点:周期性一般,周期内的时序形状相似度一般,周期振幅差异相对较大
● 周相关系数为0的时序
时序特点:无周期性

4 算法原理介绍
  1. 偶发异常点检测
    天2
    偶发异常点判别算法主要包括三个步骤:

    1. 时间序列预测:
      基于时序分解算法对时序周期性、趋势项、节假日、寒暑假建模,基于模型预测,如果想进一步增加预测鲁棒性可以基于多算法投票预测机制
    2. 计算预测残差:
      基于时间序列分解算法,将时序中的趋势分量、周期性分量、节假日分量等剔除之后,剩余的残差序列构成的新序列,可以对其进行异常检测得到异常点
    3. 残差异常检测:
      剩余的预测残差分量整体服从正态分布(基于模式能很好拟合前提),基于3-sigma准则判断异常点,如果想进一步增加异常判断的鲁棒性可以进一步应用多种算法进行投票
  2. 模式异常检测
    tian3

  3. prophet预测

  • 适用场景
    适用于具有明显的内在规律(或者说,模式)的商业行为数据
  • 主要原理
    prophet把时间序列分成几个部分:季节项、趋势项、节假日项、剩余项。通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。
    y ( t ) = g ( t ) + s ( t ) + h ( t ) + ϵ t y(t) = g(t) + s(t) + h(t) + \epsilon_{t} y(t)=g(t)+s(t)+h(t)+ϵt
    其中 g ( t ) g(t) g(t)是趋势项, s ( t ) s(t) s(t)是周期项, h ( t ) h(t) h(t)是节假日项, ϵ t \epsilon_{t} ϵt是误差项并且服从正态分布。
    趋势模型有两种:饱和增长模型(saturating growth model)和分段线性模型(piecewise linear model)。两种模型都包含了不同程度的假设和一些调节光滑度的参数,并通过选择变化点(changepoints)来预测趋势变化。周期模型使用傅里叶级数(Fourier series)。节假日需要用户事先指定,每一个节假日都包含其前后的若干天。
  • 模型优点
    • 模型相对较简单,将一些时间序列建模常见的流程与参数default化,不太懂统计的业务分析师也能够针对需求快速建立一个相对可用的模型。
    • 可以做长期的数据预测
  • 模型缺点
    • 模型对天、小时级的数据预测效果较好,但对分钟级的数据,支持效果可能不如其他周期好
  1. 残差分析
    异常判别原理
    n-sigma准则基于目标分布是正态或近似正态分布。一般地,选取n=3。根据正态分布的概率密度公式可以算出,样本取值几乎全部(99.7%)集中在 ( μ − 3 σ , μ + 3 σ ) (\mu-3\sigma,\mu+3\sigma) (μ3σ,μ+3σ)区间内,其中,
    μ = 1 N ∑ i = 1 N x i \mu = \frac{1}{N}\sum_{i=1}^{N}x_{i} μ=N1i=1Nxi
举报

相关推荐

0 条评论