Question: how do the adaptive learning-rate settings change WIS and coverage? The paper’s tracker sets eta = mult × 90th percentile of |outcome − forecast| over the last lr_window observed rounds; the settings are the multiplier (lr_mult), the window (lr_window), and the summer policy (season_policy: carry offsets into the next season, or reset them to zero).

This re-asks the original E01 (a pre-fix, count-scale sweep on the submitted ensemble with finalized truth, since deleted) on the current setup.

Setup:

  • Disease: flu. Base forecaster: the clean windowed_seasonal replay (all 53 locations, the 55 hub rounds; 27 in 2024-25, 28 in 2025-26). Horizons h0–h3.
  • Learning truth: exact (re-run at every round on the data published by then; E00), one week of extra delay.
  • Cold start: no burn-in season, offsets start at zero in November 2024. With no burn-in there is one summer to cross (2025), so the season policy only changes 2025-26.
  • Tracker: REF-paper (single term, adaptive rate) on the square-root scale, learning-rate floor 0.001.
  • Grid: lr_mult {0.3, 0.1, 0.03, 0.01} × lr_window {8, 20, Inf} × season_policy {carry, reset}, 24 runs, plus one count-scale run at mult 0.03, window 20, carry.
  • Scores: states only (US excluded). Each season is scored on its own rounds.

WIS reduction % = 100 × (base − calibrated) / base, so positive = calibrated WIS lower than base. L1 coverage bias: lower is better.

source(here::here("scripts/calibration/calibration_ws_replay.R"))
wi <- ws_inputs("flu")
MULTS <- c(0.3, 0.1, 0.03, 0.01)
WINDOWS <- c(8, 20, Inf)
POLICIES <- c("carry", "reset")
# The sqrt single-term tracker, cold; E02 builds its configs the same way so runs are shared.
sqrt_cfg <- function(mult = 0.03, window = 20, policy = "carry") {
  list(
    ref = "paper", transform = "sqrt", lr_args = list(mult = mult, floor = 1e-3),
    burn_in_seasons = character(0), slow_init = NULL, lr_window = window, season_policy = policy
  )
}
run <- function(cfg) {
  do.call(cal_run_cached, c(list(wi$fc, wi$truth), cfg, list(learn = "exact", vintages = wi$vintages, workers = params$workers)))
}
grid <- tidyr::expand_grid(mult = MULTS, window = WINDOWS, policy = POLICIES)
sweep <- purrr::pmap(grid, \(mult, window, policy) run(sqrt_cfg(mult, window, policy)))
count_ref <- run(list(ref = "paper", burn_in_seasons = character(0), slow_init = NULL))
GEOS <- c(states = "states only (US excluded)")
SEASONS <- c(LIVE, "both")
score <- function(cal) {
  fc <- cal$forecasts %>% mutate(season = season_of(reference_date))
  purrr::imap(WS_GEOS[names(GEOS)], function(keep, g) ws_scores(fc %>% filter(keep(location))) %>% mutate(geos = g)) %>%
    bind_rows() %>%
    select(geos, season, horizon, which, wis, cal_err) %>%
    tidyr::pivot_wider(names_from = which, values_from = c(wis, cal_err)) %>%
    mutate(wis_pct = 100 * (wis_base - wis_cal) / wis_base)
}
label <- function(df) {
  df %>% mutate(
    geos = factor(geos, levels = names(GEOS), labels = GEOS),
    season = factor(season, levels = SEASONS, labels = c(LIVE, "both seasons")),
    h = factor(paste0("h", horizon), levels = paste0("h", 0:3))
  )
}
sweep_m <- purrr::map2(sweep, seq_len(nrow(grid)), \(cal, i) score(cal) %>% mutate(grid[i, ])) %>%
  bind_rows() %>%
  label() %>%
  mutate(window_f = factor(as.character(window), levels = as.character(WINDOWS)), policy = factor(policy, levels = POLICIES))
