Tubi 时间序列 KPI 的异常值检测

news2024/9/23 15:23:51

欢迎来到 Tubi—— 在这里,广告型视频点播永不停歇!

作为全球最大的流媒体服务之一,Tubi 保持稳定增长,并始终关注对业务发展至关重要的前沿趋势。基于此,Tubi 数据科学团队创建了一套全新警报系统,对 Key Performance Indicators(KPIs) 的异常值和趋势进行检测。我们深知 KPI 指标检测是极具挑战的一项工作,人们常常容易迷失在数字中,而忽视了那些重要事件。因此,我们这一套警报系统足够灵活,可适用于不同的细分板块;也足够准确,可提高灵敏性,降低特异性。

来吧,让我们通过本文一起深入了解 Tubi 数据科学团队在开发这一系统时如何克服了这些重大挑战。

需求与挑战

随着 Tubi 服务的自然稳定发展,我们观察到大多数指标都呈现上升趋势。而实际上,Tubi 的使用情况呈现季节性趋势,其中包括周末、工作日和假期的涨落。因此,我们必须进行适当的调整,以避免任何潜在的、对数据的错误解读。未经精确调整,指标的下降将有可能在整体增长趋势中被忽视,或者由于每周波动而误报。

我们面临的另一个挑战是需要处理各种不同类型的指标。一方面,在 Tubi,一些指标是 0 到 1 的百分比(例如转化率和留存率),而其他指标则没有上限(例如观看时间和访客数量)。另一方面,这些指标的表现也会受到观众类型和平台使用人数规模的显著影响。我们必须找到一个解决方案,能正确体现各种指标多样的变化趋势和行为特性。

面对以上两大挑战,我们的解决方案之一是将指标分割为基于观众类型和平台组合的不同时间序列。由此,我们可以更详尽地查看每个指标,更准确地识别问题;基于各种组合而切分成的不同指标,我们也可以消除各个指标中的偏差。另外,为消除每个分组中的趋势和季节性影响因素,我们利用了 statsmodels 库中强大的 seasonal_decompose(季节性分解函数),这一函数可以识别并消除每个分组时间序列中的趋势和季节性成分,是将时间序列分解为其核心组成部分的简单方法。示例如下:

时间序列 1

分解后的时间序列 1

上图展示了分解时间序列所产生的效果 —— 可以去除大部分的季节性峰值和低谷,同时保留时间序列的整体特征。我们的新 KPI 警报系统需要严格满足一系列需求,包括:

· 覆盖按优先级排序的指标和用户类型;

· 实现对异常的高精准检测;

· 能对警报进行优先级排序;

· 包含警报系统中出现的下降与尖峰值。

该警报系统最大化真阳性(True Positives)和最小化假阳性(False Positives)的能力,决定了其可靠性和有效性。基于以上挑战和需求,Tubi 数据科学团队必须实现一个能灵活覆盖所有不同细分板块的系统,并足够准确,提高真阳性率,降低假阳性率。

如何构建这一新系统?我们将开发两个具体实施方法:

· 方法论第一部分 —— 异常检测;

· 方法学第二部分 —— 趋势检测。

异常检测

异常是与时间序列的一般走向显著不同的观测值。为了在 Tubi KPIs 中对异常进行检测,我们采用了将时间序列作为输入的 Matrix Profiling(MP)算法。MP 算法还将计算时间序列中每个点的分数,以此测量该值与其他值的差异。在实现上,我们使用了广泛采用的开源 Stumpy 软件包。

我们选择 MP 用于异常检测有以下原因:

· 简单易实现 —— 通过标准库便可以轻松采用 MP;

· 可解释性 —— 对于重视解释性的用例, MP 是一个很好的选择;

· 空间效率和速度—— 大多数 MP 算法需要的内存很少,高度可并行化,计算速度很快;

· 用在任意时间的算法 —— MP 算法可以用在任意时间,无需特定的训练数据 / 窗口,可以快速实时地使用;

· 可维护性 —— MP 的结果可有效存储,对应的维护工作也比较轻松;

· 无监督方法—— MP 不需要预先标注的数据点或训练 / 测试流程。

接下来,我们将 MP 算法分解为以下具体步骤。

Matrix Profile 算法

