Correlation Engine

a daily correlation scan that publishes its own noise baseline

CHARTER II

Run enough searches and something always confesses. The question is what noise confesses to.

Most correlation dashboards are machines for generating false claims: test enough pairs and something significant always falls out. This one runs the search anyway, twenty-six daily time series, every pair, every lag from minus seven to plus seven days, and then shows what the same pipeline finds in phase-randomised fake data with no real relationships in it at all.

On a typical day that is about 4,875 hypothesis tests. At raw p below 0.05 roughly 244 of them pass by chance, because that is what p below 0.05 means. The placebo panel, running the identical pipeline on IAAFT surrogates twenty times a day, still finds around ninety-nine significant edges per run after false-discovery correction. Those two numbers sit next to the real result on the site, because if they look alike the reader should trust nothing, and the tool would rather say so than impress anybody.

To be published, an edge survives four filters. Stationarity first: difference until the ADF test passes, remove the weekday cycle, and run Spearman on changes rather than levels, which kills the spurious correlations between any two things that both happen to trend. Then Benjamini-Hochberg across every test in the run with an effect-size floor. Then stability, the same pair with the same sign in at least ten of the last fourteen runs, which removes most survivors. Then the placebo panel. Published edges also carry a partial correlation with VIX changes conditioned out, labelled holds, fades, or weekends rather than stress, as context and never as a fifth filter.

Every observation and every claim has been committed to the repository since day one, so the entire track record is auditable in the git log rather than asserted in a footer. It runs on GitHub Actions at 06:30 UTC with no server, no database and no paid API, and the site it rebuilds is static.

  • Python 100%

Built from

  • Python
  • GitHub Actions
  • pandas
  • SciPy
  • statsmodels
  • GDELT
  • FRED

Known limits, stated on the site itself

  • Selection bias survives the gate. The founding pool of series was chosen by a person with priors; a 60-day gate stops results-driven additions but cannot make the first choice neutral. The pool file history is the disclosure.
  • The q-values are approximate, because a pair's fifteen lags are positively dependent rather than independent. That is one of the reasons the placebo panel exists.
  • Sparse-event series, such as executive orders that are zero on most days, are the pool's statistically weakest members even after the weekday adjustment.
  • It finds patterns, never causes. Government announcements usually respond to events, so even a clean lead-lag ordering routinely points backwards.

Screenshots

Correlation Engine: the scan beside its noise panel
The scan beside its noise panel

Roads out

Neighbouring holdings