Information-Geometric Anomaly Detection via Fisher–Rao Scalar Curvature
Project description
Verified
IGAD-VER-1.0.0 was validated on GitHub Actions at commit
81dd1eb4540643083854232d9645f6add4150512.
The PyPI release was built from commit
156160d59f288d11451895ecb8c234ff7ef9c895.
The validation run executed on GitHub-hosted Linux runners and completed successfully across Python 3.10, 3.11, and 3.12, producing separate test-report artifacts for each runtime.
View the exact GitHub Actions validation run.
What is IGAD?
IGAD detects anomalies by measuring scalar curvature on the statistical manifold of an exponential family. Instead of comparing moments directly, it contracts the full third cumulant tensor against the Fisher–Rao metric, extracting shape information that no single moment captures.
Experimental Results
All results are reproducible via experiments/.
Easy Case — Gamma vs Gamma
Different variance.
| Method | AUC-ROC |
|---|---|
| IGAD (curvature) | 1.0000 |
| Variance shift | 1.0000 |
| Skewness shift | 0.9834 |
| Mean shift | 0.8150 |
IGAD achieves perfect separation. Variance shift matches it, so this regime does not isolate the geometric advantage.
Hard Case — Matched Mean and Variance
Same mean = 4.0. Same variance = 2.0. Gamma vs LogNormal.
Evaluation: n = 200, 5 seeds.
| Method | Mean AUC | ± Std |
|---|---|---|
| IGAD (curvature) | 0.6542 | 0.0469 |
| MLE skewness (control) | 0.6016 | 0.0382 |
| Raw skewness | 0.6794 | 0.0722 |
| Mean shift | 0.5240 | 0.0618 |
| Variance shift | 0.5818 | 0.0266 |
IGAD beats the MLE-skewness control by +0.053, showing that scalar curvature contributes signal beyond MLE efficiency alone.
Scaling with Batch Size
Seed = 42.
| n | IGAD | MLE-skew | Gap |
|---|---|---|---|
| 100 | 0.5704 | 0.5764 | −0.006 |
| 200 | 0.6838 | 0.6098 | +0.074 |
| 500 | 0.6748 | 0.5846 | +0.090 |
| 1000 | 0.7892 | 0.8214 | −0.032 |
The geometric advantage is strongest at n = 200–500. At n = 1000, model misspecification degrades the curvature signal.
Honest Limitations
- Model specification required: IGAD needs a correctly chosen exponential family.
- 1D families such as Poisson, Exponential, and Bernoulli are flat, with R = 0.
- Model-free methods can dominate at n > 500 under misspecification.
- Computational cost is O(d³) tensor contractions per evaluation.
Falsifiable Claim
IGAD's advantage over MLE-derived skewness, using the identical MLE fit but discarding the curvature tensor, shows that the full contraction ‖T‖²_g extracts shape information not captured by any single moment, raw or MLE-fitted.
This claim is supported in the tested regime n = 200–500 and remains falsifiable outside that regime.
Verified Test Suite
- Validated commit:
81dd1eb4540643083854232d9645f6add4150512 - Release commit:
156160d59f288d11451895ecb8c234ff7ef9c895 - Release tag:
IGAD-VER-1.0.0 - Python versions: 3.10, 3.11, 3.12
- Result: 54/54 tests passed
- Evidence: GitHub Actions validation run
Install
pip install visigence-igad
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file visigence_igad-1.0.1.tar.gz.
File metadata
- Download URL: visigence_igad-1.0.1.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8115c52c87a4bb2c74694e1b0c0fcdf89d9908fcf85f886828667d972d94b8bb
|
|
| MD5 |
7ddd81864adbe76fa1e234a5a8bf99fb
|
|
| BLAKE2b-256 |
85a1f2cf992617039ebd391e3300bd30c22eae4b652dfc636e62504761e87b1f
|
Provenance
The following attestation bundles were made for visigence_igad-1.0.1.tar.gz:
Publisher:
publish.yml on Visigence/IGAD
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
visigence_igad-1.0.1.tar.gz -
Subject digest:
8115c52c87a4bb2c74694e1b0c0fcdf89d9908fcf85f886828667d972d94b8bb - Sigstore transparency entry: 1425354765
- Sigstore integration time:
-
Permalink:
Visigence/IGAD@160aec7c12a26c012a40a31e24957151c7e2b1f3 -
Branch / Tag:
refs/tags/Release-v1.0.1 - Owner: https://github.com/Visigence
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@160aec7c12a26c012a40a31e24957151c7e2b1f3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file visigence_igad-1.0.1-py3-none-any.whl.
File metadata
- Download URL: visigence_igad-1.0.1-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
676707d27039e198fb94def1c71813b4357e97fe6a54b1deb0f682a73ccdd20a
|
|
| MD5 |
22f64e4e2bddc809519436be3c3688c7
|
|
| BLAKE2b-256 |
c7e734022d3401bf8fdc4c03ec18a8bfa7b225dace6e70c0e3a0f7a3aee86abb
|
Provenance
The following attestation bundles were made for visigence_igad-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on Visigence/IGAD
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
visigence_igad-1.0.1-py3-none-any.whl -
Subject digest:
676707d27039e198fb94def1c71813b4357e97fe6a54b1deb0f682a73ccdd20a - Sigstore transparency entry: 1425354826
- Sigstore integration time:
-
Permalink:
Visigence/IGAD@160aec7c12a26c012a40a31e24957151c7e2b1f3 -
Branch / Tag:
refs/tags/Release-v1.0.1 - Owner: https://github.com/Visigence
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@160aec7c12a26c012a40a31e24957151c7e2b1f3 -
Trigger Event:
release
-
Statement type: