Client under NDA · Grocery retail
A top-15 global grocer’s store that knows what each shopper came for
One of the world's 15 largest grocers, with 100,000+ products in its catalog. I built its recommendation system from scratch: personal picks, intent detection and a pipeline that turns a recipe into a full cart.


- Client
- Under NDA
- Industry
- Grocery retail
- Services
- Recommendations, ML, Search
SKUs behind each shopper's shelf
grocer in the world
ML systems: personal picks, intent, recipe to cart
a shelf ranked for each shopper, not for the average
The challenge
With 100,000+ SKUs, no shopper browses the whole catalog, and one shelf of bestsellers fits nobody. The same person shops differently for a weekly restock and a dinner for four. And a recipe lists ingredients, not products: every line still has to be found, sized and added by hand.
My approach
I treated it as three problems with one shared picture of the shopper. Retrieval narrows 100K+ SKUs to the few that fit this person. An intent model reads what this visit is for and reshapes the picks. A recipe pipeline maps each ingredient to a real catalog product, so inspiration ends in a cart, not a shopping list.
Nobody wants 100,000 products. They want dinner, and the store should know which one.
What I did
01
Personal picks
Retrieval models learn from each shopper's baskets and browsing, then pull the best fits out of 100K+ SKUs. Two shoppers open the same store and see different shelves.
- Shopper and product embeddings
- Candidate retrieval across 100K+ SKUs
- Ranking tuned to past baskets
- Cold-start picks for new shoppers

02
Shopper intent
A classification model reads the signals of each visit and tells a weekly restock from a dinner for four. Suggestions, search and the shelf shift to match.
- Intent model on session signals
- Suggestions reshaped by intent
- Search tuned to the purpose of the visit

03
Recipe to cart
A pipeline reads a recipe, splits it into ingredients and amounts, and matches each one to a real product in the catalog. The shopper gets a full basket instead of a shopping list.
- Ingredients and amounts parsed
- Every ingredient matched to a SKU
- Amounts fitted to real pack sizes
- The whole recipe added in one tap


How it works
- 1
Shopper signals
Baskets, searches and clicks
- 2
Intent model
Reads the purpose of the visit
- 3
Retrieval
Finds candidates in 100K+ SKUs
- 4
Ranking
Sorts them per shopper and visit
- 5
Recipe parser
Reads ingredients and amounts
- 6
SKU matching
Picks a product and pack size
- 7
Ready cart
The whole recipe in one tap
Inside the product
Recipe to Cart



Results
- 01Built from scratch and shipped to production for a top-15 global grocer
- 02A personal shelf for every shopper, from 100K+ SKUs
- 03Suggestions that follow why the shopper came, not only past baskets
- 04A recipe becomes a full cart: every ingredient matched to a real product
Built with
- Retrieval
- Two-tower model · ANN / HNSW search
- Ranking
- Collaborative and content-based filtering
- ML
- Python · PyTorch · scikit-learn · XGBoost
Next case · Under NDA
Raw video in, published articles out
Let's talk
Have a system that needs to work in production?
Tell me what you want to automate or personalize, and what data you already have. I'll reply with how I would approach it.