learn-ml-epistemology-with-phoebe / Practitioner session 9 of 10
Learn ML Epistemology with Phoebe · Practitioner session 9 of 10

The finding that did not survive

The first run of the Thornbury underspecification bench produced a correlation of -0.89 between held-out accuracy and shifted accuracy. That is a clean, strong, quotable result, and it supports a genuinely dramatic claim: the best model on the held-out set is the worst under shift. It was written down. Then the bench was run on a fourth data draw and the correlation came back at +0.09. Nothing in the pipeline had changed. Tonight is the autopsy: what died, what survived all five draws, and the procedure that would have caught it before anybody read it.

🔴 Hardest Anyone who writes findings other people act on Reviewers and second readers 45 min
0-3 · Welcome 3-23 · Five draws, one autopsy 23-29 · How many draws 29-45 · Build-along: kill your own claim
Part 0

Where tonight sits

Eight sessions have gone after other people's numbers: the split, the shortcut, the seeds, the stress test, the selection, the test-set size, the benchmark, the leak. Tonight the target is your own. The bench in session 3 nearly shipped a finding that was not there, it was caught by an extra run rather than by any review step, and the whole episode is the shortest available demonstration of what the earlier sessions have been arguing.

Live = presented in the 45 minutes Self-study = the full depth, after class 🔍 Every diagram zooms

★ What you walk out with tonight. The five-draw table of the underspecification bench and the ability to say exactly which row of it is a finding and which is a coincidence. A procedure for testing your own claim before anybody else sees it: re-run across draws, report the range instead of the point, and put the draw count next to the number. And a way to write up a result whose headline has died without pretending it never existed.

LiveWhat actually happened4 min▶

The bench trains twenty models on one data draw. The only difference between them is the random seed, which sets the initial weights and the order examples arrive in. Each model is scored twice: on 2,000 held-out patients from the collection year, and on 2,000 patients from the deployment year after the wards were reorganised. Twenty pairs of numbers, one correlation.

On the first draw that correlation was -0.89. Read plainly, it says the models that look best where you measured are the models that do worst where you did not, which would make held-out ranking actively misleading and would be the single most useful thing the bench could produce. The number was real, the code was right, and the finding was wrong.

Real world

Draw 2 came back at +0.03 and could have been read as noise around a mostly negative effect. Draw 3 came back at -0.87, which looked like confirmation. Draw 4 came back at +0.09. Four draws in, the sign had crossed zero twice and the claim had no support left. The cost of finding that out was three extra runs of a bench that takes minutes.

Self-studyDraw, seed, split: what varies and what does not3 min▶
  • A seed. Initial weights and example order. Twenty seeds inside one draw give twenty models on identical data.
  • A data draw. A fresh sample of the Thornbury world: 4,000 training patients, 2,000 held out, 2,000 shifted. The relationships in the generator do not change, only the sample does.
  • What the correlation is computed over. The twenty models inside one draw. It is a statistic of twenty points, and it is reported as though it were a property of the pipeline.
  • What stayed fixed across all five draws. The architecture of 3 inputs, 12 tanh hidden units and 1 logit, the training schedule, and the generator itself.
  • The thing that was never varied in the first run. The data draw. The finding was a statement about the pipeline, computed on one sample, and nobody noticed the gap until a second sample existed.
Part 1 · covers the five draws

Five draws, side by side

12 min live

Put the draws in one table and the two kinds of result separate themselves immediately. One column never changes its story. One column cannot keep its sign. Neither is visible from a single run, which is the only view most findings ever get.

One bench, five data draws. Read the last column top to bottom. Data draw Held-out spread Shifted spread Ratio corr corr(held, shifted) placed from -1 to +1 Draw 1 0.019 0.051 2.7x -0.89 Draw 2 0.008 0.038 4.8x +0.03 Draw 3 0.012 0.046 4.0x -0.87 Draw 4 0.003 0.034 11.3x +0.09 Draw 5 0.016 0.048 3.0x -0.75 -1 0 +1 Robust in 5 of 5: the shifted spread is wider than the held-out spread, by 2.7 to 11.3 times. Not robust: the correlation crosses zero. Draw 1 says the best model on paper is the worst under shift. Draw 4 says nothing of the kind.
🔍 Click to zoom - two columns from the same runs, and only one of them is a finding.
LiveWhy the sign moves4 min▶

The correlation is computed over twenty points, and the spread it is computed across is tiny: on draw 4 the twenty models sit inside a held-out spread of 0.003. Correlating a set of near-identical numbers against anything is a fragile operation, because the ordering of those numbers is close to arbitrary. The bench is not measuring a relationship between two quantities so much as reporting how twenty almost-tied models happened to line up in one sample.

That is why the ratio behaves differently. The ratio compares two spreads, which are aggregate quantities, and it is asking a question with a large effect behind it: models that agree to within thousandths where they were measured disagree by hundredths where they were not. Large effects on aggregate quantities survive resampling. Orderings among near-ties do not.

