ykus4/hazure

GitHub: ykus4/hazure

hazure 是一个轻量级的时间序列异常检测工具包,通过规则和无监督方法自动学习正常模式并定位异常时间段。

Stars: 0 | Forks: 0

# hazure 你有一个指标 —— 每秒请求数、队列深度、传感器读数 —— 你怀疑它偶尔会表现异常,但你没有记录它何时发生过。 `hazure` 负责找出那些时刻:基于规则和无监督的检测器会从序列本身学习何为“正常”,并指出它在何处偏离了正常状态。 任何带有时间轴的 pandas、polars 或 pyarrow 对象都可以作为输入,并且输出结果也会保持相同的数据格式。在运行时,它只需要 `narwhals` 和 `numpy`,别无其他;所有较重的依赖都是可选的,由需要它的算法进行延迟导入。 ``` pip install hazure[pandas] ``` ``` import numpy as np import pandas as pd from hazure.detection import SeasonalDetector from hazure.events import to_events # 带有每日规律的每小时流量——以及一个出错的下午。 rng = np.random.default_rng(0) index = pd.date_range("2024-03-01", periods=24 * 21, freq="h", name="time") daily = 40 * np.sin(2 * np.pi * np.arange(len(index)) / 24) traffic = pd.Series(100 + daily + rng.normal(0, 3, len(index)), index=index, name="rps") traffic.iloc[300:306] = 20.0 labels = SeasonalDetector(period=24).fit_detect(traffic) print(to_events(labels)) # Events([2024-03-13T12:00:00..2024-03-13T17:59:59.999999999]) ``` `labels` 置于 `traffic` 自身的索引上 —— `1.0` 表示异常,`0.0` 表示正常,`NaN` 表示未知 —— 并且标记出的六个小时正好是当初植入的那六个小时。 一切构建块都归属于五种可组合的组件类型之一(`Scorer`、`Threshold`、`Detector`、`Aggregator`、`Transformer`),通过 `Pipeline` 进行链式组合,并在模型出现分支时使用 `Graph` 进行组装。 ## 针对仍在持续接收的数据序列 在一段你愿意称之为正常的时期内进行一次拟合,然后随着新观测的到来不断输入它们。`Stream` 会在近期历史的缓存上运行*相同的*已拟合组件,因此在线处理的结果就是批量处理的结果,而不是它的第二种实现 —— 并且 `prime` 如果发现缓存对于组件需要回顾的历史来说太短,就会拒绝启动,而不是在从未填满的窗口上默默进行计算。 ``` from hazure import Stream detector = SeasonalDetector(period=24).fit(traffic) stream = Stream(detector, history=48).prime(traffic) stream.update("2024-03-22T00:00", 105.0) # in line with the fortnight -> 0.0 stream.update("2024-03-22T01:00", 12.0) # not in line with it -> 1.0 ``` ## 在何处划定界限 每个阈值都由*某种参数*决定,而这些参数中没有一个是“我想要的答案”。这里有两种方法来获得答案。`PotThreshold` 直接采用误报概率 —— 它将广义 Pareto 分布拟合到训练分数的尾部,因此可以将边界设置在超越概率为 `1e-4` 的位置,超越了以往观测到的最大分数。此外,`budget_threshold` 完全不需要任何标签:只需告知它一周内任何人愿意阅读的警报数量,它就会在条件允许的范围内尽可能低地划定边界,绝不过火。 ## 文档 - [快速入门](https://ykus4.github.io/hazure/quickstart/) —— 植入单个异常的 端到端流程:检测、转换为时间区间、评分、绘图。 - [指南](https://ykus4.github.io/hazure/guide/) —— 哪种检测器适合哪种 异常,以及最容易让人感到意外的两种行为。 - [工作原理](https://ykus4.github.io/hazure/algorithms/) —— 每个 scorer、threshold 和 metric 的数学原理, 以及各自的假设在何处失效。 - [API 参考](https://ykus4.github.io/hazure/api/) —— 所有公开的命名。 ## 详情 - Python 3.11 及以上版本。 - 完全类型化;通过 `mypy --strict` 检查。 - MIT 许可证。
标签:Python, 代码示例, 基准测试, 开源库, 异常检测, 搜索引擎爬虫, 数据分析, 无后门, 无监督学习, 时间序列, 逆向工具