实践中的数据可观察性:基于SQL和机器学习的大规模数据监控

数据管道可能因为上百万种不同的原因而中断, 但是,推荐一个正规滚球网站如何确保实时识别和解决数据质量问题呢在规模? 有时,它所需要的只是一点SQL,一些精度和回忆,以及一个整体的方法 数据可观测性.

在这篇文章中 , 推荐一个正规滚球网站将介绍如何从零开始创建自己的数据可观察性监视器,并利用机器学习的基本原则在数据管道中大规模应用它们.

随着企业依赖越来越多的数据来驱动越来越复杂的管道, 这些数据必须可靠, 准确的, 和值得信赖. 当数据中断时——是否来自模式更改, 空值, 重复, 否则,推荐一个正规滚球网站需要知道, 和 . 陈旧的表或错误的度量标准, 任其发展, 会给你的生意带来负面影响吗.

如果你是数据专家, 当您试图了解数据的健康状况时,您可能会发现自己会一次又一次地问以下问题:

  • 数据是最新的吗?
  • 数据是否完整?
  • 字段是否在预期范围内?
  • null率比应该的值高还是低?
  • 模式改变了吗?

为了回答这些问题,推荐一个正规滚球网站可以借鉴软件工程师的经验: 数据可观测性. 数据工程师定义 数据可观测性 作为一个组织回答这些问题和评估其数据生态系统健康状况的能力. 数据可观察性的五个支柱反映了数据健康的关键变量: 

  • 新鲜:我的数据是最新的? 在我的数据没有被更新的时间间隔?
  • 分布:我的数据在现场层面的健康程度? 我的数据是否在预期范围内?
  • 体积:是我的数据摄入量达到预期阈值?
  • 模式:我的数据管理系统的正式结构发生了变化?
  • 血统:如果我的一些数据坏了,上游和下游受到什么影响? 我的数据源如何相互依赖?

In 本系列文章,推荐一个正规滚球网站拉开帷幕来研究数据的可观察性是什么样子的 在代码中, 在这最后一部分中, 推荐一个正规滚球网站将退一步思考是什么造就了一个好的数据质量监视器 在一般情况下. 也许你读过 部分我II 和你自己思考, 这些都是有趣的练习, 但是推荐一个正规滚球网站如何将这些概念应用到 真实的生产环境?”

在高水平上,机器学习是数据可观测性的工具. 配备了机器学习的检测器可以更灵活地应用于大量的表格, 随着数据仓库的增长,消除了手动检查和规则的需要(如第1部分和第2部分所讨论的). 也, 机器学习检测器可以实时学习和适应数据, 捕捉复杂的季节模式,否则人类的眼睛是看不见的.

让推荐一个正规滚球网站深入研究一下,不需要之前的机器学习经验.

推荐一个正规滚球网站的数据环境

本教程基于 练习4 奥莱利的课程 管理数据的停机时间. 欢迎您使用Jupyter笔记本和SQL自己尝试这些练习.

你可能还记得在第一部分和第二部分中,推荐一个正规滚球网站正在与 模拟天文数据 关于宜居行星. 不幸的是,这些数据没有任何真实的东西——它是出于教学目的捏造的——但你可以假装它是直接从 毅力 如果你想. 🙂

推荐一个正规滚球网站用Python生成数据集, 从推荐一个正规滚球网站在生产环境中遇到的真实事件中建模数据和异常. (此数据集完全免费使用 跑龙套的文件夹 存储库中包含生成数据的代码.)

在这个练习中,推荐一个正规滚球网站使用SQLite 3.32.3, 这应该使数据库可以从命令提示符或SQL文件与最小的设置. 这些概念可以扩展到任何查询语言 这些实现 可以扩展到MySQL, Snowflake和其他数据库环境的最小变化.

在这篇文章中,推荐一个正规滚球网站将把注意力限制在系外行星表上:

请注意,EXOPLANETS被配置为手动跟踪一个重要的元数据——date_added列——它记录了推荐一个正规滚球网站的系统发现这颗行星的日期,并将其自动添加到推荐一个正规滚球网站的数据库. 在第一部分中,推荐一个正规滚球网站使用了一个简单的SQL查询来可视化每天添加的新条目的数量:

这个查询产生的数据看起来像这样:

用文字, 太阳系外行星表每天例行更新约100个条目, 但在没有输入数据的某些日子会“脱机”. 推荐一个正规滚球网站引入了一个名为DAYS_SINCE_LAST_UPDATE的度量来跟踪表的这个方面:

结果是这样的:

稍加修改,推荐一个正规滚球网站引入了一个 阈值参数 到查询中创建 新鲜探测器. 推荐一个正规滚球网站的探测器返回的所有日期中,最新的数据系外行星超过1天.

