# Model comparison

[Open the interactive report](report.html).

Eight fitted model variants use the same four benchmark receiver gages and individual daily station histories.
The custom linear daily model and temporal convolution network retain the earlier saved baseline predictions.
The new methods are Ridge, Linear SVR, RBF SVR, XGBoost, Transformer, and NMFk with a Ridge readout.
All four receiver histories remain excluded from predictor inputs.
Every day in each requested history remains represented; no monthly or basin aggregates replace the input histories.
Rolling training targets use a five-day cadence; evaluation remains daily.
Models remain frozen within their chronological outer blocks.

## Model definitions

- **Linear daily model:** Earlier custom linear daily model: learned station projection and individual daily-lag weights; this is a retained baseline, not standard Ridge or SVR.
- **Temporal convolution network:** Earlier temporal convolution network: stride-one daily convolutions cover the complete requested history; retained as a baseline.
- **Ridge:** Standard Ridge regression over individual daily station values, availability masks, and known calendar features; regularization is selected from earlier chronological labels. The exact dual fit divides the full-design dot product by its feature count without aggregating input days. Calendar and issue-history contributions are additive in log-flow space, so one January history shifts a shared daily calendar pattern rather than interacting with its shape.
- **Linear SVR:** Linear support-vector regression over individual daily station values, availability masks, and known calendar features. Its exact linear kernel divides the full-design dot product by feature count. This is a support-vector model, not the retained linear daily baseline; calendar and issue-history contributions remain additive in log-flow space.
- **RBF SVR:** Support-vector regression with a radial-basis-function kernel over individual daily station values, availability masks, and known calendar features. Its squared full-design distances are divided by feature count; the nonlinear kernel can express interactions between issue history and target calendar.
- **XGBoost:** Gradient-boosted decision trees use individual daily station values, availability masks, and known calendar features.
- **Transformer:** Full self-attention encodes every individual daily token with explicit padding masks and a learned station projection; no temporal patches, pooling, or predefined summaries replace the daily history.
- **NMFk (daily factors + Ridge readout):** NMFk selects nonnegative daily input factors from the earlier predictor archive through the last fitted history cutoff, then freezes that basis. Factor fitting samples source days deterministically every five days, using full-prefix input scalers, eight starts and 300 iterations for ranks 2, 3, 4, and 6. Every individual requested history day is then projected and enters the Ridge readout with availability and known target calendar. Calendar and issue-history contributions are additive in log-flow space. This factor-plus-readout model differs from the earlier streamflow latent-transition NMFk forecasts.

### NMFk bounded fitting diagnostics

Individual factorization convergence flags are unavailable; the iteration cap does not establish convergence.
Completed NMFk jobs with readable diagnostics: 60.
Selected rank counts: {"2": 21, "4": 39}.
Inner selections using the no-stable-rank fallback: 0.
Selected Ridge readout heads reaching their solver cap: inner 0/216; refit 0/216.

## Historical window candidates

Candidates minimize historical daily RMSE through 2022 with matched finite coverage; they are model-dependent comparisons, not universally optimal windows.
Validation and already inspected 2025–2026 errors never choose a candidate history.

The cross-model historical score uses all finite pairs for the chosen history; window selection uses dates shared across that model's candidate histories.
Historical coverage can differ between models, so compare their scores on common target dates.

### One day

