Skip to main content

EDA that admits when there's no signal — wraps nullbic ΔBIC falsification

Project description

honest-eda

EDA that admits when there's no signal.

PyPI Python License: MIT CI

ydata-profiling shows you 200 correlations. 195 are noise. honest-eda shows you the 5 that survive shuffling.


The Problem

pandas-profiling, ydata-profiling, and sweetviz report everything. Every correlation, every association, every distribution shift. The result: 200 "insights" in your report, of which 195 are pure chance — artifacts of finite sample size, collinearity, or subtle target leakage.

You end up fitting models on noise, wasting compute on AutoML pipelines that have nothing real to learn, and shipping features that degrade on new data.

The Solution

honest-eda runs a falsification test on every feature-target pair using nullbic — a symbolic regression library with built-in self-falsification via ΔBIC.

For each relation, the verdict is computed against three null hypotheses:

  • vs. constant model
  • vs. linear model
  • vs. target-shuffled distribution

Only relations that survive all three appear in the report. Everything else is hidden.


Install

pip install honest-eda

Usage

Python

from honest_eda import profile, check

# Generate HTML report — only real signals shown
result = profile("data.csv", target="y", output="report.html")
print(f"Real signal patterns: {len(result.strong)}")
print(f"Fake correlations rejected: {result.noise_count}")
print(f"Leakage suspects: {len(result.leakage_suspects)}")

# CI mode — exit 1 if no real signal
if not check("data.csv", target="y", min_strong=1):
    raise ValueError("No real signal in this dataset!")

CLI

honest-eda profile data.csv --target=y --output=report.html
honest-eda check data.csv --target=y --min-strong=2   # exit 1 if fails

What You Get

HONEST EDA REPORT
─────────────────
Columns scanned: 47
Relations tested: 1081

REAL signal (STRONG): 6
  • age × tenure → churn
  • monthly_charges → churn

WEAK signal: 12
NOISE rejected: 1063 (hidden)

Linear-baseline-only features: 23
Leakage suspects: 2  ⚠

No noise, no false confidence. Only findings that hold up under falsification.


Killer Features

Leakage detector — When a feature's z-score vs. shuffled target drops below −15, honest-eda flags it as a probable data leak. Catches target-encoded columns, future-information leaks, and accidental label copies before they corrupt your model evaluation.

Linear vs. symbolic dichotomy — honest-eda tells you explicitly when a linear model would suffice. If symbolic regression finds no improvement over OLS, the feature is labeled "linear-baseline-only". No need to run a neural net to discover this.

CI modehonest-eda check exits with code 1 if the minimum number of strong signals is not met. Drop it in your CI pipeline to block training runs on datasets with no real predictive content.

Pre-modeling triage — Know whether there is exploitable signal before you launch XGBoost or AutoML. Saves hours of compute and avoids the "model trained fine but generalizes to nothing" postmortem.


How It Works

For each numeric feature paired with the target:

  1. nullbic.discover fits a symbolic expression and records the BIC improvement over the null model.
  2. The verdict is assigned:
    • STRONG — beats constant + linear baseline + all shuffled-target permutations.
    • WEAK — beats constant baseline only.
    • NOISE — fails to beat the constant. Excluded from the report.
  3. Leakage is flagged when z_vs_shuffled < −15, indicating the feature carries near-perfect information about the target.

The HTML report contains only STRONG and WEAK relations. NOISE is counted and disclosed in the summary, but not displayed.


Comparison

honest-eda ydata-profiling sweetviz
Tests vs shuffled target
Reports only real signal
Symbolic formula extraction
Leakage detection
CI mode (exit code)

License

MIT. See LICENSE.


Citation / Related

honest-eda is built on top of nullbic, a library for symbolic regression with automatic ΔBIC falsification:

If you use honest-eda in published work, please also cite nullbic.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

honest_eda-0.1.0.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

honest_eda-0.1.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file honest_eda-0.1.0.tar.gz.

File metadata

  • Download URL: honest_eda-0.1.0.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for honest_eda-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6a9b5d2355a311ab2c2a310684c889e443b98ebb38e2366a299ff49d307517fa
MD5 db1070042fdef906d66d085ccde2a477
BLAKE2b-256 81ef0609c8fdbbb89cf38ce57288accadb10bc1a0a4438d09c5e3a50ea47387f

See more details on using hashes here.

File details

Details for the file honest_eda-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: honest_eda-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.6

File hashes

Hashes for honest_eda-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f9c38e66b4cd1cfeb4247051b8c46a3ddf6e201b6010312855364ffab0bb78d
MD5 258c0fd0b68a1c7dc340205c18fcecd1
BLAKE2b-256 301a1c2ae221f703e8b6c6ce4c91b426c59ecacfa525a709273491a8c3c440f4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page