TKU-DS/tku-ds-classroom-7090fa-lab3-anomaly-detection-data-engineering-lab3-template

GitHub: TKU-DS/tku-ds-classroom-7090fa-lab3-anomaly-detection-data-engineering-lab3-template

这是一个数据工程教学实验模板,教授如何使用 MAD 鲁棒统计算法在滑动窗口中实时检测并过滤流数据中的点异常。

Stars: 0 | Forks: 0

# 实验 3:数据质量与异常检测 ## 📌 目标 在现实世界中,边缘传感器会老化、遭受电磁干扰,或者其读数会经历突然的“闪崩”。如果我们允许这些损坏的数据进入我们的 pipeline,下游的 AI 模型将产生自信但错误的预测(垃圾进,垃圾出)。 本实验演示了流数据上的**鲁棒统计 (Robust Statistics)**。你将实现一个滑动窗口,并使用 **Median Absolute Deviation (MAD)** 算法实时检测并拒绝点异常,防止它们破坏边缘数据库。 ## 🛠️ 环境设置 1. 从此仓库启动你的 **GitHub Codespaces**。 2. 打开 `lab3_anomaly_detection.py` 文件。 ## 🚀 说明 1. 查看 `unstable_sensor_stream()` 函数。注意它偶尔会发出巨大的离群值(0.0 或 100.0),模拟硬件峰值。 2. 我们使用 `collections.deque(maxlen=WINDOW_SIZE)` 创建一个 $\mathcal{O}(W)$ 滑动窗口。 3. 在 `process_with_mad_filter()` 中找到 `TODO 1` 到 `TODO 5`。 4. 实现 MAD 逻辑: * 找到当前窗口的中位数 (median)。 * 找到每个点与该中位数的绝对差值。 * MAD 就是这些差值的中位数。 * 如果传入的 `value` 与当前中位数的距离超过 $3 \times \text{MAD}$,则**拒绝它**(不要保存它,也不要将其添加到窗口中)。 5. 在终端中运行脚本: python lab3_anomaly_detection.py 6. 在编辑器中打开 `raw_noisy_data.csv` 和 `clean_filtered_data.csv`,通过肉眼验证峰值是否已被移除。 ## 🧠 思考题 1. **平均值的缺陷**:为什么我们不直接使用均值 (Mean) 和标准差 (Standard Deviation)(Z-score)来检测异常?如果一个巨大的离群值进入滑动窗口,均值会发生什么变化? 2. **Pipeline 韧性**:在我们的代码中,当我们检测到异常时,我们会直接将其丢弃。在现实世界的工厂监控系统中,默默地丢弃异常总是安全的吗?你会如何改进这种架构?(例如,记录丢弃日志)。 ## ✅ 提交指南 1. 确保你的过滤器成功阻止了异常且没有崩溃。 2. 提交你的更改: git add lab3_anomaly_detection.py git commit -m "Complete Lab 3 MAD anomaly filter" 3. 推送代码: git push origin main
标签:GitHub Classroom, Python, 中位数绝对偏差, 传感器数据, 信号处理, 实验室练习, 异常检测, 数据工程, 数据清洗, 数据科学, 数据管道, 数据质量, 无后门, 时间序列分析, 流数据处理, 滑动窗口, 纠错, 统计过滤, 资源验证, 软件工程, 边缘计算, 逆向工具, 鲁棒统计