图中的峰值代表了系外行星表使用旧数据的实例. 在某些情况下, 这样的中断可能是标准的操作程序——也许推荐一个正规滚球网站的望远镜应该进行维护, 所以一个周末没有数据记录. 在其他情况下, 虽然, 停机可能代表数据收集或转换的真正问题——可能推荐一个正规滚球网站将日期更改为ISO格式, 传统上推动新数据的工作现在正在失败. 推荐一个正规滚球网站可能会得出这样的启发式结论:停机时间越长越糟糕, 但除此之外, 推荐一个正规滚球网站如何保证推荐一个正规滚球网站只检测到数据中的真正问题?

答案很简单:你不能. 构建一个完美的预测器是不可能的(无论如何,对于任何有趣的预测问题来说). 但, 推荐一个正规滚球网站可以使用机器学习中的一些概念,以一种更结构化的方式来构建问题, 结果就是, 提供大规模的数据可观察性和信任.

用机器学习提高警报

每当推荐一个正规滚球网站警告一个破裂的数据管道时,推荐一个正规滚球网站必须怀疑警报是否准确. 警报是否表示 真正的 问题? 推荐一个正规滚球网站可能会担心两种情况:

  1. 虽然发布了警报,但并没有真正的问题. 推荐一个正规滚球网站浪费了用户的时间来响应警报.
  2. 这是一个真正的问题,但没有发出警报. 推荐一个正规滚球网站没有发现真正的问题.

这两个场景被描述为 假阳性 (预测异常,实际上还可以)和 假阴性 (预测OK,实际上是异常的),推荐一个正规滚球网站想要避免它们. 发布假阳性就像在喊狼来了——推荐一个正规滚球网站拉响了警报,但一切都好. 同样的, 发布假阴性结果就像在值勤时睡觉一样肯定出了问题, 但推荐一个正规滚球网站什么都没做.

推荐一个正规滚球网站的目标是尽可能避免这些情况,并专注于最大化 真正的阳性 (预测异常,实际上是个问题)和 真正的底片 (预测OK,实际上OK).

精度和召回

所以,推荐一个正规滚球网站需要一个好的检测方案来最小化两者 假阳性假阴性. 在机器学习实践中,更常见的是思考相关但更深刻的术语, 精度回忆:

图片由瑞安·卡恩斯提供.

一般来说,精确度告诉推荐一个正规滚球网站何时发布警报是正确的. 模型具有良好的精度输出 可信的警告因为他们的高精度保证了他们很少会喊“狼来了”.

回忆一下,一般来说,它告诉推荐一个正规滚球网站有多少问题推荐一个正规滚球网站需要提醒. 召回率高的型号是 可靠的因为他们的高记忆力保证了他们在工作时很少睡觉.

扩展推荐一个正规滚球网站的比喻,一个模型 良好的精度 一个模型很少喊狼来了吗?当它发出警报时,你最好相信它. 同样,一个模型 好回忆 就像一只好的看门狗,你可以放心,这个模型会抓住所有真正的问题.

平衡精度和召回率

当然,问题在于你不可能两全其美. 注意,这两者之间有一个明确的权衡. 推荐一个正规滚球网站如何得到完美的精度? 简单:警惕 没有什么值班睡觉 所有的时间-这迫使推荐一个正规滚球网站的假阳性率为0%. 这个问题? 召回将是可怕的,因为推荐一个正规滚球网站的假阴性率将是巨大的.

同样,推荐一个正规滚球网站如何获得完全记忆? 同样简单的是:对一切保持警惕——每一次都有狼叫——迫使假阴性率为0%. 问题是,正如预期的那样,推荐一个正规滚球网站的误报率将受到影响,影响精度.

解决方案:一个单一的目标

推荐一个正规滚球网站的数据世界是由可量化的目标运行的, 在大多数情况下,推荐一个正规滚球网站需要优化单一目标, 不是两个. 推荐一个正规滚球网站可以将精确度和回忆度合并成一个称为an的指标 F分数:

F_beta叫做a 加权 F分数,因为不同的beta值在计算中对精度和回忆的权重不同.  一般来说,F_beta分数表示:“我认为召回率与准确度同等重要.”

当β = 1时,方程的值相等. Set beta > 1, 和 回忆 will be more important for a higher score. 换句话说, beta > 1 says, “我更关心的是发现所有的异常情况,而不是偶尔引起错误的警报.” 同样的, set beta < 1, 和 精度 will be more important. beta < 1 says, “I care more about my alarms being 真正的 than about catching every real issue.”

检测新鲜事件 

掌握了推荐一个正规滚球网站的新词汇, 让推荐一个正规滚球网站回到检测系外行星表中新鲜度事件的任务上来. 推荐一个正规滚球网站用的是一个简单的预测算法, 因为推荐一个正规滚球网站通过设置一个模型参数X将查询转换为检测器. 推荐一个正规滚球网站的算法表示,“任何超过X天的中断都是异常,推荐一个正规滚球网站将为此发出警报。.“即使是在这样简单的情况下,准确性、回忆性和f 分数都可以帮助推荐一个正规滚球网站!

为了展示,推荐一个正规滚球网站取了系外行星上的新鲜中断并分配 地面实况标签 对每次中断是否是真实事件进行编码. 没有一些基本事实是不可能计算出一个模型的准确性的,所以考虑如何为你的用例生成这些总是有帮助的. 回忆一下,在太阳系外行星表中,总共有6次持续1天以上的中断:

