Selected GitHub projects — Kaggle Playground Series entries, coursework from Politecnico di Milano and KTH, two ACM RecSys Challenge entries, a hackathon, and this site itself. Full list on GitHub.

2026 Solo

Kaggle Playground S6E7 — Predicting Student Health Risk

Kaggle Playground Series S6E7 (in progress)

Three-class health-risk classification over 690k rows with missing values in every feature column and an 86/8/6 class split, scored on balanced accuracy. A decision-corrected LightGBM/XGBoost/CatBoost blend sits at 0.9497 on the public board; adversarial-validation-weighted OOF is used to veto candidates — including an MLP — whose apparent gains live entirely outside the test-like region.

PythonLightGBMXGBoostCatBoostPolars

2026 Solo

alexdruso.github.io — personal site and interactive study notes

Independent project

This site. A Jekyll 4 static site with a deliberately dependency-free front end: eleven interactive study notes whose SVG and canvas visualisations are hand-written vanilla JS and redraw on theme toggle, a Snake game with an in-browser tabular Q-learning agent, a command palette and client-side search, and a GitHub Actions pipeline that compiles the CV from LaTeX with xelatex before deploying to Pages.

JekyllJavaScriptSCSSLaTeXGitHub Actions

2026 Solo

Implicit neural representations — images as functions

Independent project

Self-contained study of coordinate networks that fit an image as f(x, y) → RGB. A plain ReLU MLP recovers only a blurry version — the spectral bias of neural networks — while random Fourier features and SIREN fit it sharply; the continuous representation is then sampled at 2.5× and 4× for arbitrary-scale upscaling, with an honest comparison against bicubic. Companion code to the study note of the same name.

PyTorchNumPyJupyterNeural Fields

2026 Solo

Kaggle Playground S6E6 — Predicting Stellar Class (12th / 2,817)

Kaggle Playground Series S6E6

12th place on the private leaderboard out of 2,817 teams, up from 407th on the public one. A stack of gradient-boosted trees plateaued at 0.9662 CV; what broke it was difference rather than strength — a 240-feature model with fold-safe quantile-bin target encoding, a from-scratch RealMLP trained on a logit-adjusted loss, and a two-stage QSO/STAR cascade — reaching ~0.9705. Final submissions were chosen by cross-validation rather than public rank, and the tempting higher-public candidate turned out to transfer worst.

PythonLightGBMXGBoostCatBoostPyTorchStacking

2026 Solo

Kaggle Playground S6E5 — F1 pit-stop prediction

Kaggle Playground Series S6E5

Predicting whether a Formula 1 driver pits on the next lap across 439k laps, scored on AUC. The dataset hides a labelling anomaly — 2023 has a 0.96% pit rate against ~28% elsewhere — so the final model is a conditional ensemble that fits separate Nelder-Mead blend weights either side of that split over tuned LightGBM, XGBoost, CatBoost and MLP bases, reaching 0.9508 OOF. Supported by adversarial validation, SHAP attribution, and an autoregressive within-stint "overdue" feature.

PythonLightGBMXGBoostCatBoostPyTorchOptuna

2026 Solo

Kaggle Playground S6E4 — Predicting Irrigation Need

Kaggle Playground Series S6E4

Three-class irrigation-need classification on synthetic agronomic data. Built around the community-reconstructed multinomial-logit formula behind the generator (credit: Chris Deotte) — threshold indicators on soil moisture, temperature, rainfall, wind and crop growth stage — used both as a standalone predictor and as a feature and residual base for LightGBM, with decision-threshold tuning and error analysis on top.

PythonLightGBMPolarsscikit-learn

2026 Solo

data-science-stuff — ML monorepo and Kaggle toolkit

Independent project

The umbrella repository behind the Kaggle entries above. Its installable `data_science_stuff.kaggle` package holds the machinery every competition shares — the cross-validation fold loop, Nelder-Mead blend weights, fold-safe target encoding, stacking with Caruana selection, threshold and cost-matrix decision rules, and a LightGBM CUDA probe — so competition scripts import it rather than copy it. Gated in CI by ruff, mypy --strict, bandit and 80% coverage across Python 3.9–3.11.

PythonPolarsPyTorchuvCI

2025 Solo

Kaggle Playground Series — 2025 season

Kaggle Playground Series S5E1, S5E5 and S5E6