count_m <- score(count_ref) %>% label()
WINDOW_COLS <- c(`8` = "#E69F00", `20` = "#0072B2", `Inf` = "#009E73")

1. Coverage bias vs WIS over the multiplier

One line per window and season policy, tracing the multiplier from 0.01 (near the base, the open circle) to 0.3. Labels mark the multiplier on the window-20 carry line. The cross is the count-scale run at mult 0.03, window 20, carry. The y axis is clipped at −15%.

curve_plot <- function(g) {
  d <- sweep_m %>% filter(geos == g) %>% arrange(mult)
  base <- d %>% distinct(h, season, cal_err_base)
  ggplot(d, aes(cal_err_cal, wis_pct, colour = window_f)) +
    geom_hline(yintercept = 0, colour = "grey60", linewidth = 0.3) +
    geom_path(aes(linetype = policy, group = interaction(window_f, policy)), linewidth = 0.7) +
    geom_point(size = 1) +
    geom_text(data = d %>% filter(window == 20, policy == "carry"), aes(label = mult),
      size = 2.4, vjust = -0.8, show.legend = FALSE) +
    geom_point(data = base, aes(cal_err_base, 0, shape = "base (uncalibrated)"), colour = "black", fill = "white", size = 2.2) +
    geom_point(data = count_m %>% filter(geos == g), aes(cal_err_cal, wis_pct, shape = "count scale, mult 0.03"), colour = "black", size = 2.4) +
    scale_shape_manual(values = c(`base (uncalibrated)` = 21, `count scale, mult 0.03` = 4), name = NULL) +
    scale_colour_manual(values = WINDOW_COLS, name = "lr_window") +
    scale_linetype_manual(values = c(carry = "solid", reset = "22"), name = "season policy") +
    facet_grid(season ~ h) +
    coord_cartesian(ylim = c(max(-15, min(d$wis_pct)), max(d$wis_pct) + 0.5)) +
    labs(x = "L1 coverage bias (lower is better)", y = "WIS reduction % (positive = calibrated WIS lower than base)", title = g) +
    theme(legend.position = "bottom")
}
curve_plot(GEOS[["states"]])

2. Which setting matters?

For each season and horizon, how far WIS reduction % moves when one setting changes and the other two stay fixed: the range over the four multipliers, over the three windows, and the carry-vs-reset gap, each averaged over the settings held fixed. States only. The policy gap is zero in 2024-25 by construction (no summer crossed yet).

st <- sweep_m %>% filter(geos == GEOS[["states"]])
spread <- bind_rows(
  st %>% group_by(season, h, window, policy) %>% summarize(r = diff(range(wis_pct)), .groups = "drop") %>%
    group_by(season, h) %>% summarize(v = mean(r), .groups = "drop") %>% mutate(setting = "multiplier"),
  st %>% group_by(season, h, mult, policy) %>% summarize(r = diff(range(wis_pct)), .groups = "drop") %>%
    group_by(season, h) %>% summarize(v = mean(r), .groups = "drop") %>% mutate(setting = "window"),
  st %>% group_by(season, h, mult, window) %>% summarize(r = diff(range(wis_pct)), .groups = "drop") %>%
    group_by(season, h) %>% summarize(v = mean(r), .groups = "drop") %>% mutate(setting = "season policy")
)
spread %>%
  transmute(setting = factor(setting, levels = c("multiplier", "window", "season policy")), col = paste(season, h), v = round(v, 1)) %>%
  tidyr::pivot_wider(names_from = col, values_from = v) %>%
  arrange(setting) %>%
  knitr::kable(caption = "Mean range of WIS reduction % (points; positive = calibrated WIS lower than base) when one setting varies, states only")