| Receiver | Model | Candidate history | Matched days | Years | 7 days RMSE | 30 days RMSE | 90 days RMSE |
| --- | --- | --- | --- | --- | --- | --- | --- |
| USGS-09439000 | daily_linear | 30 days | 5478 | 16 | 487 | 324 | 518.2 |
| USGS-09439000 | nmfk | 7 days | 3652 | 10 | 420.9 | 435.4 | 434.7 |
| USGS-09439000 | ridge | 7 days | 5478 | 16 | 300.2 | 339.1 | 359.6 |
| USGS-09439000 | svr_linear | 7 days | 5478 | 16 | 297.5 | 335 | 349 |
| USGS-09439000 | svr_rbf | 7 days | 5478 | 16 | 306.5 | 311.6 | 350.8 |
| USGS-09439000 | tcn | 90 days | 5478 | 16 | 345.1 | 334 | 312.4 |
| USGS-09439000 | transformer | 30 days | 5478 | 16 | 369.1 | 360.2 | 366.1 |
| USGS-09439000 | xgboost | 30 days | 5478 | 16 | 327.5 | 324.2 | 324.4 |
| USGS-09447000 | daily_linear | 90 days | 8035 | 22 | 121.5 | 122.5 | 121.1 |
| USGS-09447000 | nmfk | 7 days | 8035 | 22 | 120.3 | 121.5 | 122.3 |
| USGS-09447000 | ridge | 7 days | 8035 | 22 | 122.8 | 124.5 | 125.6 |
| USGS-09447000 | svr_linear | 7 days | 8035 | 22 | 127.5 | 128.6 | 127.7 |
| USGS-09447000 | svr_rbf | 30 days | 8035 | 22 | 121.9 | 120.9 | 123.2 |
| USGS-09447000 | tcn | 30 days | 8035 | 22 | 121.9 | 114.9 | 148.9 |
| USGS-09447000 | transformer | 30 days | 8035 | 22 | 119.9 | 116.5 | 122.2 |
| USGS-09447000 | xgboost | 7 days | 8035 | 22 | 121.5 | 122 | 122.1 |
| USGS-09466500 | daily_linear | 90 days | 8035 | 22 | 2,137 | 1,516 | 792.4 |
| USGS-09466500 | nmfk | 7 days | 8035 | 22 | 603.6 | 626 | 630.8 |
| USGS-09466500 | ridge | 30 days | 8035 | 22 | 605.3 | 490.3 | 627.7 |
| USGS-09466500 | svr_linear | 7 days | 8035 | 22 | 493 | 541.1 | 573 |
| USGS-09466500 | svr_rbf | 7 days | 8035 | 22 | 400.4 | 432.7 | 487.6 |
| USGS-09466500 | tcn | 90 days | 8035 | 22 | 467.7 | 492.6 | 451.1 |
| USGS-09466500 | transformer | 90 days | 8035 | 22 | 529.1 | 533.2 | 525.9 |
| USGS-09466500 | xgboost | 7 days | 8035 | 22 | 520.7 | 526.5 | 531.7 |
| USGS-09468500 | daily_linear | 30 days | 7837 | 22 | 275.1 | 274.3 | 279.4 |
| USGS-09468500 | nmfk | 7 days | 7837 | 22 | 277.4 | 277.7 | 280.5 |
| USGS-09468500 | ridge | 7 days | 7837 | 22 | 277 | 278.7 | 280.4 |
| USGS-09468500 | svr_linear | 7 days | 7837 | 22 | 280.9 | 281.9 | 281.2 |
| USGS-09468500 | svr_rbf | 30 days | 7837 | 22 | 277.1 | 275.9 | 278.4 |
| USGS-09468500 | tcn | 7 days | 7837 | 22 | 271.3 | 273.7 | 297.1 |
| USGS-09468500 | transformer | 30 days | 7837 | 22 | 275.5 | 273.2 | 274.1 |
| USGS-09468500 | xgboost | 7 days | 7837 | 22 | 274.3 | 275.7 | 275.2 |


### One week

