☰
PaddleX 时序异常检测数据标注与私有数据集准备完整指南
2026/10/9 5:31:39 网站建设 项目流程
  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • 模型推理服务

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleX
点击查看免费下载

导读

本文是 PaddleX 时序异常检测(Time Series Anomaly Detection)任务模块的数据准备与标注教程,面向需要构建私有时序异常检测数据集的开发者。时序异常检测是一个无监督学习任务,其数据组织方式与图像分类、目标检测等有监督任务截然不同:训练集不需要人工标注,验证集则需要逐点标注异常标签。读完本文,你将掌握 PaddleX 时序异常检测数据集的 CSV 组织规范、训练集与验证集的标注规则、基于 Demo 数据集的格式校验与划分流程,以及如何让私有数据顺利通过 PaddleX 的数据校验并进入训练、评估和推理的完整链路。


一、任务特性决定的数据标注策略

时序异常检测的目标是从历史时序数据中识别出不符合预期模式、趋势或周期性规律的异常点或异常时段,这些异常可能由系统故障、外部冲击、数据录入错误或罕见事件引起。由于训练阶段模型只学习"正常数据"的模式分布,异常检测天然被设计为无监督学习任务,因此训练数据无需标注。

从 PaddleX 时序异常检测模块教程 以及 AutoEncoder_ad 配置文件 可以看到,该模块的训练配置中包含feature_cols(特征列)与label_col(标签列),说明数据集以 CSV 文件承载特征与标签,模型根据特征列判断每个时间点是否异常,标签列仅用于评估。

1.1 训练集:只收集正常数据

训练样本应尽可能全部为正常数据,即数据中没有异常点。在训练集中,表示异常的标签列(label)可以:

  • 全部设置为0(0 表示无异常);
  • 或者完全省略标签列。

两种方式都是允许的,因为无监督训练过程本身不依赖标签监督信号。

1.2 验证集:逐点标注

验证集用于评估模型精度,因此必须进行标注:

  • 在某个时间点是异常的点,将该时间点的标签设置为1;
  • 其他正常时间点的标签设置为0。

验证集标注质量直接影响precision、recall、f1_score等评估指标的可靠性,因此在标注异常点时,应结合业务场景明确"异常"的判定口径(例如设备过热、流量突增、交易行为异常等)。


二、数据集 CSV 组织规范

PaddleX 时序异常检测模块要求数据集以CSV 格式组织,目录下必须同时存在train.csv与val.csv两个文件。这一点可以由 check_dataset.py 的源码确认:校验逻辑会依次查找train.csv与val.csv,缺失任何一个都会抛出DatasetFileNotFoundError。

一个标准的时序异常检测 CSV 文件应包含以下列:

列名说明是否必须
timestamp时间戳列,用于标识每个时间点,默认列名为timestamp(由time_col参数指定)是
feature_0,feature_1, ...特征列,表示与设备/系统是否异常相关的变量,默认列名为feature_0, feature_1(由feature_cols参数指定,可多个,逗号分隔)是
label标签列,1 表示异常点,0 表示正常点(由label_col参数指定)训练集可省略,验证集必须

以 AutoEncoder_ad.yaml 中的训练参数为例,默认配置为:

Train: time_col: timestamp feature_cols: feature_0,feature_1 label_col: label freq: 1 input_len: 96 epochs_iters: 20 batch_size: 16 learning_rate: 0.0005 log_interval: 10

各参数的核心含义如下:

  • time_col:时间列名称,需与你的数据保持一致;
  • feature_cols:特征列名称,多个特征用逗号分隔,应选择与异常判定相关的变量;
  • label_col:标签列名称,1 表示异常,0 表示正常;
  • freq:时间频率,支持1min、5min、1h等,按数据实际采样频率设置;
  • input_len:输入到模型的时序长度,模型会按该长度对时序进行切片,判断该段内是否存在异常。例如input_len=96表示预测 96 个时间点内是否存在异常;
  • epochs_iters/batch_size/learning_rate:训练轮数、批大小与初始学习率。

关于input_len与feature_cols、label_col的详细说明,可参考 PaddleX 时序任务模型配置文件参数说明。

校验通过后生成的check_dataset_result.json会展示数据的表头与前 10 行示例,例如官方 Demo 数据集的表头为timestamp, feature_0, ..., feature_24, label,即 25 维特征加 1 个标签列,与上述组织规范一致。


三、从 Demo 数据集开始:下载与校验

PaddleX 为每个模块提供了官方 Demo 数据集,可用于完整跑通开发流程。下载并解压时序异常检测示例数据:

wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/ts_anomaly_examples.tar -P ./dataset tar -xf ./dataset/ts_anomaly_examples.tar -C ./dataset/

