基于 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

十、算法流程

数据生成逻辑

  1. 生成正常工况下的传感器数据(基准值 + 高斯噪声)
  2. 注入四类典型异常:
    • 突变异常:某一时刻数据突然升高或降低
    • 漂移异常:一段时间内数据缓慢偏移
    • 噪声异常:短时间内出现剧烈波动
    • 联动异常:多传感器之间出现不合理变化组合

异常检测算法

对每个数据点 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 = 正确识别的正常点

十一、运行结果说明

执行全部脚本后,将生成以下结果:

  1. 原始数据曲线 (figures/raw_sensor_data.png):展示温度、压力、流量三类传感器在 1200 个采样点上的完整波形。
  2. 异常检测结果图 (figures/anomaly_detection_result.png):在三频道数据上叠加红色/紫色标记的异常检测点。
  3. Z-score 序列图 (figures/zscore_sequence.png):展示三个通道的 Z-score 时序与判定阈值的对比关系。
  4. 阈值对比图 (figures/threshold_comparison.png):对比 2.0、2.5、3.0、3.5、4.0 五组阈值下的检测效果。
  5. 综合评价图 (figures/detection_overview.png):在温度通道上以不同颜色标注 TP/FP/FN 三类点。
  6. 评估报告(终端输出):完整混淆矩阵和各项指标数值。
  7. 实验结论(终端输出):一段可直接引用到实验报告的分析文字。

十二、教学使用建议

课堂组织方式

环节 建议时间 内容
案例背景讲解 10 分钟 介绍工业传感器异常检测的应用场景和工程需求
代码运行演示 15 分钟 在 Syslab 中运行数据生成和异常检测脚本,展示运行结果
参数修改实验 20 分钟 学生自主修改阈值、窗口长度,观察检测结果变化
结果讨论 15 分钟 全班讨论:误检和漏检的工程含义、参数选择的权衡
拓展任务 课后 增加新的异常类型、替换数据集、或对比其他检测方法

建议教学顺序

  1. 先讲背景:从"设备故障预警"的实际工程需求出发,引出传感器数据异常检测的重要性
  2. 再讲方法:在黑板或 PPT 上讲解滑动窗口和 Z-score 的原理(建议 5~8 分钟的公式推导)
  3. 运行验证:打开 Syslab 完整运行一遍全部脚本,展示生成的图表
  4. 修改探索:让学生调整 WINDOW_SIZEZ_THRESHOLD 参数
  5. 讨论总结:引导学生思考"为什么会有误检和漏检"

十三、学生实验任务

基础任务(必做)

  1. 运行全部四个脚本,理解每个脚本的输出内容
  2. 将 Z-score 阈值从 3.0 改为 2.0,观察检测结果如何变化
  3. 将滑动窗口从 50 改为 20 和 100,分别记录准确率和误检数量
  4. 根据运行结果,填写实验报告中的"数据显示"和"分析结果"部分

进阶任务(选做)

  1. 尝试单独对温度通道进行检测,并与多通道融合检测的结果进行对比
  2. 思考:能不能在 Z-score 检测的基础上,增加一个"异常最小持续时间"的过滤条件?
  3. 实验报告中讨论:这种方法在真实工业场景中有什么局限性?

十四、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 教学团队开发,欢迎教师和学生在教学实践中反馈使用体验和改进建议。