IDKMesh

X4 synthetic calibration: do pilot forecasts and their intervals hit a known truth?

Refs: issue #976 (X4, hypothesis H2), parent #969. Evidence class: synthetic. Nothing on this page is a measurement of real coding agents. The empirical X4 result is E046 (point forecasts, one feasible held-out split, fragile). This page adds what E046 did not have: a check of the forecasters and of the 95% intervals they report against a ground truth that is known exactly, as a function of pilot size k.

Why a simulation, and what it can and cannot show

Real interval coverage needs the population’s true coverage C(M) on held-out data. Every SWE-bench split reachable today is already opened (E046 used them), and the preregistered fresh data (E048, PREREG_AGENT_VALUE_FORECAST_V2) does not exist yet. Intervals computed on opened splits would be post-hoc. So this study uses seeded simulators in which C(M) and the blind-spot floor 1 - C(M) are exact.

It can show whether the machinery (forecasters plus bootstrap intervals, imported unchanged from the frozen E046 code and forecast_intervals.py) is accurate and calibrated when the data are generated by the kind of model the forecasters assume or approximate. It cannot show that real agents behave like these simulators. A forecaster that fails here would be unfit for real data; one that passes has only cleared a necessary bar.

Design

Result at k = 10: mixed

The recorded decision is mixed. The beta-binomial point forecast meets the 0.03 tolerance in three of four scenarios, but no forecaster/scheme is both within the tolerance and calibrated in any scenario at k = 10. Exactly one (scenario, forecaster/scheme) cell reaches the 0.90 coverage bar, and its point forecast misses the tolerance.

scenario forecaster/scheme bias MAE within 0.03 95% interval coverage mean width
rasch_moderate beta_binomial/task -0.0143 0.0163 0.84 0.478 0.033
rasch_moderate beta_binomial/agent -0.0143 0.0163 0.84 0.367 0.101
rasch_moderate incidence/task -0.0488 0.0514 0.34 0.628 0.102
rasch_moderate incidence/agent -0.0488 0.0514 0.34 0.506 0.229
rasch_hard_tail beta_binomial/task -0.0144 0.0283 0.59 0.761 0.082
rasch_hard_tail beta_binomial/agent -0.0144 0.0283 0.59 0.483 0.128
rasch_hard_tail incidence/task -0.0622 0.0700 0.21 0.678 0.163
rasch_hard_tail incidence/agent -0.0622 0.0700 0.21 0.256 0.229
rasch_unsolvable beta_binomial/task +0.0474 0.0482 0.18 0.267 0.058
rasch_unsolvable beta_binomial/agent +0.0474 0.0482 0.18 0.939 0.117
rasch_unsolvable incidence/task -0.0461 0.0504 0.30 0.722 0.135
rasch_unsolvable incidence/agent -0.0461 0.0504 0.30 0.478 0.220
family_clustered beta_binomial/task -0.0004 0.0086 0.97 0.672 0.020
family_clustered beta_binomial/agent -0.0004 0.0086 0.97 0.550 0.068
family_clustered incidence/task -0.0333 0.0367 0.48 0.817 0.087
family_clustered incidence/agent -0.0333 0.0367 0.48 0.517 0.192

Reading the table (k = 10, pooled over 6 populations x 30 pilots):

Exploratory, outside the declared rule: k = 20

H2 is stated for k <= 10, so k = 20 does not enter the verdict. For orientation, the Chao2-style task bootstrap at k = 20:

scenario forecaster/scheme bias MAE within 0.03 95% interval coverage mean width
rasch_moderate incidence/task -0.0116 0.0179 0.83 0.945 0.065
rasch_hard_tail incidence/task -0.0199 0.0296 0.59 0.917 0.126
rasch_unsolvable incidence/task -0.0116 0.0201 0.74 0.939 0.106
family_clustered incidence/task -0.0091 0.0155 0.89 0.917 0.054

At k = 20 this forecaster is below 0.03 in all four scenarios and its interval coverage is 0.917 to 0.945, so in simulation it is both accurate and calibrated once the pilot is twice H2’s size. That observation was made after the declared rule was fixed and is a hypothesis for real data, not a finding.

Controls

tests/test_x4_forecast_interval_calibration.py checks that the scoring cannot be fooled:

Limits

Reproduce

PYTHONPATH=. python experiments/forecast_interval_calibration.py \
  --out experiments/results/X4-synthetic-interval-calibration.json

About ten minutes of single-core CPU; standard library only. The output is experiments/results/X4-synthetic-interval-calibration.json.