Time series forecasting for professional Counter-Strike player performance using deep learning.
This project introduces a rigorous approach to performance forecasting in professional Counter-Strike using time series analysis. Leveraging Rating 1.0 data from HLTV.org, multiple forecasting models are evaluated β including classical statistical methods, machine learning baselines, and deep learning architectures β to predict player performance over horizons of 30, 60, 120, and 150 days.
Key Results:
- All learning-based models significantly outperform the Random Walk baseline across all horizons.
- Deep learning models (GRU, LSTM, Transformer) achieve the strongest overall performance, particularly at short and medium horizons.
- Performance differences between architectures narrow as the forecast horizon increases, indicating a shared modeling ceiling on long-term uncertainty.
- Tree-based methods (Random Forest) perform competitively at short horizons but remain less robust for long-term extrapolation.
- Improvements over Random Walk range from ~50β55% at 30β60 days to ~33β37% at 120β150 days, all at very high statistical confidence.
This repository includes the scraping logic solely for the sake of methodological transparency and reproducibility.
I strongly discourage using this codebase to scrape HLTV.org actively. HLTV employs strict anti-bot measures (Cloudflare) to protect their infrastructure. The scraper included here is designed for low-volume, compliant data gathering, but using it may still result in IP bans or violate HLTV's Terms of Service.
For Researchers:
The goal of this repository is to allow replication of the results presented in my paper. To avoid burdening HLTV's servers or dealing with anti-bot blocking, I am willing to share the dataset privately for academic replication purposes.
Please contact me at yvann.vincent@gmail.com to request access to the dataset used in the paper.
- Install [uv]:
curl -LsSf https://astral.sh/uv/install.sh | sh- Clone the repository:
git clone https://github.com/IUseAMouse/csgo-performance-forecasting.git
cd csgo-performance-forecasting- Create and activate virtual environment:
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate- Install dependencies:
uv pip install -e ".[dev]"python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"csgo-performance-forecasting/
βββ data/
β βββ metadata/
β βββ raw/
β βββ processed/
β βββ models/
βββ src/csgo_forecasting/
β βββ data/
β βββ models/
β βββ training/
β βββ evaluation/
βββ scripts/
make download-data
# or
python scripts/download_data.pymake preprocess
# or
python scripts/preprocess_data.py --input data/raw/player_data_all.json \
--output data/processed/player_data_all_cleaned.jsonmake train-all
# or
python scripts/train_models.py --model lstm --seq-length 90 --out-length 30Available models: lstm, gru, transformer, ridge, random_forest
make evaluate
# or
python scripts/evaluate_models.py --models-dir data/modelsThe dataset includes 832 professional Counter-Strike players meeting the following criteria:
- Minimum 200 maps played at top-tier competition
- Team ranked within the global top 50 during active competition
Statistics:
- Average time series length: 1,742 days (~4.8 years)
- Total rating observations: 1,449,752
- Players span the full competitive spectrum, from elite stars to lower-rated professionals
-
Baseline
- Random Walk
-
Statistical Methods
- AutoARIMA
- ETS
-
Classical ML
- Random Forest Regressor
- Ridge Regression
-
Deep Learning
- LSTM
- GRU
- Transformer (RoPE + RevIN)
Updated model performance across all forecasting horizons. Statistical significance is computed against the Random Walk baseline using paired tests.
| Horizon | Model | RMSE | MAE | MAPE | Improv. vs RW | Win Rate | Cohen's |
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 30 Days | GRU | 0.0096 | 0.0057 | 0.58 | 0.99 | +54.7% | 81.0% | 0.69 | βοΈ | βοΈ | βοΈ |
| LSTM | 0.0095 | 0.0061 | 0.63 | 0.99 | +55.2% | 73.8% | 0.64 | βοΈ | βοΈ | βοΈ | |
| Transformer | 0.0102 | 0.0067 | 0.69 | 0.99 | +51.9% | 76.2% | 0.61 | βοΈ | βοΈ | βοΈ | |
| Random Forest | 0.0103 | 0.0067 | 0.70 | 0.99 | +51.6% | 73.8% | 0.62 | βοΈ | βοΈ | βοΈ | |
| Ridge | 0.0120 | 0.0077 | 0.80 | 0.98 | +43.5% | 76.2% | 0.61 | βοΈ | βοΈ | βοΈ | |
| Random Walk | 0.0212 | 0.0132 | 1.36 | 0.95 | β | β | β | β | β | β | |
| 60 Days | LSTM | 0.0206 | 0.0131 | 1.35 | 0.95 | +54.9% | 77.4% | 0.62 | βοΈ | βοΈ | βοΈ |
| Transformer | 0.0221 | 0.0141 | 1.44 | 0.95 | +51.8% | 71.4% | 0.59 | βοΈ | βοΈ | βοΈ | |
| GRU | 0.0225 | 0.0140 | 1.44 | 0.95 | +50.9% | 75.0% | 0.57 | βοΈ | βοΈ | βοΈ | |
| Random Walk | 0.0458 | 0.0284 | 2.89 | 0.77 | β | β | β | β | β | β | |
| 120 Days | GRU | 0.0444 | 0.0306 | 3.12 | 0.77 | +42.5% | 75.0% | 0.63 | βοΈ | βοΈ | βοΈ |
| Transformer | 0.0511 | 0.0355 | 3.60 | 0.70 | +33.8% | 70.2% | 0.48 | βοΈ | βοΈ | βοΈ | |
| Random Walk | 0.0773 | 0.0543 | 5.56 | 0.31 | β | β | β | β | β | β | |
| 150 Days | GRU | 0.0536 | 0.0367 | 3.74 | 0.66 | +37.2% | 67.9% | 0.63 | βοΈ | βοΈ | βοΈ |
| Transformer | 0.0559 | 0.0392 | 3.97 | 0.63 | +34.5% | 66.7% | 0.59 | βοΈ | βοΈ | βοΈ | |
| Random Walk | 0.0853 | 0.0603 | 6.07 | 0.14 | β | β | β | β | β | β |
Metrics: RMSE, MAE, MAPE (lower is better). All reported improvements are relative to the Random Walk baseline.
make format
make lint
make typecheckmake check-allπ Preprint submitted to HAL/arXiv
Time Series Forecasting for Professional Counter-Strike Player Performance
MIT License β see the LICENSE file.
Yvann VINCENT β yvann.vincent@gmail.com
Project link: https://github.com/IUseAMouse/CSForecast