SuperAPI AI 工具集

atai-newton-omega-model-data-prep

数据与分析

查看项目

更新于 10-21 20:55

技能介绍

用途

Newton Data Prep 是一个建模前的数据准备流水线,专门处理多变量时间序列传感器数据。它的目标是把原始的多变量 dataframe 清洗、切分并特征化,最终交给下游的 KNN 或 Isolation Forest 分类器使用,输出形如 (X, y, metadata) 的数组。该技能位于 Omega 嵌入步骤之前(清洗)和之后(特征化),是 atai-newton-omega-model 的上游入口与下游出口。

主要能力

该技能捆绑三个可复用的构建模块:

  1. DataPreprocessor — 诊断 + 缺口感知分块。所谓“块”(block)是指所有选定传感器都有数据、且没有超过 gap_threshold_samples 的连续 NaN 的连续片段。长缺口区域会被拆分为独立的块,因为跨长缺口插补等于伪造数据。它分两阶段使用:先调用 diagnose() 做只读诊断,返回结构化报告,涵盖采样率变异系数(规律性)、前 N 个缺口及其起止与大小、每列空值计数、每列最大连续空值长度;再调用 build() 生成清洗后的 dataframe,并新增 block_id(所属连续块)与 imputed(该行是否有传感器原本为 NaN)两列。位于长缺口区域内的行会被整体丢弃而非插补。

  2. DataSplitter — 按时间顺序的 out-of-time 训练/测试切分。时间序列交叉验证若用随机切分,会把未来信息泄漏进训练集,造成虚假信心;OOT 切分则不会。默认使用 mode='oot',mode='random' 仅建议作为“我到底有没有学到东西”的合理性检查,绝不用于生产切分。对于无监督任务(如 Isolation Forest),y 可以为 None。

  3. FeaturePreparer — 联合状态特征化。把逐传感器逐窗口的嵌入 dataframe 转换为单一的 (X, y, metadata) 矩阵,每一行是某窗口下所有传感器的联合状态(拼接后的嵌入)。可选做 L2 归一化、标准化和/或 PCA 降维。

使用方式

完整流水线示例:

# 1. 诊断,然后清洗
prep = DataPreprocessor(timestamp_col='timestamp', sampling_rate_minutes=1, gap_threshold_samples=5)
report = prep.diagnose(df_raw, verbose=True)
df_clean = prep.build(df_raw)

# 2. 嵌入(见 atai-newton-omega-model)——每行对应一个 (传感器, 窗口),含嵌入列
df_emb = embedding_generator.generate(
    df_clean, data_columns=['sensor_a', 'sensor_b'], label_columns=['machine_state'],
)

# 3. 特征化为 (X, y, metadata)
preparer = FeaturePreparer(normalize='l2', reduce_dim=50)
X, y, metadata = preparer.prepare(df_emb, label_column='machine_state')

# 4. 按时间顺序切分
splitter = DataSplitter(mode='oot', test_size=0.3)
X_train, X_test, y_train, y_test, meta_train, meta_test = splitter.split(X, y, metadata)

# 5. 交给自选分类器(KNN / IsolationForest)

本地安装:

python3 -m venv .venv && source .venv/bin/activate
pip install -r skills/atai-newton-omega-model-data-prep/references/requirements.txt
pip install matplotlib  # 可选:仅用于 diagnose() 的 plot=True

运行测试:

pip install -r skills/atai-newton-omega-model-data-prep/references/requirements.txt pytest
pytest skills/atai-newton-omega-model-data-prep/tests/ -v

适用场景

  • 用户拥有原始多变量传感器 CSV(一个或多个传感器、不规则时间戳、NaN 缺口),准备用 atai-newton-omega-model 做嵌入,需要先清洗数据。
  • 用户询问“要不要丢掉含 NaN 的行”“如何处理缺口”“时间序列怎样做训练/测试切分才合理”。
  • 分类器表现异常好或异常差,怀疑存在时间泄漏时,可用 DataSplitter(mode='oot') 修正。
  • 用户已有逐传感器嵌入(来自 Omega 模型),需要折叠成单一特征矩阵供 KNN 使用,即 FeaturePreparer 的用途。
  • 用户希望把 atai-newton-omega-model 中描述的“联合状态”模式落实为代码。

限制与注意事项

  • 不适用于视频、图像或文本任务(应使用 atai-newton-fusion-model)。
  • 若数据本身已经干净(采样规律、无 NaN、无泄漏风险),该流水线会变成空操作,可直接把 dataframe 交给下游技能。
  • 若需要只读的 go/no-go 预检门禁,应使用外部的 omega-1-4-preflight 检查;该预检不改动数据,而本技能会做分块、插补、降维等改动,两者互补。
  • 常见陷阱:对时间序列做随机切分(几乎总是错的,应使用 mode='oot');跨长缺口插补(不要为了“造更多数据”而调高 gap_threshold_samples);逐窗口标签不一致(应在标签传播策略处解决,而非关闭检查);训练与测试使用不同的 sensor_order(会静默破坏预测,应显式固定);在极小数据集上做 PCA(约 100 样本以下应跳过)。
  • 该技能为纯本地数据整理,不需要 Newton API 密钥。

文件结构

skills/atai-newton-omega-model-data-prep/
├── SKILL.md
├── references/
│   ├── requirements.txt
│   ├── data_preprocessor.py
│   ├── data_splitter.py
│   └── feature_preparer.py
└── tests/
    ├── conftest.py
    ├── test_data_preprocessor.py
    ├── test_data_splitter.py
    └── test_feature_preparer.py

CI 会在任何触及 skills/atai-newton-omega-model-data-prep/** 的 PR 上自动运行测试套件。