时序异常检测
使用时间序列数据进行异常检测,理解预测编码机制
📈
时序异常检测
使用时间序列数据进行异常检测,理解预测编码机制
⏱️ 30 分钟📊 中级🧪 异常检测
实验概述
本实验将带你使用 NCT 的预测编码机制进行时序数据异常检测。 你将学习如何计算自由能(Free Energy)作为异常指标,设定合适的阈值, 并评估模型在真实场景中的性能表现。这是 NCT 在工业监控、金融风控等领域的重要应用。
运行实验
方法 1:直接运行脚本
# 克隆仓库
git clone https://github.com/wyg5208/nct.git
cd nct
# 安装依赖
pip install torch numpy scipy matplotlib pandas
# 运行时序异常检测实验
python experiments/run_anomaly_detection.py方法 2:使用 Python API
from nct_modules import NCTManager, NCTConfig
from datasets import load_timeseries_data
# 加载时间序列数据
data = load_timeseries_data('./data/sensor_readings.csv')
# 创建配置(适合时序处理)
config = NCTConfig(
n_heads=4,
d_model=256,
n_layers=4,
use_predictive_coding=True # 启用预测编码
)
# 初始化并训练
manager = NCTManager(config)
manager.train(data, epochs=20)
# 检测异常
anomalies = manager.detect_anomalies(
test_data,
threshold=2.5, # 自由能阈值
window_size=50
)
print(f"检测到 {len(anomalies)} 个异常点")🧠 核心原理
🎯 预测编码理论
根据 Friston 的自由能原理,大脑通过最小化预测误差来感知世界。NCT 使用 Transformer Decoder 实现预测编码:
- • 生成模型:预测下一个时间步的数据
- • 预测误差:实际值与预测值的差异
- • 自由能:预测误差的对数似然下界
- • 异常判定:自由能超过阈值 → 异常
📐 数学公式
F = -E_q[log p(x|z)] + D_KL(q(z|x) || p(z))
其中 F 是变分自由能,第一项是重构误差,第二项是 KL 散度。 当自由能显著高于正常水平时,表明当前数据不符合 learned model,判定为异常。
关键步骤
📊 数据预处理
- • 归一化到 [0, 1] 区间
- • 滑动窗口切片(window_size=50)
- • 划分训练集/测试集
- • 添加人工噪声增强鲁棒性
🎚️ 阈值设定
- • 基于训练集自由能分布
- • 默认:μ + 2.5σ(95% 置信区间)
- • 可调参数平衡召回率和精确率
- • 支持动态自适应阈值
📈 性能评估
- • 准确率(Accuracy)
- • 精确率(Precision)
- • 召回率(Recall)
- • F1-Score
- • AUC-ROC 曲线
🔍 可视化分析
- • 原始数据 + 预测曲线
- • 自由能随时间变化
- • 异常点标记
- • 混淆矩阵
预期结果
📊 性能指标
- 检测准确率:~94.7%
- 精确率:~92.1%
- 召回率:~89.5%
- F1-Score:~0.908
🎯 学习目标
- ✅ 理解预测编码原理
- ✅ 掌握自由能计算方法
- ✅ 学会设定异常阈值
- ✅ 能够评估检测性能
🌐 实际应用场景
🏭
工业监控
设备故障预警、生产线异常检测
💰
金融风控
信用卡欺诈检测、股市异常波动
🏥
医疗健康
心电图异常检测、疾病早期预警