An Insight into Gousto’s Data Kitchen

When I started my job at Gousto, I honestly struggled to get my head around how data-driven the company is, with every single team leveraging data in some way. Since joining, we (the analytics team) have undertaken some seriously cool projects across the entire business – a few examples being:

  • Building a predictive model to calculate the likelihood of a customer buying their next Gousto recipe box
  • Analysing customers’ online behaviour to make the website user experience seamless and as easy to use as possible
  • Working closely with Gousto data scientists to optimise the performance of our automated ingredient picking operation

With this in mind, it’s easy for our colleagues to sometimes forget that we don’t have a magical crystal ball to answer their questions. Instead of supernatural powers, we prefer a mixture of SQL and Python and tools like Periscope to solve Gousto’s challenges.

The area of analytics I want to focus on in this blog post is really at the heart of the business and is the main reason I (and probably most of my colleagues) joined Gousto – FOOD. Given the level of investment into data science and analytics elsewhere in the business, it should come as no surprise to learn that we crunch some serious numbers to understand what it is that tickles our customers’ taste buds and keeps them coming back for more. In particular, I will explain how we use data to inform the recipe development process here at Gousto. I’ll then showcase some of our tastiest dishes, before finally revealing some fun facts and interesting stats about our recipe collection.

Keep Reading

Hash-Caching query results in Python

Developing data science products will in most cases require extensive testing and tuning models using historic data. At Gousto this is the case for a number of optimisation and machine learning algorithms powering our operations and marketing efforts. In turn, the majority of these cases will involve large volume data queried from a database. In order to maintain agility in developing your data-driven product the last thing you want is to wait for queries to complete while testing iterations to your code.

To prevent re-running large queries we can construct a simple Python method to cross-reference a hashed SQL query against stored query results saved under hash-filenames. Keep reading to find out how!

Keep Reading

Decyphering recipes

Last month we got the chance to present some of the work we have been doing at a neo4j meetup. In the lightning talk, I explained how neo4j has been helping us with our automatic menu planning process, a tool we use to predict similarity between different recipes. You can see the slides at the bottom!

Our weekly menus are a vital part of our business and we need to make sure we are offering customers balanced menus which give them the choice to pick recipes they really want. Therefore, a lot of thought goes into planning these menus, which need to fulfil several operational constraints and offer a range of ingredients and cuisines. With 22 recipes currently on the menu, the planning was a time consuming task and the process was also not as data-driven as it could be!

Keep Reading

A day in the life of a data scientist

There is no general consensus as to what a data scientist is or how to become one. Is she a statistician, an operations researcher or a broker between data analysts and developers? Perhaps identifying a data scientist’s work by her common tasks is not the best approach. Instead, why not run through a day on the data science team here at Gousto? This post is about a recent trip the team made to the company warehouse in Spalding.

Keep Reading

Gousto use (and love) Snowplow - slides from Snowplow London Meetup

I was presenting our journey of leveraging Snowplow at the 4th Snowplow London Meetup yesterday. I wrote about Snowplow before for those who don’t know what it is.

I was talking about our data infrastructure and use cases of machine learning that have helped us to be the leader in the recipe kit market in terms of the proposition we offer to our customers. Our customers can choose from 22 recipes and get their boxes delivered in 2-3 days from a choose 6 delivery days a week (we don’t deliver on Fridays at the moment).

Keep Reading

Beware arrow function overuse in React

Beware arrow function overuse in React components

There are lots of things to love about ES6 arrow function. The syntax is short and sweet and there’s no binding of this or arguments. Take the extremely simple function double below for example.

1
2
3
const double = function (a) {
return a * 2
}

Now here’s it is written as an arrow function using concise syntax.

1
const double = a => a * 2

You’ll note that the brackets around any single argument are optional, the curly brackets are optional, and the return is implied.

Keep Reading

Unit Testing with Sinon.js

When writing unit tests for javascript code, there may be a time when you need to stub part of your code in order to isolate and test a particular functionality of your code. This is where Sinon.js is a popular tool to help developers test their code.

Keep Reading

Isomorphic / universal React at Gousto

About half a year ago, we decided to build our new frontend stack using isomorphic/universal JavaScript leveraging React and its rich ecosystem both on client and server side.

Initially, we started out using React to create single page applications (SPA). This worked quite well, we had a clean and scalable JavaScript codebase removing the need for jQuery and other libraries.

Keep Reading