| Receiver | Model | Candidate history | Matched days | Years | 1 month RMSE | 3 months RMSE | 6 months RMSE |
| --- | --- | --- | --- | --- | --- | --- | --- |
| USGS-09439000 | daily_linear | 3 months | 5478 | 16 | 426.8 | 380 | 388.3 |
| USGS-09439000 | nmfk | 1 month | 3652 | 10 | 444.1 | 449.9 | 454 |
| USGS-09439000 | ridge | 1 month | 5478 | 16 | 371.4 | 386.9 | 388.4 |
| USGS-09439000 | svr_linear | 1 month | 5478 | 16 | 374.7 | 382.7 | 385.4 |
| USGS-09439000 | svr_rbf | 1 month | 5478 | 16 | 369.3 | 382.1 | 388 |
| USGS-09439000 | tcn | 3 months | 5478 | 16 | 372 | 371 | 375.4 |
| USGS-09439000 | transformer | 3 months | 5478 | 16 | 405.1 | 390 | 442.2 |
| USGS-09439000 | xgboost | 1 month | 5478 | 16 | 370.6 | 371.6 | 371.7 |
| USGS-09447000 | daily_linear | 6 months | 8035 | 22 | 128.3 | 131.1 | 127.3 |
| USGS-09447000 | nmfk | 1 month | 8035 | 22 | 127.6 | 127.9 | 127.6 |
| USGS-09447000 | ridge | 6 months | 8035 | 22 | 127.8 | 128.3 | 127.3 |
| USGS-09447000 | svr_linear | 6 months | 8035 | 22 | 129.5 | 129 | 128.1 |
| USGS-09447000 | svr_rbf | 3 months | 8035 | 22 | 128.6 | 127.6 | 127.6 |
| USGS-09447000 | tcn | 6 months | 8035 | 22 | 127.6 | 128.2 | 127.1 |
| USGS-09447000 | transformer | 6 months | 8035 | 22 | 127.5 | 128.8 | 126.2 |
| USGS-09447000 | xgboost | 6 months | 8035 | 22 | 128.1 | 128 | 128 |
| USGS-09466500 | daily_linear | 1 month | 8035 | 22 | 793.7 | 973.5 | 1,103 |
| USGS-09466500 | nmfk | 1 month | 8035 | 22 | 656 | 673 | 666.5 |
| USGS-09466500 | ridge | 1 month | 8035 | 22 | 638.4 | 659.2 | 670.8 |
| USGS-09466500 | svr_linear | 1 month | 8035 | 22 | 640 | 648.7 | 665.5 |
| USGS-09466500 | svr_rbf | 1 month | 8035 | 22 | 645.4 | 656.9 | 669.2 |
| USGS-09466500 | tcn | 1 month | 8035 | 22 | 632.1 | 638.2 | 645.4 |
| USGS-09466500 | transformer | 1 month | 8035 | 22 | 643.1 | 658.2 | 696.8 |
| USGS-09466500 | xgboost | 6 months | 8035 | 22 | 666.5 | 660.7 | 656.1 |
| USGS-09468500 | daily_linear | 1 month | 7837 | 22 | 280.9 | 281.5 | 282.4 |
| USGS-09468500 | nmfk | 1 month | 7837 | 22 | 282.3 | 282.5 | 282.5 |
| USGS-09468500 | ridge | 1 month | 7837 | 22 | 281.7 | 282.1 | 282.3 |
| USGS-09468500 | svr_linear | 1 month | 7837 | 22 | 282.4 | 282.6 | 282.7 |
| USGS-09468500 | svr_rbf | 3 months | 7837 | 22 | 282 | 282 | 282.2 |
| USGS-09468500 | tcn | 1 month | 7837 | 22 | 281.4 | 282 | 281.7 |
| USGS-09468500 | transformer | 1 month | 7837 | 22 | 281.6 | 282 | 282 |
| USGS-09468500 | xgboost | 6 months | 7837 | 22 | 281.9 | 281.9 | 281.8 |


### Six months

