文档中心

时序异常检测

使用时间序列数据进行异常检测,理解预测编码机制

📈

时序异常检测

使用时间序列数据进行异常检测,理解预测编码机制

⏱️ 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

🎯 学习目标

  • ✅ 理解预测编码原理
  • ✅ 掌握自由能计算方法
  • ✅ 学会设定异常阈值
  • ✅ 能够评估检测性能

🌐 实际应用场景

🏭

工业监控

设备故障预警、生产线异常检测

💰

金融风控

信用卡欺诈检测、股市异常波动

🏥

医疗健康

心电图异常检测、疾病早期预警