Prediction Methodology
ODP uses a scientific approach to predicting Dota 2 matches, based on machine learning and rigorous model validation.
Ensemble Approach
Our system uses an ensemble of machine learning models instead of a single model. This increases reliability and prediction accuracy.
- LightGBM — fast gradient boosting for tabular data
- CatBoost — specialized in categorical features
- XGBoost — classic gradient boosting with high accuracy
The final prediction is formed by weighted averaging of all model predictions, where weights are determined based on each model's performance on validation data.
Feature Engineering
Prediction quality directly depends on the quality of features. Our system uses several dozen features grouped by category.
Main feature categories:
Team Features
- Head-to-head history
- Current form (rolling windows)
- KDA and GPM difference
- Result stability (variance)
Player Features
- Player statistics by role
- Hero mastery (experience per hero)
- Pool depth (number of heroes)
- Individual recent form
Draft Features
- Aggregated hero pool win rate
- Meta hero ratings on current patch
- Hero interaction aggregates (diff)
- Role balance within the team
Context Features
- Tournament type and tier
- Series format (BO1, BO3, BO5)
- Seasonal team history
- Patch — deviation from base period
Model Validation
We use strict validation methodology to avoid overfitting and obtain realistic accuracy estimates.
Temporal Split
Data is split strictly by time, not randomly. This is critically important:
- Game meta changes with every patch — future data cannot be used during training
- Teams change rosters and strategies — past results aren't always representative
- Random splitting creates data leakage and inflates accuracy estimates
5-Fold Temporal Cross-Validation
We use 5-fold temporal cross-validation to evaluate model quality: data is split into 5 consecutive time periods, the model trains on previous folds and is evaluated on the next. The final score is averaged across all folds.
7-Day Buffer
Between training and test sets, a 7-day buffer is left — matches from this period are excluded entirely.
Quality Metrics
- Accuracy — share of correct winner predictions (primary metric)
- ROC AUC — ranking ability of the model (diagnostic, secondary)
- Calibration — alignment of predicted probabilities with actual frequencies
- Brier Score — quality of probabilistic predictions
prediction == match_result.
Improving AUC while reducing accuracy is a regression, not progress.
Only winner prediction accuracy has practical value for users.
Calibration and Overfitting Prevention
Even a well-trained model can be "overconfident" — giving probabilities close to 0% or 100% when real uncertainty is higher.
Calibration methods:
- Platt Scaling — logistic regression on top of model predictions
- Isotonic Regression — non-parametric calibration for complex cases
- Temperature Scaling — simple method for neural networks
Overfitting prevention:
- Early Stopping — stop training when validation performance degrades
- Regularization — L1/L2 penalization of complex models
- Feature Selection — removing noisy and correlated features
- Cross-Validation — checking stability across different time periods
Continuous Improvement
Models are retrained as new data accumulates — especially after patch changes, roster swaps, or significant meta shifts.
- Real-time performance monitoring via Accuracy Dashboard
- New features validated on temporal cross-validation before entering production
- Error analysis — which teams and scenarios the model systematically mispredicts
- Data leakage audit for every new feature added
Results
Accuracy varies by period, tournament tier, and current patch. We don't publish fixed numbers — they become stale and create a false sense of stability.
-
Random guessing
50% — the baseline for comparison
- Live statistics
-
Results are not stable
After patch changes or major roster updates, accuracy may temporarily drop
Important Limitations
Our predictions are probabilistic estimates, not guarantees. Even with 80% win probability, a team can lose in 20% of cases.
- Unforeseen factors (technical issues, player substitutions)
- Psychological state of teams
- New strategies and unexpected drafts
- Randomness in the game (crits, bashes, rune spawns)
Learn More
Want to dive deeper into technical details?