解压后目录内应包含train.csv与val.csv。随后使用一条命令完成数据校验:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/ts_anomaly_examples

命令成功运行后,日志中会打印Check dataset passed !。校验结果保存在./output/check_dataset_result.json,相关产出(含示例时序序列)保存在./output/check_dataset目录下。

3.1 校验结果解读

校验结果文件内容示例如下:

{ "done_flag": true, "check_pass": true, "attributes": { "train_samples": 22032, "train_table": [ ["timestamp", "feature_0", "...", "feature_24", "label"], [0.0, 0.7326893750079723, "...", 0.1382488479262673, 0.0] ], "val_samples": 198290, "val_table": [ ["timestamp", "feature_0", "...", "feature_24", "label"], [22032.0, 0.8604795809835284, "...", 0.1428571428571428, 0.0] ] }, "analysis": {"histogram": ""}, "dataset_path": "./dataset/ts_anomaly_examples", "show_type": "csv", "dataset_type": "TSADDataset" }

关键字段含义:

  • check_pass: true:数据集格式符合要求,只有通过校验的数据才可以用于训练和评估;
  • attributes.train_samples:训练集样本数(示例为 22032);
  • attributes.val_samples:验证集样本数(示例为 198290);
  • attributes.train_table/attributes.val_table:训练集/验证集前 10 行示例数据;
  • dataset_type: TSADDataset:数据集被识别为时序异常检测数据集类型。

从源码 check_dataset.py 可以看到,该校验过程会统计train.csv与val.csv的行数(sample_cnts)、读取表头与前 10 行数据,并在output/demo_data下生成train.csv、val.csv的示例片段,用于人工抽检数据格式。

3.2 私有数据如何通过校验

如果你的私有数据也遵循上述 CSV 组织规范(时间列 + 特征列 + 验证集标签列),即可通过校验。需要特别强调的是:训练集可以省略label列,但验证集必须有完整的label列,否则无法评估模型在异常点上的检出能力。


四、可选操作:数据集格式转换与划分

完成数据校验后,可以通过修改配置文件或追加命令行参数的方式,对数据集进行格式转换或重新划分训练/验证比例。

4.1 数据集格式转换

时序异常检测支持将xlsx和xls格式的数据集转换为csv格式。相关参数位于配置文件的CheckDataset字段下:

CheckDataset: convert: enable: True src_dataset_type: null

修改配置后执行:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/ts_anomaly_examples

也可以通过命令行追加参数实现同样的效果:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/ts_anomaly_examples \ -o CheckDataset.convert.enable=True

参数说明:

  • CheckDataset.convert.enable:是否进行数据集格式转换,支持xlsx/xls转CSV,默认False;
  • CheckDataset.convert.src_dataset_type:转换时无需设置源数据集格式,默认null。

4.2 数据集重新划分

如需调整训练/验证比例,例如训练集 90%、验证集 10%,修改配置如下:

CheckDataset: split: enable: True train_percent: 90 val_percent: 10

随后执行:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/ts_anomaly_examples

同样支持命令行追加参数:

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=check_dataset \ -o Global.dataset_dir=./dataset/ts_anomaly_examples \ -o CheckDataset.split.enable=True \ -o CheckDataset.split.train_percent=90 \ -o CheckDataset.split.val_percent=10

参数说明:

  • CheckDataset.split.enable:是否重新划分数据集,默认False;
  • CheckDataset.split.train_percent:训练集百分比,0-100 之间的整数,需保证与val_percent之和为 100;
  • CheckDataset.split.val_percent:验证集百分比,0-100 之间的整数,需保证与train_percent之和为 100。

注意:数据划分执行之后,原有标注文件会在原路径下被重命名为xxx.bak,请确认原始数据有备份需求时再执行此操作。


五、校验通过后的完整开发链路

数据校验只是第一步。私有数据集通过校验后,即可无缝接入 PaddleX 的训练、评估与推理流程,全部通过 main.py 加配置文件的统一入口完成。

5.1 模型训练

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=train \ -o Global.dataset_dir=./dataset/ts_anomaly_examples

常用训练参数调整方式:

  • 指定前 2 卡 GPU 训练:-o Global.device=gpu:0,1;
  • 设置训练轮数为 10:-o Train.epochs_iters=10;
  • 指定输出目录:-o Global.output=...(默认output);
  • 使用 GPU 训练时,可开启 Paddle 3.0 的 CINN 神经网络编译器加速:-o Train.dy2st=True。

训练完成后,输出目录下通常包含:train_result.json(训练结果记录)、train.log(训练日志)、config.yaml(本次训练超参数配置)、best_accuracy.pdparams.tar、scaler.pkl、.checkpoints、.inference等权重相关文件。