推荐一个正规滚球网站可以任意假设,2020年02月8日和2020年05月14日发生的事件是真实的. 每一个都是8天,所以它们是有问题的是有道理的. 另一方面,假设2020-03-30和2020-06-07的中断不是实际事件. 这些中断分别是4天和3天,所以这并不奇怪. 最后,将2020年06月17日和2020年06月30日的中断时间分别设为5天和3天, 是真实的事件.

以这种方式选择了推荐一个正规滚球网站的地面真理, 推荐一个正规滚球网站看到,更长的中断时间更有可能成为实际问题, 但这并不能保证. 这种弱相关性将使一个好的模型有效, 但是不完美, 就像在更复杂的情况下一样, 真正的用例.

现在, 假设推荐一个正规滚球网站首先将阈值设定为3天, “每次停机超过3天都是异常现象.“这意味着推荐一个正规滚球网站能正确地探测到2020-02-08、2020-05-14和2020-06-17的异常,所以推荐一个正规滚球网站有3个 真正的阳性. 但是,不幸的是,推荐一个正规滚球网站发现2020-03-30不是一个事件,所以推荐一个正规滚球网站有1个 假阳性. 3个真阳性/(3个真阳性+ 1个假阳性)意味着推荐一个正规滚球网站的精度是0.75. 此外,推荐一个正规滚球网站未能检测到2020年06月30日是一个事件,这意味着推荐一个正规滚球网站有1个 假阴性. 3个真阳性/(3个真阳性+ 1个假阴性)意味着推荐一个正规滚球网站的召回率也是0.75. F_1分数,由公式给出

意味着推荐一个正规滚球网站的F_1分数也是0.75. 不坏!


现在,假设推荐一个正规滚球网站把阈值设得更高一些,5天. 现在,推荐一个正规滚球网站只检测到2020-02-08和2020-05-14这两个最长的中断. 事实证明,这两起事件都是真实的, 所以推荐一个正规滚球网站没有误报, 这意味着推荐一个正规滚球网站的精确度是1 -完美! 但请注意,推荐一个正规滚球网站没有发现其他真正的异常, 2020-06-17和2020-06-30, 也就是说推荐一个正规滚球网站有两个假阴性. 2个真阳性/(2个真阳性+ 2个假阴性)意味着推荐一个正规滚球网站的回忆是0.5、比以前更糟. 推荐一个正规滚球网站的召回受到影响是有道理的, 因为推荐一个正规滚球网站选择了一个更保守的,阈值更高的分类器. 推荐一个正规滚球网站的F_1分数可以再次用上面的公式计算,结果是0.667.

如果推荐一个正规滚球网站画出精度, 回忆, 和F_1用推荐一个正规滚球网站设置的阈值表示, 推荐一个正规滚球网站看到了一些重要的模式. 第一个, 具有低阈值的攻击性探测器召回率最高, 因为他们能更快地发出警报,从而抓住更多真正的问题. 另一方面, 更多的被动探测器具有更好的精度, 因为它们只会对更可能是真实的最糟糕的异常情况发出警报. F_1评分在这两个极端之间达到峰值——在本例中,在4天的阈值. 找到最佳点是关键!

图片由瑞安·卡恩斯提供.

最后,让推荐一个正规滚球网站来看最后一个对比. 注意,推荐一个正规滚球网站只看了F_1的分数,它对准确率和回忆率的权重相等. 当推荐一个正规滚球网站看其他的值时会发生什么呢?

图片由瑞安·卡恩斯提供.

回想一下,一般的F_beta是说:“回忆是beta时间,与精确度同样重要.“因此, 推荐一个正规滚球网站应该预料到,当回忆被优先排序时,F_2比F_1高——这正是推荐一个正规滚球网站在阈值小于4时所看到的情况. 同时,F_0.阈值越大,5分越高, 显示更多的允许保守分类器与更大的精度.

基于机器学习的大规模数据可观察性

推荐一个正规滚球网站已经快速浏览了机器学习的概念. 现在,这些概念如何帮助推荐一个正规滚球网站将检测器应用到生产环境中呢? 关键在于要明白,对于任何异常检测问题,都没有完美的分类器. 有 总是 假阳性和假阴性之间的权衡,或同样的精确度和回忆. 你必须问自己,“我如何权衡这两者之间的权衡。? 什么决定了我的模型参数的“甜蜜点”?“选择一个F_beta评分进行优化将隐含地决定你如何衡量这些情况, 因此在你的分类问题中什么是最重要的.

另外,请记住,任何关于模型准确性的讨论都是不完整的 地面实况 与模型的预测相比较. 在您知道有一个好的分类之前,您需要知道是什么构成了一个好的分类.

这里希望您不会出现数据停机!


有兴趣了解如何大规模修复数据质量? 接触 巴尔, 瑞安,剩下的 蒙特卡罗 团队.

本教程的相关练习已提供, 在这里,本文中显示的经过调整的代码可用, 在这里.