Self-studyTwo readings of an unstable sign4 min▶

Reading one: there is nothing there. Held-out accuracy carries essentially no information about shifted accuracy, in either direction. The five values are scatter around no relationship, and the two strongly negative draws are what scatter looks like when you only run it twice.

Reading two: the estimate is underpowered. Twenty models per draw is a small sample for a correlation, so a weak true relationship could be present and invisible at this size. On this reading the bench has not shown there is nothing there; it has shown it cannot see.

The bench as it stands cannot separate these, and pretending otherwise would be the same error at a different level. What matters is that both readings forbid the original claim: neither one licenses "the best model on held-out data is the worst under shift". The way to separate them is more models per draw and more draws, which is a decision about what the answer is worth rather than a technical difficulty.

Part 2 · covers what died and what survived

A single-draw finding is a hypothesis

8 min live

The run that produced -0.89 was not sloppy. It was a correctly computed statistic on correctly generated data, and everything about it looked like a result. The only thing missing was a second sample, and a second sample is the cheapest object in the entire pipeline.

The life of a headline, from Tuesday to Thursday. Draw 1 corr -0.89 Clean and quotable The headline Best on held-out is worst under shift Written down Draw 4 corr +0.09 Same pipeline, new data draw The headline dies The sign moved, so the claim was never there to be found What survived Ratio 2.7 to 11.3x in five draws out of five One data draw produced the finding. One more data draw was the entire cost of removing it, and it was paid by accident. A finding worth a headline is a finding that needs more draws, not fewer.
🔍 Click to zoom - nothing between stage two and stage four was a mistake. Stage two was simply premature.
LiveWhat to do when the headline dies4 min▶

The instinct is to delete the dead claim and publish the survivor as though it had always been the point. That loses the most transferable thing in the episode. The write-up that helps a reader is the one that keeps the robust claim and reports the dead one next to it: here is what held in five draws out of five, here is what looked stronger on one draw and did not survive, and here is the number that killed it.

Reporting the death costs one sentence and buys two things. A reader who half-remembers the dramatic version from somewhere else is told directly that it did not replicate, and the next person to run this bench and see -0.89 on their first draw knows what they are looking at. Both of those are worth more than the appearance of having been right the first time.

Real world

The surviving claim: across five data draws, the shifted spread was wider than the held-out spread every time, by 2.7 to 11.3 times, with mean held-out accuracy 0.949 and mean shifted accuracy 0.765. The reported death: the correlation between held-out and shifted accuracy ran from -0.89 to +0.09 across the same five draws, so the stronger claim that held-out ranking inverts under shift is not supported.

Self-studyThe near-miss was caught by luck, not by process3 min▶

Nothing in a normal review would have found this. The code was correct, the statistic was the right one, the data generator was documented, and a reader checking the arithmetic would have confirmed -0.89. Code review, a second pair of eyes and a reproducibility check all pass on a result computed from a single sample, because all three verify that the number is what the run produced.

The only thing that catches it is resampling, and resampling has to be a standing habit rather than a response to suspicion, because suspicion attaches to results that look wrong. This one looked right.

Part 3 · covers the asymmetry

A dramatic result deserves more draws than a boring one

6 min live

Effort spent on replication is usually distributed by how suspicious a result looks. It should be distributed by how much the result would change what somebody does, which is close to the opposite rule in practice.

How many draws before you write it down Left to right: how much the finding would change what somebody does. Confirms what you expected The draws you already ran Moves a number somebody will act on Five draws before it is written Reverses the advice Five draws, and then look for a way to break it that you did not plan. The stronger a result, the more ways there are for it to be an accident. Nobody would act differently Somebody would act differently tomorrow Most write-ups run this backwards: the surprising result is published fastest, because it is the one somebody wants to tell.
🔍 Click to zoom - the budget for killing a finding should scale with what believing it would cost.
LiveFive draws is a floor, not a ritual3 min▶

Five is enough to see a sign change and not enough to estimate anything precisely. It earns its place as a floor because it is cheap for a bench that runs in minutes, and because a claim that cannot survive five samples of its own data was never going to survive somebody else's. For a finding that would change a deployment decision, five is the point at which you start looking for a way to break it, not the point at which you stop.

The number also has to be reported. A range from five draws and the same range from fifty mean different things, and a reader cannot tell them apart unless the count is written next to the finding.

Part 4 · build-along

Try to kill your own claim

16 min build-along

Bring a finding your team produced in the last quarter: a lift, a comparison, an ablation, a correlation, anything somebody quoted. The exercise is to work out what you held fixed by accident, and what the claim would look like written honestly if you had varied it.

