Synthetic personas that stay close to reality.
Blind out-of-time replay across three public datasets. Real outcomes hashed before we predicted. Every number below reproducible from the public audit repo.
Distributional fidelity is the test the field has been failing. Ours holds up.
The recent literature is blunt: synthetic personas can recover direction but collapse the distribution. On a real shopping survey no LLM beat a naive baseline that just predicts the average — Wasserstein 0.641 vs 1.467 for the best model, more than 2× worse.
Independent peer-reviewed work finds the same failure mode from a different angle: too little variance, coefficients that drift, direction unstable over time.
The fix is elicitation and grounding — free-text-then-map recovers realistic distributions at ~90% of human test-retest, KS > 0.85. That's the same technique we run under the hood, and this page is the receipt.
Four integrity constraints. One seal per test.
Binary classification across three public datasets.
Can a persona built from a customer's past predict whether they'll churn? Direction is right in every dataset. Calibration and raw ranking vary — we print both.
| Dataset | n | Churn | AUC · Us / ML | Beats naive baseline? | Calibration | Driver direction |
|---|---|---|---|---|---|---|
| Grocery (Dunnhumby) | 300 | 18% | 0.70 / 0.74 | ✓ Brier 0.143 vs 0.148 | good | ✓ |
| Telecom (IBM Telco) | 300 | 27% | 0.75 / 0.85 | ✓ 0.190 vs 0.196 | moderate | ✓ |
| Subscription (KKBox) | 500 | 6.8% | 0.59 / 0.84 | ✗ raw → ✓ recalibrated (0.281 → 0.061) | poor raw | ✓ |
The reads: driver direction correct 6 out of 6 — directly counters the variance-collapse critique. Predictions realistically spread. Doesn't out-rank a purpose-built ML ranker — that's fine, the edge is the why and the recalibration path, not the last basis point.
Churn is binary → KS / Wasserstein don't apply here. We don't fake one.
Distributional distance — the exact test the field's baseline crushed everyone on.
Known limits.
We print what we haven't fixedEvery figure recomputes from the sealed outcomes and saved per-row files.
Verification is self-serve. Clone the audit repo, run the reproduce commands in the README, hash-check against the seal files. No gatekeeping.
predictions/*.csv · predictions/backtest_dist_dunnhumby.json · seals/*.json · dist_metrics.py · README.md