Rebuilding Picnic’s Recipe Recommender
Over the past year, we rebuilt our recipe recommender at Picnic. The project was prompted by a new recipe application UI, which changed our recommendation problem from retrieval to ranking. This forced us to rethink our recommendation pipeline by modularising it to allow personalisation in any context across our app, and rethinking our model choice from a fast, retrieval-optimised two-tower model to an expressive Deep & Cross Network (DCN) ranking model. Running these experiments at scale required rethinking the data pipeline, too. We rebuilt our training data pipeline using Polars and Apache Arrow to process tens of millions of interactions efficiently, construct purchase histories with lower memory overhead, and move features into PyTorch with minimal copying. Finally, we built a constrained Autoresearch loop in which coding agents proposed configurations, ran training, evaluated results, and recorded the next hypothesis, all while data splits, metrics, production constraints, and reproducibility controls remained fixed.
Picnic is a fast-growing online supermarket operating at large scale across Europe, where machine learning is deeply embedded in the customer experience and operational systems. Recipe recommendations are a particularly relevant problem for us: they help customers discover what to cook, connect inspiration directly to their weekly grocery shop, and create a natural setting for personalisation at scale.
A seemingly simple update of the product UI fundamentally changed the underlying recommendation problem. Instead of retrieving a small set of relevant recipes from a large catalogue, we now needed to rank a constrained set of candidates. That forced us to rethink not only the model, but the experimentation stack around it.
In this talk, we will discuss three main topics:
- How a change in our application UI reframed our recommendation problem from a retrieval problem to a ranking problem, and how that informed our modelling choices.
- How we applied Sutton’s Bitter Lesson and Representation Learning to create a scalable feature and modelling pipeline with large expressive power across all customer cohorts, including those new to buying recipes.
- How we used Polars and Autoresearch to speed up our offline experimentation iterations and automate hyperparameter tuning.
This talk is aimed at ML engineers, Data Scientists, RecSys and IR practitioners, and Product Owners and Managers working within any of these domains. It combines technical details with real-world modelling choices, leading to tangible business impact.
Attendees will learn how to recognise when a product change has altered the underlying ML problem, how model expressiveness and data-pipeline design interact, and how to automate experimentation without giving up scientific rigour.
Thijs Sluijter is a machine learning engineer in the Picnic Consumer ML team. He has a background in Artificial Intelligence at the University of Amsterdam with a focus on Information Retrieval and Recommender Systems. At Picnic his focus is on Recipe Recommendations and Recipe Search; at home his focus is on his two cats Apollo and Orpheus and ultra distance bike racing.
Majid Hajiheidari is a machine learning engineer at Picnic, where he builds production recommendation systems that help customers discover products and recipes. His interests span recommender systems, efficient data and training pipelines, and the engineering needed to turn machine-learning experiments into reliable production systems.
Outside of work, Majid enjoys exploring programming languages such as Rust and C++, building electronics projects, and experimenting with mathematical and machine learning ideas. He writes about these projects at majid.blog (https://majid.blog/).