📈 一、滑动窗口均值法(实时监控场景)
import numpy as np
from collections import deque
class DynamicThreshold:
def __init__(self, window_size=10, sensitivity=2.0):
self.window = deque(maxlen=window_size)
self.sensitivity = sensitivity # 灵敏度系数:ml-citation{ref="4,6" data="citationList"}
def update(self, new_value):
self.window.append(new_value)
mean = np.mean(self.window)
std = np.std(self.window)
return mean + self.sensitivity * std # 动态阈值公式:ml-citation{ref="7" data="citationList"}
调用示例:
dt = DynamicThreshold(window_size=5)
current_threshold = dt.update(35) # 输入新数据点
适用于服务器监控指标异常检测,窗口大小建议取5-10个周期6。
🤖 二、LSTM预测基线(AI服务场景)
import tensorflow as tf
from tensorflow.keras.layers import LSTM, Dense
# 1. 构建预测模型
model = tf.keras.Sequential([
LSTM(64, input_shape=(30, 1)), # 30个历史点:ml-citation{ref="3,8" data="citationList"}
Dense(1)
])
model.compile(loss='mse', optimizer='adam')
# 2. 动态阈值生成
def get_dynamic_threshold(history_data):
prediction = model.predict(np.expand_dims(history_data, axis=(0,2)))
upper_bound = prediction * 1.3 # 上浮30%作为阈值:ml-citation{ref="3" data="citationList"}
return upper_bound[0][0]
需用历史数据训练后使用,适合QPS、推理延迟等指标的动态调整38。
📊 三、分位数动态阈值(业务风控场景)
import pandas as pd
def quantile_threshold(data_series: pd.Series, window='24H', q=0.95):
rolling = data_series.rolling(window)
return rolling.quantile(q) * 1.2 # 窗口内95分位数×1.2缓冲:ml-citation{ref="2,6" data="citationList"}
使用场景:
# 读取历史交易量数据
txn_data = pd.read_csv('txn_log.csv', parse_dates=['time'])
txn_data['threshold'] = quantile_threshold(txn_data['volume'])
适用于金融交易量突增检测,窗口可按需设为1H
/7D
等6。
🛠️ 四、参数调优建议
参数 | 推荐值范围 | 调整依据 |
滑动窗口大小 | 5-30周期 | 业务波动频率46 |
灵敏度系数 | 1.5-3.0 | 误报率与漏报率平衡7 |
分位数选择 | 90%-99% | 风险容忍度2 |
LSTM历史步长 | 20-50时间点 | 数据周期性38 |
避坑指南:
- 初始阶段建议用静态阈值+动态阈值双校验模式8
- 周期型数据需做STL分解预处理3
- 生产环境需添加阈值突变保护(如单次变化不超过±20%)