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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
DD2437 — Artificial Neural Networks and Deep Architectures
DD2437 @ KTH Royal Institute of Technology
Four lab assignments implementing classical and deep neural architectures from scratch: perceptron / MLP, RBF networks and SOMs, Hopfield networks, and Restricted Boltzmann Machines / Deep Belief Networks.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
