跳转至

P3-3.2 怎样按照问题重新设计数据集

Section ID: P3-3.2 Version: v2026.07.20

所谓重新设计数据集,意思不是把已经存在的文件原样拿来用,而是重新挑选问题所要求的样本单位和列结构。也就是说,要重新决定 什么算一行哪些列要留下拿什么和什么比较。动作单位表、比较报告、预测问题候选表之所以彼此不同,差别正是从这一步重设计里长出来的。

即便是同一份源时间序列,也可以重新做成不同的数据集。比如有一份自动执行动作的原始数据时,下面三种表都可能成立,但它们的职责不同。

表的类型 一行表示什么 主要目的
测量值表 动作中的一个时点记录 保存源数据和追踪细节
动作单位表 一次自动执行动作的摘要 生成可比较的样本
近期区段比较表 通过聚合多个动作得到的近期状态与基准线 解释变化并安排复核优先级

这三张表里,没有任何一张会自动成为 正确的数据集。适合哪张表,取决于你到底想解决什么问题。如果要比较单次动作的结构,就需要动作单位表;如果要看近期状态是否偏离平常状态,就需要近期区段比较表。所以这一节重要的不是再背一遍“数据集”的定义,而是固定这样一点:问题一变,表结构也必须跟着重设计。

读到这里时,读者最常卡住的地方是:我知道这些表类型了,但面对我现在的问题,到底该先选哪一张表? 所以,把问题和表结构直接对应起来之后,选择标准会清楚很多。

现在要回答的问题 应该先做出来的表 原因
这一次动作是不是比其他动作更不稳定? 动作单位表 因为比较对象是 一次动作,所以必须先把时点日志归成一条案例
最近 20 次和以往 200 次相比,流程是不是变了? 近期区段比较表 因为问题本身问的是 动作群组之间 的差异,所以需要聚合列和基准线比较列
如果出现异常,原因是从哪个时点开始的? 测量值表 + 动作单位表 因为要先通过动作单位表筛出异常案例,再回到原始时点日志里看细节原因
能不能做出以后监督学习会用到的输入表? 动作单位特征表或预测问题候选表 因为输入列和目标标签候选必须建立在同一个样本单位上再分开

也就是说,先做哪张表,会随着问题是在问 一次动作近期区段变化,还是 细节时点原因 而变化。数据集重设计之所以显得困难,不主要是因为会做很多张表,而是因为很容易忽略:问题变了,基准表也会跟着变

所以,当我们说“在做数据集”时,至少已经包含了下面这些判断。

  • 一条样本是什么?
  • 哪些值原样保留,哪些值要做摘要?
  • 为了比较,需不需要基准线列?
  • 输出结构是警告、复核候选,还是预测目标标签?

如果在这些判断都还没做的时候就说 已经有数据集了,很多情况下其实手里还只是原始记录。尤其在时间序列数据里,这一点特别容易被误判。行很多、列也很多时,看起来像已经有了一份很丰富的数据集;但如果分析单位还没定下来,那张表其实还没有把问题表达清楚。

走到这里,表不是已经有了吗,为什么还不算数据集? 这个问题就会很自然地出现。这里必须把 已经有文件已经有可比较的样本表 区分开来看。

现在手上已经有的东西 还可能没有的东西
原始记录文件 按一次动作重新归组后的样本表
按时点排列的行和传感器值 为比较挑选出来的特征列
全部被记录下来的数字 与基准线比较后的差值列
一张很长的日志表 能直接读成复核候选或学习候选的输出结构

所以,文件已经存在,并不等于数据集已经完成。只有在我们决定按什么问题重新读取原始记录之后,这个问题的数据集 这句话才会更准确。

这里有一点很重要:数据集并不只有一种。即使面对同一份原始数据,用于比较报告的数据集、用于安排复核优先级的数据集、以及后来送进监督学习的数据集,都可能不同。只有承认这种差别,才能回答 为什么同样的数据还要重新做出好几张表?

下面这个例子展示的是:在同一份原始数据上,问题一变,先需要的表也会跟着变。

问题情境:确认即使面对同一份原始数据,比较一次动作比较近期状态准备以后学习候选 这三类问题也各自需要不同的表。

