Information-Geometric Anomaly Detection via Fisher–Rao Scalar Curvature
Project description
IGAD - Information-Geometric Anomaly Detection
A new path for anomaly detection: treating anomalies as curvature events on a statistical manifold.
The Invention
For a century, anomaly detection has measured where data sits and how far it has moved. IGAD proposes that this is only half the picture. Distributions have shape, shape has geometry, and geometry carries information that no moment, no distance, and no density estimate can recover alone. To see the other half of the anomalies in the world, we have to learn to see the shape itself.
"Anomalies do not live only in location and distance. They live in shape."
- Omry Damari, creator of IGAD
IGAD introduces a fundamentally different approach. It treats every fitted distribution as a point on a curved geometric surface — the statistical manifold of an exponential family — and detects anomalies by measuring how the curvature of that surface responds to new data. An anomaly, under IGAD, is not merely a numerical outlier. It is a deformation in the geometry of the distribution itself.
The mathematical core is a single, principled object. IGAD computes the Fisher information metric on the manifold, constructs the third cumulant tensor that encodes higher-order distributional structure, and contracts them into a scalar curvature signal written compactly as ‖T‖²_g. This contraction captures shape information that no individual moment — mean, variance, or skewness, raw or MLE-fitted — can recover on its own. It is, to our knowledge, the first practical anomaly detector built directly on Fisher–Rao scalar curvature with closed-form tensor support for real distributional families.
Why This Matters
Consider the hardest case in anomaly detection: two distributions that share the same mean and the same variance. A Gamma distribution and a LogNormal distribution can be tuned to match on both moments exactly. To classical detectors, these distributions are nearly invisible to one another. Mean tests fail. Variance tests fail. Even skewness tests, including the MLE-efficient version, struggle to separate them reliably.
IGAD sees the difference. Because the two distributions trace out different curvature on the statistical manifold, the geometric signal survives where moment-based signals collapse. In the regime where this matters most — moderate sample sizes between 200 and 500 observations — IGAD beats the MLE-skewness control by +0.053 AUC, using the identical underlying fit but extracting the curvature tensor that other methods discard.
This is not a marginal improvement on an existing technique. It is evidence that an entire dimension of distributional information has been ignored by the field, and that this dimension can be measured, computed, and used.
The Falsifiable Claim
IGAD makes a precise scientific claim, not a marketing claim. The contraction ‖T‖²_g extracts shape information not captured by any single moment, raw or MLE-fitted. This claim is supported in the tested regime of n = 200 to 500 observations and remains falsifiable outside that regime. The repository ships with the experiments, the controls, and the failure modes needed to test the claim independently. The Gaussian constant-curvature failure case is documented openly, because a serious geometric method must say where its geometry runs out.
Using It
The invention is mathematically deep but operationally simple.
pip install visigence-igad
import numpy as np
from igad import IGADDetector
from igad.families import GammaFamily
theta_ref = GammaFamily.to_natural(8.0, 2.0)
detector = IGADDetector(family=GammaFamily()).fit(theta_ref=theta_ref)
batch = np.random.lognormal(1.327, 0.343, size=200)
score = detector.score_batch(batch)
print(f"IGAD score: {score:.6f}")
X_train = np.random.gamma(8.0, 0.5, size=5000)
detector = IGADDetector(family=GammaFamily()).fit(X=X_train)
Closed-form tensor support is included for Gamma and Dirichlet families, with the architecture designed to extend naturally to additional exponential families.
Verification
The release is validated end-to-end. All 54 tests pass across Python 3.10, 3.11, and 3.12, with reproducible artifacts published on GitHub Actions and the package distributed through PyPI as visigence-igad. Validation commit, release commit, and run logs are linked in the verification section below for full auditability.
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.2.tar.gz.
File metadata
- Download URL: visigence_igad-1.0.2.tar.gz
- Upload date:
- Size: 12.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 |
fcf3af485f8a5b6523edc45eaba26d8275ad610aba822a27b4302b539816e061
|
|
| MD5 |
a7113428700b893fdec797d9d8d4fd12
|
|
| BLAKE2b-256 |
dbbc4133268e42824930d174dc044ce8a39df7c3fed1152bd68f6ec16a5bbc02
|
Provenance
The following attestation bundles were made for visigence_igad-1.0.2.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.2.tar.gz -
Subject digest:
fcf3af485f8a5b6523edc45eaba26d8275ad610aba822a27b4302b539816e061 - Sigstore transparency entry: 1429433963
- Sigstore integration time:
-
Permalink:
Visigence/IGAD@6d74e1a45ca84068f37690775b4e7e37ab050388 -
Branch / Tag:
refs/tags/IGAD-VER-1.0.2 - Owner: https://github.com/Visigence
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6d74e1a45ca84068f37690775b4e7e37ab050388 -
Trigger Event:
release
-
Statement type:
File details
Details for the file visigence_igad-1.0.2-py3-none-any.whl.
File metadata
- Download URL: visigence_igad-1.0.2-py3-none-any.whl
- Upload date:
- Size: 11.4 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 |
39544e50fe053eca148fc8179e724739d8ed4b0dd46aeb7189a350f4a1d4f6d1
|
|
| MD5 |
110b48df644995cee5945e631b488fec
|
|
| BLAKE2b-256 |
5bc9a3b57f9750c183d92931e7925c7d8fa870f7ae485d6dca2e266f34015b3e
|
Provenance
The following attestation bundles were made for visigence_igad-1.0.2-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.2-py3-none-any.whl -
Subject digest:
39544e50fe053eca148fc8179e724739d8ed4b0dd46aeb7189a350f4a1d4f6d1 - Sigstore transparency entry: 1429433973
- Sigstore integration time:
-
Permalink:
Visigence/IGAD@6d74e1a45ca84068f37690775b4e7e37ab050388 -
Branch / Tag:
refs/tags/IGAD-VER-1.0.2 - Owner: https://github.com/Visigence
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6d74e1a45ca84068f37690775b4e7e37ab050388 -
Trigger Event:
release
-
Statement type: