当前位置:首页>python>adtk,一个高级的 Python 库!

adtk,一个高级的 Python 库!

  • 2026-10-21 13:27:52
adtk,一个高级的 Python 库!

点击上方卡片关注我

设置星标 学习更多技能

在物联网、金融交易、系统监控等领域,时间序列数据的异常检测至关重要。ADTK是Arundo Analytics开源的Python时间序列异常检测库,专注于无监督异常检测场景。该库提供了丰富的检测算法,包括阈值检测、季节性分解、变化点检测等,支持规则组合和管道式处理。与传统机器学习方法相比,ADTK更注重可解释性和易用性,让工程师无需深厚的统计学背景就能快速部署异常检测系统,及时发现数据中的突变、漂移和异常模式。

安装

1、基础安装

使用pip安装ADTK库:

pip install adtk

2、验证安装

运行以下代码验证安装:

import adtkfrom adtk.data import validate_seriesprint(adtk.__version__)

如果能正常输出版本号,说明安装成功。

核心特性:

  • 多样化检测器:提供阈值、统计、模式、聚合等多种检测算法
  • 管道式设计:支持数据预处理和检测器串联,构建复杂检测流程
  • 规则组合:可通过逻辑运算符组合多个检测器的结果
  • 可视化支持:内置绘图功能,直观展示异常点位置
  • Pandas兼容:基于Pandas时间序列,无缝集成现有数据处理流程
  • 无需标注数据:完全无监督学习,适合实际业务场景

基本功能

1、阈值异常检测

阈值检测是最直观的异常识别方法,当数值超出预设范围时标记为异常。下面的代码展示如何使用ThresholdAD检测器,设置上下边界值来识别异常点。

from adtk.detector import ThresholdADfrom adtk.data import validate_seriesimport pandas as pd# 创建示例时间序列数据s = pd.Series([1, 2, 3, 100, 2, 3, 2, -50, 3],              index=pd.date_range('2023-01-01', periods=9, freq='D'))s = validate_series(s)# 设置阈值检测器threshold_detector = ThresholdAD(high=10, low=0)anomalies = threshold_detector.detect(s)print("检测到的异常点:")print(anomalies[anomalies == True])

2、季节性分解异常检测

许多时间序列数据具有周期性模式,如日访问量、月销售额等。季节性ESD检测器通过分解趋势和季节性成分,识别残差中的异常点。下面的代码演示如何使用SeasonalAD检测器,它会自动学习数据的周期模式,然后标记出偏离正常季节性波动的异常值。

from adtk.detector import SeasonalAD# 创建具有季节性的数据dates = pd.date_range('2023-01-01', periods=100, freq='D')values = [10 + 5*np.sin(2*np.pi*i/7) for i in range(100)]values[50] = 50# 插入异常点s = pd.Series(values, index=dates)s = validate_series(s)# 季节性异常检测seasonal_detector = SeasonalAD(c=3.0, side='both')anomalies = seasonal_detector.detect(s)print(f"检测到 {anomalies.sum()} 个异常点")

3、变化点检测

变化点检测用于识别时间序列中统计特性发生显著变化的时刻,如均值突变、方差改变等。下面的代码使用PersistAD检测器,它能够发现数据分布的持续性变化。

from adtk.detector import PersistAD# 创建有变化点的数据s = pd.Series(    [1]*20 + [2]*20 + [1.5]*20,    index=pd.date_range('2023-01-01', periods=60, freq='H'))s = validate_series(s)# 检测持续性变化persist_detector = PersistAD(c=3.0, side='positive')anomalies = persist_detector.detect(s)print("变化点位置:")print(s[anomalies])

高级功能

1、管道式检测流程

ADTK支持将数据转换和异常检测串联成管道,实现端到端的自动化处理。下面的代码展示如何构建一个检测管道,先对原始数据进行滚动平均平滑处理,然后应用四分位数异常检测器。Pipeline的设计让我们能够复用预处理逻辑,确保训练和预测阶段使用相同的数据处理流程,这在生产环境部署时特别重要。

