Valorant Veto Assistant

A machine learning project that helps esports team managers during the map veto phase of Valorant tournaments. Given two teams and a map, it estimates the probability that one team beats the other on that map — turning a time-pressured, memory-based decision into a data-driven one.

Project snapshot

Role
Solo — data, modelling, analysis
Focus
Web scraping, ML modelling, evaluation
Status
Complete

Goals and approach

Map veto happens under time pressure with incomplete information. The aim was to see whether a model trained on historical professional results could give managers a useful win-probability estimate for a given team, opponent, and map. I built the full pipeline: scraping match data, engineering features, and comparing several modelling approaches against a simple baseline.

Data collection

Scraped roughly 7,800 professional matches (~18,400 map results) from VLR.gg across two years and all regions, with local page caching to avoid repeated requests to the site.

Modelling

Built a frequency-based baseline, a logistic regression trained with gradient descent implemented from scratch, and a PyTorch multilayer perceptron — then ran feature ablation studies to compare them.

Evaluation

Used a time-based train/test split so the model is always predicting future matches, and traced and fixed a data-leakage bug involving attack/defence metrics.

Tech stack

Python PyTorch NumPy Machine learning Web scraping

Outcome

All models converged around 55–57% accuracy regardless of features or architecture. The key finding was that data sparsity — not the choice of model — is the limiting factor, since most team-and-map pairs have fewer than 10 historical games. The project documents what did and didn't work, and gave me hands-on experience with the full ML workflow: data pipeline, feature engineering, model comparison, and honest evaluation.