Mean range of WIS reduction % (points; positive = calibrated WIS lower than base) when one setting varies, states only
setting 2024-2025 h0 2024-2025 h1 2024-2025 h2 2024-2025 h3 2025-2026 h0 2025-2026 h1 2025-2026 h2 2025-2026 h3 both seasons h0 both seasons h1 both seasons h2 both seasons h3
multiplier 9.4 27.8 59.5 97.8 26.2 27.6 35.7 55.0 15.9 27.7 49.8 81.4
window 0.1 0.1 0.1 0.2 1.9 2.1 3.6 6.4 0.8 0.9 1.5 2.4
season policy 0.0 0.0 0.0 0.0 1.1 0.7 1.0 4.3 0.5 0.3 0.4 1.7

3. Each metric against the multiplier

Top: WIS reduction % (positive = calibrated WIS lower than base), clipped at −30% (mult 0.3 goes far below). Bottom: L1 coverage bias (lower is better), each season’s base as a thin line. Carry only, states only; colour is the window.

long <- st %>%
  filter(policy == "carry", season != "both seasons") %>%
  transmute(h, season, mult, window_f, `WIS reduction % (positive = calibrated WIS lower than base)` = pmax(wis_pct, -30), `L1 coverage bias (lower is better)` = cal_err_cal) %>%
  tidyr::pivot_longer(c(`WIS reduction % (positive = calibrated WIS lower than base)`, `L1 coverage bias (lower is better)`), names_to = "metric") %>%
  mutate(metric = factor(metric, levels = c("WIS reduction % (positive = calibrated WIS lower than base)", "L1 coverage bias (lower is better)")))
base_lines <- st %>%
  filter(season != "both seasons") %>%
  distinct(h, season, value = cal_err_base) %>%
  mutate(metric = factor("L1 coverage bias (lower is better)", levels = levels(long$metric)))
ggplot(long, aes(mult, value, colour = window_f, linetype = season)) +
  geom_hline(data = base_lines, aes(yintercept = value, linetype = season), colour = "grey40", linewidth = 0.3) +
  geom_line() +
  geom_point(size = 1) +
  scale_x_log10(breaks = MULTS) +
  scale_colour_manual(values = WINDOW_COLS, name = "lr_window") +
  scale_linetype_manual(values = c(`2024-2025` = "solid", `2025-2026` = "22"), name = NULL) +
  facet_grid(metric ~ h, scales = "free_y", labeller = labeller(metric = label_wrap_gen(28))) +
  labs(x = "lr_mult", y = NULL) +
  theme(legend.position = "bottom")

# The plots show the multipliers around the elbow and the season policy at window 20, plus the count scale; the tables cover every config.
mv_cals <- c(
  setNames(sweep, with(grid, sprintf("sqrt mult %s, window %s, %s", mult, as.character(window), policy))),
  list(`count mult 0.03, window 20, carry` = count_ref)
)
mv <- cal_month_view(mv_cals, seasons = LIVE)
mv_plot_cfgs <- c(
  "sqrt mult 0.1, window 20, carry", "sqrt mult 0.03, window 20, carry", "sqrt mult 0.01, window 20, carry",
  "sqrt mult 0.03, window 20, reset", "count mult 0.03, window 20, carry"
)

Month view: WIS, coverage, median error

Scores by calendar month of the reference date, one figure per season, states only (US excluded). Rows are the three metrics, columns the horizons:

  • WIS reduction %: 100 × (WIS_base − WIS_cal) / WIS_base within the month, so positive = calibrated WIS lower than base. Grey bars are the month’s share of the season’s base WIS, so a large swing in a month with a small bar costs little overall.
  • L1 coverage bias reduction %: 100 × (bias_base − bias_cal) / bias_base, so positive = calibrated coverage bias lower than base. The bias is computed within the month: the mean over the 23 levels of |share of outcomes at or below the quantile − level|. A season-pooled bias lets under-prediction on the ramp cancel over-prediction after the peak; the monthly one does not. When the base’s bias is already small, a small absolute change shows as a large percentage; the month-average column of the coverage table below gives the absolute values.
  • Median AE reduction %: the same as WIS reduction % for the absolute error of the 0.5 quantile, so positive = calibrated median closer to the outcome.

