pyod 3.2.1__tar.gz → 3.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyod-3.2.1/pyod.egg-info → pyod-3.4.0}/PKG-INFO +101 -101
- {pyod-3.2.1 → pyod-3.4.0}/README.rst +100 -100
- {pyod-3.2.1 → pyod-3.4.0}/pyod/mcp_server.py +461 -283
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/graph.md +164 -163
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/pitfalls.md +125 -125
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/tabular.md +157 -156
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/text_image.md +143 -142
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/time_series.md +149 -148
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/references/workflow.md +22 -5
- pyod-3.4.0/pyod/utils/_detector_factory.py +93 -0
- pyod-3.4.0/pyod/utils/_kb_router.py +267 -0
- pyod-3.4.0/pyod/utils/_nl_feedback.py +451 -0
- pyod-3.4.0/pyod/utils/_quality_metrics.py +500 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/ad_engine.py +1639 -1650
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/investigation.py +76 -75
- {pyod-3.2.1 → pyod-3.4.0}/pyod/version.py +1 -1
- {pyod-3.2.1 → pyod-3.4.0/pyod.egg-info}/PKG-INFO +101 -101
- {pyod-3.2.1 → pyod-3.4.0}/pyod.egg-info/SOURCES.txt +4 -0
- {pyod-3.2.1 → pyod-3.4.0}/LICENSE +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/MANIFEST.in +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/cli.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/_pyg_utils.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/_ts_utils.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/abod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ae1svm.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/alad.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/anogan.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/auto_encoder.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/base.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/base_dl.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/cblof.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/cd.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/cof.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/combination.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/copod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/deep_svdd.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/devnet.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/dif.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ecod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/embedding.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/feature_bagging.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/gaal_base.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/gmm.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/hbos.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/hdbscan.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/iforest.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/inne.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/kde.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/knn.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/kpca.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/lmdd.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/loci.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/loda.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/lof.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/lscp.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/lunar.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/mad.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/mcd.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/mo_gaal.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ocsvm.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pca.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_anomalous.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_anomalydae.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_cola.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_conad.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_dominant.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_guide.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_radar.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/pyg_scan.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/qmcd.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/rgraph.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/rod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/sampling.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/sklearn_base.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/so_gaal.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/so_gaal_new.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/sod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/sos.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/suod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/thresholds.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_anomaly_transformer.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_kshape.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_lstm.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_matrix_profile.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_od.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_sand.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/ts_spectral_residual.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/vae.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/models/xgbod.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/SKILL.md +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/skills/od_expert/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/auto_model_selector.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/data.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/encoders/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/encoders/huggingface.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/encoders/openai_encoder.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/encoders/sentence_transformer.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/example.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/knowledge/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/knowledge/algorithms.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/knowledge/benchmarks.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/knowledge/papers.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/knowledge/routing_rules.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/AE1SVM.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/ALAD.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/AnoGAN.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/AutoEncoder.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/Deep SVDD.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/DevNet.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/LUNAR.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/MO-GAAL.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/SO-GAAL.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/VAE.json +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/model_analysis_jsons/__init__.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/stat_models.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/torch_utility.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod/utils/utility.py +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod.egg-info/dependency_links.txt +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod.egg-info/entry_points.txt +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod.egg-info/requires.txt +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyod.egg-info/top_level.txt +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/pyproject.toml +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/requirements.txt +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/setup.cfg +0 -0
- {pyod-3.2.1 → pyod-3.4.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyod
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.4.0
|
|
4
4
|
Summary: A Python library for anomaly detection across tabular, time series, graph, text, and image data. 60+ detectors, benchmark-backed ADEngine orchestration, and an agentic workflow for AI agents.
|
|
5
5
|
Author-email: Yue Zhao <yzhao062@gmail.com>
|
|
6
6
|
License-Expression: BSD-2-Clause
|
|
@@ -122,7 +122,7 @@ Python Outlier Detection (PyOD) 3
|
|
|
122
122
|
|
|
123
123
|
-----
|
|
124
124
|
|
|
125
|
-
**PyOD is
|
|
125
|
+
**PyOD is agent-ready.** Claude Code and Codex can use the ``od-expert`` skill to drive ADEngine investigations, while MCP-compatible agents can query PyOD's detector knowledge and planning tools. The classic ``fit``/``predict`` API stays unchanged.
|
|
126
126
|
|
|
127
127
|
-----
|
|
128
128
|
|
|
@@ -133,7 +133,7 @@ Pillar What it means
|
|
|
133
133
|
=========================== ========================================================================================
|
|
134
134
|
Multi-Modal 60+ detectors across **tabular, time series, graph, text, and image** data, one API
|
|
135
135
|
Full Lifecycle From raw data to explained anomalies and next-step guidance in a single call
|
|
136
|
-
Agentic
|
|
136
|
+
Agentic ``od-expert`` turns natural-language requests into ADEngine workflows; MCP exposes structured tools for other agents
|
|
137
137
|
Most Used 38+ million downloads; benchmark-backed routing (ADBench, TSB-AD, BOND, NLP-ADBench)
|
|
138
138
|
=========================== ========================================================================================
|
|
139
139
|
|
|
@@ -167,7 +167,7 @@ which agent stack you have installed (``~/.claude/`` for Claude Code,
|
|
|
167
167
|
``~/.codex/`` for Codex) and recommends the right install command.
|
|
168
168
|
|
|
169
169
|
For conda, source install, dependency details, and troubleshooting,
|
|
170
|
-
see the full `installation guide <https://pyod.readthedocs.io/en/latest/install.html>`
|
|
170
|
+
see the full `installation guide <https://pyod.readthedocs.io/en/latest/install.html>`__.
|
|
171
171
|
The legacy ``pyod-install-skill`` command from v3.0.0 still works as an
|
|
172
172
|
alias for ``pyod install skill``.
|
|
173
173
|
|
|
@@ -191,7 +191,7 @@ Layer Name When to use
|
|
|
191
191
|
3 Agentic Investigation You want an AI agent to drive OD through natural conversation `Layer 3 walkthrough <https://pyod.readthedocs.io/en/latest/examples/agentic.html>`__
|
|
192
192
|
========= ===================== ====================================================================== =======================================
|
|
193
193
|
|
|
194
|
-
Layers 2 and 3 are powered by ``ADEngine``, PyOD's intelligent orchestration core. Layer 3
|
|
194
|
+
Layers 2 and 3 are powered by ``ADEngine``, PyOD's intelligent orchestration core. The full multi-turn Layer 3 investigation flow is available through the ``od-expert`` skill for Claude Code and Codex. The MCP server (``python -m pyod.mcp_server``) exposes ten stateless tools for MCP-compatible LLMs, spanning knowledge queries (``list_detectors``, ``explain_detector``, ``compare_detectors``, ``get_benchmarks``), planning (``profile_data``, ``plan_detection``, ``build_detector``), and detection (``run_detection``, ``analyze_results``, ``explain_findings``); stateful ``investigate`` / ``iterate`` MCP tools are deferred.
|
|
195
195
|
|
|
196
196
|
.. image:: https://raw.githubusercontent.com/yzhao062/pyod/development/docs/figs/agentic-demo.png
|
|
197
197
|
:alt: PyOD 3 agentic investigation demo on cardiotocography dataset
|
|
@@ -201,7 +201,7 @@ Layers 2 and 3 are powered by ``ADEngine``, PyOD's intelligent orchestration cor
|
|
|
201
201
|
The figure above shows a real 5-turn agentic conversation on the UCI Cardiotocography dataset. See the `full walkthrough <https://pyod.readthedocs.io/en/latest/examples/agentic.html>`__, runnable `agentic example <https://github.com/yzhao062/pyod/blob/development/examples/agentic_example.py>`__, or interactive `HTML demo <https://htmlpreview.github.io/?https://github.com/yzhao062/pyod/blob/development/examples/agentic_demo.html>`__.
|
|
202
202
|
|
|
203
203
|
**PyOD Ecosystem & Resources**:
|
|
204
|
-
`NLP-ADBench <https://github.com/USC-FORTIS/NLP-ADBench>`
|
|
204
|
+
`NLP-ADBench <https://github.com/USC-FORTIS/NLP-ADBench>`__ (NLP anomaly detection) | `TODS <https://github.com/datamllab/tods>`__ (time-series) | `PyGOD <https://pygod.org/>`__ (graph) | `ADBench <https://github.com/Minqi824/ADBench>`__ (benchmark) | `AD-LLM <https://arxiv.org/abs/2412.11142>`__ (LLM-based AD) [#Yang2024ad]_ | `Resources <https://github.com/yzhao062/anomaly-detection-resources>`__
|
|
205
205
|
|
|
206
206
|
----
|
|
207
207
|
|
|
@@ -209,7 +209,7 @@ The figure above shows a real 5-turn agentic conversation on the UCI Cardiotocog
|
|
|
209
209
|
About PyOD
|
|
210
210
|
^^^^^^^^^^
|
|
211
211
|
|
|
212
|
-
PyOD, established in 2017, is the longest-running and most widely used Python library for anomaly detection. With `38+ million downloads <https://pepy.tech/project/pyod>`
|
|
212
|
+
PyOD, established in 2017, is the longest-running and most widely used Python library for anomaly detection. With `38+ million downloads <https://pepy.tech/project/pyod>`__, it serves both academic research (featured in `Analytics Vidhya <https://www.analyticsvidhya.com/blog/2019/02/outlier-detection-python-pyod/>`__, `KDnuggets <https://www.kdnuggets.com/2019/02/outlier-detection-methods-cheat-sheet.html>`__, and `Towards Data Science <https://towardsdatascience.com/anomaly-detection-for-dummies-15f148e559c1>`__) and commercial products.
|
|
213
213
|
|
|
214
214
|
V3 extends the library with ``ADEngine`` (intelligent orchestration) and the ``od-expert`` skill (agentic workflow), while keeping the classic ``fit``/``predict`` API fully backward-compatible. V3 is built on SUOD [#Zhao2021SUOD]_ for fast parallel training and numba JIT for per-model speedups.
|
|
215
215
|
|
|
@@ -218,21 +218,21 @@ V3 extends the library with ``ADEngine`` (intelligent orchestration) and the ``o
|
|
|
218
218
|
=================================== ===========================================================================
|
|
219
219
|
Area Examples
|
|
220
220
|
=================================== ===========================================================================
|
|
221
|
-
Space & science European Space Agency `OPS-SAT spacecraft telemetry benchmark <https://www.nature.com/articles/s41597-025-05035-3>`
|
|
222
|
-
Enterprise deployment Walmart (1M+ daily pricing updates, KDD 2019), Databricks (Kakapo framework integrating PyOD with MLflow/Hyperopt; insider-threat detection solution), IQVIA (123K+ pharmacy claims), Altair AI Studio, Ericsson (patent `WO2023166515A1 <https://patents.google.com/patent/WO2023166515A1>`
|
|
223
|
-
Books `Outlier Detection in Python <https://www.manning.com/books/outlier-detection-in-python>`
|
|
224
|
-
Courses DataCamp `Anomaly Detection in Python <https://www.datacamp.com/courses/anomaly-detection-in-python>`
|
|
225
|
-
Podcasts `Talk Python To Me #497 <https://talkpython.fm/episodes/show/497/outlier-detection-with-python>`
|
|
226
|
-
International Tutorials in 5 non-English languages: Chinese (CSDN, Zhihu, 搜狐, 机器之心, `aidoczh.com <https://www.aidoczh.com>`
|
|
221
|
+
Space & science European Space Agency `OPS-SAT spacecraft telemetry benchmark <https://www.nature.com/articles/s41597-025-05035-3>`__ (*Nature Scientific Data*, 2025) uses PyOD for all 30 algorithms.
|
|
222
|
+
Enterprise deployment Walmart (1M+ daily pricing updates, KDD 2019), Databricks (Kakapo framework integrating PyOD with MLflow/Hyperopt; insider-threat detection solution), IQVIA (123K+ pharmacy claims), Altair AI Studio, Ericsson (patent `WO2023166515A1 <https://patents.google.com/patent/WO2023166515A1>`__).
|
|
223
|
+
Books `Outlier Detection in Python <https://www.manning.com/books/outlier-detection-in-python>`__ (Brett Kennedy, Manning); *Handbook of Anomaly Detection with Python* (Chris Kuo, Columbia); `Finding Ghosts in Your Data <https://link.springer.com/book/10.1007/978-1-4842-8870-2>`__ (Kevin Feasel, Apress).
|
|
224
|
+
Courses DataCamp `Anomaly Detection in Python <https://www.datacamp.com/courses/anomaly-detection-in-python>`__ (19M+ platform learners), Manning `liveProject <https://www.manning.com/liveproject/using-pyod-and-ensembles-methods>`__, O'Reilly video edition, multiple Udemy courses.
|
|
225
|
+
Podcasts `Talk Python To Me #497 <https://talkpython.fm/episodes/show/497/outlier-detection-with-python>`__, `Real Python Podcast #208 <https://realpython.com/podcasts/rpp/208/>`__.
|
|
226
|
+
International Tutorials in 5 non-English languages: Chinese (CSDN, Zhihu, 搜狐, 机器之心, `aidoczh.com <https://www.aidoczh.com>`__ full doc translation), Japanese, Korean, German, Spanish.
|
|
227
227
|
=================================== ===========================================================================
|
|
228
228
|
|
|
229
|
-
See the `full impact page <https://pyod.readthedocs.io/en/latest/impact.html>`
|
|
229
|
+
See the `full impact page <https://pyod.readthedocs.io/en/latest/impact.html>`__ on Read the Docs for the complete list of citations, enterprise deployments, patents, and media coverage.
|
|
230
230
|
|
|
231
231
|
**Citing PyOD**:
|
|
232
232
|
|
|
233
233
|
If you use PyOD in a scientific publication, we would appreciate citations to the following paper(s):
|
|
234
234
|
|
|
235
|
-
`PyOD 2: A Python Library for Outlier Detection with LLM-powered Model Selection <https://arxiv.org/abs/2412.12154>`
|
|
235
|
+
`PyOD 2: A Python Library for Outlier Detection with LLM-powered Model Selection <https://arxiv.org/abs/2412.12154>`__ is available as a preprint. If you use PyOD in a scientific publication, we would appreciate citations to the following paper::
|
|
236
236
|
|
|
237
237
|
@inproceedings{chen2025pyod,
|
|
238
238
|
title={Pyod 2: A python library for outlier detection with llm-powered model selection},
|
|
@@ -243,7 +243,7 @@ If you use PyOD in a scientific publication, we would appreciate citations to th
|
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
|
|
246
|
-
`PyOD paper <http://www.jmlr.org/papers/volume20/19-011/19-011.pdf>`
|
|
246
|
+
`PyOD paper <http://www.jmlr.org/papers/volume20/19-011/19-011.pdf>`__ is published in `Journal of Machine Learning Research (JMLR) <http://www.jmlr.org/>`__ (MLOSS track).::
|
|
247
247
|
|
|
248
248
|
@article{zhao2019pyod,
|
|
249
249
|
author = {Zhao, Yue and Nasrullah, Zain and Li, Zheng},
|
|
@@ -261,18 +261,18 @@ or::
|
|
|
261
261
|
Zhao, Y., Nasrullah, Z. and Li, Z., 2019. PyOD: A Python Toolbox for Scalable Outlier Detection. Journal of machine learning research (JMLR), 20(96), pp.1-7.
|
|
262
262
|
|
|
263
263
|
|
|
264
|
-
For a broader perspective on anomaly detection, see our NeurIPS papers on `ADBench <https://arxiv.org/abs/2206.09426>`
|
|
264
|
+
For a broader perspective on anomaly detection, see our NeurIPS papers on `ADBench <https://arxiv.org/abs/2206.09426>`__ [#Han2022ADBench]_ and `ADGym <https://arxiv.org/abs/2309.15376>`__.
|
|
265
265
|
|
|
266
266
|
|
|
267
267
|
**Table of Contents**:
|
|
268
268
|
|
|
269
|
-
* `API Cheatsheet & Reference <#api-cheatsheet--reference>`
|
|
270
|
-
* `Benchmarks <#benchmarks>`
|
|
271
|
-
* `Implemented Algorithms <#implemented-algorithms>`
|
|
272
|
-
* `Additional Topics <#additional-topics>`
|
|
273
|
-
* `Quick Start for Outlier Detection <#quick-start-for-outlier-detection>`
|
|
274
|
-
* `How to Contribute <#how-to-contribute>`
|
|
275
|
-
* `Inclusion Criteria <#inclusion-criteria>`
|
|
269
|
+
* `API Cheatsheet & Reference <#api-cheatsheet--reference>`__
|
|
270
|
+
* `Benchmarks <#benchmarks>`__
|
|
271
|
+
* `Implemented Algorithms <#implemented-algorithms>`__ (Tabular, Time Series, Graph, Embedding)
|
|
272
|
+
* `Additional Topics <#additional-topics>`__ (Model Save/Load, SUOD, Thresholding)
|
|
273
|
+
* `Quick Start for Outlier Detection <#quick-start-for-outlier-detection>`__
|
|
274
|
+
* `How to Contribute <#how-to-contribute>`__
|
|
275
|
+
* `Inclusion Criteria <#inclusion-criteria>`__
|
|
276
276
|
|
|
277
277
|
----
|
|
278
278
|
|
|
@@ -280,7 +280,7 @@ For a broader perspective on anomaly detection, see our NeurIPS papers on `ADBen
|
|
|
280
280
|
API Cheatsheet & Reference
|
|
281
281
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
282
282
|
|
|
283
|
-
The full API Reference is split by modality at `PyOD Documentation <https://pyod.readthedocs.io/en/latest/>`
|
|
283
|
+
The full API Reference is split by modality at `PyOD Documentation <https://pyod.readthedocs.io/en/latest/>`__: `Tabular <https://pyod.readthedocs.io/en/latest/pyod.models.tabular.html>`__, `Time Series <https://pyod.readthedocs.io/en/latest/pyod.models.timeseries.html>`__, `Graph <https://pyod.readthedocs.io/en/latest/pyod.models.graph.html>`__, `Embedding <https://pyod.readthedocs.io/en/latest/pyod.models.embedding.html>`__, `ADEngine <https://pyod.readthedocs.io/en/latest/pyod.ad_engine.html>`__, `Utilities <https://pyod.readthedocs.io/en/latest/pyod.utils.html>`__. Below is a quick cheatsheet for all detectors:
|
|
284
284
|
|
|
285
285
|
* **fit(X)**: Fit the detector. The parameter y is ignored in unsupervised methods.
|
|
286
286
|
* **decision_function(X)**: Predict raw anomaly scores for X using the fitted detector.
|
|
@@ -301,19 +301,19 @@ The full API Reference is split by modality at `PyOD Documentation <https://pyod
|
|
|
301
301
|
Benchmarks
|
|
302
302
|
^^^^^^^^^^
|
|
303
303
|
|
|
304
|
-
* `ADBench <https://github.com/Minqi824/ADBench>`
|
|
305
|
-
* `NLP-ADBench <https://github.com/USC-FORTIS/NLP-ADBench>`
|
|
306
|
-
* `TSB-AD <https://github.com/TheDatumOrg/TSB-AD>`
|
|
307
|
-
* `BOND <https://arxiv.org/abs/2206.10071>`
|
|
304
|
+
* `ADBench <https://github.com/Minqi824/ADBench>`__ [#Han2022ADBench]_: 30 algorithms on 57 tabular datasets. See `comparison <https://github.com/yzhao062/pyod/blob/master/examples/compare_all_models.py>`__.
|
|
305
|
+
* `NLP-ADBench <https://github.com/USC-FORTIS/NLP-ADBench>`__: 19 methods on 8 text datasets. Two-step (embedding + detector) beats end-to-end.
|
|
306
|
+
* `TSB-AD <https://github.com/TheDatumOrg/TSB-AD>`__ [#Liu2024TSB]_: 40 algorithms on 1070 time series datasets (NeurIPS 2024).
|
|
307
|
+
* `BOND <https://arxiv.org/abs/2206.10071>`__ [#Liu2022BOND]_: 14 graph anomaly detection algorithms on 14 datasets (NeurIPS 2022).
|
|
308
308
|
|
|
309
309
|
----
|
|
310
310
|
|
|
311
311
|
Additional Topics
|
|
312
312
|
^^^^^^^^^^^^^^^^^
|
|
313
313
|
|
|
314
|
-
* `Model Save & Load <https://pyod.readthedocs.io/en/latest/model_persistence.html>`
|
|
315
|
-
* `Fast Train with SUOD <https://pyod.readthedocs.io/en/latest/fast_train.html>`
|
|
316
|
-
* `Thresholding Outlier Scores <https://pyod.readthedocs.io/en/latest/thresholding.html>`
|
|
314
|
+
* `Model Save & Load <https://pyod.readthedocs.io/en/latest/model_persistence.html>`__: Use joblib or pickle for saving and loading PyOD models. See `example <https://github.com/yzhao062/pyod/blob/master/examples/save_load_model_example.py>`__.
|
|
315
|
+
* `Fast Train with SUOD <https://pyod.readthedocs.io/en/latest/fast_train.html>`__: Accelerate training and prediction with the SUOD framework [#Zhao2021SUOD]_. See `example <https://github.com/yzhao062/pyod/blob/master/examples/suod_example.py>`__.
|
|
316
|
+
* `Thresholding Outlier Scores <https://pyod.readthedocs.io/en/latest/thresholding.html>`__: Data-driven approaches for setting contamination levels via `PyThresh <https://github.com/KulikDM/pythresh>`__.
|
|
317
317
|
|
|
318
318
|
----
|
|
319
319
|
|
|
@@ -337,212 +337,212 @@ PyOD is organized into two functional groups: **(i) Detection Algorithms**, with
|
|
|
337
337
|
- Ref
|
|
338
338
|
* - Probabilistic
|
|
339
339
|
- ECOD
|
|
340
|
-
- Unsupervised Outlier Detection Using Empirical Cumulative Distribution Functions (`example <https://github.com/yzhao062/pyod/blob/development/examples/ecod_example.py>`
|
|
340
|
+
- Unsupervised Outlier Detection Using Empirical Cumulative Distribution Functions (`example <https://github.com/yzhao062/pyod/blob/development/examples/ecod_example.py>`__)
|
|
341
341
|
- 2022
|
|
342
342
|
- [#Li2021ECOD]_
|
|
343
343
|
* - Probabilistic
|
|
344
344
|
- ABOD
|
|
345
|
-
- Angle-Based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/abod_example.py>`
|
|
345
|
+
- Angle-Based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/abod_example.py>`__)
|
|
346
346
|
- 2008
|
|
347
347
|
- [#Kriegel2008Angle]_
|
|
348
348
|
* - Probabilistic
|
|
349
349
|
- FastABOD
|
|
350
|
-
- Fast Angle-Based Outlier Detection using approximation (`example <https://github.com/yzhao062/pyod/blob/development/examples/abod_example.py>`
|
|
350
|
+
- Fast Angle-Based Outlier Detection using approximation (`example <https://github.com/yzhao062/pyod/blob/development/examples/abod_example.py>`__)
|
|
351
351
|
- 2008
|
|
352
352
|
- [#Kriegel2008Angle]_
|
|
353
353
|
* - Probabilistic
|
|
354
354
|
- COPOD
|
|
355
|
-
- COPOD: Copula-Based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/copod_example.py>`
|
|
355
|
+
- COPOD: Copula-Based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/copod_example.py>`__)
|
|
356
356
|
- 2020
|
|
357
357
|
- [#Li2020COPOD]_
|
|
358
358
|
* - Probabilistic
|
|
359
359
|
- MAD
|
|
360
|
-
- Median Absolute Deviation (MAD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/mad_example.py>`
|
|
360
|
+
- Median Absolute Deviation (MAD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/mad_example.py>`__)
|
|
361
361
|
- 1993
|
|
362
362
|
- [#Iglewicz1993How]_
|
|
363
363
|
* - Probabilistic
|
|
364
364
|
- SOS
|
|
365
|
-
- Stochastic Outlier Selection (`example <https://github.com/yzhao062/pyod/blob/development/examples/sos_example.py>`
|
|
365
|
+
- Stochastic Outlier Selection (`example <https://github.com/yzhao062/pyod/blob/development/examples/sos_example.py>`__)
|
|
366
366
|
- 2012
|
|
367
367
|
- [#Janssens2012Stochastic]_
|
|
368
368
|
* - Probabilistic
|
|
369
369
|
- QMCD
|
|
370
|
-
- Quasi-Monte Carlo Discrepancy outlier detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/qmcd_example.py>`
|
|
370
|
+
- Quasi-Monte Carlo Discrepancy outlier detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/qmcd_example.py>`__)
|
|
371
371
|
- 2001
|
|
372
372
|
- [#Fang2001Wrap]_
|
|
373
373
|
* - Probabilistic
|
|
374
374
|
- KDE
|
|
375
|
-
- Outlier Detection with Kernel Density Functions (`example <https://github.com/yzhao062/pyod/blob/development/examples/kde_example.py>`
|
|
375
|
+
- Outlier Detection with Kernel Density Functions (`example <https://github.com/yzhao062/pyod/blob/development/examples/kde_example.py>`__)
|
|
376
376
|
- 2007
|
|
377
377
|
- [#Latecki2007Outlier]_
|
|
378
378
|
* - Probabilistic
|
|
379
379
|
- Sampling
|
|
380
|
-
- Rapid distance-based outlier detection via sampling (`example <https://github.com/yzhao062/pyod/blob/development/examples/sampling_example.py>`
|
|
380
|
+
- Rapid distance-based outlier detection via sampling (`example <https://github.com/yzhao062/pyod/blob/development/examples/sampling_example.py>`__)
|
|
381
381
|
- 2013
|
|
382
382
|
- [#Sugiyama2013Rapid]_
|
|
383
383
|
* - Probabilistic
|
|
384
384
|
- GMM
|
|
385
|
-
- Probabilistic Mixture Modeling for Outlier Analysis (`example <https://github.com/yzhao062/pyod/blob/development/examples/gmm_example.py>`
|
|
385
|
+
- Probabilistic Mixture Modeling for Outlier Analysis (`example <https://github.com/yzhao062/pyod/blob/development/examples/gmm_example.py>`__)
|
|
386
386
|
-
|
|
387
387
|
- [#Aggarwal2015Outlier]_ [Ch.2]
|
|
388
388
|
* - Linear Model
|
|
389
389
|
- PCA
|
|
390
|
-
- Principal Component Analysis (sum of weighted projected distances to eigenvector hyperplanes) (`example <https://github.com/yzhao062/pyod/blob/development/examples/pca_example.py>`
|
|
390
|
+
- Principal Component Analysis (sum of weighted projected distances to eigenvector hyperplanes) (`example <https://github.com/yzhao062/pyod/blob/development/examples/pca_example.py>`__)
|
|
391
391
|
- 2003
|
|
392
392
|
- [#Shyu2003A]_
|
|
393
393
|
* - Linear Model
|
|
394
394
|
- KPCA
|
|
395
|
-
- Kernel Principal Component Analysis (`example <https://github.com/yzhao062/pyod/blob/development/examples/kpca_example.py>`
|
|
395
|
+
- Kernel Principal Component Analysis (`example <https://github.com/yzhao062/pyod/blob/development/examples/kpca_example.py>`__)
|
|
396
396
|
- 2007
|
|
397
397
|
- [#Hoffmann2007Kernel]_
|
|
398
398
|
* - Linear Model
|
|
399
399
|
- MCD
|
|
400
|
-
- Minimum Covariance Determinant (Mahalanobis distances as outlier scores) (`example <https://github.com/yzhao062/pyod/blob/development/examples/mcd_example.py>`
|
|
400
|
+
- Minimum Covariance Determinant (Mahalanobis distances as outlier scores) (`example <https://github.com/yzhao062/pyod/blob/development/examples/mcd_example.py>`__)
|
|
401
401
|
- 1999
|
|
402
402
|
- [#Hardin2004Outlier]_ [#Rousseeuw1999A]_
|
|
403
403
|
* - Linear Model
|
|
404
404
|
- CD
|
|
405
|
-
- Cook's distance for outlier detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/cd_example.py>`
|
|
405
|
+
- Cook's distance for outlier detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/cd_example.py>`__)
|
|
406
406
|
- 1977
|
|
407
407
|
- [#Cook1977Detection]_
|
|
408
408
|
* - Linear Model
|
|
409
409
|
- OCSVM
|
|
410
|
-
- One-Class Support Vector Machines (`example <https://github.com/yzhao062/pyod/blob/development/examples/ocsvm_example.py>`
|
|
410
|
+
- One-Class Support Vector Machines (`example <https://github.com/yzhao062/pyod/blob/development/examples/ocsvm_example.py>`__)
|
|
411
411
|
- 2001
|
|
412
412
|
- [#Scholkopf2001Estimating]_
|
|
413
413
|
* - Linear Model
|
|
414
414
|
- LMDD
|
|
415
|
-
- Deviation-based Outlier Detection (LMDD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/lmdd_example.py>`
|
|
415
|
+
- Deviation-based Outlier Detection (LMDD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/lmdd_example.py>`__)
|
|
416
416
|
- 1996
|
|
417
417
|
- [#Arning1996A]_
|
|
418
418
|
* - Proximity-Based
|
|
419
419
|
- LOF
|
|
420
|
-
- Local Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/lof_example.py>`
|
|
420
|
+
- Local Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/lof_example.py>`__)
|
|
421
421
|
- 2000
|
|
422
422
|
- [#Breunig2000LOF]_
|
|
423
423
|
* - Proximity-Based
|
|
424
424
|
- COF
|
|
425
|
-
- Connectivity-Based Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/cof_example.py>`
|
|
425
|
+
- Connectivity-Based Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/cof_example.py>`__)
|
|
426
426
|
- 2002
|
|
427
427
|
- [#Tang2002Enhancing]_
|
|
428
428
|
* - Proximity-Based
|
|
429
429
|
- (Incr.) COF
|
|
430
|
-
- Memory Efficient Connectivity-Based Outlier Factor (slower, reduced storage) (`example <https://github.com/yzhao062/pyod/blob/development/examples/cof_example.py>`
|
|
430
|
+
- Memory Efficient Connectivity-Based Outlier Factor (slower, reduced storage) (`example <https://github.com/yzhao062/pyod/blob/development/examples/cof_example.py>`__)
|
|
431
431
|
- 2002
|
|
432
432
|
- [#Tang2002Enhancing]_
|
|
433
433
|
* - Proximity-Based
|
|
434
434
|
- CBLOF
|
|
435
|
-
- Clustering-Based Local Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/cblof_example.py>`
|
|
435
|
+
- Clustering-Based Local Outlier Factor (`example <https://github.com/yzhao062/pyod/blob/development/examples/cblof_example.py>`__)
|
|
436
436
|
- 2003
|
|
437
437
|
- [#He2003Discovering]_
|
|
438
438
|
* - Proximity-Based
|
|
439
439
|
- LOCI
|
|
440
|
-
- LOCI: Fast outlier detection via local correlation integral (`example <https://github.com/yzhao062/pyod/blob/development/examples/loci_example.py>`
|
|
440
|
+
- LOCI: Fast outlier detection via local correlation integral (`example <https://github.com/yzhao062/pyod/blob/development/examples/loci_example.py>`__)
|
|
441
441
|
- 2003
|
|
442
442
|
- [#Papadimitriou2003LOCI]_
|
|
443
443
|
* - Proximity-Based
|
|
444
444
|
- HBOS
|
|
445
|
-
- Histogram-based Outlier Score (`example <https://github.com/yzhao062/pyod/blob/development/examples/hbos_example.py>`
|
|
445
|
+
- Histogram-based Outlier Score (`example <https://github.com/yzhao062/pyod/blob/development/examples/hbos_example.py>`__)
|
|
446
446
|
- 2012
|
|
447
447
|
- [#Goldstein2012Histogram]_
|
|
448
448
|
* - Proximity-Based
|
|
449
449
|
- HDBSCAN
|
|
450
|
-
- Density-based clustering via hierarchical density estimates (`example <https://github.com/yzhao062/pyod/blob/development/examples/hdbscan_example.py>`
|
|
450
|
+
- Density-based clustering via hierarchical density estimates (`example <https://github.com/yzhao062/pyod/blob/development/examples/hdbscan_example.py>`__)
|
|
451
451
|
- 2013
|
|
452
452
|
- [#Campello2013Density]_
|
|
453
453
|
* - Proximity-Based
|
|
454
454
|
- kNN
|
|
455
|
-
- k Nearest Neighbors (distance to k-th neighbor as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`
|
|
455
|
+
- k Nearest Neighbors (distance to k-th neighbor as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`__)
|
|
456
456
|
- 2000
|
|
457
457
|
- [#Ramaswamy2000Efficient]_
|
|
458
458
|
* - Proximity-Based
|
|
459
459
|
- AvgKNN
|
|
460
|
-
- Average kNN (average distance to k neighbors as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`
|
|
460
|
+
- Average kNN (average distance to k neighbors as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`__)
|
|
461
461
|
- 2002
|
|
462
462
|
- [#Angiulli2002Fast]_
|
|
463
463
|
* - Proximity-Based
|
|
464
464
|
- MedKNN
|
|
465
|
-
- Median kNN (median distance to k neighbors as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`
|
|
465
|
+
- Median kNN (median distance to k neighbors as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/knn_example.py>`__)
|
|
466
466
|
- 2002
|
|
467
467
|
- [#Angiulli2002Fast]_
|
|
468
468
|
* - Proximity-Based
|
|
469
469
|
- SOD
|
|
470
|
-
- Subspace Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/sod_example.py>`
|
|
470
|
+
- Subspace Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/sod_example.py>`__)
|
|
471
471
|
- 2009
|
|
472
472
|
- [#Kriegel2009Outlier]_
|
|
473
473
|
* - Proximity-Based
|
|
474
474
|
- ROD
|
|
475
|
-
- Rotation-based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/rod_example.py>`
|
|
475
|
+
- Rotation-based Outlier Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/rod_example.py>`__)
|
|
476
476
|
- 2020
|
|
477
477
|
- [#Almardeny2020A]_
|
|
478
478
|
* - Outlier Ensembles
|
|
479
479
|
- IForest
|
|
480
|
-
- Isolation Forest (`example <https://github.com/yzhao062/pyod/blob/development/examples/iforest_example.py>`
|
|
480
|
+
- Isolation Forest (`example <https://github.com/yzhao062/pyod/blob/development/examples/iforest_example.py>`__)
|
|
481
481
|
- 2008
|
|
482
482
|
- [#Liu2008Isolation]_
|
|
483
483
|
* - Outlier Ensembles
|
|
484
484
|
- INNE
|
|
485
|
-
- Isolation-based Anomaly Detection via Nearest-Neighbor Ensembles (`example <https://github.com/yzhao062/pyod/blob/development/examples/inne_example.py>`
|
|
485
|
+
- Isolation-based Anomaly Detection via Nearest-Neighbor Ensembles (`example <https://github.com/yzhao062/pyod/blob/development/examples/inne_example.py>`__)
|
|
486
486
|
- 2018
|
|
487
487
|
- [#Bandaragoda2018Isolation]_
|
|
488
488
|
* - Outlier Ensembles
|
|
489
489
|
- DIF
|
|
490
|
-
- Deep Isolation Forest for Anomaly Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/dif_example.py>`
|
|
490
|
+
- Deep Isolation Forest for Anomaly Detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/dif_example.py>`__)
|
|
491
491
|
- 2023
|
|
492
492
|
- [#Xu2023Deep]_
|
|
493
493
|
* - Outlier Ensembles
|
|
494
494
|
- FB
|
|
495
|
-
- Feature Bagging (`example <https://github.com/yzhao062/pyod/blob/development/examples/feature_bagging_example.py>`
|
|
495
|
+
- Feature Bagging (`example <https://github.com/yzhao062/pyod/blob/development/examples/feature_bagging_example.py>`__)
|
|
496
496
|
- 2005
|
|
497
497
|
- [#Lazarevic2005Feature]_
|
|
498
498
|
* - Outlier Ensembles
|
|
499
499
|
- LSCP
|
|
500
|
-
- LSCP: Locally Selective Combination of Parallel Outlier Ensembles (`example <https://github.com/yzhao062/pyod/blob/development/examples/lscp_example.py>`
|
|
500
|
+
- LSCP: Locally Selective Combination of Parallel Outlier Ensembles (`example <https://github.com/yzhao062/pyod/blob/development/examples/lscp_example.py>`__)
|
|
501
501
|
- 2019
|
|
502
502
|
- [#Zhao2019LSCP]_
|
|
503
503
|
* - Outlier Ensembles
|
|
504
504
|
- XGBOD
|
|
505
|
-
- Extreme Boosting Based Outlier Detection **(Supervised)** (`example <https://github.com/yzhao062/pyod/blob/development/examples/xgbod_example.py>`
|
|
505
|
+
- Extreme Boosting Based Outlier Detection **(Supervised)** (`example <https://github.com/yzhao062/pyod/blob/development/examples/xgbod_example.py>`__)
|
|
506
506
|
- 2018
|
|
507
507
|
- [#Zhao2018XGBOD]_
|
|
508
508
|
* - Outlier Ensembles
|
|
509
509
|
- LODA
|
|
510
|
-
- Lightweight On-line Detector of Anomalies (`example <https://github.com/yzhao062/pyod/blob/development/examples/loda_example.py>`
|
|
510
|
+
- Lightweight On-line Detector of Anomalies (`example <https://github.com/yzhao062/pyod/blob/development/examples/loda_example.py>`__)
|
|
511
511
|
- 2016
|
|
512
512
|
- [#Pevny2016Loda]_
|
|
513
513
|
* - Outlier Ensembles
|
|
514
514
|
- SUOD
|
|
515
|
-
- SUOD: Accelerating Large-scale Unsupervised Heterogeneous OD **(Acceleration)** (`example <https://github.com/yzhao062/pyod/blob/development/examples/suod_example.py>`
|
|
515
|
+
- SUOD: Accelerating Large-scale Unsupervised Heterogeneous OD **(Acceleration)** (`example <https://github.com/yzhao062/pyod/blob/development/examples/suod_example.py>`__)
|
|
516
516
|
- 2021
|
|
517
517
|
- [#Zhao2021SUOD]_
|
|
518
518
|
* - Neural Networks
|
|
519
519
|
- AutoEncoder
|
|
520
|
-
- Fully connected AutoEncoder (reconstruction error as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/auto_encoder_example.py>`
|
|
520
|
+
- Fully connected AutoEncoder (reconstruction error as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/auto_encoder_example.py>`__)
|
|
521
521
|
-
|
|
522
522
|
- [#Aggarwal2015Outlier]_ [Ch.3]
|
|
523
523
|
* - Neural Networks
|
|
524
524
|
- VAE
|
|
525
|
-
- Variational AutoEncoder (reconstruction error as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/vae_example.py>`
|
|
525
|
+
- Variational AutoEncoder (reconstruction error as outlier score) (`example <https://github.com/yzhao062/pyod/blob/development/examples/vae_example.py>`__)
|
|
526
526
|
- 2013
|
|
527
527
|
- [#Kingma2013Auto]_
|
|
528
528
|
* - Neural Networks
|
|
529
529
|
- Beta-VAE
|
|
530
|
-
- Variational AutoEncoder with customized loss (gamma and capacity) (`example <https://github.com/yzhao062/pyod/blob/development/examples/vae_example.py>`
|
|
530
|
+
- Variational AutoEncoder with customized loss (gamma and capacity) (`example <https://github.com/yzhao062/pyod/blob/development/examples/vae_example.py>`__)
|
|
531
531
|
- 2018
|
|
532
532
|
- [#Burgess2018Understanding]_
|
|
533
533
|
* - Neural Networks
|
|
534
534
|
- SO_GAAL
|
|
535
|
-
- Single-Objective Generative Adversarial Active Learning (`example <https://github.com/yzhao062/pyod/blob/development/examples/so_gaal_example.py>`
|
|
535
|
+
- Single-Objective Generative Adversarial Active Learning (`example <https://github.com/yzhao062/pyod/blob/development/examples/so_gaal_example.py>`__)
|
|
536
536
|
- 2019
|
|
537
537
|
- [#Liu2019Generative]_
|
|
538
538
|
* - Neural Networks
|
|
539
539
|
- MO_GAAL
|
|
540
|
-
- Multiple-Objective Generative Adversarial Active Learning (`example <https://github.com/yzhao062/pyod/blob/development/examples/mo_gaal_example.py>`
|
|
540
|
+
- Multiple-Objective Generative Adversarial Active Learning (`example <https://github.com/yzhao062/pyod/blob/development/examples/mo_gaal_example.py>`__)
|
|
541
541
|
- 2019
|
|
542
542
|
- [#Liu2019Generative]_
|
|
543
543
|
* - Neural Networks
|
|
544
544
|
- DeepSVDD
|
|
545
|
-
- Deep One-Class Classification (`example <https://github.com/yzhao062/pyod/blob/development/examples/deepsvdd_example.py>`
|
|
545
|
+
- Deep One-Class Classification (`example <https://github.com/yzhao062/pyod/blob/development/examples/deepsvdd_example.py>`__)
|
|
546
546
|
- 2018
|
|
547
547
|
- [#Ruff2018Deep]_
|
|
548
548
|
* - Neural Networks
|
|
@@ -552,37 +552,37 @@ PyOD is organized into two functional groups: **(i) Detection Algorithms**, with
|
|
|
552
552
|
- [#Schlegl2017Unsupervised]_
|
|
553
553
|
* - Neural Networks
|
|
554
554
|
- ALAD
|
|
555
|
-
- Adversarially learned anomaly detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/alad_example.py>`
|
|
555
|
+
- Adversarially learned anomaly detection (`example <https://github.com/yzhao062/pyod/blob/development/examples/alad_example.py>`__)
|
|
556
556
|
- 2018
|
|
557
557
|
- [#Zenati2018Adversarially]_
|
|
558
558
|
* - Neural Networks
|
|
559
559
|
- AE1SVM
|
|
560
|
-
- Autoencoder-based One-class Support Vector Machine (`example <https://github.com/yzhao062/pyod/blob/development/examples/ae1svm_example.py>`
|
|
560
|
+
- Autoencoder-based One-class Support Vector Machine (`example <https://github.com/yzhao062/pyod/blob/development/examples/ae1svm_example.py>`__)
|
|
561
561
|
- 2019
|
|
562
562
|
- [#Nguyen2019scalable]_
|
|
563
563
|
* - Neural Networks
|
|
564
564
|
- DevNet
|
|
565
|
-
- Deep Anomaly Detection with Deviation Networks (`example <https://github.com/yzhao062/pyod/blob/development/examples/devnet_example.py>`
|
|
565
|
+
- Deep Anomaly Detection with Deviation Networks (`example <https://github.com/yzhao062/pyod/blob/development/examples/devnet_example.py>`__)
|
|
566
566
|
- 2019
|
|
567
567
|
- [#Pang2019Deep]_
|
|
568
568
|
* - Graph-based
|
|
569
569
|
- R-Graph
|
|
570
|
-
- Outlier detection by R-graph (`example <https://github.com/yzhao062/pyod/blob/development/examples/rgraph_example.py>`
|
|
570
|
+
- Outlier detection by R-graph (`example <https://github.com/yzhao062/pyod/blob/development/examples/rgraph_example.py>`__)
|
|
571
571
|
- 2017
|
|
572
572
|
- [#You2017Provable]_
|
|
573
573
|
* - Graph-based
|
|
574
574
|
- LUNAR
|
|
575
|
-
- LUNAR: Unifying Local OD Methods via Graph Neural Networks (`example <https://github.com/yzhao062/pyod/blob/development/examples/lunar_example.py>`
|
|
575
|
+
- LUNAR: Unifying Local OD Methods via Graph Neural Networks (`example <https://github.com/yzhao062/pyod/blob/development/examples/lunar_example.py>`__)
|
|
576
576
|
- 2022
|
|
577
577
|
- [#Goodge2022Lunar]_
|
|
578
578
|
* - Embedding-based
|
|
579
579
|
- EmbeddingOD
|
|
580
|
-
- Multi-modal anomaly detection via foundation model embeddings, text and image (`example <https://github.com/yzhao062/pyod/blob/development/examples/embedding_od_example.py>`
|
|
580
|
+
- Multi-modal anomaly detection via foundation model embeddings, text and image (`example <https://github.com/yzhao062/pyod/blob/development/examples/embedding_od_example.py>`__)
|
|
581
581
|
- 2025
|
|
582
582
|
- [#Li2024NLPADBench]_
|
|
583
583
|
|
|
584
584
|
|
|
585
|
-
Ensemble methods (IForest, INNE, DIF, FB, LSCP, LODA, SUOD, XGBOD) are included in the table above. Score combination functions (average, maximization, AOM, MOA, median, majority vote) are in ``pyod.models.combination``. See `API docs <https://pyod.readthedocs.io/en/latest/pyod.models.tabular.html>`
|
|
585
|
+
Ensemble methods (IForest, INNE, DIF, FB, LSCP, LODA, SUOD, XGBOD) are included in the table above. Score combination functions (average, maximization, AOM, MOA, median, majority vote) are in ``pyod.models.combination``. See `API docs <https://pyod.readthedocs.io/en/latest/pyod.models.tabular.html>`__ for details.
|
|
586
586
|
|
|
587
587
|
|
|
588
588
|
**(i-b) Time Series Anomaly Detection** :
|
|
@@ -600,7 +600,7 @@ All time series detectors use the same ``fit``/``predict``/``decision_function``
|
|
|
600
600
|
clf.fit(X_train) # shape (n_timestamps,) or (n_timestamps, n_channels)
|
|
601
601
|
scores = clf.decision_scores_ # per-timestamp anomaly scores
|
|
602
602
|
|
|
603
|
-
Algorithm rankings from `TSB-AD benchmark <https://github.com/TheDatumOrg/TSB-AD>`
|
|
603
|
+
Algorithm rankings from `TSB-AD benchmark <https://github.com/TheDatumOrg/TSB-AD>`__ [#Liu2024TSB]_ (NeurIPS 2024, 1070 datasets):
|
|
604
604
|
|
|
605
605
|
.. list-table::
|
|
606
606
|
:widths: 15 18 50 5 12
|
|
@@ -613,27 +613,27 @@ Algorithm rankings from `TSB-AD benchmark <https://github.com/TheDatumOrg/TSB-AD
|
|
|
613
613
|
- Ref
|
|
614
614
|
* - Windowed Bridge
|
|
615
615
|
- TimeSeriesOD
|
|
616
|
-
- Any PyOD detector on sliding windows (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_od_example.py>`
|
|
616
|
+
- Any PyOD detector on sliding windows (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_od_example.py>`__)
|
|
617
617
|
- 2026
|
|
618
618
|
-
|
|
619
619
|
* - Subsequence
|
|
620
620
|
- MatrixProfile
|
|
621
|
-
- Matrix Profile via STOMP, transductive (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_matrix_profile_example.py>`
|
|
621
|
+
- Matrix Profile via STOMP, transductive (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_matrix_profile_example.py>`__)
|
|
622
622
|
- 2016
|
|
623
623
|
- [#Yeh2016Matrix]_
|
|
624
624
|
* - Frequency
|
|
625
625
|
- SpectralResidual
|
|
626
|
-
- Spectral Residual: FFT-based saliency (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_spectral_residual_example.py>`
|
|
626
|
+
- Spectral Residual: FFT-based saliency (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_spectral_residual_example.py>`__)
|
|
627
627
|
- 2019
|
|
628
628
|
- [#Ren2019Time]_
|
|
629
629
|
* - Clustering
|
|
630
630
|
- KShape
|
|
631
|
-
- k-Shape clustering (#2 in TSB-AD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_kshape_example.py>`
|
|
631
|
+
- k-Shape clustering (#2 in TSB-AD) (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_kshape_example.py>`__)
|
|
632
632
|
- 2015
|
|
633
633
|
- [#Paparrizos2015KShape]_
|
|
634
634
|
* - Streaming
|
|
635
635
|
- SAND
|
|
636
|
-
- Streaming with drift adaptation, experimental (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_sand_example.py>`
|
|
636
|
+
- Streaming with drift adaptation, experimental (`example <https://github.com/yzhao062/pyod/blob/development/examples/ts_sand_example.py>`__)
|
|
637
637
|
- 2021
|
|
638
638
|
- [#Boniol2021SAND]_
|
|
639
639
|
* - Deep Learning
|
|
@@ -661,7 +661,7 @@ All graph detectors are **transductive** in v1: use ``decision_scores_`` and ``l
|
|
|
661
661
|
clf.fit(data) # PyG Data object
|
|
662
662
|
scores = clf.decision_scores_ # per-node anomaly scores
|
|
663
663
|
|
|
664
|
-
Algorithm rankings from `BOND benchmark <https://arxiv.org/abs/2206.10071>`
|
|
664
|
+
Algorithm rankings from `BOND benchmark <https://arxiv.org/abs/2206.10071>`__ [#Liu2022BOND]_ (NeurIPS 2022, 14 datasets):
|
|
665
665
|
|
|
666
666
|
.. list-table::
|
|
667
667
|
:widths: 18 18 45 5 14
|
|
@@ -674,42 +674,42 @@ Algorithm rankings from `BOND benchmark <https://arxiv.org/abs/2206.10071>`_ [#L
|
|
|
674
674
|
- Ref
|
|
675
675
|
* - GCN Autoencoder
|
|
676
676
|
- DOMINANT
|
|
677
|
-
- GCN AE, structure + attribute reconstruction (#1 BOND deep) (`dominant example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_dominant_example.py>`
|
|
677
|
+
- GCN AE, structure + attribute reconstruction (#1 BOND deep) (`dominant example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_dominant_example.py>`__)
|
|
678
678
|
- 2019
|
|
679
679
|
- [#Ding2019DOMINANT]_
|
|
680
680
|
* - Contrastive
|
|
681
681
|
- CoLA
|
|
682
|
-
- Contrastive self-supervised, local neighbor context (#2 BOND deep) (`cola example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_cola_example.py>`
|
|
682
|
+
- Contrastive self-supervised, local neighbor context (#2 BOND deep) (`cola example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_cola_example.py>`__)
|
|
683
683
|
- 2022
|
|
684
684
|
- [#Liu2022CoLA]_
|
|
685
685
|
* - Contrastive+AE
|
|
686
686
|
- CONAD
|
|
687
|
-
- Contrastive with anomalous-view injection + dual reconstruction (`conad example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_conad_example.py>`
|
|
687
|
+
- Contrastive with anomalous-view injection + dual reconstruction (`conad example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_conad_example.py>`__)
|
|
688
688
|
- 2022
|
|
689
689
|
- [#Xu2022CONAD]_
|
|
690
690
|
* - Attention AE
|
|
691
691
|
- AnomalyDAE
|
|
692
|
-
- GAT structure encoder + MLP attribute encoder (`anomalydae example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_anomalydae_example.py>`
|
|
692
|
+
- GAT structure encoder + MLP attribute encoder (`anomalydae example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_anomalydae_example.py>`__)
|
|
693
693
|
- 2020
|
|
694
694
|
- [#Fan2020AnomalyDAE]_
|
|
695
695
|
* - Motif AE
|
|
696
696
|
- GUIDE
|
|
697
|
-
- Dual GCN AE on original + triangle-motif adjacency (`guide example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_guide_example.py>`
|
|
697
|
+
- Dual GCN AE on original + triangle-motif adjacency (`guide example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_guide_example.py>`__)
|
|
698
698
|
- 2021
|
|
699
699
|
- [#Yuan2021GUIDE]_
|
|
700
700
|
* - Matrix Factor.
|
|
701
701
|
- Radar
|
|
702
|
-
- Residual analysis via matrix factorization (`radar example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_radar_example.py>`
|
|
702
|
+
- Residual analysis via matrix factorization (`radar example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_radar_example.py>`__)
|
|
703
703
|
- 2017
|
|
704
704
|
- [#Li2017Radar]_
|
|
705
705
|
* - Matrix Factor.
|
|
706
706
|
- ANOMALOUS
|
|
707
|
-
- Joint MF with Laplacian regularization (`anomalous example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_anomalous_example.py>`
|
|
707
|
+
- Joint MF with Laplacian regularization (`anomalous example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_anomalous_example.py>`__)
|
|
708
708
|
- 2018
|
|
709
709
|
- [#Peng2018ANOMALOUS]_
|
|
710
710
|
* - Structural
|
|
711
711
|
- SCAN
|
|
712
|
-
- Structural clustering, no features needed (`scan example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_scan_example.py>`
|
|
712
|
+
- Structural clustering, no features needed (`scan example <https://github.com/yzhao062/pyod/blob/development/examples/pyg_scan_example.py>`__)
|
|
713
713
|
- 2007
|
|
714
714
|
- [#Xu2007SCAN]_
|
|
715
715
|
|
|
@@ -738,16 +738,16 @@ Quick Start for Outlier Detection
|
|
|
738
738
|
|
|
739
739
|
PyOD has been well acknowledged by the machine learning community with a few featured posts and tutorials.
|
|
740
740
|
|
|
741
|
-
**Analytics Vidhya**: `An Awesome Tutorial to Learn Outlier Detection in Python using PyOD Library <https://www.analyticsvidhya.com/blog/2019/02/outlier-detection-python-pyod/>`
|
|
741
|
+
**Analytics Vidhya**: `An Awesome Tutorial to Learn Outlier Detection in Python using PyOD Library <https://www.analyticsvidhya.com/blog/2019/02/outlier-detection-python-pyod/>`__
|
|
742
742
|
|
|
743
|
-
**KDnuggets**: `Intuitive Visualization of Outlier Detection Methods <https://www.kdnuggets.com/2019/02/outlier-detection-methods-cheat-sheet.html>`
|
|
743
|
+
**KDnuggets**: `Intuitive Visualization of Outlier Detection Methods <https://www.kdnuggets.com/2019/02/outlier-detection-methods-cheat-sheet.html>`__, `An Overview of Outlier Detection Methods from PyOD <https://www.kdnuggets.com/2019/06/overview-outlier-detection-methods-pyod.html>`__
|
|
744
744
|
|
|
745
|
-
**Towards Data Science**: `Anomaly Detection for Dummies <https://towardsdatascience.com/anomaly-detection-for-dummies-15f148e559c1>`
|
|
745
|
+
**Towards Data Science**: `Anomaly Detection for Dummies <https://towardsdatascience.com/anomaly-detection-for-dummies-15f148e559c1>`__
|
|
746
746
|
|
|
747
|
-
`"examples/knn_example.py" <https://github.com/yzhao062/pyod/blob/master/examples/knn_example.py>`
|
|
747
|
+
`"examples/knn_example.py" <https://github.com/yzhao062/pyod/blob/master/examples/knn_example.py>`__
|
|
748
748
|
demonstrates the basic API of using kNN detector. **It is noted that the API across all other algorithms are consistent/similar**.
|
|
749
749
|
|
|
750
|
-
More detailed instructions for running examples can be found in `examples directory <https://github.com/yzhao062/pyod/blob/master/examples>`
|
|
750
|
+
More detailed instructions for running examples can be found in `examples directory <https://github.com/yzhao062/pyod/blob/master/examples>`__.
|
|
751
751
|
|
|
752
752
|
|
|
753
753
|
#. Initialize a kNN detector, fit the model, and make the prediction.
|