Story Finder

Look at enough numbers and a story will find you. Explore → Claim → Challenge → Compare.
What is this playground about? (click to expand)

The scenario: You are evaluating a few-shot LLM classifier that routes support tickets to one of five teams (account, order, refund, payment, delivery). You can vary experimental conditions (model, prompt, temperature, dataset) and, once the numbers are in, look at them by metric (accuracy, judge score, escalation rate, latency, cost) and by slice (ticket category, channel, language).

The catch: by default every condition has exactly the same true quality. Nothing is real. And yet, every time you run the experiment, the tool finds a statistically significant story, complete with a plausible explanation. Roll a few times and a different story is "true" almost every roll.

Two multipliers of looks: each dimension you vary multiplies the number of runs and the tokens you pay for (the curse of dimensionality), and each metric × slice you inspect multiplies the number of comparisons. looks = (cells − 1) × metrics × slices. At α = 0.05, about one look in twenty crosses the line by chance, so you can predict how many "findings" you will collect before you collect them.

The distinction that matters: exploring (many looks, questions not yet precise, output = hypotheses) versus comparing (one hypothesis, decision rule fixed up front, one look). Exploring is not wrong. Shipping on an exploratory finding is. The fix is a loop: explore broadly, articulate a claim, then challenge it on fresh data with every choice fixed beforehand. Or better: pre-register the compare before looking at all.

Optional reality check: switch on a planted real effect. Exploration will find it, but it will also find the fakes, and you cannot tell which is which until you challenge them.

Reality: there is no story.
Start here: choose which conditions to vary and watch the number of cells, tokens and looks multiply. Then click "Run experiment" (and again, and again).

Experimental conditions (what you vary, and on how many tickets)

every cell classifies its own sample of n tickets: 1 ticket = 1 LLM call
Comparisons available
-
 
Expected number of false positives (theory)
-
 

Reality (what is actually true)

Every condition has the same true accuracy, judge score, latency, cost and escalation rate. Any difference you see is sampling noise.
Nothing to see yet
Set the conditions and the reality above, then run. The experiment collects a fresh sample for every cell, makes all 660 comparisons, and shows you the stories you could tell. The results and the four steps appear here.