The first three Playground entries, where the workflow that later hardened into the shared toolkit took shape: per-series time-series forecasting of sticker sales (S5E1), calorie-expenditure regression via automated model comparison over Polars preprocessing (S5E5), and fertilizer recommendation scored on MAP@3 with logistic, XGBoost and PyCaret baselines (S5E6).

PythonPolarsPyCaretXGBoost

2023 Team (2)

ID2222 — Data Mining lab assignments

ID2222 Data Mining @ KTH Royal Institute of Technology

Five labs covering core data-mining algorithms: shingling + min-hash + LSH for near-duplicate detection, A-Priori association rules, the Triest streaming triangle counter, spectral clustering, and the JaBeJa graph partitioner.

JavaJupyterAlgorithms

2022 Team (3)

RecSys Challenge 2022 — 11th place

ACM RecSys Challenge 2022 @ Politecnico di Milano

11th-place solution to the ACM RecSys Challenge 2022. Three-stage pipeline: collaborative / content / graph recommenders, neural sequence models (Transformer, BiLSTM, GRU), and a 10-fold LGBM ranker on top — reached ~0.1965 MRR@100 on test.

PythonTensorFlowLightGBMRecommender Systems

2022 Team (2)

II2202 — Quantum Ridge Regression on D-Wave

II2202 Research Methodology @ KTH Royal Institute of Technology

Empirical study of training Ridge regression on a D-Wave hybrid quantum annealer vs. classical Cholesky decomposition. Found that quantum-trained models do not match classical reliability across the datasets tested.

PythonD-WaveQuantum ML

2022 Hackathon team

HackaTUMeme — gamified movie recommender

HackaTUM @ TU München

Conversational movie recommender that explores MovieLens as a graph rather than as a static carousel: temporarily expands the user profile during a session and surfaces films through trivia and social context.

PythonDjangoLenskitTypeScript

2021 Team (8)

RecSys Challenge 2021 — Trial&Error team

ACM RecSys Challenge 2021 @ Politecnico di Milano

Tweet-engagement prediction pipeline for the ACM RecSys Challenge 2021. LightGBM / XGBoost / CatBoost gradient boosting on transformer-derived features, distributed with Dask on AWS GPU/CPU instances.

PythonLightGBMXGBoostTransformersAWS

2021 Solo

Quantum linear regression on Orquestra

Independent project

Orquestra component that trains an OLS linear regression model via simulated / quantum annealing — a stepping stone toward the later D-Wave Ridge regression study.

PythonOrquestraQuantum ML

2021 Solo

DB2 — JEE database application

Databases 2 @ Politecnico di Milano

Enterprise-Java web application built on JPA, JEE, and Thymeleaf — full DDL schema, persistence layer, and templated UI for a Databases 2 course assignment.

JavaJEEJPAThymeleaf

2021 Team (3)

CLup — RASD & Design Document

Software Engineering 2 @ Politecnico di Milano

Requirements & Specification (RASD v1.2) and Design Document (DD v1.0) for the CLup queue-management application. Models written in Alloy and MagicDraw, mockups in Moqups.

LaTeXAlloyRequirements Engineering

2020 Team (3)

Santorini — distributed multiplayer board game

Software Engineering @ Politecnico di Milano

Full implementation of the Santorini board game in Java SE 14: socket networking, multiple concurrent matches, CLI + GUI clients, five advanced god powers, and a CircleCI pipeline with ~95% server-side test coverage.

JavaMavenSocketsCircleCI

2020 Solo

RecSys Challenge 2020 — PoliMi

Recommender Systems course challenge @ Politecnico di Milano

5th / 8th (public / private) out of 66 in the in-class Kaggle challenge. Generalised N-score hybrid over MF-IALS, RP3-Beta and SLIM-ElasticNet, with a GPU-accelerated MF that cut training from ~10 min to 30 s.

PythonCythonRecommender SystemsGPU

2020 Team (2)

Working-zones address decoder (VHDL)

Reti Logiche @ Politecnico di Milano

VHDL hardware module that decodes 8-bit memory addresses using the working-zones locality scheme to reduce switching activity. Verified with Vivado testbenches; graded 30/30 cum laude.

VHDLVivadoDigital Design

2019 Solo

API — graph-relationship engine in C

Algoritmi e Principi dell'Informatica @ Politecnico di Milano

Graph-mutation program (addent / addrel / delent / delrel / report) written in C and tuned for an automated grader on both runtime and memory budgets. Final score 30/30 cum laude.

CAlgorithmsPerformance