Do not mix ensemble types
| Type | Mechanism | Main football use | Main risk |
|---|---|---|---|
| Bagging | Average models fit on resampled data | Reduce tree variance | Components remain similar |
| Boosting | Add models sequentially against an objective | Strong tabular learner | Tuning overfit |
| Voting or averaging | Combine final probabilities | Blend distinct model families | Arbitrary weights |
| Stacking | Train a meta-model on component outputs | Learn conditional combinations | Leakage from in-sample predictions |
scikit-learn's ensemble guide documents these different mechanics. Calling all of them an "ensemble AI" hides important validation requirements.
Leakage-resistant stacking
- Split development fixtures chronologically.
- For each fold, train every base model only on earlier fixtures.
- Store base predictions for the next validation block.
- Combine those out-of-fold predictions into the meta-model training table.
- Refit base models on the allowed development history.
- Generate base outputs for one untouched future test period.
- Apply the locked meta-model and compare it with every component.
TimeSeriesSplit provides one ordered fold structure. Common-pitfalls guidance supports isolating transformations and training information.
Worked combination
Suppose a Poisson model assigns a home win 0.46, a rating model 0.50 and a tree model 0.54. An equal average is (0.46 + 0.50 + 0.54) / 3 = 0.50. That arithmetic is transparent, but equal weights are still a modelling choice. Weighting the tree model more heavily requires validation evidence from later fixtures, not its training score.
Release checks
| Check | Pass condition |
|---|---|
| Component value | Ensemble beats each component on declared future metrics |
| Calibration | Combined probabilities are no worse by material bands |
| Stability | Gain repeats across folds or seasons |
| Ablation | Removing a component has an explainable effect |
| Operations | Missing component has a documented fallback |
Football model-evaluation research supports controlled model comparison. Calibration guidance applies to the final combined probability, not only its components.
Inputs and maintenance
Store component versions, prediction timestamps, fold definitions, meta-model parameters and fallback logic. If one provider feed disappears, do not silently replace its probability with zero or renormalise using an untested rule. Re-evaluate after any component or feature change.
Build a leakage-safe stacking table
For stacking, a base model must predict rows it did not fit. Generate out-of-fold probabilities in chronological blocks, then train the meta-model on those predictions. Refit the base models on the permitted development period only after the combination rule is locked. scikit-learn's stacking documentation supports out-of-fold meta-model inputs, and TimeSeriesSplit supports chronological blocks.
| Column | Required provenance |
|---|---|
| fixture_id | Shared evaluation identity |
| cutoff_utc | Information boundary for all base models |
| model_a probabilities | Version and out-of-fold block |
| model_b probabilities | Version and out-of-fold block |
| target | Added only after prediction storage |
| meta prediction | Combination version and timestamp |
scikit-learn's ensemble documentation describes voting and stacking implementations. The key football-specific control is preserving chronology inside the out-of-fold process.
Measure useful diversity
Two models with different names can make nearly identical errors. Compare probability residuals, confident-error overlap and subgroup performance, not only correlation between class labels. A weaker base model can still help if it adds independent information, but that contribution must appear on later validation blocks.
Compare the combined forecast with the best single model, a simple average and a market or rating baseline where appropriate. Report cases where one base model is unavailable. Renormalizing the remaining members may be defensible, but the fallback becomes a separate prediction path that needs its own coverage and calibration record.
Continue the workflow
Use the XGBoost and random-forest comparison when the immediate decision is between tree ensemble families rather than a mixed-model stack.
Continue learning
- Next guide: How SportSignals Team Ratings Work
- Related guide: How xG Models Are Calculated
Assumptions and limitations
The numerical example is illustrative. Similar models can add complexity without useful diversity. A stacking gain can disappear after drift, and an ensemble is not evidence of profitability or an in-house architecture.

