Rapscallion123/anomaly-characteristic-layer
The Anomaly Network characteristic layer A derived dataset over 43,684 first-hand accounts of experiences people could not explain, drawn from two public archives (NUFORC, 38,663 accounts; BFRO, 5,021). Live record: theanomalynetwork.com · Dataset page: /data · GitHub · Zenodo · Kaggle What makes it useful Every account is coded for which of 63 recurring characteristics it contains, and every characteristic carries an inverse document frequency. That IDF column… See the full description on the dataset page: https://huggingface.co/datasets/Rapscallion123/anomaly-characteristic-layer.
The Anomaly Network characteristic layer

A derived dataset over 43,684 first-hand accounts of experiences people could not explain, drawn from two public archives (NUFORC, 38,663 accounts; BFRO, 5,021).
Live record: theanomalynetwork.com · Dataset page: /data · GitHub · Zenodo · Kaggle
What makes it useful
Every account is coded for which of 63 recurring characteristics it contains, and every characteristic carries an inverse document frequency.
That IDF column is the point. Two accounts both mentioning a light means nothing, because nearly everything in a sky archive mentions a light. Two accounts both mentioning three knocks means a great deal. The IDF is that difference expressed as a number, and it is what lets a match between two accounts be explained rather than asserted.
Configurations
from datasets import load_dataset
accounts = load_dataset("Rapscallion123/anomaly-characteristic-layer", "accounts")
chars = load_dataset("Rapscallion123/anomaly-characteristic-layer", "characteristics")
clusters = load_dataset("Rapscallion123/anomaly-characteristic-layer", "clusters")The three columns worth reading first
- `idf` (characteristics) — how informative a shared detail is.
- `wording_independence` (clusters) — one minus the largest vocabulary overlap between any two accounts in a cluster. Near 1, everyone described it in their own words. Low, at least two accounts substantially repeat each other, which usually means a common source rather than a common experience. This measure exists because twenty-five copies of one news story are not twenty-five witnesses.
- `ordinary_causes_found` (clusters) — how many candidate mundane explanations the public record offers for that night: fireball, earthquake, full moon, Venus, or a date when lanterns and fireworks are common.
184 of the 263 clusters have no ordinary cause on the public record. That number is computed, not asserted. Read the coverage caveat below before quoting it.
What is deliberately not here
The account text. The narratives belong to NUFORC, to BFRO, and to the people who wrote them, so republishing tens of thousands of them as a bulk download is not ours to do. Every row carries source and source_ref, so the original is one lookup away at the archive that holds it.
This is worth knowing before you plan a use for it: this is metadata, not a text corpus. There is nothing here to train a language model on.
Honest limits
- Characteristics are extracted by curated regular expressions, not a model. Every match is explainable and every miss is silent. Recall is not measured; precision was checked by sampling.
- The corpus is two archives, one about lights in the sky and one about something in the woods. It is North America heavy, and it holds effectively nothing about sleep paralysis, the hat man, or shared false memory, which are among the most searched and least collected experiences there are.
- Clusters use a one-degree cell and an exact date match. Multi-night events fragment, and a correspondence across years cannot be a cluster by construction.
ordinary_causes_foundreflects what public catalogues cover. Fireball data begins in 2015 and historical earthquake coverage is uneven, so a zero on an old night partly reflects a thinner catalogue rather than only a stranger event.
Licence and citation
CC BY 4.0.
@dataset{clouthier_2026_anomaly,
author = {Clouthier, Kyle},
title = {The Anomaly Network characteristic layer},
year = {2026},
version = {1.0.0},
publisher = {Zenodo},
doi = {10.5281/zenodo.22037108},
url = {https://doi.org/10.5281/zenodo.22037108}
}Method
How characteristics are extracted, how clusters are detected, and how the engine was blind-tested against famous documented mass sightings, is written up at theanomalynetwork.com/method.