| Receiver | Model | Candidate history | Matched days | Years | 6 months RMSE | 12 months RMSE | 24 months RMSE |
| --- | --- | --- | --- | --- | --- | --- | --- |
| USGS-09439000 | daily_linear | 6 months | 5478 | 16 | 409.4 | 413.6 | 428.4 |
| USGS-09439000 | nmfk | 24 months | 3652 | 10 | 620 | 692.1 | 589.3 |
| USGS-09439000 | ridge | 6 months | 5478 | 16 | 408.6 | 411.3 | 413 |
| USGS-09439000 | svr_linear | 6 months | 5478 | 16 | 407.7 | 410.1 | 412.5 |
| USGS-09439000 | svr_rbf | 6 months | 5478 | 16 | 406.2 | 409 | 412.3 |
| USGS-09439000 | tcn | 24 months | 5478 | 16 | 411.7 | 413.2 | 407.5 |
| USGS-09439000 | transformer | 12 months | 5478 | 16 | 412 | 404.2 | 413.3 |
| USGS-09439000 | xgboost | 12 months | 5478 | 16 | 405.1 | 403.1 | 407.9 |
| USGS-09447000 | daily_linear | 6 months | 8035 | 22 | 130.3 | 167.7 | 299.1 |
| USGS-09447000 | nmfk | 6 months | 8035 | 22 | 130.2 | 131 | 131.6 |
| USGS-09447000 | ridge | 24 months | 8035 | 22 | 130.2 | 130.1 | 130 |
| USGS-09447000 | svr_linear | 12 months | 8035 | 22 | 130.9 | 130.8 | 130.8 |
| USGS-09447000 | svr_rbf | 12 months | 8035 | 22 | 130.6 | 130.6 | 130.7 |
| USGS-09447000 | tcn | 6 months | 8035 | 22 | 131.3 | 131.9 | 131.5 |
| USGS-09447000 | transformer | 12 months | 8035 | 22 | 131.2 | 130.7 | 131.5 |
| USGS-09447000 | xgboost | 6 months | 8035 | 22 | 130.4 | 130.5 | 130.8 |
| USGS-09466500 | daily_linear | 6 months | 8035 | 22 | 851.8 | 7.528e+06 | 7,301 |
| USGS-09466500 | nmfk | 6 months | 8035 | 22 | 739 | 764.7 | 877.1 |
| USGS-09466500 | ridge | 24 months | 8035 | 22 | 750.9 | 757.8 | 750.2 |
| USGS-09466500 | svr_linear | 12 months | 8035 | 22 | 773.4 | 751.6 | 755.5 |
| USGS-09466500 | svr_rbf | 12 months | 8035 | 22 | 765.8 | 751.8 | 753.8 |
| USGS-09466500 | tcn | 6 months | 8035 | 22 | 759.1 | 778.3 | 760.9 |
| USGS-09466500 | transformer | 12 months | 8035 | 22 | 760.9 | 748.9 | 763.9 |
| USGS-09466500 | xgboost | 6 months | 8035 | 22 | 748.7 | 751.6 | 752.3 |
| USGS-09468500 | daily_linear | 6 months | 7837 | 22 | 337.6 | 2,172 | 525.5 |
| USGS-09468500 | nmfk | 6 months | 7837 | 22 | 282.4 | 286 | 282.7 |
| USGS-09468500 | ridge | 24 months | 7837 | 22 | 283.1 | 283.1 | 283 |
| USGS-09468500 | svr_linear | 12 months | 7837 | 22 | 283.3 | 283.1 | 283.3 |
| USGS-09468500 | svr_rbf | 12 months | 7837 | 22 | 283.3 | 283.1 | 283.2 |
| USGS-09468500 | tcn | 24 months | 7837 | 22 | 283.4 | 283.4 | 283.3 |
| USGS-09468500 | transformer | 6 months | 7837 | 22 | 283.4 | 283.6 | 283.6 |
| USGS-09468500 | xgboost | 24 months | 7837 | 22 | 283 | 283 | 282.9 |


### January → April–July

