一、为什么选择传感器异常检测?
在工程现场,温度、压力、流量等传感器数据能够反映设备运行状态。一旦某一路数据出现突变、漂移或异常波动,往往意味着设备状态发生变化。因此,如何从时序数据中识别异常,是工程数据分析、测试技术和工业智能运维课程中非常适合讲解的基础问题。
但在实际教学中,真实工业数据往往不易获取,数据标注也需要较高成本。为降低教学使用门槛,我们基于MWORKS.Syslab开发了一个传感器数据异常检测教学案例。案例通过脚本自动生成模拟传感器数据,并使用滑动窗口与 Z-score 方法完成异常检测、结果可视化和性能评价。
本案例已在MoHub 开源,提供完整代码、示例数据、运行脚本和配套教学文档。教师下载后可直接用于课堂演示、上机实验或课程作业。
案例开源地址:https://mohub.net/education/26317/summary
二、案例亮点
本案例围绕“传感器信号 → 异常检测 → 结果评价”的完整流程展开,主要特点包括:
自带数据生成脚本,无需额外准备真实工程数据;
覆盖突变、漂移、噪声、联动等典型传感器异常类型;
使用滑动窗口与 Z-score 方法,原理清晰,便于课堂讲解;
自动输出异常检测结果、评价指标和可视化图表;
配套学生实验指导书和教师使用建议;
提供 MWORKS AI 辅助学习提示词,支持代码解释、参数修改和实验报告生成;
案例已在 MoHub 开源,便于教师和学生下载、复现和二次扩展。
三、案例目标:这个实验要完成什么?
本案例围绕一个核心任务展开:
模拟工业设备运行过程,生成多通道传感器信号,使用统计方法检测异常,并定量评价检测效果。
学生可以通过本案例完成以下学习目标:
| 层级 | 目标 |
|---|---|
| 知识 | 理解突变、漂移、噪声、联动等典型传感器异常的表现形式 |
| 方法 | 掌握滑动窗口与 Z-score 异常检测的基本思路 |
| 技能 | 使用 Syslab 完成数据生成、异常检测、结果可视化和性能评估 |
| 思维 | 理解阈值、窗口长度对误检和漏检的影响,形成工程参数权衡意识 |
四、适用课程与教学场景
本案例面向高校教学场景设计,可直接用于课堂演示、上机实验或课后作业。
| 课程 | 使用方式 | 建议年级 |
|---|---|---|
| 工程数据分析 | 核心上机实验 | 大三 |
| 测试技术 | 传感器数据处理实验 | 大三 |
| 自动化检测 | 算法验证实验 | 大三 / 大四 |
| 工业大数据入门 | 时序异常检测实践 | 大四 / 研一 |
| 人工智能导论实验课 | 非深度学习异常检测示例 | 大二 / 大三 |
适用专业包括机械工程、车辆工程、自动化、测控技术、工业工程、智能制造等。
五、数据设计:没有真实数据怎么办?
本案例通过脚本自动生成 1200 个采样点的模拟传感器数据,包含三个通道:
| 通道 | 物理含义 | 正常范围 | 噪声水平 |
|---|---|---|---|
| temperature | 温度,单位 °C | 约 60 | σ = 0.3 |
| pressure | 压力,单位 MPa | 约 2.5 | σ = 0.02 |
| flow | 流量,单位 m³/h | 约 120 | σ = 1.0 |
在此基础上,案例设计了四类典型异常:
突变异常:某一时刻数据突然升高或降低,模拟传感器接触不良、电磁干扰等情况;
漂移异常:一段时间内数据缓慢偏离基准值,模拟传感器老化或零点漂移;
噪声异常:短时间内出现剧烈随机波动,模拟信号线路干扰;
联动异常:多个传感器之间出现不合理变化,模拟设备内部状态异常。
对于教学案例来说,使用模拟数据有一个明显优势:异常类型、出现位置和标签都可以控制,便于学生理解异常是如何产生的,也便于教师组织参数对比实验。
六、方法原理:滑动窗口与 Z-score 异常检测
本案例不依赖复杂的深度学习模型,而是采用适合课堂讲解的统计方法:滑动窗口 + Z-score 异常检测。
1. 滑动窗口
对时序数据设置一个固定宽度的观察窗口,例如默认窗口长度为 50。窗口沿时间轴滑动,每次提取当前采样点附近的一段数据作为局部上下文。
这样,一个采样点是否异常,不是和全局数据比较,而是和其附近一段时间内的局部数据比较。
2. Z-score 判断
对每个采样点,基于窗口内数据计算局部均值和标准差,然后计算 Z-score:
Z_i = |X_i - μ_local| / σ_local当 Z-score 超过设定阈值时,将该点判断为异常。
默认情况下,本案例使用阈值 2.5。学生可以通过调整阈值,观察误检和漏检的变化。
简单伪代码如下:
for 每个采样点 X_i: 取当前点附近的滑动窗口数据 计算窗口均值 μ 计算窗口标准差 σ 计算 Z_i = |X_i - μ| / σ 如果 Z_i > 阈值,则标记为异常这种方法原理直观、计算过程清晰,非常适合在工程数据分析、测试技术和人工智能导论实验课中讲解。
七、案例实现流程
整个案例分为四个脚本,按顺序执行即可完成完整实验。
生成传感器数据 ↓ 加入异常状态 ↓ 读取数据并绘图 ↓ 滑动窗口统计 ↓ Z-score 异常判断 ↓ 输出检测标签 ↓ 绘制异常检测结果 ↓ 计算准确率、误检和漏检对应脚本如下:
01_generate_data.jl 生成模拟数据与原始曲线 02_detect_anomaly.jl 使用滑动窗口和 Z-score 检测异常 03_evaluate_result.jl 计算评价指标并输出实验结论 04_visualize_result.jl 绘制阈值对比和综合结果图在 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 │ ├── anomaly_compare_detail.png │ ├── threshold_comparison.png │ └── detection_overview.png └── docs/ ├── 学生实验指导书.md └── 教师使用建议.md案例提供完整代码和文档,学生可以先运行默认脚本,再进一步修改阈值、窗口长度或异常类型,观察检测结果的变化。
九、运行效果展示
以默认参数运行完整流程后,系统会输出异常检测结果和评价指标。
示例结果如下:
| 指标 | 数值 |
|---|---|
| 总采样点数 | 1200 |
| 真实异常点 | 99 |
| 检测到异常点 | 64 |
| 准确率 Accuracy | 91.4% |
| 精确率 Precision | 46.9% |
| 召回率 Recall | 30.3% |
| F1 Score | 0.368 |
| 误检 FP | 34 |
| 漏检 FN | 69 |
这组结果非常适合用于教学讨论。可以看到,虽然准确率较高,但这是因为正常点占多数;而召回率较低,说明默认参数下仍有不少异常点没有被检测出来。
这正好可以引导学生思考:
为什么异常检测不能只看准确率?
阈值变大后,误检会减少还是增加?
阈值变小后,漏检会减少还是增加?
对于漂移类异常,为什么简单 Z-score 方法不一定敏感?
在真实工程中,应该如何平衡误报和漏报?
十、如何在课堂中使用这个案例?
教师可以按照以下节奏组织课堂:
| 环节 | 建议时间 | 内容 |
|---|---|---|
| 案例背景讲解 | 10 分钟 | 介绍工业传感器异常检测场景和四类异常 |
| 代码运行演示 | 15 分钟 | 运行数据生成和异常检测脚本,展示结果图 |
| 参数修改实验 | 20 分钟 | 学生修改阈值和滑动窗口长度,记录结果变化 |
| 结果讨论 | 15 分钟 | 分析误检、漏检和工程参数权衡 |
| 拓展任务 | 课后 | 增加新的异常类型或尝试其他检测方法 |
配套文档中包含:
学生实验指导书:包含实验目的、实验步骤、思考题和报告要求;
教师使用建议:包含课堂组织方式、上机实验安排、课后作业建议和 MWORKS AI 引导方式。
因此,教师可以将该案例直接作为一次完整的上机实验使用。
十一、MWORKS AI 如何辅助学生学习?
本案例提供了 MWORKS AI 辅助学习提示词。学生在实验过程中,可以借助 AI 理解代码逻辑、修改参数、扩展功能或生成实验结论。
例如:
1. 理解代码逻辑
请解释 02_detect_anomaly.jl 中滑动窗口异常检测的实现逻辑。2. 修改参数实验
请将异常检测阈值从 2.5 改为 3.0,并说明检测结果可能发生什么变化。3. 增加新的异常类型
请在当前案例中增加一种间歇性振荡异常,并重新绘制结果图。4. 生成实验报告结论
请根据本次实验结果生成一段实验结论。5. 拓展学习
除了 Z-score 方法,还有哪些常见的时序数据异常检测方法?各适用于什么场景?通过这种方式,案例不仅可以用于 Syslab 数据分析教学,也可以用于展示 MWORKS AI 在工程代码理解、参数修改和实验辅助中的作用。
十二、案例可以如何扩展?
对于学有余力的学生,本案例还可以继续扩展:
| 拓展方向 | 说明 |
|---|---|
| 增加传感器类型 | 加入振动、位移、电流等更多工业信号 |
| 引入更多检测方法 | 对比移动平均、孤立森林、LOF 等异常检测方法 |
| 多变量联合检测 | 利用多个传感器之间的相关性进行异常判断 |
| 自适应阈值 | 根据信号波动情况动态调整 Z-score 阈值 |
| 实时在线检测 | 模拟数据流,实现逐点检测和报警 |
| 故障类型分类 | 不仅判断是否异常,还进一步区分异常类型 |
| 真实数据替换 | 使用公开数据集或真实实验数据替换模拟数据 |
这些拓展方向可以作为课程设计、综合实验或学生课后实践任务。
十三、总结与案例下载
本案例围绕工业传感器异常检测场景,基于 MWORKS.Syslab 完成了模拟数据生成、异常注入、异常检测、结果可视化和性能评价的完整流程。案例无需外部真实数据,学生下载后即可运行,适合用于课堂演示、上机实验和课程作业。
案例特点包括:
自带数据生成脚本,无需额外准备数据;
覆盖突变、漂移、噪声、联动等典型异常类型;
使用滑动窗口与 Z-score 方法,原理清晰,便于教学讲解;
输出原始数据、检测结果、阈值对比等多类图表;
配套学生实验指导书和教师使用建议;
提供 MWORKS AI 辅助学习提示词,支持代码解释、参数修改和实验报告生成;
已在 MoHub 开源,支持下载、复现和二次开发。
完整案例文件、示例数据、运行脚本和配套教学文档已整理在 MoHub,欢迎下载体验。
案例开源地址:https://mohub.net/education/26317/summary
适用工具:MWORKS.Syslab
适用对象:高校教师、学生、工程数据分析初学者
欢迎高校教师和学生在教学实践中使用本案例,并基于 MoHub 开源案例进行反馈、改进和二次开发。