Matrix Profile(MP)是 2016 年由多位不同大学的研究者引入的一种数据结构,而 MP 的定义为:一种存储着时间序列中任意子序列与其最近邻的子序列的欧式距离(标准化后的欧氏距离)的向量。当使用 MP 时,一个时间序列被划分成许多连续的固定长度子序列,并使用欧式距离或其他距离计算方法进行相互间的比较。

图片来源:Stumpy 官方文档

这种比较是通过滑动窗口的方式进行的,直到覆盖了所有可能的组合。

图片来源:Stumpy 官方文档

这些比较的结果存储在 Matrix Profile 中。

图片来源:Stumpy 官方文档

计算 Matrix Profile 时,只保留了每个子序列与最近邻的距离。这个分数代表了该子序列与时间序列的其余部分之间的整体相似性。为了理解 Matrix Profile 的结果,重要的是理解其中的低值表示时间序列中的潜在模式或模型。换言之,这些低值代表了彼此高度相似的时序中的连续对,并预示了时间序列中可能存在类似重复模式。另一方面,高值表示时间序列中可能存在的异常值或异常事件。

有一点值得注意:虽然 Matrix Profile 为分析时间序列数据提供了强大的工具,考虑数据的上下文和所解决的具体问题依然至关重要。对时间序列和相应 Matrix Profile 进行人工审查,可以帮助我们理解数据中的相似模式和异常点。如需了解有关 Matrix Profile 算法的更多信息,请参阅 Stumpy 官方文档。

Matrix Profile 的实现

现在,我们已经了解了 Matrix Profile 的工作原理,接下来一起看看 Matrix Profile 的实现。对于每个片段,我们最终实现的异常检测方式如下:

1. 时间序列数据经过预处理,消除趋势和季节性。

2. 预处理后的数据输入到不同版本的 Matrix Profile 函数中,以提高结果的稳定性:

· 原始版本 —— 在分析时间序列数据之前,不对其进行任何更改。

· 移动块抽样版本 —— 将时间序列分割成较小的片段,随机洗牌并创建用于分析的新序列,以减小数据中任何趋势或模式带来的影响。

· 随机窗口分割版本 —— 将时间序列分割成较小的多个重叠窗口,选择这些窗口的一个随机子集用于分析,以捕捉数据的局部结构,并减小任何趋势或周期性模式带来的影响。

3. 计算每个数据点的周度百分比变化。

4. 每个数据点的最终异常得分,等于 MP 结果之和与周度变化的乘积。

5. 任何超过某个阈值的得分都将被标记为异常,并在表中有所记录。执行 Matrix Profile 旨在检测时间序列数据中的异常点,以优化每日下降的平均程度。我们通过使用一系列参数来控制 MP 执行进行测试,并循环遍历不同的参数组合,以实现对历史异常值的最大化检测。这些参数包括:

· KPI 天数 —— 输入时间序列的长度。我们希望涵盖足够多天数,以涵盖尽可能多的信号,同时减少噪音。

· MP 窗口 —— 在定义异常得分时,对时间序列切片后片段的长度。

· C 因子 —— 一个用于调整阈值的因子;通过将阈值乘以 C 因子,我们可以使算法对潜在异常变得敏感。

  • 更高的 C 值将生成较高的阈值,算法则更难以检测到潜在异常。

  • 较低的 C 值将生成较低的阈值,算法则更容易检测到潜在异常。

我们的目标是找到最佳参数组合,以达到最高的每日下降的平均程度。我们还对图表结果进行了人工审查,以确保异常检测的准确性。

使用 Matrix Profiling 进行异常检测的一个例子,红点为算法所识别的异常值

趋势检测

在某些情况下,某个指标可能不会出现具有警示性的骤变,而会经历一个缓慢持续下降的过程。为识别这种情况,我们采用了 Moving Average Convergence / Divergence(MACD)技术。

MACD 多用于股市分析,跟踪趋势并生成买入 / 卖出信号;我们选择使用 MACD 是因为它适用于任何时间序列数据,并易于解释。MACD 背后的逻辑如图所示:

1. 时间序列数据经过预处理,去除了趋势和季节性。