| Receiver | Model | Candidate history | Matched days | Years | 6 months RMSE | 12 months RMSE | 24 months RMSE |
| --- | --- | --- | --- | --- | --- | --- | --- |
| USGS-09439000 | daily_linear | 24 months | 1830 | 15 | 150.3 | 151.2 | 136.2 |
| USGS-09439000 | nmfk | 24 months | 1220 | 10 | 116.4 | 124 | 112.6 |
| USGS-09439000 | ridge | 6 months | 1830 | 15 | 148 | 149 | 151 |
| USGS-09439000 | svr_linear | 6 months | 1830 | 15 | 149.1 | 149.4 | 151.6 |
| USGS-09439000 | svr_rbf | 6 months | 1830 | 15 | 147.8 | 149.1 | 151.3 |
| USGS-09439000 | tcn | 6 months | 1830 | 15 | 120.2 | 138.1 | 131.4 |
| USGS-09439000 | transformer | 12 months | 1830 | 15 | 133.8 | 131.3 | 153.9 |
| USGS-09439000 | xgboost | 24 months | 1830 | 15 | 145 | 148.8 | 134.4 |
| USGS-09447000 | daily_linear | 24 months | 2684 | 22 | 13.54 | 15.83 | 12.79 |
| USGS-09447000 | nmfk | 12 months | 2684 | 22 | 15.73 | 12.79 | 15.32 |
| USGS-09447000 | ridge | 12 months | 2684 | 22 | 12.88 | 12.62 | 13.12 |
| USGS-09447000 | svr_linear | 6 months | 2684 | 22 | 12.88 | 12.99 | 13.41 |
| USGS-09447000 | svr_rbf | 6 months | 2684 | 22 | 12.96 | 13.06 | 13.41 |
| USGS-09447000 | tcn | 6 months | 2684 | 22 | 14.18 | 15.94 | 14.38 |
| USGS-09447000 | transformer | 12 months | 2684 | 22 | 16.17 | 14.4 | 14.9 |
| USGS-09447000 | xgboost | 12 months | 2684 | 22 | 13.84 | 13.24 | 13.33 |
| USGS-09466500 | daily_linear | 6 months | 2684 | 22 | 211.9 | 214.9 | 328.1 |
| USGS-09466500 | nmfk | 6 months | 2684 | 22 | 177.4 | 201 | 223 |
| USGS-09466500 | ridge | 6 months | 2684 | 22 | 217.6 | 223.1 | 225.2 |
| USGS-09466500 | svr_linear | 6 months | 2684 | 22 | 212.2 | 221.1 | 230.1 |
| USGS-09466500 | svr_rbf | 6 months | 2684 | 22 | 216.7 | 221.2 | 228.7 |
| USGS-09466500 | tcn | 24 months | 2684 | 22 | 231.5 | 310.6 | 208 |
| USGS-09466500 | transformer | 24 months | 2684 | 22 | 388.6 | 241.2 | 229 |
| USGS-09466500 | xgboost | 24 months | 2684 | 22 | 223.7 | 223.7 | 218.6 |
| USGS-09468500 | daily_linear | 6 months | 2671 | 22 | 114.1 | 114.1 | 114.1 |
| USGS-09468500 | nmfk | 24 months | 2671 | 22 | 114.2 | 114.1 | 114.1 |
| USGS-09468500 | ridge | 12 months | 2671 | 22 | 114.1 | 114 | 114 |
| USGS-09468500 | svr_linear | 24 months | 2671 | 22 | 114.1 | 114.1 | 114.1 |
| USGS-09468500 | svr_rbf | 24 months | 2671 | 22 | 114.1 | 114 | 114 |
| USGS-09468500 | tcn | 12 months | 2671 | 22 | 114.2 | 114.2 | 114.2 |
| USGS-09468500 | transformer | 12 months | 2671 | 22 | 114.2 | 114.1 | 114.2 |
| USGS-09468500 | xgboost | 6 months | 2671 | 22 | 113.9 | 114 | 114 |


## Saved matched comparisons

