一个无需人工干预的异常检测库
目录
什么是Luminaire
Luminaire是一个用于监控时间序列数据的Python包,提供基于机器学习的解决方案。Luminaire提供了多种异常检测和预测功能,这些功能考虑了数据中的相关性和季节性模式,以及随时间变化的不可控变化。
快速开始
使用pip
从PyPI安装Luminaire
pip install luminaire
在Python中导入luminaire
模块
import luminaire
查看示例以开始使用。另外,请参阅Luminaire文档以获取方法和用法的详细描述。
时间序列异常检测工作流程
Luminaire异常检测工作流程可以分为3个主要组件:
数据预处理和分析组件
在对时间序列进行异常检测模型训练之前,可以调用此组件进行数据准备。这一步应用了多种方法,使异常检测更加准确和可靠,包括缺失数据插补、识别并从训练数据中移除最近的异常值、必要的数学转换,以及基于最近变点的数据截断。它还生成分析信息(历史变点、趋势变化等),这些信息在训练过程中会被考虑。
时间序列数据的分析信息可用于监控数据漂移和不规则的长期波动。
建模组件
此组件根据用户指定的配置或优化配置(参见Luminaire超参数优化)执行时间序列模型训练。Luminaire模型训练集成了不同的结构化时间序列模型以及基于过滤的模型。有关更多信息,请参阅Luminaire异常检测。
Luminaire建模步骤可以在数据预处理和分析步骤之后调用,以在训练之前进行必要的数据准备。
配置优化组件
Luminaire与配置优化的集成实现了一个无需人工干预的异常检测过程,用户只需为监控任何类型的时间序列数据提供最少的配置。这一步可以与预处理和建模相结合,用于任何自动配置的异常检测用例。有关详细说明,请参阅完全自动异常检测。
高频时间序列的异常检测
Luminaire也可以监控一段时间窗口内的一组数据点,而不是跟踪单个数据点。这种方法非常适合流式用例,其中持续的波动比单个波动更令人关注。有关详细信息,请参阅流数据的异常检测。
示例
批量时间序列监控
import pandas as pd
from luminaire.optimization.hyperparameter_optimization import HyperparameterOptimization
from luminaire.exploration.data_exploration import DataExploration
data = pd.read_csv('输入时间序列数据的路径')
# 输入数据应该有一个时间列作为数据框的索引列,以及一个名为'raw'的值列
# 优化
hopt_obj = HyperparameterOptimization(freq='D')
opt_config = hopt_obj.run(data=data)
# 分析
de_obj = DataExploration(freq='D', **opt_config)
training_data, pre_prc = de_obj.profile(data)
# 识别模型
model_class_name = opt_config['LuminaireModel']
module = __import__('luminaire.model', fromlist=[''])
model_class = getattr(module, model_class_name)
# 训练
model_object = model_class(hyper_params=opt_config, freq='D')
success, model_date, trained_model = model_object.train(data=training_data, **pre_prc)
# 评分
trained_model.score(100, '2021-01-01')
流式时间序列监控
import pandas as pd
from luminaire.model.window_density import WindowDensityHyperParams, WindowDensityModel
from luminaire.exploration.data_exploration import DataExploration
data = pd.read_csv('输入时间序列数据的路径')
# 输入数据应该有一个时间列作为数据框的索引列,以及一个名为'raw'的值列
# 配置规范和分析
config = WindowDensityHyperParams().params
de_obj = DataExploration(**config)
data, pre_prc = de_obj.stream_profile(df=data)
config.update(pre_prc)
# 训练
wdm_obj = WindowDensityModel(hyper_params=config)
success, training_end, model = wdm_obj.train(data=data)
# 评分
score, scored_window = model.score(scoring_data) # scoring_data 是一个时间窗口内的数据,而不是单个数据点
贡献
想要帮助改进 Luminaire 吗?查看我们的贡献文档。
引用
如果将 Luminaire 用于任何研究目的或科学出版物,请引用以下文章:
Chakraborty, S., Shah, S., Soltani, K., Swigart, A., Yang, L., & Buckingham, K. (2020, December). Building an Automated and Self-Aware Anomaly Detection System. In 2020 IEEE International Conference on Big Data (Big Data) (pp. 1465-1475). IEEE. (arxiv 链接)
其他有用资源
- Chakraborty, S., Shah, S., Soltani, K., & Swigart, A. (2019, December). Root Cause Detection Among Anomalous Time Series Using Temporal State Alignment. In 2019 18th IEEE International Conference On Machine Learning And Applications (ICMLA) (pp. 523-528). IEEE. (arxiv 链接)
博客
- Zillow 技术中心: 使用 Luminaire 在 Zillow 实现自动和自我感知的异常检测
开发团队
Luminaire 由 Sayan Chakraborty、Smit Shah、Kiumars Soltani、[Luyao Yang](https://github.com/zillow/luminaire/blob/master/ https://github.com/snazzyfox)、[Anna Swigart](https://github.com/annaswigart)、[Kyle Buckingham](https://github.com/kylebuckingham) 以及 Zillow Group A.I. 团队的许多其他贡献者开发和维护。