# usad-lstm
**Repository Path**: yi-junquan/usad-lstm
## Basic Information
- **Project Name**: usad-lstm
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-12-27
- **Last Updated**: 2023-12-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 多维时间序列无监督异常检测算法 USAD 的性能评估与改进研究
专硕5班 易俊泉 23214589
## 项目简介
## 项目结构
```shell
.
| data_preprocess.py
| README.md
| requirements.txt
| example.ipynb
+---ablation-exp
+---common
+---compared-algorithms
| +---autoencoder
| +---dagmm
| +---iforest
| +---lstmvae
| \---omnianomaly
|
+---data
+---model
+---processed
+---usad
| | parameters_exp1.ipynb
| | parameters_exp2.ipynb
| | usad_model.py
| | usad_smap_msl.ipynb
| | usad_smd.ipynb
| | usad_swat.ipynb
| | usad_wadi.ipynb
| | __init__.py
| |
| \---log
| 2023_12_27_usad.log
\---usad_lstm
| usadlstm_model.py
| usadlstm_smap_msl.ipynb
| usadlstm_smd.ipynb
| usadlstm_swat.ipynb
| usadlstm_wadi.ipynb
| __init__.py
\---log
2023_12_27_usadlstm.log
```
- `data_preprocess.py`:数据预处理程序;
- `example.ipynb`:示例程序,可通过已经训练好的模型测试算法性能;
- `ablation-exp`:该目录下为消融实验程序;
- `common`:该目录下为一些工具类;
- `compared-algorithms`:该目录下为对比的五种算法;
- `data`:该目录下为原始数据集;
- `model`:该目录下为训练好的USAD和USAD-LSTM模型;
- `processed`:预处理后的数据;
- `usad`:该目录下为无监督异常监测算法USAD的复现代码和在五个数据集上的实验程序;
- `usad-lstm`:该目录下为USAD的改进模型USAD-LSTM的实现代码和在五个数据集上的实验程序;
## 环境准备
使用conda创建python3.10虚拟环境:
```shell
conda create -n usad-lstm python=3.10
conda activate usad-lstm
```
安装依赖
```shell
pip install -r requirements.txt
```
安装ipykernel
```
pip install ipykernel
```
## 快速开始
**数据预处理**
```python
python data_preprocess.py SWaT WADI SMAP MSL SMD
```
**运行示例程序**:`example.ipynb`,测试USAD和USAD-LSTM在SWaT数据集上的结果。
**查看结果**
```python
USAD:
{'f1-score': 0.8465877162916761,
'precision': 0.9111298658273805,
'recall': 0.7905933613828758,
'TP': 43183.0,
'TN': 391086.0,
'FP': 4212.0,
'FN': 11438.0,
'threshold': 9.630896289825388}
USAD-LSTM:
{'f1-score': 0.8473364521310057,
'precision': 0.8964249232080848,
'recall': 0.803354021200023,
'TP': 43880.0,
'TN': 390228.0,
'FP': 5070.0,
'FN': 10741.0,
'threshold': 9.120748317718505}
```
## 数据集说明
本项目使用了五个公开数据集对USAD和USAD-LSTM的性能进行评估:
1. SWaT数据集:收集自真实工业水处理厂数据,包含7天正常数据和4天攻击场景下数据,每个多维时间序列数据由 51 个维度的传感器信息组成。
2. WADI数据集:是SWaT测试平台的扩展,包含14天正常数据和2天攻击场景下数据。
3. SMD数据集:收集自28台服务器机器的数据,每台机器监测33个指标。一半是训练集,一半是测试集。
4. SMAP数据集:由NASA提供的55个实体的数据,每个实体监测 25 个指标。
5. MSL数据集:与SMAP相似,也是由NASA提供的27个实体的数据,每个实体监测 55 个指标。
| 数据集 | 训练数据量 | 测试数据量 | 维度 | 异常占比(%) |
| ------ | ---------- | ---------- | ----- | ------------- |
| SWaT | 495000 | 449919 | 51 | 12.14 |
| WADI | 1209601 | 172801 | 123 | 5.71 |
| SMD | 708405 | 708420 | 28*38 | 4.16 |
| SMAP | 135183 | 427617 | 55*25 | 13.13 |
| MSL | 58317 | 73729 | 27*55 | 10.72 |
## 实验结果
### USAD与对比方法
$$
P=\frac{TP}{TP+FP}, \ R=\frac{TP}{TP+FN}, \ F1=2\cdot\frac{P\cdot R}{P+R}\nonumber\\
F1^*=2\cdot\frac{\bar P\cdot \bar R}{\bar P+\bar R}\nonumber
$$

USAD 是表现最好的方法,$F1^* $分数超过 SOTA 方法 OmniAnomaly1.66%。
### USAD消融实验
受到GAN启发的对抗性训练相对于没有对抗性训练的USAD提高了1.96%(F1得分),相对于仅使用对抗性训练提高了2.27%。
### USAD-LSTM与USAD
得益于 LSTM 对时序数据的强大处理能力,USAD-LSTM 的性能提升了 1.66%。