January → April–July, Historical hindcasts: 24m versus 12m reduces daily RMSE in 13/32 matched receiver/model cells, increases it in 19, and ties in 0.
January → April–July, Historical hindcasts: 12m versus 6m reduces daily RMSE in 13/32 matched receiver/model cells, increases it in 19, and ties in 0.
January → April–July, Historical hindcasts: 24m versus 6m reduces daily RMSE in 14/32 matched receiver/model cells, increases it in 18, and ties in 0.
January → April–July, 2025–2026 retrospective comparison: 24m versus 12m reduces daily RMSE in 21/32 matched receiver/model cells, increases it in 11, and ties in 0.
January → April–July, 2025–2026 retrospective comparison: 12m versus 6m reduces daily RMSE in 13/32 matched receiver/model cells, increases it in 19, and ties in 0.
January → April–July, 2025–2026 retrospective comparison: 24m versus 6m reduces daily RMSE in 21/32 matched receiver/model cells, increases it in 11, and ties in 0.
January → April–July, Validation comparison: 24m versus 12m reduces daily RMSE in 6/32 matched receiver/model cells, increases it in 26, and ties in 0.
January → April–July, Validation comparison: 12m versus 6m reduces daily RMSE in 12/32 matched receiver/model cells, increases it in 20, and ties in 0.
January → April–July, Validation comparison: 24m versus 6m reduces daily RMSE in 13/32 matched receiver/model cells, increases it in 19, and ties in 0.
One day, Historical hindcasts: 90d versus 30d reduces daily RMSE in 9/32 matched receiver/model cells, increases it in 23, and ties in 0.
One day, Historical hindcasts: 30d versus 7d reduces daily RMSE in 12/32 matched receiver/model cells, increases it in 20, and ties in 0.
One day, Historical hindcasts: 90d versus 7d reduces daily RMSE in 8/32 matched receiver/model cells, increases it in 24, and ties in 0.
One day, 2025–2026 retrospective comparison: 90d versus 30d reduces daily RMSE in 11/32 matched receiver/model cells, increases it in 21, and ties in 0.
One day, 2025–2026 retrospective comparison: 30d versus 7d reduces daily RMSE in 10/32 matched receiver/model cells, increases it in 22, and ties in 0.
One day, 2025–2026 retrospective comparison: 90d versus 7d reduces daily RMSE in 12/32 matched receiver/model cells, increases it in 20, and ties in 0.
One day, Validation comparison: 90d versus 30d reduces daily RMSE in 14/32 matched receiver/model cells, increases it in 18, and ties in 0.
One day, Validation comparison: 30d versus 7d reduces daily RMSE in 14/32 matched receiver/model cells, increases it in 18, and ties in 0.
One day, Validation comparison: 90d versus 7d reduces daily RMSE in 11/32 matched receiver/model cells, increases it in 21, and ties in 0.
One week, Historical hindcasts: 3m versus 1m reduces daily RMSE in 8/32 matched receiver/model cells, increases it in 24, and ties in 0.
One week, Historical hindcasts: 6m versus 1m reduces daily RMSE in 10/32 matched receiver/model cells, increases it in 22, and ties in 0.
One week, Historical hindcasts: 6m versus 3m reduces daily RMSE in 11/32 matched receiver/model cells, increases it in 21, and ties in 0.
One week, 2025–2026 retrospective comparison: 3m versus 1m reduces daily RMSE in 15/32 matched receiver/model cells, increases it in 17, and ties in 0.
One week, 2025–2026 retrospective comparison: 6m versus 1m reduces daily RMSE in 15/32 matched receiver/model cells, increases it in 17, and ties in 0.
One week, 2025–2026 retrospective comparison: 6m versus 3m reduces daily RMSE in 15/32 matched receiver/model cells, increases it in 17, and ties in 0.
One week, Validation comparison: 3m versus 1m reduces daily RMSE in 11/32 matched receiver/model cells, increases it in 21, and ties in 0.
One week, Validation comparison: 6m versus 1m reduces daily RMSE in 8/32 matched receiver/model cells, increases it in 24, and ties in 0.
One week, Validation comparison: 6m versus 3m reduces daily RMSE in 19/32 matched receiver/model cells, increases it in 13, and ties in 0.
Six months, Historical hindcasts: 24m versus 12m reduces daily RMSE in 12/32 matched receiver/model cells, increases it in 20, and ties in 0.
Six months, Historical hindcasts: 12m versus 6m reduces daily RMSE in 11/32 matched receiver/model cells, increases it in 21, and ties in 0.
Six months, Historical hindcasts: 24m versus 6m reduces daily RMSE in 12/32 matched receiver/model cells, increases it in 20, and ties in 0.
Six months, 2025–2026 retrospective comparison: 24m versus 12m reduces daily RMSE in 20/32 matched receiver/model cells, increases it in 12, and ties in 0.
Six months, 2025–2026 retrospective comparison: 12m versus 6m reduces daily RMSE in 14/32 matched receiver/model cells, increases it in 18, and ties in 0.
Six months, 2025–2026 retrospective comparison: 24m versus 6m reduces daily RMSE in 21/32 matched receiver/model cells, increases it in 11, and ties in 0.
Six months, Validation comparison: 24m versus 12m reduces daily RMSE in 21/32 matched receiver/model cells, increases it in 11, and ties in 0.
Six months, Validation comparison: 12m versus 6m reduces daily RMSE in 13/32 matched receiver/model cells, increases it in 19, and ties in 0.
Six months, Validation comparison: 24m versus 6m reduces daily RMSE in 21/32 matched receiver/model cells, increases it in 11, and ties in 0.

Positive bias indicates overprediction; whole-year bootstrap intervals describe sampling uncertainty.
Current historical archives do not establish exact past publication latency or future operational skill.
Missing observations remain gaps, valid zeros remain zeros, and sparse calibration stays unavailable.
Keep report.html, plotly.min.js, and the method-data directory together for offline use.
The report loads one selected model at a time and retains at most two decoded models.

[Daily forecasts](predictions.csv) · [Errors and coverage](metrics.csv) · [Matched comparisons](paired_comparisons.csv) · [Aggregate daily paths](aggregate_predictions.csv)
