ADR 0001
Hybrid architecture. Gradient boosting for scoring, a distilled small LLM for explanation — not one large model doing both.
ADR 0002
Engagement-ratio label. Playtime normalized against the user's own genre-cohort median, so the target reflects enjoyment rather than genre length.
ADR 0005
One shared, personalized model. Pooled across users, conditioned on per-user genre-affinity features computed leave-one-out at training time.
ADR 0003 / 0008
Baseline before boosting. Started with a Ridge baseline; moved to gradient boosting only when more data justified it, and re-tuned capacity as the pool grew.
ADR 0013
Social-graph expansion + quality decider. The regression, the diagnosis, and the recovery are all in the record, not just the win.
ADR 0014
Next: collaborative filtering. Scoped, not built — game-level signal to close the cold-start gap, with the open questions written down first.
ADR 0015
This deployment. The model can't run serverless, so this site is a thin proxy: Vercel → Cloudflare Tunnel → a home GPU box, with a passphrase gate and an async job queue.
ADR 0016
Bad reviews could rank above good ones — found and fixed. A cold-start account with zero Sports history got 4 sports-sim titles in its top 10, one with 31% positive reviews outranking a 97%-positive RPG. Permutation importance showed review sentiment barely mattered to the model while review volume did; a monotonic constraint (better reviews can never lower a score) fixed it and nudged cold-start accuracy up.
ADR 0017
A wallpaper tool was in the recommendations. Wallpaper Engine — a desktop live-wallpaper app, not a game — showed up in a top 10. Steam's own type field calls it "game" too; only its full genre list ("Utilities") gives it away. Candidates are now checked against that list and excluded if they're not really games, backfilled so the pool doesn't shrink.