A ranking model that orders each shopper's past products by how likely they are to be bought again, built on the full Instacart dataset. Every feature comes from before the order it predicts, so the ranking is one a live app could actually show.
| Metric | Lambdarank | Buy-It-Again Baseline |
|---|---|---|
| NDCG@10 | 0.549 | 0.501 |
| NDCG@20 | 0.605 | 0.557 |
| Recall@10 | 57.8% | 52.5% |
| Recall@20 | 75.5% | 70.2% |
Measured on 12,231 shoppers held out of training (890 more were excluded for having no candidate product they went on to reorder). The baseline ranks by how often a product was bought before; lambdarank beats it on every metric, most on NDCG@10.
A separate check asked whether 30 days of early activity predicts a shopper's activity over the following year. On the 157 shoppers held out for that check, a small model built on 30-day features does not beat simply using the raw 30-day order count (Spearman 0.703 against 0.714 for the naive count). Reported as measured, not tuned away.
Pick a real holdout shopper and rank their past products against the live model.
Shoppers are real holdout users the model never trained on. Ranking runs against the live model API.
The model, the training pipeline, and the scoring service: github.com/alphan-ml/reorder-radar
The model only ever ranks products the shopper has actually bought before. It is not guessing from the whole catalog, it is ordering what's already in their history.
Every feature is built from orders before the one being predicted. The ranking is one a live app could show before that order happens, not after.
Ranking by frequency alone is a strong baseline. The model beats it on every metric measured, most on the top of the list, where the ranking matters most.