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.
Abstract
Corrected metadata and description for a new version of Zenodo record10.5281/zenodo.20085530 (concept DOI 10.5281/zenodo.20085529). Create it with**New version** on the existing record, so the concept DOI resolves to it andv1 stays visible as superseded. Paste the fields below; the description isplain text that Zenodo's editor accepts as is. All placeholders are filled; nothing is left to complete. --- ## Metadata | Field | Value || --- | --- || Resource type | **Software** (v1 was filed as "Patent"; it is not a patent or a patent application) || Title | IGAD: Information-Geometric Anomaly Detection - scalar-curvature scores for exponential families, with a corrected evaluation || Version | 1.0.3 || Creators | Damari, Omry (ORCID as on v1) || License | **Apache-2.0**, copyright Omry Damari: the licence of the repository from release 1.0.3 (`LICENSE`, `NOTICE`), and the same licence v1 listed. Releases 1.0.0–1.0.2 were published on PyPI under MIT and remain available under it. || Keywords | anomaly detection; information geometry; Fisher–Rao metric; scalar curvature; exponential families; negative result || Related identifiers | *Is new version of* 10.5281/zenodo.20085530 · *Is supplemented by* https://github.com/omryv/IGAD · *Is identical to* https://pypi.org/project/visigence-igad/1.0.3/ || Publication date | leave Zenodo's default, the day you publish | --- ## Description IGAD (Information-Geometric Anomaly Detection) scores a batch of data by thechange in Fisher–Rao scalar curvature between a reference fit and the batch'sown maximum-likelihood fit: score = | R(θ_ref) − R(θ̂_batch) |, R(θ) = ¼ ( ‖T‖²_g − ‖S‖²_g ) where g is the Fisher metric, T the third cumulant tensor, and S_m = g^{ab} T_{abm}.The package provides exact Fisher metrics and cumulant tensors for the Gammaand Dirichlet families, an O(k) closed form for Dirichlet curvature(Sherman–Morrison; 101.7 s → 0.34 ms at k = 1024, verified against a120-digit reference), and a runtime diagnostic that reports how many digitsof R survive numerical cancellation. **Correction to version 1.** Version 1 of this record claimed that thecontraction ‖T‖²_g "extracts shape information not captured by any singlemoment, raw or MLE-fitted", supported by a +0.053 AUC advantage over asame-fit MLE-skewness control on Gamma vs LogNormal with matched mean andvariance (n = 200–500). **That claim is withdrawn.** - For the Gamma family, R depends on the shape parameter α alone and is strictly monotone in it. The MLE skewness 2/√α̂ is a function of the same α̂. The IGAD score is therefore a re-scaling of the MLE skewness and cannot carry information it lacks.- The +0.053 came from the experiment script computing curvature by finite differences rather than with the exact metric and tensor the detector uses. Near α = 8 that error is 10–30× the true curvature difference between the two classes.- With exact curvature, over 40 seeds, IGAD scores 0.011–0.017 AUC below the MLE-skewness control at every batch size from 100 to 1000. Raw sample skewness beats both from n = 200 upward. Version 1 also contained these errors, corrected here: - The curvature formula was printed with the wrong sign, ¼(‖S‖²_g − ‖T‖²_g). The correct form above gives the textbook R = −1 for the univariate Gaussian (fixed in software release 1.0.3, this release).- It stated that for a Dirichlet "mean and marginal variances do not determine the parameters uniquely". They do: the mean vector fixes α/α₀ and any one marginal variance fixes α₀.- It gave the cost as O(d³). The literal contraction is O(d⁶) and the pairwise route O(d⁴) for a general family; Dirichlet is O(k).- It stated that the listed limitations are tested in `TestFailureModes`. That class tests two of them (flat 1D families, constant Gaussian curvature). **Results, corrected (software release 1.0.3).** Gamma(8,2) vsLogNormal(1.327, 0.343), mean 4 and variance 2 for both; 40 seeds, 100normal and 50 anomalous batches each; AUC-ROC: n IGAD MLE skew raw skew IGAD − MLE skew (± SE) 100 0.551 0.569 0.596 −0.017 ± 0.001 200 0.598 0.615 0.702 −0.017 ± 0.001 500 0.688 0.701 0.876 −0.014 ± 0.001 1000 0.813 0.823 0.974 −0.011 ± 0.001 On Dirichlet(4,4,4) vs Dirichlet(1.5,4,6.5), with the exact O(k) curvature,IGAD reaches AUC 0.993 at n = 20 and 1.000 from n = 100, tying MMD andWasserstein from n = 100. That anomaly also shifts the marginal means, and nosame-fit control was run, so it does not demonstrate a geometric advantage. **Where curvature carries no signal.** One-parameter families (Poisson,Exponential, Bernoulli) have R ≡ 0. Gaussian families have constant R, sothe score is identically zero. **Open question.** Whether scalar curvature adds information in a familywhere R is not a function of a single fitted statistic is untested. A fairtest should compare against the likelihood-ratio statistic and the Fisher–Raogeodesic distance on the same fit, not only against moment statistics. **Reproducibility.** `python -m experiments.demo_hard` reproduces the Gammatable and writes `experiments/results/hard_case_exact.json`.`tests/test_gamma_reduction.py` pins the Gamma reduction.`python -m pytest tests/` runs the suite. Release 1.0.3 was tested andpublished by a single GitHub Actions run, 37274728125(https://github.com/omryv/IGAD/actions/runs/37274728125), at commitae6664a042c4419aa0453c440efa178a7a85dcaf: 480 tests passing on Python 3.10,3.11 and 3.12 with a clean dependency audit (pip-audit), then built anduploaded to PyPI by the same run, only after every test job had passed. **Provenance.** Version 1 (software release IGAD-VER-1.0.0) was validated onGitHub Actions (run 25236119831, 54/54 tests, Python 3.10–3.12) at commit81dd1eb4540643083854232d9645f6add4150512 and released from commit156160d59f288d11451895ecb8c234ff7ef9c895. Those runs did execute the 54tests, and they still stand as a record of that code. The scientific claimabove was not covered by them. In October 2026 the repository history wasrewritten to normalise commit authorship; file contents are unchanged, andthose two commits are now 6fbd779bc70b50f53238fd0cd469b7e8d9451a69 and2b31d5f3261dfe81acb3bb4b6561aad56ed9e14f with byte-identical trees.Version 2 corresponds to software release 1.0.3, commit ae6664a042c4419aa0453c440efa178a7a85dcaf(https://github.com/omryv/IGAD/commit/ae6664a042c4419aa0453c440efa178a7a85dcaf),exactly as published on PyPI. --- ## Notes for the upload (not part of the record) - **Files.** Attach `IGAD-1.0.3-source.zip` (the repository at commit ae6664a, 98 files). Optionally also attach the two PyPI files, `visigence_igad-1.0.3.tar.gz` and `visigence_igad-1.0.3-py3-none-any.whl`; they are the files PyPI serves, byte for byte. Remove the v1 zip from the new version's file list.- **v1 cannot be edited after publication** except for metadata, and its files cannot be removed. Publishing v2 under the same concept DOI is the standard way to supersede it. You can also edit v1's description to add a first line such as "Superseded by version 2, which withdraws the central claim of this version" - metadata edits are allowed.- **Patent.** Changing the resource type does not change what has been disclosed. If you intend to file, take the timing (v1 public since 8 May 2026) to a patent attorney before uploading v2. Note that Apache-2.0 grants every user a licence to any patent claims your contribution necessarily infringes.- **PyPI.** Done: 1.0.3 is live at https://pypi.org/project/visigence-igad/1.0.3/.