Andrew Dao
All work
02

Esports match prediction

[One sentence: what it predicts, on what data, and what you were trying to beat.]

RoleSolo · personal project
Timeline[Duration, 2025]
Dataset[N matches · date range]
Stack[Python · scikit-learn · pandas]

The problem

[Two paragraphs. Start with why this is harder than it looks: esports rosters turn over constantly, patches reset the meta, and any given team has a small sample of matches under its current lineup. A model trained across a roster change is learning about a team that no longer exists.]

[Then the blind spot you were attacking. "Predict the favourite" is a strong baseline and most naive models never beat it — say what signal you thought was being left on the table, and whether you were right.]

What I built

Collect[Match history API]
[Player & team stats]
[Roster changes]
Features[Rolling form]
[Per-map win rates]
[Head-to-head]
[Patch / meta window]
Model[Model class]
[Time-aware CV]
[Probability calibration]
Evaluate[Baseline comparison]
[Log loss / Brier]
[Held-out season]

[Walk through the feature engineering, which is where the work actually is. What window you used for rolling form and why. How you handled roster changes, patch boundaries, and teams with too few matches. What you did about class imbalance in a favourite-heavy dataset.]

Two things worth stating explicitly, because they are what a technical reader will look for first:

  • The baseline. [What a no-model prediction scores — always picking the higher-ranked team, or the closing odds if you have them. A model is only interesting relative to this.]
  • Leakage. [How you guaranteed no post-match information reached the features, and how the train/test split respected time.]
# A short excerpt of the feature construction beats a paragraph describing it.

Results

[N][matches in the training set]
[N][log loss, against [N] for the baseline]
[N][the honest headline — calibration, or accuracy over the favourite]

What I'd do differently

[One honest paragraph. For a prediction model the most credible answer is usually about evaluation rather than architecture — a leak you found late, a split that was not time-aware, or a metric that flattered the model.]

Next projectLimit order book in C++