- 人工智能
- 大模型
- 低代码
- 计算机视觉
- 深度学习
- 模型推理服务
【免费下载链接】PaddleX
All-in-One Development Tool based on PaddlePaddle
导读
本文是 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 数据集上测得):
| 模型名称 | precision | recall | f1_score | 模型存储大小(MB) | 特点 |
|---|---|---|---|---|---|
| DLinear_ad | 0.9898 | 0.39 / 0.16 | 0.69 / 0.08 | 0.1 | 结构简单、高效易用 |
| Nonstationary_ad | 0.9855 | 1.94 / 1.16 | 5.31 / 1.66 | 1.5 | 基于 Transformer,优化非平稳序列 |
| AutoEncoder_ad | 0.9936 | 0.24 / 0.13 | 0.41 / 0.05 | 0.052 | 经典自编码结构,轻量易用 |
| PatchTST_ad | 0.9878 | 2.10 / 0.55 | 6.98 / 0.63 | 0.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
相关推荐
PaddleX 时序异常检测数据标注教程:无监督训练的数据集规范与标签设计
PaddleX 时序异常检测数据标注教程:无监督训练的数据集规范与标签设计 时序异常检测(Time Series Anomaly Detection)的目标是识
人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音PaddleX 时序异常检测数据标注指南:无监督训练集与 0/1 验证集标签规范
PaddleX 时序异常检测数据标注指南:无监督训练集与 0/1 验证集标签规范 时序异常检测是典型的无监督学习任务:模型只依赖"正常数据"学习正常模式,进而识
人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音PaddleX 目标检测任务数据准备全流程:Labelme / PaddleLabel 标注与 COCO 数据集构建指南
PaddleX 目标检测任务数据准备全流程:Labelme / PaddleLabel 标注与 COCO 数据集构建指南 本文基于 PaddleX 开源仓库(
人工智能大模型低代码计算机视觉深度学习模型推理服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考