输入(input):每个 event_id 下的时点日志,以及说明该动作是否属于近期区段的区分列

期望输出(output):显露出同一张原始表会按照目的不同,被做成 动作单位表比较报告表学习候选表

要确认的概念:数据集不是某一个文件的名字,而是按问题重新设计出来的表结构

即使面对同一份源时间序列,只要问题变了,先需要起草的表也会像下面这样变化。前面 问题 -> 先做哪张表 的对应,这里再往下展开成 样本单位先保留哪些列马上能读出的输出

问题 先固定的样本单位 先保留的列 马上能读出的输出
这一条动作是不是比别的动作更不稳定? 每个 event_id 一条动作 flow_mean, flow_max, duration 动作单位比较表
最近 20 次和此前 200 次是否不同? 一组近期样本 vs 一组基准样本 recent_mean, baseline_mean, diff 近期区段比较报告
能不能做出以后学习用的候选? 每个 event_id 一条动作 flow_mean, flow_max, target_candidate 输入列与结果候选分开的表

关键不在于原始数据会变化三次,而在于:用什么问题去读同一份记录,一行表示什么哪些列要留下马上需要什么输出 就都会跟着变。要比较一次动作,就得先有按 event_id 归好的表;要比较近期区段,就比起动作单位表,更早需要一张把 近期组基准组 并排放好的结构。反过来,一旦开始考虑以后的学习候选,比起一段比较报告句子,更重要的是那张把输入列和结果候选分开的表。

用一个小图来看

只要问题一变,先要做的表也会跟着变,这一点可以压缩成下面这条重设计流程。

flowchart TD
    A[先把问题写清楚] --> B{这个问题在比较什么}
    B -- 一次动作 --> C[先做动作单位表]
    B -- 近期区段变化 --> D[先做近期区段比较表]
    B -- 以后学习候选 --> E[先做预测问题候选表]
    C --> F[重新设计样本单位和列结构]
    D --> F
    E --> F

所以,说 要把表重新做很多次,并不是在重复做同一件事,而是在问题变化时把所需结构拆分出来。动作单位特征表,是为了把一次动作作为一条样本来比较,而对时点日志做摘要之后得到的结果。比较报告表,则是在此基础上再加上比较列,使近期状态和基准线之间的差异能被直接读出来。预测问题候选表还会再往前一步,把输入列和目标标签候选分开。

重做一张表时,可以先按下面顺序把当前设计阶段固定下来。

  1. 写下源表里一行表示什么。
  2. 写下自己真正想比较的那一条样本是什么。
  3. 先决定只保留 2 到 3 个属于那条样本的摘要列。
  4. 写下这张表是用于比较报告,还是用于准备预测问题。

只要先写下这四行,就会很清楚:现在做的是存储结构检查,还是数据集设计。

这一节可以重新读成:它不是“如何重做文件”的流程,而是 按问题对齐的表重设计(question-aligned table redesign) 应该依据什么标准来做。

因此,比起把数据集重设计理解成 做很多张表,更准确的读法是:每当问题变化时,就重新对齐行的含义和列的角色。

来源与参考资料

  • W3C, PROV-Overview. provenance framework 说明它应支持 representing processing steps、derivation、versioning,因此提供了一般依据:即使面对同一份原始数据,也应该把为了不同目的而经过什么转换做出了什么表分别记录下来。 https://www.w3.org/TR/prov-overview/ / 确认日期: 2026-07-20
  • Google for Developers, Machine Learning Glossary 中的 labeled example。因为一个 example 预设了 features 和 label 的结构,所以它强化了这样的说明:当“一行的含义”和“结果列的角色”会随着问题变化时,表本身也必须跟着重新设计。 https://developers.google.com/machine-learning/glossary / 确认日期: 2026-07-20
  • U.S. Bureau of Labor Statistics, Base period. 它说明基准时段是用来和其他时段比较的 reference,因此支撑了这一点:像近期区段比较表这种结构,会随着“把哪一组作为参考组”而发生变化。 https://www.bls.gov/bls/glossary.htm / 确认日期: 2026-07-20