Skip to content

Model choices A–F

Every Chromantis forecaster since the B3 pilot (5 October 2026) is defined by six separate choices (A has three parts), plus its prediction labels and its folds. Several words were used for more than one of these choices, so this page fixes the vocabulary. Every experiment report links its own table of choices to the sections below. Field names are the scenario fields (field key); the names in parentheses are the names used before 8–9 October 2026. They are no longer read: the B7 and System2 records were rewritten to the current names on 9 October 2026, and older experiments are kept as reports only.

Words with several meanings

Word Meanings in this project
nowcaster (a) The correction model: small gradient-boosted trees (or an MLP) that adjust the newest reported weeks of admissions, and of ED if requested, towards their likely final values (choice D). This is the only nowcaster in the code. (b) A separate neural nowcast network (task=nowcast, task=pipeline), deleted 8 October 2026. (c) Per-signal finalizers (task=finalize), deleted 8 October 2026.
reconstruction A joint network also predicts the final values of its last context weeks, as extra training labels (choice A). A nowcast inside the forecaster, separate from the correction model.
vintaged / vintage (a) Real vintages: values as archived on a Wednesday. (b) Artificial vintages: final values made to look preliminary with sampled reporting errors (B, C). (c) The deleted input_mode=vintaged. This page says archived reports and artificial errors instead.
corrected (a) A training treatment: artificial histories corrected by the correction model before the network learns from them (A). (b) An input view at forecast time: inputs corrected by the correction model (F).
pilot The B3 pilot experiment that introduced this training route; not a model property.

A. Training histories: what the network learns from

Three separate fields (until 9 October 2026 bundled into one, pilot_method, briefly training_histories; the translation of old values is in the second table):

Field Values Meaning
history_source (A1) finalized, reported, artificial Training inputs: final reference histories with the documented source lags; the actual archived Wednesday reports (finalized values where nothing was archived); or final histories made preliminary with artificial reporting errors (B, C)
history_correction (A2) 0, 1 Correct the artificial training histories with the correction model (D) before the network learns from them. Cross-fitted: four blocks of origins, each corrected by a model that never saw it. Only with artificial.
reconstruction_labels (A3) 0, 1 Also learn the final values of the last reconstruction_weeks context weeks (weight joint_weight). Labels, not inputs. Implemented with uncorrected artificial histories only.
Old value (pilot_method) Equals
finalized history_source=finalized
reported history_source=reported
errors history_source=artificial
corrected, two_stage history_source=artificial, history_correction=1
joint history_source=artificial, reconstruction_labels=1

Whatever A is, every fold also fits and saves a correction model (D), used at forecast time when the forecast view is corrected or half (F). Code: experiment/fit.py fit.

B. Error source: where the artificial reporting errors come from

An empirical bootstrap of real reporting errors: for each training history, an error window from a real archived release with a similar epidemic phase is transported (age, signal and location aligned; labels never change). Code: dataset/reporting_error.py.

Setting Donor releases
default (error_seasons=latest, no error_reference) the latest permitted training season of each fold. When 2024–25 is held out, that is 2025–26, a later season.
error_seasons=all (was vintage_seasons) every permitted season, weights 1, ½, ¼ from the latest
error_reference=2025-2026 (was revision_reference) the prescribed 2025–26 reporting process in every fold, including the fold that evaluates 2025–26

It matters for errors, corrected and joint training histories, for correction models trained on synthetic examples (D), and for prescribed evaluation inputs (E). Details of the matching: reporting_* fields.

C. Error signals: which signals receive artificial errors

error_signals (was revision_signals): admissions (counts only; ED and covariates keep their final values), targets (admissions and ED), or all (also covariates). error_scope and actual_share can replace some artificial draws by actual reports.

D. Correction model: what the nowcaster learns from

corrector_examples + corrector_model (both were pilot_nowcaster):

Setting The correction model learns from
corrector_examples=synthetic (was synthetic_*) artificial preliminary histories (B, C) paired with their final values
corrector_examples=real (was real_*) real archived reports paired with their values twelve weeks later, from the donor season(s)
corrector_examples=synthetic_then_real (was pretrained_mlp) synthetic pretraining, then real pairs (MLP only)
corrector_model=tree / mlp gradient-boosted trees (default) / a residual MLP

It corrects the newest correction_weeks weeks of admissions, and of ED when correction_ed=1. correction_noise adds sampled correction errors (the sampled view). Code: model/revision_tree.py; saved per fold as nowcaster.pkl.

E. Evaluation inputs: what the fitted model is scored on

The problem's evaluation.inputs value (formerly the recipe field evaluation_inputs, and before that evaluation_vintaging):