5.2 模型评估

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=evaluate \ -o Global.dataset_dir=./dataset/ts_anomaly_examples

如需指定评估权重,可通过-o Evaluate.weight_path=./output/best_model/model.pdparams覆盖默认权重路径。评估完成后产出evaluate_result.json,记录f1、recall、precision三项指标——这也正是验证集需要完整标签标注的原因。

5.3 模型推理

python main.py -c paddlex/configs/modules/ts_anomaly_detection/AutoEncoder_ad.yaml \ -o Global.mode=predict \ -o Predict.model_dir="./output/inference" \ -o Predict.input="ts_ad.csv"

推理输入支持本地文件路径、URL、本地目录以及pandas.DataFrame等多种形式,推理结果为每个时间点的label(1 表示预测异常,0 表示预测正常)。

5.4 模块级快速集成

不经过训练流程、直接使用 PaddleX 内置预训练模型时,几行 Python 代码即可完成推理:

from paddlex import create_model model = create_model(model_name="AutoEncoder_ad") output = model.predict("ts_ad.csv", batch_size=1) for res in output: res.print() res.save_to_csv(save_path="./output/") res.save_to_json(save_path="./output/res.json")

输出结果示例如下:

{'res': {'input_path': 'ts_ad.csv', 'anomaly': label timestamp 220226 1 220227 1 220228 0 220229 1 220230 1 ... ... 220321 1 [96 rows x 1 columns]}}

input_path表示输入时序文件路径,anomaly为异常检测结果(1 表示预测异常,0 表示预测正常)。create_model支持通过model_name指定 PaddleX 内置模型,或通过model_dir指定自定义训练模型;支持device(如gpu:0、npu:0、cpu)、use_hpip、hpi_config等推理参数。

PaddleX 时序异常检测模块内置模型可在 model_list.py 中查看,包括AutoEncoder_ad、DLinear_ad、Nonstationary_ad、PatchTST_ad、TimesNet_ad五款模型,均可按上述方式任意切换使用。


六、模型选型与验证集标注建议

PaddleX 时序异常检测模块当前提供多款模型,各模型在精度、召回与模型体积上各有侧重(下表数据来自 模块使用教程,指标在 PSM 数据集上测得):

模型名称precisionrecallf1_score模型存储大小(MB)特点
DLinear_ad0.98980.39 / 0.160.69 / 0.080.1结构简单、高效易用
Nonstationary_ad0.98551.94 / 1.165.31 / 1.661.5基于 Transformer,优化非平稳序列
AutoEncoder_ad0.99360.24 / 0.130.41 / 0.050.052经典自编码结构,轻量易用
PatchTST_ad0.98782.10 / 0.556.98 / 0.630.164兼顾局部模式与全局依赖,高精度

结合上述评估指标的设计,验证集标注时需要注意:异常点通常远少于正常点(类别严重不均衡),因此recall(异常检出率)与f1_score比单纯的precision更能反映模型的实际异常检测能力。标注时应确保验证集中的异常时段覆盖不同类型的异常模式(突变、缓变、周期性偏离等),避免评估指标失真。


七、小结与后续学习路径

时序异常检测的数据准备遵循"训练集无监督、验证集逐点标注"的原则:训练集收集纯正常数据(标签列置 0 或省略),验证集对异常时间点标注 1、正常时间点标注 0,并以train.csv+val.csv的 CSV 形式组织。通过check_dataset校验后即可进入训练、评估与推理链路;若数据为xlsx/xls格式或划分比例不理想,可使用格式转换与数据集划分功能。

建议继续阅读的仓库文档:

  • PaddleX 时序异常检测模块使用教程:完整覆盖模型列表、快速集成、二次开发全流程;
  • PaddleX 时序任务模型配置文件参数说明:time_col、feature_cols、label_col、input_len等参数的详细语义;
  • PaddleX 时序异常检测产线教程:将训练好的模型接入产线,并支持服务化部署、高性能推理与多硬件切换;
  • 时序异常检测数据标注中文版:中文对照说明;
  • 源码参考:数据集校验实现、AutoEncoder_ad 配置文件、模型列表。
  • 人工智能
  • 大模型
  • 低代码
  • 计算机视觉
  • 深度学习
  • 模型推理服务

【免费下载链接】PaddleX

All-in-One Development Tool based on PaddlePaddle

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleX
点击查看免费下载

相关推荐

上一篇:如何编写专业的AI Agent技能:NVIDIA Agent Skills的SKILL.md结构与渐进式披露完整教程
下一篇:使用 boto3 实现 Amazon S3 Batch Operations 批处理任务全流程(AWS SDK for Python 场景实战)

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询