2. 使用两个不同的时间窗口参数,对数据使用指数加权移动平均(EWMA)函数。一个参数用于慢速滑动窗口,另一个参数用于快速滑动窗口,这有助于识别数据在不同时间尺度上的趋势。

3. 从慢速趋势中减去快速趋势得到 MACD 曲线,并再次应用指数加权平均,获得 MACD 信号曲线

  • 当输入大多为上升时,信号为正;

  • 当输入大多为下降时,信号为负。

4. 步骤 3 的指数移动平均 MACD 信号曲线减去 MACD 曲线,我们会得到 MACD 直方图。这个直方图有助于我们检测时间序列数据中的渐变变化。利用 MACD 直方图,我们可以确定 —— 当趋势位于零以上时,出现正动量;当趋势位于零以下时,出现负动量。信号与零线的交点,表示趋势发生了变化,尤其是当趋势从正向变为负向时。

动量信号

MACD

这是 MACD 用于 Tubi 观看时长的一个示例。第一张图显示了每日指标,并在 MACD 信号从负向变为正向或相反时,分别做了绿色和红色的标记。第二张图包含了快速和慢速趋势,以及 MACD 直方图。

总结

我们介绍了在时间序列数据中检测异常值的两种方法:Matrix Profiling 和 MACD。通过这两种方法的结合使用,我们对数据有了更好的理解,并能在更广泛的范围中进行异常检测。我们还将分析结果显示在了一个数据表盘中,提供给相关同事使用。这一数据表盘为用户提供 KPI 的最新动态,也会提供有助于发现任何异常或异常值的可视化图表。在异常检测中引入 Matrix Profiling 和 MACD,我们可以主动识别问题,预防问题的恶化。

这一新系统已经运行了几个星期,我们也正在增添更多新功能。我们预期 Tubi 在后续发展过程中,将更多地依赖这一系统,以对业务的健康状况保持长期监测。特别感谢 Davide Totaro 对此项目的贡献。


如果你对类似项目感兴趣,欢迎加入 Tubi!

作者:John Bae, Data Scientist at Tubi

译者:Yan ZHENG, Tubi Senior Engineer - Machine Learning

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Kubernetes运维篇】RBAC认证授权详解(一)

文章目录 一、RBAC授权认证理论知识1、什么是RBAC授权?2、认证基本流程3、K8S客户端访问apiserver的认证几方式1、第一种:客户端认证2、第二种:Bearertoken方式3、第三种:Serviceaccount方式 4、RBAC授权常见角色绑定方式1、第一种…

安装OSAR_Co_X

在找开源的QSAR平台 在WOS里用“open source”、“QSAR”、“platform”为关键字找到一个描述QSAR-Co-X的文献,这是一个基于python开发的QSAR平台(额,,,目前还不是很清楚)。 根据链接找到Github里代码的所…

讲故事vs讲知识,区别太大

讲故事vs讲知识,区别很大 以故事化的方式讲知识,一般受众爱听 讲故事,通常受众爱听 趣讲大白话:但不是所有的故事都爱听 【趣讲信息科技219期】 #非著名IT人安志强的趣味笔记# **************************** 有一小部分故事&#…

CTFshow-pwn入门-栈溢出pwn49(静态链接pwn-mprotect函数的应用)

pwn49 首先我们先将pwn文件下载下来,然后赋上可执行权限,再来查看pwn文件的保护信息。 chomd x pwn checksec pwn file pwn我们可以看到这是一个32位的pwn文件,并且保护信息开启了NX和canary,也就是堆栈不可执行且有canary。最最…

算数运算符

运算符介绍:运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。 算术运算符赋值运算符关系运算符逻辑运算符位运算符三元运算符 算术运算符 算术运算符是对数值类型的变量进行运算的。 % 取模,取余 在 % 的本质,a % b…

UE5.1.1 C++从0开始(17.GAS游戏能力系统)

教程的链接:https://www.bilibili.com/video/BV1nU4y1X7iQ 教程内的老师没用GAS的插件,而是自己写了一个。这一篇文章只是开头,还有很多的内容没有往里面写。 新增了一个object类,新增了一个使用这个类的组件。然后把这个组件用…

text-to-3d方面的论文列表分享

