xixi0923/ts-intelligence

GitHub: xixi0923/ts-intelligence

基于深度学习双模型集成架构的时序数据异常检测与智能告警平台,提供从特征工程到实时推理的全链路能力。

Stars: 1 | Forks: 0

# TS-Intelligence 时序智能分析平台 基于深度学习的时序数据异常检测与智能告警平台,融合 LSTM-AE 与 Transformer-AE 双模型集成架构,提供从数据生成、特征工程、模型训练到实时告警的全链路能力。 ## 特性亮点 - **双模型集成检测**:LSTM-AE + Transformer-AE 加权融合,兼顾时序依赖与全局注意力 - **多维度特征工程**:统计特征、频域特征(FFT/谱熵)、小波特征三通道联合提取 - **ML + 规则双引擎告警**:机器学习异常分数与规则引擎联合评估,支持冷却去重 - **4 种业务场景**:服务器监控、金融交易、IoT 传感器、网络流量,开箱即用 - **端到端 Pipeline**:数据生成 → 预处理 → 训练 → 评估 → 告警 → API 服务,一键启动 - **可配置阈值自适应**:基于正常数据自动拟合异常阈值,无需手动调参 ## 系统架构 ┌─────────────────────────────────────────────────────────┐ │ API 服务层 (FastAPI) │ │ RESTful 接口 / 数据上传 / 实时推理 / 告警查询 │ ├─────────────────────────────────────────────────────────┤ │ 告警引擎层 │ │ ML 告警引擎 ── 规则引擎(尖峰/趋势/持续) ── 冷却去重 │ ├─────────────────────────────────────────────────────────┤ │ 模型推理层 │ │ LSTM-AE ── Transformer-AE ── 集成融合 ── 逐点定位 │ ├─────────────────────────────────────────────────────────┤ │ 训练 Pipeline 层 │ │ 数据准备 → 特征工程 → 模型训练 → 阈值拟合 → 评估 │ ├─────────────────────────────────────────────────────────┤ │ 特征工程层 │ │ 统计特征 / FFT频域特征 / Haar小波特征 │ ├─────────────────────────────────────────────────────────┤ │ 数据层 │ │ 合成数据生成器 / 数据预处理器 / 滑动窗口 / Z-Score标准化 │ └─────────────────────────────────────────────────────────┘ ## 技术栈 | 类别 | 技术选型 | |----------|-------------------------------------------| | 深度学习框架 | PyTorch | | 序列模型 | LSTM Autoencoder | | 注意力模型 | Transformer Autoencoder (含因果掩码) | | 特征工程 | NumPy (FFT / Haar小波 / 统计特征) | | 告警引擎 | 规则引擎 + ML 融合 (冷却去重) | | API 服务 | FastAPI | | 数据处理 | NumPy / Pandas | | 语言 | Python 3.8+ | ## 快速开始 ### 安装依赖 pip install -r requirements.txt ### 训练模型 from config import AppConfig from src.pipeline.trainer import TrainingPipeline config = AppConfig() pipeline = TrainingPipeline({ "window_size": 64, "stride": 8, "data_length": 2000, "lstm_hidden_dim": 64, "transformer_latent_dim": 16, }) # 准备数据 data = pipeline.prepare_data(scenario="server_monitor") # 训练 result = pipeline.train( train_data=data["train"]["data"], val_data=data["val"]["data"], num_epochs=30, ) # 保存模型 pipeline.save_model("model.pt") print(f"训练完成, 阈值: {result['threshold']:.4f}") ### 异常检测 # 加载模型 pipeline.load_model("model.pt", input_dim=1) # 计算异常分数 scores = pipeline.model.get_anomaly_scores(test_tensor) print(f"异常分数: {scores}") ### 启动 API 服务 python demo_server.py ## API 文档 | 端点 | 方法 | 说明 | |----------------------|------|-------------------| | `/health` | GET | 健康检查 | | `/train` | POST | 触发模型训练 | | `/detect` | POST | 上传数据执行异常检测 | | `/alert/config` | GET | 获取告警配置 | | `/alert/config` | POST | 更新告警配置 | | `/model/info` | GET | 获取模型信息与阈值 | ### 检测请求示例 POST /detect { "data": [[1.2, 3.4, 5.6], [2.1, 4.3, 6.5]], "scenario": "server_monitor" } ### 检测响应示例 { "anomaly_scores": [0.12, 0.87], "threshold": 0.65, "predictions": [0, 1], "alerts": [ { "timestamp": 1, "alert_level": "高", "combined_score": 0.87, "message": "ML异常分数: 0.87 | 尖峰检测: 检测到尖峰异常" } ] } ## 项目结构 ts-intelligence/ ├── config.py # 全局配置(数据/特征/模型/告警/API) ├── demo_server.py # API 服务启动入口 ├── requirements.txt # 依赖清单 ├── src/ │ ├── data/ │ │ ├── generator.py # 合成时序数据生成器(4种场景) │ │ ├── preprocessor.py # 数据预处理(标准化/滑动窗口/划分) │ │ └── loader.py # 数据加载器 │ ├── features/ │ │ ├── statistical.py # 统计特征提取 │ │ ├── frequency.py # 频域特征提取(FFT/谱熵/主频) │ │ └── wavelet.py # 小波特征提取(Haar) │ ├── models/ │ │ ├── autoencoder.py # LSTM 自编码器 │ │ ├── transformer_ae.py # Transformer 自编码器(含因果掩码) │ │ ├── detector.py # 集成异常检测器 │ │ └── forecaster.py # 时序预测模型 │ ├── pipeline/ │ │ ├── trainer.py # 训练 Pipeline │ │ ├── evaluator.py # 模型评估(精确率/召回率/F1/AUC) │ │ └── predictor.py # 推理 Pipeline │ ├── alerting/ │ │ ├── rule_engine.py # 规则引擎(尖峰/趋势/持续异常) │ │ └── ml_alert.py # ML+规则融合告警引擎(含冷却) │ └── api/ │ └── server.py # FastAPI 服务 └── templates/ # 前端模板 ## 业务场景 ### 1. 服务器监控 检测 CPU/内存/磁盘IO/网络等指标的异常尖峰、持续高负载、资源泄漏等模式,适用于运维监控告警。 ### 2. 金融交易 识别交易金额/频率/账户数的异常波动,检测潜在欺诈交易、洗钱模式、异常交易簇。 ### 3. IoT 传感器 监控温度/振动/压力/湿度/电流等传感器数据,发现设备故障前兆、信号丢失、异常振荡。 ### 4. 网络流量 分析网络进出流量/包数/连接数,检测 DDoS 攻击、数据泄露、异常连接模式。 ## 模型架构 ### LSTM-AE + Transformer-AE 集成 输入序列 (batch, seq_len, input_dim) │ ├─────────────────────────────────┐ │ │ LSTM 编码器 Transformer 编码器 (多层LSTM → 池化) (位置编码 → 多头自注意力) │ │ 潜在空间 (16d) 潜在空间 (16d) │ │ LSTM 解码器 Transformer 解码器 (重复 → LSTM → 映射) (因果掩码 → 交叉注意力 → 映射) │ │ 重建序列 重建序列 │ │ 重建误差 MSE 重建误差 MSE │ │ └────── 加权融合 (0.6 + 0.4) ──────┘ │ 异常分数 [0, 1] │ 阈值判定 → 异常/正常 - **LSTM-AE**(权重 0.6):擅长捕捉局部时序依赖,对渐变型异常敏感 - **Transformer-AE**(权重 0.4):通过自注意力捕捉全局关联,对突变型异常敏感 - 归一化使用训练时统计量(buffer),保证跨批次一致性 ## 配置指南 核心配置通过 `config.py` 中的 dataclass 管理: from config import AppConfig config = AppConfig() # 数据配置 config.data.window_size = 64 # 滑动窗口大小 config.data.stride = 8 # 滑动步长 config.data.normalize_method = "zscore" # 标准化方法 # 模型配置 config.model.lstm_latent_dim = 16 # LSTM 潜在空间维度 config.model.transformer_latent_dim = 16 # Transformer 潜在空间维度 config.model.learning_rate = 1e-3 # 学习率 # 告警配置 config.alerting.cooldown_seconds = 300 # 告警冷却时间(秒) config.alerting.spike_threshold = 3.0 # 尖峰检测阈值(标准差倍数) ## 优化变更日志 ### P0 关键修复 | # | 文件 | 问题 | 修复 | |---|------|------|------| | 1 | `src/pipeline/evaluator.py` | `Tuple` 导入位于文件末尾 | 移至顶部 `from typing import Dict, List, Optional, Tuple` | | 2 | `src/models/transformer_ae.py` | 解码器缺少因果掩码,存在信息泄漏 | 使用 `generate_square_subsequent_mask` 生成因果掩码并传入解码器 | | 3 | `src/alerting/ml_alert.py` | `cooldown_seconds` 和 `_last_alert_time` 未使用 | 按规则类型实现冷却逻辑,冷却期内同类型告警被抑制 | | 4 | `src/models/detector.py` | 归一化使用批次级统计量,跨批次不可比 | 将 `_threshold`/`_score_min`/`_score_max` 注册为 buffer,优先使用训练时统计量 | | 5 | `src/features/frequency.py` | `top_freqs` 计算后未添加到特征列表 | `features.extend(top_freqs)` 将主频频率加入特征向量 | ### P1 重要修复 | # | 文件 | 问题 | 修复 | |---|------|------|------| | 6 | `config.py` | `ModelConfig` 缺少 `transformer_latent_dim`;`wavelet_type` 默认值与实现不一致 | 添加 `transformer_latent_dim: int = 16`;默认值改为 `"haar"` | | 7 | `src/models/autoencoder.py` | `get_reconstruction_error` 调用 `self.eval()` 有副作用 | 移除 `self.eval()`,仅使用 `torch.no_grad()` | | 8 | `src/models/transformer_ae.py` | `_attention_weights` 声明后未使用 | 移除死代码 | | 9 | `src/pipeline/trainer.py` | 数据长度 `length=2000` 硬编码 | 从 `config.get("data_length", 2000)` 读取 | | 10 | `src/data/generator.py` | dropout 异常 `*= 0.1` 未模拟真实信号丢失 | 改为 `result[drop_point:] = 0` | | 11 | `src/pipeline/trainer.py` | 训练集包含 5% 异常数据,自编码器应只用正常数据 | 在 `prepare_data` 中过滤标签为 1 的训练窗口 | | 12 | `src/alerting/rule_engine.py` | `np.std` 默认 `ddof=0`(总体标准差) | 改为 `ddof=1`(样本标准差),更适合短窗口 | ### v1.1.0 - 模型调用链路修复(2026-06-17) | # | 文件 | 问题 | 修复 | |---|------|------|------| | 13 | `demo_server.py` | `/api/train` 用 `Query` 接收参数,前端 POST JSON body 被忽略 | 改为 Pydantic `TrainRequest` 验证 JSON body | | 14 | `demo_server.py` | 离线模式 `_offline_train_result` 设置 `is_trained=True`,但未初始化 `inference_pipeline` | 离线模式不再伪装训练成功,设置 `offline_mode=True`,`is_trained` 保持 `False` | | 15 | `demo_server.py` | `/api/predict` 中 `inference_pipeline` 为 None 时静默返回模拟数据 | 增加四重条件检查 `TORCH_AVAILABLE + model + preprocessor + inference_pipeline`,推理失败返回错误而非静默降级 | | 16 | `demo_server.py` | `/api/predict` 未返回子模型分数 `lstm_score/transformer_score` | 推理后补充调用 `lstm_ae.get_anomaly_score` + `transformer_ae.get_anomaly_score`,归一化后写入结果 | | 17 | `src/pipeline/predictor.py` | `predict_stream` 接受外部 `window_size/stride` 参数,可能与训练时不一致 | 移除外部参数,强制使用 `preprocessor` 内部配置(与训练时完全一致) | | 18 | `src/pipeline/predictor.py` | `predict_batch` 只返回 `point_scores`,无子模型分数 | 增加 `lstm_score/transformer_score` 归一化分数返回 | | 19 | `src/api/server.py` | `/api/generate` 使用 GET + Query 参数 | 改为 POST + Pydantic `GenerateRequest`,与 `demo_server` 保持一致 | | 20 | `src/api/static/index.html` | 前端无法区分真实推理 vs 离线模拟 | 新增 `offlineMode/modelReady` 状态追踪,状态卡片区分显示"已就绪"/"离线模拟"/"未训练" | ## License MIT License
标签:AIOps, AV绕过, FastAPI, LSTM-AE, Transformer-AE, 凭据扫描, 告警系统, 异常检测, 时序数据, 深度学习, 逆向工具