[Day 22] 验证资料 — 不可以色色! 加装资料界的色情守门员

I used to be an adventurer like you, then I took an arrow in the knee. — Lots of NPC guards (The Elder Scrolls V: Skyrim)

前言

在前面的文章中一直反覆提到 Data/Concept drift 等关於资料变化会引起问题的概念,但除了在 [Day 04] 部署模型的挑战 — 资料也懂超级变变变!? 做了名词解释以外,并没有更深入的讨论,所以今天就让我们来详细的谈谈产品应用时会遇到的资料问题吧。
另外,今天的标题其实是想取 "色色" 跟 "变态" 之间的关系,搭配生物学上 "变态" 那种改变的概念来形容资料的变化哦,然後今天的 quote 是守卫的名台词,太牵强了,连自己都觉得不得不解释哈哈哈
/images/emoticon/emoticon25.gif
不可以色色 MEME

资料的各种变化

在产品应用时会遇到的资料问题主要有两种:

  • Drift — 资料随着时间的改变,例如每天收集一次资料,过一段时间资料就会出现变化。
    • Data drift — 从训练到服务之间的资料改变,也就是特徵的统计性质改变。
    • Concept drift — 世界改变使得 Ground Truth 改变,也就是标签的统计性质改变。

其实这个真的蛮直白的,所以这边再把前面的定义精简提一下就好了。

  • Skew — 概念上的同一个资料集在不同版本或来源间的差别,例如训练集与实际接收的资料 (Serving set)。
    skew
    *图片修改自 MLEP — Detecting Data Issues
    • Schema skew — 训练与实际资料的纲要 (Schema) 不相符,例如预期浮点数但实际资料却是整数。
    • Distribution skew — 训练与实际资料互相背离,这种 Dataset shift 可能会以 Covariate、Concept 等形式显现:
      Distribution skew
      *图片修改自 MLEP — Detecting Data Issues
      • Dataset shift:特徵与标签的联合机率在训练与服务时不同。
        Dataset shift
      • Covariate shift:输入变数的分布在训练於服务时不同,也就是说,特徵 (x) 的边际分布不同,但条件分布不变 (x → y 映射不变)。
        Covariate shift
      • Concept shift:输入与输出变数的关系改变,但输入变数的分布不变。
        Concept shift

当模型训练好之後,必须持续地监控与评估输入的资料才能侦测到上述的各种改变。

下图为侦测变化的工作流程:
Skew detection workflow
*图片来源:MLEP — TensorFlow Data Validation

TensorFlow Data Validation

在实务上我们可以使用 TensorFlow Data Validation (TFDV) 作为验证资料的工具。
它的功能如下:

  • 产生资料的描述统计数据 (descriptive statistics) 并可视化於浏览器中。
  • 推论资料纲要。
  • 对资料纲要进行有效性检查 (Validity checks)。
  • 侦测 Training/Serving skew (比较两者资料的统计数据与纲要)。
    • Schema skew — 训练、服务集的资料纲要不同,任何可能有差别的地方都要用 "环境" 来处理 (例如服务集不会有标签)。
    • Feature skew — 特徵的值不同,例如不小心做了不同的前处理或资料来源改变了。
    • Distribution skew — 某特徵的分布不同 (各项统计值不同都可以算),例如训练时只有 0~100,但上线时遇到的却是 500~600。

而实际的作法为比较类别型特徵的 L-infinity distance、数值型特徵的近似 Jensen-Shannon divergence

其中 L-infinity distance 又称为 Chebyshev distance,简单来说就是各个座标轴之差的最大值,例如 2D 就代表在 x 轴的差与 y 轴的差取最大值:
Chebyshev distance
*图片来源:Wikipedia — Chebyshev distance

使用时机

TFDV 为具扩缩性的描述性统计且搭配 Facets interface 可视化,除了用在训练 Pipeline 中,它还有以下用途:

  • 推论时,验证新的资料以确保不会突然收到坏掉的特徵。
  • 推论时,验证新的资料以确保它与训练资料属於同一部分的决策表面 (Decision surface),也就是说模型是以相似资料训练的。
  • 验证转换、特徵工程後的资料 (使用 TF.Transform) 以确保没做错什麽。

而关於怎麽使用 TFDV 请参考官方教学 Get started with Tensorflow Data Validation 即可。

以上就是今天的内容啦,明天见罗!
/images/emoticon/emoticon35.gif

参考资料


<<:  Day 23 - 将 Yacht Manager 後台储存资料提取後,送至前台渲染首页 Home 页面 (下) - 新闻图卡区 - ASP.NET Web Forms C#

>>:  Day 25 - 云端备份是降低专案风险的一环

【Day 27】关於 Deno 以及基础安装

关於 Deno Deno 上一次调整後,为了效能问题,将核心模块从 Typescript 改回 J...

Day-10 符号Symbol 跟字串String有什麽不同?

Ruby 里面有个很奇怪的东西,叫做符号 Symbol ,他的写法是 :hello ,字串前面加上...

Day 11 Arbitrary attributes

目前MyButton有3个[Parameter],如果再增加的话,又要再定义新的[Parameter...

谈谈 Spring boot Controller API 怎麽设计

说到了 controller 就不得不说一下 API,简单来说就是负责建立客户所需的内容和产生所需回...

Day 27 : Github Actions实作自动化推上Azure

在前一些日子的铁人赛中,我曾经写过关於Docker in Azure的文章,今天我们接续昨天的Git...