A month holds one to five rounds of about 52 states, and outcomes in the same round move together, so a single month’s coverage bias is noisy and sits above zero even for a calibrated forecaster. That’s why the plot shows it relative to the base.

mv_plot_month <- mv$month
if (!is.null(get0("mv_plot_cfgs"))) {
  mv_plot_month <- mv_plot_month %>% filter(config %in% mv_plot_cfgs) %>% mutate(config = droplevels(config))
}
for (s in sort(unique(mv_plot_month$season))) {
  cat("\n\n", cal_h(2), " ", s, "\n\n", sep = "")
  print(cal_month_plot(mv_plot_month, s, colours = get0("mv_cols"), linetype = get0("mv_linetype"), colour_by = get0("mv_colour_by") %||% "config"))
}

2024-2025

2025-2026

cat("\n\n", cal_h(2), " By horizon\n\n", sep = "")

By horizon

cat("WIS reduction % (positive = calibrated WIS lower than base), states only; `both` pools the seasons.\n\n")

WIS reduction % (positive = calibrated WIS lower than base), states only; both pools the seasons.

print(knitr::kable(cal_month_wis_table(mv)))
config 2024-2025 h0 2024-2025 h1 2024-2025 h2 2024-2025 h3 2025-2026 h0 2025-2026 h1 2025-2026 h2 2025-2026 h3 both h0 both h1 both h2 both h3
sqrt mult 0.3, window 8, carry -7.5 -27.2 -59.2 -98.2 -22.8 -24.9 -31.8 -54.3 -13.6 -26.2 -48.0 -81.4
sqrt mult 0.3, window 8, reset -7.5 -27.2 -59.2 -98.2 -22.1 -27.6 -31.2 -44.0 -13.3 -27.3 -47.8 -77.5
sqrt mult 0.3, window 20, carry -7.7 -27.3 -59.5 -97.9 -23.0 -24.7 -33.9 -44.3 -13.7 -26.2 -49.0 -77.4
sqrt mult 0.3, window 20, reset -7.7 -27.3 -59.5 -97.9 -22.8 -24.9 -31.0 -53.5 -13.6 -26.4 -47.8 -80.9
sqrt mult 0.3, window Inf, carry -7.7 -27.3 -59.5 -97.9 -27.5 -30.9 -41.4 -54.3 -15.5 -28.8 -52.1 -81.2
sqrt mult 0.3, window Inf, reset -7.7 -27.3 -59.5 -97.9 -28.8 -29.7 -41.6 -74.2 -16.0 -28.3 -52.2 -88.8
sqrt mult 0.1, window 8, carry +0.2 -6.2 -13.7 -20.6 -4.5 -7.8 -8.5 -12.2 -1.7 -6.8 -11.5 -17.4
sqrt mult 0.1, window 8, reset +0.2 -6.2 -13.7 -20.6 -4.4 -7.1 -8.0 -10.1 -1.6 -6.5 -11.3 -16.6
sqrt mult 0.1, window 20, carry +0.2 -6.2 -13.6 -20.4 -3.5 -7.6 -8.0 -10.8 -1.3 -6.8 -11.3 -16.7
sqrt mult 0.1, window 20, reset +0.2 -6.2 -13.6 -20.4 -4.2 -7.2 -9.4 -11.5 -1.6 -6.6 -11.9 -17.0
sqrt mult 0.1, window Inf, carry +0.2 -6.2 -13.6 -20.4 -4.9 -9.6 -10.5 -13.7 -1.8 -7.6 -12.3 -17.8
sqrt mult 0.1, window Inf, reset +0.2 -6.2 -13.6 -20.4 -5.7 -9.6 -12.5 -16.0 -2.1 -7.6 -13.2 -18.7
sqrt mult 0.03, window 8, carry +1.8 +0.0 -1.4 -2.6 +1.7 -0.7 -0.7 -0.3 +1.8 -0.3 -1.1 -1.7
sqrt mult 0.03, window 8, reset +1.8 +0.0 -1.4 -2.6 +0.3 -1.1 -1.2 -1.4 +1.2 -0.4 -1.3 -2.1
sqrt mult 0.03, window 20, carry +1.8 +0.0 -1.4 -2.6 +2.2 -0.6 -0.7 -0.2 +1.9 -0.2 -1.1 -1.7
sqrt mult 0.03, window 20, reset +1.8 +0.0 -1.4 -2.6 +0.7 -0.9 -1.3 -1.6 +1.4 -0.3 -1.3 -2.2
sqrt mult 0.03, window Inf, carry +1.8 +0.0 -1.4 -2.6 +1.9 -1.1 -1.4 -1.1 +1.8 -0.4 -1.4 -2.0
sqrt mult 0.03, window Inf, reset +1.8 +0.0 -1.4 -2.6 +0.5 -1.3 -1.9 -2.3 +1.3 -0.5 -1.6 -2.5
sqrt mult 0.01, window 8, carry +1.1 +0.5 +0.1 -0.2 +2.5 +0.9 +1.0 +1.5 +1.6 +0.7 +0.5 +0.5
sqrt mult 0.01, window 8, reset +1.1 +0.5 +0.1 -0.2 +0.5 -0.0 -0.1 +0.0 +0.9 +0.3 +0.1 -0.1
sqrt mult 0.01, window 20, carry +1.0 +0.5 +0.1 -0.2 +2.7 +1.0 +1.1 +1.6 +1.7 +0.7 +0.5 +0.5
sqrt mult 0.01, window 20, reset +1.0 +0.5 +0.1 -0.2 +0.8 +0.1 +0.1 +0.3 +0.9 +0.3 +0.1 +0.0
sqrt mult 0.01, window Inf, carry +1.0 +0.5 +0.1 -0.2 +2.7 +0.9 +0.9 +1.4 +1.7 +0.7 +0.5 +0.4
sqrt mult 0.01, window Inf, reset +1.0 +0.5 +0.1 -0.2 +0.8 +0.1 +0.1 +0.2 +1.0 +0.3 +0.1 -0.0
count mult 0.03, window 20, carry +0.2 -1.8 -4.5 -7.2 -1.3 -3.5 -5.5 -6.8 -0.4 -2.5 -4.9 -7.0
print(knitr::kable(cal_month_cov_table(mv), caption = CAL_MONTH_COV_CAPTION))
L1 coverage bias (lower is better), states only, as season-pooled / month-avg. Season-pooled scores all of a season’s rounds together. Month-avg is the mean over calendar months of the bias computed within each month, every month weighted equally (‘both’: every season-month weighted equally).
config 2024-2025 h0 2024-2025 h1 2024-2025 h2 2024-2025 h3 2025-2026 h0 2025-2026 h1 2025-2026 h2 2025-2026 h3 both h0 both h1 both h2 both h3
base 0.127 / 0.130 0.129 / 0.144 0.148 / 0.179 0.169 / 0.211 0.090 / 0.097 0.081 / 0.112 0.084 / 0.130 0.086 / 0.146 0.108 / 0.112 0.105 / 0.127 0.115 / 0.153 0.127 / 0.177
sqrt mult 0.3, window 8, carry 0.047 / 0.097 0.056 / 0.136 0.043 / 0.188 0.038 / 0.247 0.025 / 0.092 0.030 / 0.111 0.056 / 0.147 0.056 / 0.162 0.032 / 0.094 0.038 / 0.123 0.041 / 0.166 0.021 / 0.201
sqrt mult 0.3, window 8, reset 0.047 / 0.097 0.056 / 0.136 0.043 / 0.188 0.038 / 0.247 0.034 / 0.093 0.030 / 0.116 0.037 / 0.148 0.039 / 0.183 0.041 / 0.095 0.040 / 0.125 0.039 / 0.167 0.038 / 0.213
sqrt mult 0.3, window 20, carry 0.041 / 0.094 0.046 / 0.131 0.042 / 0.189 0.041 / 0.247 0.014 / 0.088 0.011 / 0.116 0.023 / 0.132 0.054 / 0.162 0.025 / 0.091 0.024 / 0.123 0.023 / 0.159 0.024 / 0.202
sqrt mult 0.3, window 20, reset 0.041 / 0.094 0.046 / 0.131 0.042 / 0.189 0.041 / 0.247 0.025 / 0.096 0.020 / 0.110 0.039 / 0.137 0.054 / 0.188 0.033 / 0.095 0.028 / 0.120 0.029 / 0.161 0.047 / 0.216
sqrt mult 0.3, window Inf, carry 0.042 / 0.095 0.047 / 0.131 0.042 / 0.189 0.041 / 0.247 0.012 / 0.088 0.013 / 0.103 0.020 / 0.129 0.040 / 0.164 0.024 / 0.091 0.020 / 0.116 0.023 / 0.157 0.020 / 0.203
sqrt mult 0.3, window Inf, reset 0.042 / 0.095 0.047 / 0.131 0.042 / 0.189 0.041 / 0.247 0.020 / 0.094 0.016 / 0.102 0.034 / 0.130 0.050 / 0.183 0.031 / 0.094 0.027 / 0.115 0.027 / 0.157 0.044 / 0.213
sqrt mult 0.1, window 8, carry 0.057 / 0.115 0.050 / 0.145 0.035 / 0.189 0.041 / 0.236 0.014 / 0.078 0.028 / 0.121 0.032 / 0.139 0.036 / 0.147 0.030 / 0.095 0.031 / 0.132 0.022 / 0.162 0.014 / 0.189
sqrt mult 0.1, window 8, reset 0.057 / 0.115 0.050 / 0.145 0.035 / 0.189 0.041 / 0.236 0.034 / 0.083 0.029 / 0.118 0.028 / 0.142 0.023 / 0.156 0.046 / 0.098 0.039 / 0.131 0.031 / 0.164 0.029 / 0.193
sqrt mult 0.1, window 20, carry 0.059 / 0.117 0.052 / 0.146 0.038 / 0.189 0.039 / 0.237 0.008 / 0.079 0.016 / 0.116 0.025 / 0.138 0.036 / 0.148 0.029 / 0.097 0.027 / 0.130 0.026 / 0.161 0.017 / 0.190
sqrt mult 0.1, window 20, reset 0.059 / 0.117 0.052 / 0.146 0.038 / 0.189 0.039 / 0.237 0.027 / 0.081 0.018 / 0.122 0.025 / 0.146 0.038 / 0.163 0.043 / 0.098 0.034 / 0.133 0.030 / 0.166 0.038 / 0.197
sqrt mult 0.1, window Inf, carry 0.059 / 0.117 0.052 / 0.146 0.038 / 0.189 0.039 / 0.237 0.007 / 0.082 0.013 / 0.121 0.020 / 0.145 0.029 / 0.156 0.028 / 0.099 0.024 / 0.133 0.021 / 0.165 0.015 / 0.194
sqrt mult 0.1, window Inf, reset 0.059 / 0.117 0.052 / 0.146 0.038 / 0.189 0.039 / 0.237 0.022 / 0.083 0.011 / 0.120 0.023 / 0.151 0.036 / 0.169 0.040 / 0.099 0.029 / 0.132 0.025 / 0.168 0.037 / 0.201
sqrt mult 0.03, window 8, carry 0.083 / 0.114 0.075 / 0.137 0.076 / 0.173 0.072 / 0.214 0.008 / 0.080 0.013 / 0.108 0.015 / 0.134 0.033 / 0.154 0.043 / 0.096 0.037 / 0.122 0.033 / 0.152 0.021 / 0.182
sqrt mult 0.03, window 8, reset 0.083 / 0.114 0.075 / 0.137 0.076 / 0.173 0.072 / 0.214 0.053 / 0.078 0.046 / 0.104 0.041 / 0.121 0.036 / 0.141 0.067 / 0.095 0.060 / 0.119 0.058 / 0.145 0.054 / 0.175
sqrt mult 0.03, window 20, carry 0.085 / 0.115 0.077 / 0.138 0.078 / 0.174 0.075 / 0.213 0.008 / 0.078 0.010 / 0.105 0.014 / 0.130 0.016 / 0.143 0.045 / 0.095 0.039 / 0.120 0.037 / 0.150 0.032 / 0.176
sqrt mult 0.03, window 20, reset 0.085 / 0.115 0.077 / 0.138 0.078 / 0.174 0.075 / 0.213 0.050 / 0.076 0.041 / 0.103 0.039 / 0.122 0.043 / 0.138 0.067 / 0.094 0.059 / 0.120 0.058 / 0.146 0.059 / 0.173
sqrt mult 0.03, window Inf, carry 0.085 / 0.115 0.077 / 0.138 0.078 / 0.174 0.075 / 0.213 0.007 / 0.080 0.010 / 0.108 0.016 / 0.135 0.023 / 0.149 0.043 / 0.096 0.036 / 0.122 0.033 / 0.153 0.027 / 0.179
sqrt mult 0.03, window Inf, reset 0.085 / 0.115 0.077 / 0.138 0.078 / 0.174 0.075 / 0.213 0.044 / 0.075 0.033 / 0.105 0.027 / 0.124 0.030 / 0.142 0.065 / 0.094 0.055 / 0.120 0.052 / 0.147 0.052 / 0.176
sqrt mult 0.01, window 8, carry 0.108 / 0.120 0.106 / 0.137 0.118 / 0.170 0.128 / 0.203 0.043 / 0.071 0.034 / 0.095 0.027 / 0.119 0.016 / 0.138 0.075 / 0.094 0.070 / 0.115 0.071 / 0.143 0.071 / 0.169
sqrt mult 0.01, window 8, reset 0.108 / 0.120 0.106 / 0.137 0.118 / 0.170 0.128 / 0.203 0.074 / 0.087 0.065 / 0.105 0.065 / 0.123 0.062 / 0.136 0.091 / 0.103 0.085 / 0.120 0.091 / 0.145 0.094 / 0.167
sqrt mult 0.01, window 20, carry 0.109 / 0.121 0.107 / 0.137 0.118 / 0.170 0.129 / 0.204 0.041 / 0.069 0.031 / 0.094 0.025 / 0.117 0.015 / 0.137 0.074 / 0.093 0.068 / 0.114 0.071 / 0.142 0.071 / 0.168
sqrt mult 0.01, window 20, reset 0.109 / 0.121 0.107 / 0.137 0.118 / 0.170 0.129 / 0.204 0.072 / 0.086 0.062 / 0.104 0.061 / 0.121 0.060 / 0.134 0.090 / 0.102 0.084 / 0.119 0.089 / 0.144 0.094 / 0.166
sqrt mult 0.01, window Inf, carry 0.109 / 0.121 0.107 / 0.137 0.118 / 0.170 0.129 / 0.204 0.038 / 0.070 0.027 / 0.096 0.019 / 0.121 0.011 / 0.140 0.073 / 0.094 0.066 / 0.115 0.068 / 0.144 0.068 / 0.170
sqrt mult 0.01, window Inf, reset 0.109 / 0.121 0.107 / 0.137 0.118 / 0.170 0.129 / 0.204 0.069 / 0.084 0.058 / 0.102 0.056 / 0.119 0.054 / 0.133 0.089 / 0.101 0.082 / 0.118 0.086 / 0.143 0.090 / 0.166
count mult 0.03, window 20, carry 0.067 / 0.122 0.056 / 0.155 0.042 / 0.200 0.057 / 0.257 0.008 / 0.088 0.018 / 0.124 0.032 / 0.135 0.040 / 0.143 0.036 / 0.104 0.034 / 0.138 0.033 / 0.165 0.031 / 0.196