The same runs, written two ways. One run, one number, no draw count "Held-out accuracy anti-predicts accuracy under shift (corr -0.89)." Five draws, a range, and the count beside it "Across five data draws the correlation between held-out and shifted accuracy ran from -0.89 to +0.09, so this bench shows no stable relationship. The spread ratio held in all five draws, at 2.7 to 11.3 times." Re-run across draws Vary what you held fixed by accident, not only the seed. Report the range The point estimate is the least durable thing you computed. State the draw count A finding with no n beside it cannot be weighed by a reader.
🔍 Click to zoom - the second version is longer by one clause and says something a reader can rely on.

Write the claim as one sentence with a number in it. If it takes three sentences, there is more than one claim and they will need to be killed separately. Underline the number that would have to move for the sentence to be wrong.

List everything that was fixed when that number was produced. The data sample, the seed, the split, the date window, the cohort filter, the library version, the machine. Most of these were never chosen; they were whatever was there.

Circle the one you have no reason to trust. Usually the sample or the window. That is the thing to vary, and the question to ask is not whether it matters but how much the answer moves when it changes.

Re-run five times, varying only that. Keep every run, including the ones that agree. If five is genuinely unaffordable, run two, and write down that you ran two rather than reporting the first as though it were the finding.

Check the sign before the size. A claim whose direction flips across runs is finished and no amount of averaging rescues it. A claim whose direction holds while its size moves is alive and needs a range.

Rewrite the sentence as a range with its draw count. "Between X and Y across five runs" is publishable. "X" is a number somebody got once, and a reader cannot tell which one they are being handed.

If the headline died, write both. Keep the claim that survived, report the one that did not and the run that ended it. The reader who most needs that sentence is the one about to reproduce your first run.

The cheapest version, for a pipeline that takes hours instead of minutes. Two extra runs on two different date windows will catch a sign flip, which is the failure that matters most and the one that survives review most easily. Do it before the finding reaches a slide, because a claim is much harder to withdraw after somebody has repeated it to their own stakeholders.

Check yourself

Three questions

Your first run of the bench returns a correlation of -0.89 between held-out and shifted accuracy. What do you have?

The number was correct and the code was right. What was missing was a second sample: the statistic describes how twenty near-tied models happened to line up in one draw, and draws 2 and 4 both came back positive. Strength is not stability, and only resampling can tell the two apart.

Across the five draws, which result can be written down as a finding?

The ratio holds in every draw and compares two aggregate quantities, so it survives resampling. Averaging the five correlations hides that their sign moves, and a relationship between spread and ratio built from one extreme draw is the same single-draw mistake in a new place.

A dramatic result and a boring result both come out of the same afternoon's work. How should replication effort be split?

The cost of being wrong scales with how much the finding would change behaviour, and the dramatic result is the one that travels before anybody checks it. Equal effort sounds even-handed and spends the same budget on a claim nobody will act on as on one that reverses the advice.

Homework

Before session 10

40 min

Take the most quoted number your team produced this quarter and re-run whatever produced it on a different sample: another date window, another cohort, another random split. One extra run is enough to learn something. Write the result as a range with the run count next to it, and if the direction moved, write the sentence that says so. Bring both versions of the sentence to session 10, where the falsifier gets written before the bench runs rather than after.

Sources covered

What tonight maps to

✓ The finding that did not survive corr -0.89 on draw 1 and +0.09 on draw 4, with the full five-draw sequence and why the sign moves at all.
✓ What is robust across all five draws The shifted spread wider than the held-out spread by 2.7 to 11.3 times, with mean held-out accuracy 0.949 and mean shifted accuracy 0.765.
✓ The replication asymmetry Why a result that would change a decision earns more draws than one that confirms what everybody expected.
✓ The procedure Re-run across draws, report the range rather than the point, state the draw count, and report the dead headline alongside the surviving claim.
◐ Running the bench yourself Session 3 builds it and session 10 runs both panes live, including the draw selector that produced these five rows.
· Memorization, random labels and double descent Not covered by design. learn-deep-learning-with-phoebe session 05 owns them.
· Metric definitions and drift detection Not covered by design. learn-model-evaluation-with-phoebe defines the metrics and owns monitoring.

Session 9 cheat sheet

-0.89 then +0.09Draw 1 gave the headline, draw 4 removed it. Nothing in the pipeline changed.
One draw is a hypothesisA correct statistic on one sample is not yet a result about the pipeline.
The ratio survived2.7 to 11.3 times, in five draws out of five. Aggregate effects survive resampling.
Orderings among near-tiesOn draw 4 the held-out spread was 0.003. Correlating near-identical numbers is fragile by construction.
Check the sign firstA direction that flips across runs ends the claim. A size that moves needs a range.
Report the range and the n"Between X and Y across five runs" can be weighed. "X" cannot.
Dramatic earns more drawsEffort should scale with what believing the result would change, not with how suspicious it looks.
Publish the deathKeep the robust claim, report the one that died and the run that ended it.