from adtk.pipe import Pipelinefrom adtk.transformer import RollingAggregatefrom adtk.detector import InterQuartileRangeAD# 构建检测管道pipe = Pipeline([    ("rolling_mean", RollingAggregate(agg='mean', window=5)),    ("iqr_detector", InterQuartileRangeAD(c=1.5))])# 执行管道s = pd.Series(np.random.randn(100),              index=pd.date_range('2023-01-01', periods=100, freq='D'))s.iloc[50] = 10# 添加异常点s = validate_series(s)anomalies = pipe.fit_detect(s)print(f"管道检测到 {anomalies.sum()} 个异常")

2、多检测器组合

实际场景中,单一检测器可能无法覆盖所有异常类型。ADTK允许通过逻辑运算符组合多个检测器的结果。下面的示例展示如何同时使用阈值检测和统计检测,通过OR运算符合并结果,只要任一检测器报警就标记为异常。也可以使用AND运算符要求多个检测器同时触发,降低误报率。

from adtk.detector import ThresholdAD, QuantileADfrom adtk.aggregator import OrAggregator# 创建多个检测器threshold_ad = ThresholdAD(high=5, low=-5)quantile_ad = QuantileAD(high=0.99, low=0.01)# 组合检测器combined_detector = OrAggregator([    ("threshold", threshold_ad),    ("quantile", quantile_ad)])s = pd.Series(np.random.randn(100),              index=pd.date_range('2023-01-01', periods=100, freq='D'))s.iloc[[30, 70]] = [10, -10]s = validate_series(s)anomalies = combined_detector.detect(s)print(f"组合检测器发现 {anomalies.sum()} 个异常")

3、异常可视化与分析

ADTK提供了便捷的可视化方法,帮助分析异常检测结果。下面的代码展示如何使用plot函数同时绘制原始序列和异常点标记,异常点会以红色高亮显示。通过可视化可以快速验证检测器的效果,判断是否存在误报或漏报。

from adtk.visualization import plot# 执行检测detector = InterQuartileRangeAD(c=1.5)s = pd.Series(np.random.randn(200),              index=pd.date_range('2023-01-01', periods=200, freq='H'))s.iloc[[50, 100, 150]] = [5, -5, 6]s = validate_series(s)anomalies = detector.fit_detect(s)# 可视化结果plot(s, anomaly=anomalies, ts_linewidth=1, ts_markersize=3,     anomaly_color='red', anomaly_tag="marker", anomaly_markersize=5)# 导出异常详情anomaly_details = s[anomalies]print("异常点详情:")print(anomaly_details)

总结

ADTK是一个专注于时间序列异常检测的实用工具库,通过提供多样化的无监督检测算法和灵活的组合机制,让异常检测系统的构建变得简单高效。其管道式设计和Pandas兼容性使其能够无缝集成到现有的数据处理流程中。从简单的阈值判断到复杂的季节性分解,ADTK涵盖了大多数实际场景的需求。可视化功能和可解释性设计让算法输出易于理解和调试,这在生产环境中尤为重要。

💡推荐阅读

如果在编程工具充值使用上遇到麻烦,推荐一个牛逼的中转工具!一次性搞定 Codex 、Claude Code和 gemini,内容介绍和付费兑换详见文末阅读原文。

📘 我们整理了一份《AI 编程出海蓝皮书》,汇集了过去几个月团队在出海实战中沉淀下来的核心经验。内容持续更新ing

从需求、工具、部署、收款,到 SEO、推广、引流,一步步带你搞懂普通人也能启动的出海路径。这份资料能帮你快速入门、少踩坑。

扫码或微信搜索 257735添加微信,回复【出海资料】即可免费领取。

Vercel 模板一键部署,上线出海网站比想象中简单!

网站SEO必备工具:Google Search Console 使用教程

Claude Code 和 Codex,一个平台全搞定,开发者狂喜!

3 分钟搞定内网穿透,让别人访问你的本地服务

从Sora热度飙升,看懂 Google Trends 的找词逻辑

最新文章

随机文章