MSc thesis · University of Zielona Góra · 2026

Thesis in 5 minutes

A model that gives the chance of winning a round in Counter-Strike 2, second by second.

Who wins this round?

For every second of a round, the model returns the probability that the CT side wins. It sees only the game state: who is alive, how much equipment they have, whether the bomb is planted and how much time is left.

The bar only shows what an answer looks like.

01The data

9,196professional maps
187,361rounds
16.8 Mgame states (16,839,707)
~19 GBQ4 2023 to Q1 2026
HLTV recordings (Selenium)→demoparser2→pandas, PyArrow→Parquet

02Nine models

Linear baselineLogistic regressionRidgeRandom forestExtra treesXGBoostLightGBMCatBoostMLP

03Validation

Grouped by match. Rounds from one match look alike. Cross-validation (GroupKFold) keeps each match on one side, so the model is never scored on rounds it has nearly seen.

Walk-forward by quarter. The game and the map pool change over time. The model trains on every earlier quarter and is tested on the next one, as it would be after release.

ROC-AUC of XGBoost (300 trees, fixed settings) on each test quarter. The bars start at 0.5, a coin toss. With little history the model is weak; from 2024 Q3 on it stays at 0.81–0.82. Logistic regression: 0.73–0.805.

On top of that: learning curves, bootstrap tests, feature-group ablations, calibration and SHAP.

04Results

Log loss, LightGBMThe main metric: it punishes overconfidence. About 4.6% below logistic regression (0.5518).0.5267
ROC-AUC, walk-forwardXGBoost from 2024 Q3 on. How well the model tells won rounds from lost ones.0.81–0.82
ECE, production XGBoostCalibration error: how far, on average, the chance the model gives is from how often CT really wins.0.0086
ROC-AUC, CatBoostCross-validation grouped by match. Brier 0.1786.0.806

Accuracy is about 0.71–0.72, but the model is meant to give a probability, not guess the winner, so accuracy is only a side metric.

05What came out

  1. Gradient boosting (LightGBM, XGBoost, CatBoost) gives the best probabilities. Plain logistic regression is close behind but clearly worse on log loss.
  2. The model needs history. After one quarter of data ROC-AUC is 0.650; from three quarters on it holds at 0.81–0.82.
  3. The probabilities can be trusted. With an ECE of 0.0086, the chance the model gives almost matches how often CT really wins in such situations.
  4. How you validate matters. Without grouping by match and testing on later quarters, the score would be inflated.

Predictions are served by FastAPI to a React and TypeScript app, all in Docker Compose.

One game state, model by modelInteractive: add feature groups and watch the answer change.

MSc thesis "Predictive model of match outcomes", Data Engineering, University of Zielona Góra, defended 2026.