Forecast

Loading...
 
 
Predicted Final Entries
 
Last 7 Days
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cumulative Entries

 
Actual
Projected
80% Range
Past Years

History

Registration Curve and Fees

Registration Curve

Fees

Up Next

Tournament Overview

Tournament Status Event Date Current Last day Predicted Likely Range Progress
Predicted vs Actual at T-14
Error by Lead Time average miss at each horizon

Published Forecasts

Tournament Results

CCA Tournament Entry Prediction Model

The Core Idea

Every CCA tournament follows a registration curve: entries trickle in slowly, then accelerate as the event nears. The model exploits this pattern. If a tournament has 180 entries with 60 days to go, and the same tournament historically had ~170 at that point and finished with ~900, we expect roughly 900 again. We compute the ratio of final-to-current entries at the same lead time across all prior years, average them, and multiply: 180 × 5 = 900.

Why Two Models?

The ratio approach works well with good history. For newer tournaments or unusual patterns, we also run a regression: a best-fit line through all data points. The final prediction blends both. Close to the event (last few days), we trust the ratio more (80% weight) because the current count is highly informative. Months out, we lean on regression (85% weight) because the count is still noisy.

Ensemble Equation

The predicted final entry count is a weighted blend of the two sub-models:

Fpred = w(T) · Fratio + (1 − w(T)) · Freg
T (days to end) ≤ 3 ≤ 7 ≤ 28 > 28
w(T): ratio weight 0.80 0.55 0.30 0.15

Historical Ratio Model (Primary)

For each tournament family at lead time T, compute final/current ratios from every prior year. Central estimate uses the harmonic mean (downweights outlier-high ratios):

r = Final / Count_at_T → Fratio = Count × HarmonicMean(r1, r2, …, rn)

When T falls between historical chop points, ratios are blended in log-space via inverse-distance interpolation.

Huber Regression Model (Secondary)

Per-family robust linear regression (Huber loss, ε = 1.35) trained on all historical (count, T) → final pairs. Falls back to a size-matched global model for unknown families:

Freg = β0 · Count_at_T + β1 · T + β2

Confidence Intervals & Sanity Checks

Every prediction includes a confidence interval: a range the actual result has fallen within about 75% of the time at two weeks out in backtesting. The interval targets 80%; the Performance tab shows how close each lead time comes. Wider far from the event, narrower as it approaches.

CI = Count × exp( μ ± t(α, n−1) · σ · √(1 + 1/n) · s(T) · shrink(T) )

s(T) calibrated via LOO for 80% coverage. Shrink(T) = 0.33 at T ≥ 60 → 0.75 at T < 5. σ floored via variance regularization for families with ≤ 3 editions. Months out, the forecast leans toward last year’s final; inside two weeks it is averaged with pickup (this year’s count plus what last year’s edition took from the same point). Smaller adjustments correct for year-over-year trends and near-capacity dampening. Predictions that drift too far from historical norms are pulled back via plausibility bounds.

Sequential Adjustments

Adjustment Trigger Effect
Late-surge dampingScholastic families, T > 3Cap ratio at 1.1 + 0.4 · min(T/90, 1)
Fill-% shrinkageCount > 60% of family meanShrink ratio toward 1.0 (max 20%)
Family anchorCount < threshold, T ≥ 42Blend with 0.6 · recent + 0.4 · mean final
Last-year anchorT > 14Blend toward last edition’s final (0.4 at T ≤ 28, 0.6 beyond)
Growth trendT ≥ 7Multiply by 1 + trend · 0.5 (capped ±15%)
Pickup blendT ≤ 14Geometric mean with count + entries last edition took after T
Last final, no curvePast finals, none with a registration curve; no pickupMove toward the last final in log space (all the way at T > 28, weight 0.3 at T = 1)
New-event priorNo past final, T > 42Move toward the spread of first-edition finals in log space (all the way at T ≥ 60)
Range capTwo or more past finals, or the last-final rowHold each side of the range to the year-over-year spread of finals (about 19% below, 20% above)
Plausibility boundsPred < 30% of family minimum or > 3× its maximumRe-centre on the historical median, or cap at 1.5× the maximum
Edition widening0–1 prior editionsWiden CI by 2.5× / 1.5×

How We Tested It

We never test on data the model has seen. On the first of each month since 2023 we refit the model on the data as it stood that day, then forecast every tournament that month at each lead time from the entries registered by that date: no future information leaks in. Across 136 tournaments, at two weeks out the median miss was 7.4% and the 80% interval captured the true result 78% of the time. Coverage three days out sits near 76%. Earlier releases ran overconfident close to the event (three-day coverage as low as 67%) — exactly when people most want the number — and the 2026 recalibration widened short-lead intervals. The full lead-time breakdown is on the Performance tab.