Value Inputs of every held-out forecast
reported Real archived Wednesday reports at each Hub's deadline. Where the documented schedule says a value is available but nothing was archived, the finalized value is used and counted (★ footnote). For FluSight October–May issuances this happens for the newest ED week in every 2023–24 and 2024–25 issuance (ED assumed at T-0), 15–23% of the newest admission weeks, and nearly all Kinsa (its archive starts April 2026).
prescribed Artificial histories: final values made preliminary with the recipe's error_reference process, every season, even where real archives exist; the problem's evaluation.draws sets the number of independent draws shared by every configuration and seed.

planner replay -e NAME --inputs reported scores already-fitted folds on real reports without refitting. Production always uses the real operational reports of the issuance.

F. Forecast view: how the fitted pair is used at forecast time

forecast_view (a recipe field since 9 October 2026; default corrected, what both submitted models use):

View Inputs given to the network
raw the evaluation (or operational) inputs as they are
corrected the newest weeks corrected by the fold's correction model (D)
half not an input: the 50/50 mixture of the raw and corrected forecast distributions (research only, not in production)

A configuration is ranked and deployed in its own forecast_view. Every fit is also scored in the other views and in the optional calibrated (corrected, spread recalibrated on validation weeks), sampled (corrected with sampled correction errors), delayed (newest admission week withheld) and nokinsa (covariates withheld) views, as diagnostics without a rank. Until 9 October 2026 reports showed each configuration at its best view after scoring (B7: corrected for all), an extra selection on the evaluation data; a release must now use the view of its recipes (chromantis.production checks it).

Labels and folds

Labels and forecast horizons are the targets and horizons in the required problem file; reconstruction_labels=1 adds the recent reconstruction weeks as an auxiliary objective. Folds and their permitted training seasons also come from that problem. The current respiratory research problems use leave-one-season-out folds for 2023–24 through 2025–26, with training seasons among 2022–23 through 2025–26 (training_window can shorten this). The production problem fits all four completed seasons and emits the 2026–27 fold.

Pathways in the code

Use Choices Command
Fit and evaluate A–F; ranked in the recipe's F view, other views as diagnostics planner plan/run, scripts/jlessler.sbatch
Re-evaluate fitted folds on other inputs, no refit E switched to reported (or prescribed) planner replay
Combine saved forecasts, no refit the members' A–F python -m chromantis.evaluation.ensembles
Production release recipes; real operational reports; the recipes' forecast view python -m chromantis.production run

What each experiment used

From each experiment's saved scenario strings. Before the B3 pilot, routes now deleted were used (B0 finalized inputs; B1–B2 dated inputs with finality flags; B2 reporting augmentation with a linear correction); those are not described by A–F.

Experiment A B C D E Folds
B3 pilot all five compared fold's latest admissions mostly synthetic trees reported 2024–25, 2025–26
B4 (600, heads, refine, refineTop2, polish) mostly corrected (sampled "A") and joint (quantile "B"); errors/reported/finalized as controls fold's latest admissions synthetic and real trees both compared for corrected; synthetic for joint reported same
B5 (explore, covariates, confirm) corrected, joint; some actual_share latest or all admissions real for corrected, mostly synthetic for joint reported same
B6 (search, extension, matched, specialists) corrected, joint fold's latest admissions; targets for the X_* and extension variants real for corrected, mixed for joint reported same
B7 fast corrected (A_blocks3, B5 ILI), joint (B_width256) prescribed 2025–26 targets synthetic trees (one MLP variant), admissions and ED prescribed, 3 draws 2023–24, 2024–25, 2025–26
B7 vs System2 saved folds of both, no refit each system's own own own reported (replayed) 2024–25, 2025–26
System2 (submitted on time) 5 corrected, 3 joint latest (2025–26 in production) admissions; targets for 2 recipes real trees for corrected, mostly synthetic for joint production: real reports, corrected view trained on all four seasons
B7 (merged submission) 2 corrected, 1 joint prescribed 2025–26 targets synthetic trees, admissions and ED production: real reports, corrected view trained on all four seasons

Two consequences: - B_width256 (joint) is trained on uncorrected histories but forecast with corrected inputs; it scored best that way in B7. - System2 and B7 differ in B, C and D at once, not only in their recipes.

History: written 8 October 2026 at the user's request ("these terms mean many things"), with the renames listed in model/scenario.py (RENAMED). On 9 October 2026, after review, the training treatment was split into A1–A3 (TREATMENTS), the forecast view became a recipe field, and every report's protocol table describes each configuration, with its training seasons per fold, evaluated seasons and labels.