You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于LSTM自编码器的多元时间序列异常检测阈值选取问题

LSTM自编码器时间序列异常检测的阈值选择方案

两种方案的适用边界

不存在绝对最优的阈值方案,选型完全匹配你的数据特征和业务需求:

  • 单特征独立阈值

    适用场景:各特征物理含义独立、波动范围差异大,需要定位异常所属特征
    实现逻辑:在全正常的训练集上,计算每个特征的重建误差序列,取95/99分位数或均值+3倍标准差作为对应特征的专属阈值。测试阶段任意特征的重建误差超过对应阈值,即判定当前时间窗口为异常。

  • 全局统一阈值

    适用场景:多特征间存在强相关性,仅需要判定窗口是否异常无需根因定位
    实现逻辑:在全正常的训练集上,先将每个窗口所有特征的重建误差做聚合(求和、平均、取最大值均可),再基于聚合后的误差序列计算分位数或3σ作为全局阈值。测试阶段先聚合当前窗口的重建误差,超过阈值即判定为异常。

工业界通用折中方案

如果无法确定选型,直接采用组合判定逻辑:测试窗口只要满足「任意单特征误差超过对应阈值」或「全局聚合误差超过全局阈值」任意一条,就判定为异常,可同时降低漏报率和误报率。

阈值计算伪代码示例

import numpy as np

# y_train: 训练集正常样本输入,shape=(samples, window_size, features)
# recon_train: 模型对训练集的重建输出,shape和y_train一致
recon_err = np.square(y_train - recon_train)

# 对时间窗口维度求平均,得到每个样本各特征的平均重建误差
sample_feature_err = np.mean(recon_err, axis=1) # shape=(samples, features)

# 计算单特征阈值(取99分位数)
feature_thresholds = np.percentile(sample_feature_err, 99, axis=0) # shape=(features,)

# 计算全局阈值(先对特征维度求和再取99分位数)
global_err = np.sum(sample_feature_err, axis=1) # shape=(samples,)
global_threshold = np.percentile(global_err, 99)

内容的提问来源于stack exchange,提问作者Alessio Siciliano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:02