Validated via walk-forward backtest: refit monthly on the data as it stood, forecast each tournament at each lead time from the entries registered by that date. No future or in-sample data leakage. 133 tournaments across 2023–2026.

What We Tried and Rejected

We tested several alternatives on an earlier blind test. None improved accuracy. The figures below are the relative model-selection comparison and predate the leave-one-out leak fix and the walk-forward test, so the absolute coverage numbers run higher than the honest figures above; read them as a ranking of configurations, not current accuracy.

Configuration MedAPE MAPE 80% Cov Verdict
Harmonic-mean ratio only8.2%14.8%89%Good base, wide CIs
+ Huber regression ensemble7.6%13.0%91%Selected
+ YoY pacing (direct blend)8.5%15.0%88%Adds noise
+ YoY pacing (dampened)7.9%14.1%89%Marginal harm
+ Recency-weighted ratios7.8%13.4%82%CI coverage crash
Log-linear regression7.9%13.5%90%No improvement
Aggressive fill-% shrink7.7%13.2%90%Neutral → rejected

Selection rule (at model-selection time): keep only changes that improve Median APE without degrading 80% CI coverage.

Prior Approaches

Earlier prediction methods used at CCA provided the foundation for the current model:

Metric Manual Multiplier Approach Ratio Model Current Ensemble Model
Method Fixed multiplier × current entries; multiplier from days-to-event lookup, chosen subjectively Historical ratio (entries_at_T / final), median across past 4 years Ensemble: ratio-based + Huber regression, T-dependent weighting
Error Rate ~20% median (est.) ~12–15% median (est.) 7.1% median APE at 2 wks (walk-forward)
Prediction Intervals None MAE-based error bars; not calibrated intervals Lognormal calibrated 80% CI; 75% coverage at 2 wks
Backtesting No formal backtesting No formal backtesting 133 tournaments, 2023–2026 walk-forward, refit monthly
Limitations Multiplier updated by feel; no systematic validation Single-deadline events only; no multi-deadline handling Needs 3+ yrs history; cannot anticipate one-off disruptions

Each approach built on lessons from its predecessor. The prior models’ intuition, that historical ratios are the strongest predictor, remains the core of the current system.

Worked Example: Chicago Open 2026

Forward-looking estimate: 180 entries, 62 days to end (May 21–25, 2026).

Step 1: Historical Ratios at T ≈ 60

Year Count at T≈60 Final Ratio
20221689445.62
20231619605.96
20241918604.50
20251888994.78

Harmonic mean = 4 / (1/5.62 + 1/5.96 + 1/4.50 + 1/4.78) = 5.15 → Fratio = 180 × 5.15 = 927

Step 2: Huber Regression

Freg = β0 · 180 + β1 · 62 + β2 ≈ 907

Step 3: Ensemble Blend

At T = 62 (> 28), ratio weight w = 0.15:
Fpred = 0.15 × 927 + 0.85 × 907 = 910

Step 4: Adjustments

Adjustment Calculation Result
Last-year anchor (T > 28)0.6 × 899 + 0.4 × 910903
Growth trend (−3.4%/yr)903 × (1 + (−0.034) · 0.5)888
Plausibility boundsBetween 30% of the family minimum (258) and 3× its maximum (2,880)888

The plausibility check stops a forecast far outside the family’s history; this one sits inside it. The pickup blend applies only inside two weeks, so at T = 62 the point estimate is 888.

Step 5: Confidence Interval

From lognormal fit on log-ratios, calibrated via LOO with T-dependent shrinkage:
σ = std(log(r)) = 0.127 → raw CI = [788, 1046] → × shrink(0.33 at T≈60) → re-centred on 903, shifted by the trend → CI = [837, 942]

The range cap would hold each side to the year-over-year spread of finals, about 719–1,065 around 888; this range already sits inside it.

Chicago Open 2026 Prediction
888
80% CI: 837 – 942

Limitations

The model predicts from historical patterns. It cannot anticipate one-off events: venue changes, competing tournaments on the same weekend, entry fee changes, or external disruptions. It works best with 3+ years of history; brand-new events get wider confidence ranges. This model is a baseline; tournament directors should apply manual adjustments for known upcoming factors.

Pipeline Health

Source of truth: audit/AUDIT.md on the repo. Every metric below is computed by the daily pipeline; the underlying JSON lives at output/audit_warnings.json, output/performance_data.json, and output/website_data.json.

Ask a question about the tournaments

Hotel Room-Block Audit List

Pick the event, upload your registration export, or both. You get one deduped list for the hotel. Your file stays on this device.
The export needs columns: LastName, FirstName, City, State, ZipCode, PayerName (payer as "Last, First").