Skip to content

Issue #410 — frozen v11 prospective scoring protocol

Protocol: v11-prospective-1.0.1 · Status: frozen before evaluation Machine-readable contract: JSON · JSON Schema

The JSON artifact is authoritative. Its protocol_sha256 is SHA-256 over canonical UTF-8 JSON of the complete object excluding that digest field (sorted keys, compact separators, no non-finite numbers). Verify it with btc_timesfm.research.frozen_scoring_protocol.load_frozen_protocol. This protocol was designed without inspecting any v11 model score. Current canonical BTC/USD corpus/replay prerequisites remain blocked; this artifact authorizes no score inspection, promotion, or claim of skill.

Estimands and attempt accounting

The primary point estimand is the equally weighted mean across the four predeclared horizons of each horizon's mean absolute cumulative log-return error: r=ln(P_actual/P_origin), r_hat=ln(P_hat/P_origin), abs(r_hat-r). It is scale-free, additive in return space, and cannot be switched for a more favorable price metric. Secondary point measures are absolute price-percent error, signed log-return bias, signed price-percent bias, and directional error. Direction is undefined when either realized or predicted return has absolute magnitude at most 1e-6; such rows remain in point-loss denominators and are counted separately for direction.

Interval estimand uses the exact target's cumulative log return y=ln(P_target/P_origin). q10/q50/q90 quantile predictions and all proper scores/widths are in dimensionless log-return units. Require finite ordered bounds L=q10<=U=q90; crossing or non-finite bounds are failed attempts. For each quantile q, pinball loss is rho_q(y-Qq)=max(q*(y-Qq),(q-1)*(y-Qq)), averaged separately by quantile. The primary interval score is the 80% Winkler score (U-L)+(2/0.20)*(L-y)*I(y<L)+(2/0.20)*(y-U)*I(y>U). Coverage is mean(I(L<=y<=U)), nominal 0.80, with observed-minus-nominal and denominator reported. Width is mean(U-L) and is also expressed as mean(100*(exp(U)-exp(L))) percent of origin price. Coverage alone is not probabilistic skill; proper scores and sharpness are required alongside calibration. No interval result substitutes for the primary point test.

Every attempt is retained as scored, failed, abstained, missing, or ineligible. Invalid/nonpositive prices are failed, never imputed. Paired skill requires exactly matching UTC (origin_at,target_at,horizon_hours) with target duration equal to the integer horizon to the microsecond (higher timestamp precision is rejected), vintage ID and vintage SHA-256, and outcome identity. Every row must supply input_available_at, selection_data_through, nonempty vintage_id, and lowercase 64-hex vintage_sha256; both timestamps must be at or before the origin. Score only shared successful pairs, and separately report all attempt counts/rates. Any candidate failure-rate regression blocks eligibility. No nearest-time join or naive timestamp is permitted.

Comparators, design, and inference

Required comparators are the production champion frozen at preregistration, persistence, exact-hour seasonal-naive 24h, and the strongest simple baseline selected only using inner training data from drift_7d, drift_24h, AR(1), and EMA-return-24h. Inner choices are frozen before outer outcomes mature; ties break lexicographically. Regime and training-only volatility-tercile strata and cutpoints are declared before evaluation.

Use nested expanding walk-forward selection, a 16-hour maturity purge plus 24-hour embargo, a separately reserved untouched chronological holdout, and a distinct prospective D3 shadow (at least 30 days and 200 mature exact pairs per horizon). Register the immutable vintage, candidates, complete attempt family, cutoff and access controls before evaluation. One analysis occurs after all planned outcomes mature. No optional stopping, interim score access, or post-hoc threshold, strata, candidate, or multiplicity changes are allowed.

The practical floor is at least 3% relative primary-loss reduction versus each required comparator. Simultaneous per-horizon primary-loss regression may not exceed 5% of comparator mean loss; directional error-rate increase may not exceed 2 percentage points. Uncertainty is paired moving-block bootstrap over 24-origin blocks (covering maximum 16-hour target overlap), 10,000 replicates, fixed seed 4102026, with identical blocks for all comparisons. Report raw pairs and effective independent blocks. In each replicate retain each origin's predeclared stratum membership and use the same joint sampled origin blocks for every horizon, endpoint, comparison, and stratum; never independently resample cells. Compute paired bootstrap two-sided p-values and percentile intervals. Before scores are accessed, enumerate the complete confirmatory test family in the preregistration: every candidate versus each required comparator, primary and per-horizon point loss, direction, interval score, each pinball quantile, coverage diagnostics, all horizons, and every predeclared regime/volatility stratum. Apply one Holm step-down family-wise adjustment at alpha 0.05 to that entire family. Failed, aborted, missing, or ineligible tests stay registered with blocked results and do not shrink the adjustment family. Fewer than 200 paired origins or eight effective blocks in any confirmatory horizon/comparison means blocked/inconclusive, not permission to pool away the shortfall.

Permitted outcomes are blocked, inconclusive, negative, and eligible for human review. Eligibility is not approval; there is no automatic promotion. Any future contract change requires a new version/hash before an independent evaluation; previous observations remain exploratory.

Verification

Run PYTHONPATH=src uv run --locked python -m unittest tests.research.test_frozen_scoring_protocol. The checks validate the committed JSON artifact against its Draft 2020-12 schema and digest, exact pairing including fractional-second rejection and duplicate rejection, failure/missing handling, required vintage/time provenance, UTC and origin cutoff enforcement. They do not load forecast scores or execute an evaluation.