基于 Syslab 的传感器数据异常检测教学案例
本案例可直接用于课堂演示、上机实验或课程作业。
- 案例自带数据生成脚本,无需额外准备真实工程数据
- 学生可以通过修改阈值、窗口长度和异常类型观察检测结果变化
- 可结合 MWORKS AI 辅助理解代码、修改参数和生成实验结论
一、案例简介
本案例模拟了一个工业设备运行过程中温度、压力、流量三类传感器的实时监测数据,并内置了突变、漂移、噪声和联动等多种典型异常模式。学生通过 Syslab 平台,使用滑动窗口 Z-score 方法对数据进行异常检测,学习工程传感器数据的生成、读取、可视化、异常检测和结果分析的全流程。
核心价值:让学生在不依赖真实工业数据的前提下,完整理解从"传感器信号 → 异常检测 → 结果评价"的数据分析流水线。
二、适用课程
| 课程 | 使用方式 |
|---|---|
| 工程数据分析 | 课堂演示 + 上机实验 |
| 测试技术 | 传感器数据实验 |
| 自动化检测 | 异常检测算法实验 |
| 工业大数据入门 | 时序数据分析实践 |
| 人工智能导论实验课 | 基础异常检测方法实验 |
三、适用专业
- 机械工程 / 车辆工程
- 自动化 / 测控技术与仪器
- 电气工程及其自动化
- 工业工程
- 智能制造工程
- 数据科学与大数据技术
四、建议课时
- 课堂讲解:1 课时(45 分钟)
- 上机实验:1 课时(45 分钟)
- 课后拓展:自主安排(约 2~4 学时)
五、学生基础要求
- 对传感器和工业设备有基本认识
- 了解均值、标准差等基础统计学概念
- 具备使用 Syslab 运行脚本的基本能力
- 不需要任何机器学习或深度学习背景
六、教学目标
| 层级 | 目标 |
|---|---|
| 知识 | 理解工业设备运行过程中传感器数据异常的主要类型和特征 |
| 方法 | 掌握滑动窗口和 Z-score 等基础统计异常检测方法的原理 |
| 技能 | 能够使用 Syslab 完成数据生成、异常检测、结果可视化和评价分析 |
| 思维 | 理解参数选择(阈值、窗口长度)对检测性能的影响,培养工程权衡意识 |
七、快速开始
环境要求
- Syslab 2026a SP1 或更高版本
- 无需安装任何额外第三方包(仅依赖 Syslab 内置的 TyPlot 和 TyBase)
运行步骤
# 步骤 1: 生成模拟传感器数据
syslab src/01_generate_data.jl
# 步骤 2: 执行异常检测
syslab src/02_detect_anomaly.jl
# 步骤 3: 评估检测结果
syslab src/03_evaluate_result.jl
# 步骤 4: 生成综合可视化
syslab src/04_visualize_result.jl
也可在 Syslab 编辑器中逐个打开脚本,按 Ctrl+Enter 逐步运行。
一键运行全部
在 Syslab 的命令窗口中执行:
include("src/01_generate_data.jl")
include("src/02_detect_anomaly.jl")
include("src/03_evaluate_result.jl")
include("src/04_visualize_result.jl")
八、文件结构
sensor_anomaly_detection/
├── README.md # 本文件
├── data/
│ ├── sensor_data.csv # 生成的模拟传感器数据(自动生成)
│ └── anomaly_result.csv # 异常检测结果(自动生成)
├── src/
│ ├── 01_generate_data.jl # 数据生成脚本
│ ├── 02_detect_anomaly.jl # 异常检测脚本
│ ├── 03_evaluate_result.jl # 结果评估脚本
│ └── 04_visualize_result.jl # 综合可视化脚本
├── figures/
│ ├── raw_sensor_data.png # 原始传感器数据曲线
│ ├── anomaly_detection_result.png # 异常检测结果图
│ ├── zscore_sequence.png # Z-score 序列与阈值图
│ ├── anomaly_compare_detail.png # 真实异常 vs 检测异常详细对比
│ ├── threshold_comparison.png # 不同阈值检测效果对比
│ └── detection_overview.png # 检测综合评价概览
├── docs/
│ ├── 学生实验指导书.md # 面向学生的实验指导
│ └── 教师使用建议.md # 面向教师的课堂建议
九、数据字段说明
| 字段 | 含义 | 单位 | 正常范围 |
|---|---|---|---|
| time | 采样时间 | 秒 (s) | 1 ~ 1200 |
| temperature | 温度传感器读数 | °C | ~60 ± 0.3(噪声) |
| pressure | 压力传感器读数 | MPa | ~2.5 ± 0.02 |
| flow | 流量传感器读数 | m³/h | ~120 ± 1.0 |
| anomaly_label | 是否异常(0=正常,1=异常) | — | 0 / 1 |
十、算法流程
数据生成逻辑
- 生成正常工况下的传感器数据(基准值 + 高斯噪声)
- 注入四类典型异常:
- 突变异常:某一时刻数据突然升高或降低
- 漂移异常:一段时间内数据缓慢偏移
- 噪声异常:短时间内出现剧烈波动
- 联动异常:多传感器之间出现不合理变化组合
异常检测算法
对每个数据点 x_i:
1. 取滑动窗口 [i-W, i+W] 内的数据段
2. 计算该段的均值 μ 和标准差 σ
3. 计算 Z-score: z_i = |x_i - μ| / σ
4. 若 z_i > 阈值,则判定为异常
评价指标
| 指标 | 含义 | 计算方式 |
|---|---|---|
| 准确率 | 总体分类正确的比例 | (TP+TN) / N |
| 精确率 | 检测为异常中真正异常的比例 | TP / (TP+FP) |
| 召回率 | 真实异常中被检出的比例 | TP / (TP+FN) |
| F1 Score | 精确率和召回率的调和平均 | 2PR / (P+R) |
| 误检 (FP) | 错误报警的次数 | 计数 |
| 漏检 (FN) | 未检出的真实异常次数 | 计数 |
TP = 正确检出的异常,FP = 误报,FN = 漏报,TN = 正确识别的正常点
十一、运行结果说明
执行全部脚本后,将生成以下结果:
- 原始数据曲线 (
figures/raw_sensor_data.png):展示温度、压力、流量三类传感器在 1200 个采样点上的完整波形。 - 异常检测结果图 (
figures/anomaly_detection_result.png):在三频道数据上叠加红色/紫色标记的异常检测点。 - Z-score 序列图 (
figures/zscore_sequence.png):展示三个通道的 Z-score 时序与判定阈值的对比关系。 - 阈值对比图 (
figures/threshold_comparison.png):对比 2.0、2.5、3.0、3.5、4.0 五组阈值下的检测效果。 - 综合评价图 (
figures/detection_overview.png):在温度通道上以不同颜色标注 TP/FP/FN 三类点。 - 评估报告(终端输出):完整混淆矩阵和各项指标数值。
- 实验结论(终端输出):一段可直接引用到实验报告的分析文字。
十二、教学使用建议
课堂组织方式
| 环节 | 建议时间 | 内容 |
|---|---|---|
| 案例背景讲解 | 10 分钟 | 介绍工业传感器异常检测的应用场景和工程需求 |
| 代码运行演示 | 15 分钟 | 在 Syslab 中运行数据生成和异常检测脚本,展示运行结果 |
| 参数修改实验 | 20 分钟 | 学生自主修改阈值、窗口长度,观察检测结果变化 |
| 结果讨论 | 15 分钟 | 全班讨论:误检和漏检的工程含义、参数选择的权衡 |
| 拓展任务 | 课后 | 增加新的异常类型、替换数据集、或对比其他检测方法 |
建议教学顺序
- 先讲背景:从"设备故障预警"的实际工程需求出发,引出传感器数据异常检测的重要性
- 再讲方法:在黑板或 PPT 上讲解滑动窗口和 Z-score 的原理(建议 5~8 分钟的公式推导)
- 运行验证:打开 Syslab 完整运行一遍全部脚本,展示生成的图表
- 修改探索:让学生调整
WINDOW_SIZE和Z_THRESHOLD参数 - 讨论总结:引导学生思考"为什么会有误检和漏检"
十三、学生实验任务
基础任务(必做)
- 运行全部四个脚本,理解每个脚本的输出内容
- 将 Z-score 阈值从 3.0 改为 2.0,观察检测结果如何变化
- 将滑动窗口从 50 改为 20 和 100,分别记录准确率和误检数量
- 根据运行结果,填写实验报告中的"数据显示"和"分析结果"部分
进阶任务(选做)
- 尝试单独对温度通道进行检测,并与多通道融合检测的结果进行对比
- 思考:能不能在 Z-score 检测的基础上,增加一个"异常最小持续时间"的过滤条件?
- 实验报告中讨论:这种方法在真实工业场景中有什么局限性?
十四、MWORKS AI 辅助学习提示
学生可以在 MWORKS AI 中输入以下提示词,辅助学习:
理解代码:
请解释 02_detect_anomaly.jl 中滑动窗口异常检测的实现逻辑。
修改参数:
请将异常检测阈值从 3 改为 2,并说明检测结果可能发生什么变化。
增加功能:
请在当前案例中增加一种缓慢漂移异常,并重新绘制结果图。
生成报告:
请根据本次实验结果生成一段实验结论。
原理探究:
Z-score 异常检测方法的原理是什么?它有什么优点和缺点?
拓展学习:
除了滑动窗口 Z-score 方法外,还有哪些常见的时序数据异常检测方法?
十五、常见问题
Q1: 运行时提示"找不到 TyPlot 模块"?
A: 请确认正在使用 Syslab 2026a SP1 或更高版本。TyPlot 是 Syslab 的内置模块,不需要额外安装。如果仍有问题,请检查 Syslab 安装是否完整。
Q2: 为什么改小阈值后,检测到的"异常点"突然非常多?
A: Z-score 阈值控制检测的严格程度。阈值越小,检测越敏感,越容易将正常波动判为异常(即误检增加)。这是预期的正常行为,也是本实验想要让学生观察和理解的核心现象。
Q3: 滑动窗口设为多大合适?
A: 没有绝对的"最优值"。窗口太小,局部统计量不够稳定;窗口太大,对缓慢漂移的检测可能滞后。一般建议窗口覆盖 10~100 个采样点,具体取决于信号特性。本案例默认设为 50,学生可以修改后对比效果。
Q4: 能否使用真实工业数据替换模拟数据?
A: 可以。只需确保真实数据的 CSV 格式与 data/sensor_data.csv 一致(列名为 time,temperature,pressure,flow,anomaly_label),然后直接替换文件即可运行检测脚本。如果没有真实标签,可以跳过评估脚本(03 和 04)。
十六、拓展方向
| 方向 | 说明 |
|---|---|
| 增加传感器类型 | 加入振动、位移、电流等更多工业传感器信号 |
| 引入更多异常检测方法 | 对比孤立森林 (Isolation Forest)、LOF、移动平均等方法的检测效果 |
| 多传感器融合检测 | 研究基于相关性矩阵的多变量异常检测 |
| 自适应阈值 | 根据信号动态特性自适应调整 Z-score 阈值 |
| 实时检测与报警 | 模拟在线数据流,实现逐点实时检测和报警日志 |
| 故障类型分类 | 不仅检测异常,还尝试对异常进行分类(突变/漂移/噪声等) |
| 真实数据应用 | 使用公开工业数据集替代模拟数据 |
| 报告生成 | 基于 TyReportGenerator 自动生成实验报告 |
本案例由 MWORKS Syslab 教学团队开发,欢迎教师和学生在教学实践中反馈使用体验和改进建议。