[![贡献者][contributors-shield]][contributors-url] [![星标数][stars-shield]][stars-url] [![问题][issues-shield]][issues-url] [![Apache 2.0 许可证][license-shield]][license-url] [![最后提交][last_commit-shield]][last_commit-url]
关于项目
将现有的异常检测和预测方法改编成时间序列异常检测系统并不是一件简单的事。好消息是:OATS 已经为你完成了繁重的工作!
我们为流行的、最先进的检测方法提供了一个直观的接口,以协助你进行实验。除了模型之外,我们还提供了在选择最终预测阈值时的不同选项。
OATS 无缝支持单变量和多变量时间序列,不受模型选择的限制,并保证相同的输出形状,从而实现时间序列异常检测的模块化方法。
(返回顶部)
构建工具
[![Python][Python.org]][Python-url] [![Poetry][Python-Poetry.org]][Poetry-url]
[![Pytorch][Pytorch.org]][Torch-url] [![PytorchLightning][PytorchLightning.ai]][Lightning-url] [![TensorFlow][TensorFlow.org]][TF-url] [![Numpy][Numpy.org]][Numpy-url]
[![Darts][Darts]][Darts-url] [![PyOD][PyOD]][PyOD-url]
(返回顶部)
入门
前提条件
[![Python][Python.org]][Python-url] >=3.8, <3.11
Docker 安装:
[![Docker][Docker.com]][Docker-url]
本地安装:
[![Poetry][Python-Poetry.org]][Poetry-url]
安装
PyPI
Docker
- 克隆仓库
git clone https://github.com/georgian-io/pyoats.git && cd pyoats
- 构建镜像
docker build -t pyoats .
- 运行容器
# 仅 CPU docker run -it pyoats # 使用 GPU docker run -it --gpus all pyoats
本地
- 克隆仓库
git clone https://github.com/georgian-io/pyoats.git && cd pyoats
- 通过 Poetry 安装
poetry install
(返回顶部)
使用方法
快速开始
快速入门,请参考我们的博客或复制我们的 Colab 笔记本!
获取异常分数
from oats.models import NHiTSModel
model = NHiTSModel(window=20, use_gpu=True)
model.fit(train)
scores = model.get_scores(test)
获取阈值
from oats.threshold import QuantileThreshold
t = QuantileThreshold()
threshold = t.get_threshold(scores, 0.99)
anom = scores > threshold
更多示例,请参考文档
(返回顶部)
模型
有关各个模型的更多详细信息,请参阅文档或这篇博客以获得更深入的解释。
模型 | 类型 | 多变量支持* | 需要拟合 | 深度学习框架依赖 | 论文 | 参考模型 |
---|---|---|---|---|---|---|
ARIMA | 预测型 | ⚠️ | ✅ | statsmodels.ARIMA | ||
FluxEV | 预测型 | ⚠️ | ✅ | 📝 | ||
LightGBM | 预测型 | ⚠️ | ✅ | darts.LightGBM | ||
移动平均 | 预测型 | ⚠️ | ||||
N-BEATS | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | 📝 | darts.NBEATS |
N-HiTS | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | 📝 | darts.NHiTS |
随机森林 | 预测型 | ⚠️ | ✅ | darts.RandomForest | ||
回归 | 预测型 | ⚠️ | ✅ | darts.Regression | ||
RNN | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | darts.RNN | |
时间卷积网络 | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | 📝 | darts.TCN |
时间融合变压器 | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | 📝 | darts.TFT |
Transformer | 预测型 | ✅ | ✅ | [![Pytorch][Pytorch.org]][Torch-url] | 📝 | darts.Transformer |
隔离森林 | 基于距离 | ✅ | ✅ | pyod.IForest | ||
矩阵剖析 | 基于距离 | ✅ | 📝 | stumpy | ||
TranAD | 基于重构 | ✅ | ✅ | [![TensorFlow][TensorFlow.org]][Torch-url] | 📝 | tranad |
变分自编码器 | 基于重构 | ✅ | ✅ | [![TensorFlow][TensorFlow.org]][Torch-url] | 📝 | pyod.VAE |
分位数 | 基于规则 | ⚠️ |
* 对于带有⚠️的模型,分数计算是沿每列单独进行的。这隐含地假设协变量之间是独立的,这意味着结果异常分数不考虑变量间的依赖结构。
(返回顶部)
路线图
- 自动超参数调优
- 更多示例
- 更多预处理器
- 更多来自
pyod
的模型
查看未解决的问题以获取提议功能的完整列表(和已知问题)。
(返回顶部)
贡献
贡献是使开源社区成为一个如此令人惊叹的学习、激励和创造的地方的原因。我们非常感谢您做出的任何贡献。
如果您有建议可以使这个项目更好,请fork该仓库并创建一个拉取请求。您也可以简单地用"enhancement"标签打开一个问题。
别忘了给项目点个星!再次感谢!
- Fork 该项目
- 创建您的特性分支 (
git checkout -b feature/amazing_feature
) - 提交您的更改 (
git commit -m '添加一些amazing_feature'
) - 推送到分支 (
git push origin feature/amazing_feature
) - 打开一个拉取请求
(返回顶部)
许可证
根据Apache 2.0许可证分发。有关更多信息,请参阅LICENSE
。
(返回顶部)
联系方式
Benjamin Ye | [![Github][BenGithub]][BenLinkedIn-url] | [![LinkedIn][BenLinkedIn]][BenLinkedIn-url] | [![eMail][eMail]][BenEmail-url] |
项目链接:https://github.com/georgian-io/oats
(返回顶部)
## 致谢 我要感谢Georgian的同事们在这个过程中提供的所有帮助和建议。 * [Angeline Yasodhara](mailto:angeline@georgian.io) * [Akshay Budhkar](mailto:akshay@georgian.io) * [Borna Almasi](mailto:borna@georgian.io) * [Parinaz Sobhani](mailto:parinaz@georgian.io) * [Rodrigo Ceballos Lentini](mailto:rodrigo@georgian.io)我还要特别感谢[Darts
][Darts-url](用于时间序列预测)和[PyOD
][PyOD-url](用于一般异常检测)的所有贡献者,他们的项目使得时间序列异常检测领域的直接扩展成为可能。
最后,我不能不提到Rice大学的DATA实验室,他们出色的[TODS
][TODS-url]包是这个项目的主要灵感来源。如果你正在寻找AutoML支持,请一定要去看看他们的项目。
[![Darts][Darts]][Darts-url] [![PyOD][PyOD]][PyOD-url] [![TODS][TODS]][TODS-url]
(返回顶部)