以下给出几篇我个人觉得比较有价值的text-to-3d的论文列表,论文的超链接会连接到arxiv上。 DreamfusionFantasia3DTangoLatent-NeRFMagic-3dClip-ForgeClip-MeshDreamfieldAvatarCLIPPoint-EShape-EText2Mesh

P3804 【模板】后缀自动机(SAM)

题目描述 给定一个只包含小写字母的字符串 S。 请你求出 S 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值。 输入格式 一行一个仅包含小写字母的字符串 S。 输出格式 一个整数,为所求答案。 题解:这里就不讲后缀自动机的模板相关…

zigbee学习之DHT11温湿度传感器+zigbee无线通信

开发环境:IAR烧录器串口调试助手CC2530DHT11 两个模块:一个作为协调器,负责接收数据,一个作为终端,负责发送数据 步骤: 1、SampleApp.c里配引脚P0_6(查看硬件上的标识) 2、DTH11.c里配引脚 3、修改PANID和信…

超纯水抛光混床树脂的选择及工艺流程

一、什么是超纯水? 既将水中的导电介质几乎完全去除,又将水中不离解的胶体物质、气体及有机物均去除至很低程度的水。电阻率大于18MΩ*cm,或接近18.3MΩ*cm极限值。 超纯水是科技界为了研制超纯材料(半导体原件材料、纳米精细陶…

服务器搭建oracle,并远程连接教程

下载两个压缩包,然后上传到服务器, 软件安装09:CentOS安装Oracle - 虚拟机 - 5997CK - 欢迎您! (hezhilin.online) 这里有全部步骤,反正过了几天我也会忘记,不赘述了。 直接上拆的坑: 开启服务器端口后…

借书问题-2022年全国青少年信息素养大赛Python国赛第3题

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第5讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计…

9.33UEC++、容器

1.定义: 2.TArray:快,小,高 :同质容器 :创建栈对象,不能创建堆对象 如何构建TArray: 获取方式: 实现方式:定义一个array容器数组,两种遍历方式…

跳跃游戏(力扣)贪心 JAVA

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输入:nums [2,3,1,1,4] 输出:true 解释:可以先跳 1 步…

【实用工具】(BeyondCompare+CppCheck对某次更新的文件进行静态检查)按文件清单复制文件到指定文件夹的辅助工具【2023.07.07】

摘要 开发一个功能提交了多次代码,现在需要比较最终的提交和某次提交的差异并进行静态代码检查。用到了BeyondCompare和CppCheck软件。但是有个问题,BeyondCompare不能把差异项导出,于是乎花了两个小时写了个辅助工具。 使用说明 第一步&…

校服选购定制小程序开发制作功能介绍

本次为各大校服服装定制生产老板介绍一下校服定制商城小程序系统的功能,为大家做参考。 校服定制小程序主要功能有: 1、每个学校校服定制信息独立,不同的学校打开小程序里面信息可以不同。 2、学校致家长的一封信。 3、学生信息录入和下单信息…

【VUE】项目设置超时6分钟,实际1分钟就超时了

一、背景:VUE项目中,前端接口请求设置6分钟,但实际在浏览器中1分钟就超时了 timeout: 6 * 60 * 1000二、经查:不是前端代码设置的问题,也不是浏览器的问题,而是nginx超时设置默认为60S,导致1分…

hexo个人博客搭建(二)butterfly主题配置

Butterfly主题安装文档(二)之主题配置 一、回顾安装butterfly主题 1、在hexo项目根目录下执行操作clone主题 git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly2、如果沒有 pug 以及 stylus 的渲染器,还需要下载&…

matlab语言的前世今生

matlab语言的算法库是用什么语言实现的? Matlab的算法库是用C和C++语言实现的。 Matlab本身是一个解释型的高级编程语言,但它的核心算法库是使用更底层的C和C++语言编写的。这些库提供了许多数值计算、统计分析、信号处理、图像处理、优化等常用算法函数,并以mex文件的形式集…

投票评选活动小程序v2-搜索功能和最新排序功能实现

投票评选活动小程序-搜索功能和最新排序功能实现 优秀人物评选活动,五四奖章评选、优秀工作者人物评选、劳动最光荣评选。通常需要一个搜索功能,用户通过输入名称或编号搜索对应的作品项目或者人物,进行投票。或者通过最新排序功能查看列表情…