How To Cook A True Bolognese Sauce and Understand Machine Learning at the Same Time

A Bolognese sauce is a recipe of seemingly endless contradictions. It’s a dish steeped in passionate but conflicted suggestions, ingredients and regional bias.

Questions abound. How is it made, what specific ingredients should be included or excluded? What wine enhances or takes away from the flavors, how acidic should it be, and how much should the wine be reduced and what are the specific associated proteins?

How fatty should the sauce be and what portion of the fat should be skimmed? What is the balance of vegetables? How chewy should the sauce be, what type of beef, pork etc. How much and what dairy should be incorporated?

And how long should the sauce be cooked and at what temperature? What should you serve the sauce with? (A hint is that serving such a hearty meat sauce with delicate spaghetti is incorrect.)

There are a confounding number of variables, to be sure.

A Mire of Controversy Thicker and Darker Than Any Ragu

People feel very strongly about what is, basically, a meat sauce of no more merit than, say, a shepherd’s pie, or a chilli, to the extent that, close to five years ago, a group of Italian chefs organized a worldwide day of action to promote the “authentic” recipe, as laid down by the Academia Italiana della Cucina back in 1982.

According to Felicity Cloake of the Guardian, “The event was billed as a protest against the “improbable concoctions” served under the name around the globe, with a spokesman decrying the “remarkable variety of ingredients” that defiled his beloved Bolognese — including cream. That’s cream, as used by the well-respected Italian cookery teacher and writer Ursula Ferrigno, and the rather less Italian, but pretty reliable Hugh Fearnley-Whittingstall.”

The fact is that there is no definitive recipe for a Bolognese meat sauce, but to be worthy of the name, it should respect the traditions of the area. There’s nothing wrong with a tomato-based slow cooked and braised beef, replete with with garlic and olive oil, except that it’s not what, traditionally at least, they’d eat in the dairy country of the historical regions of Emilia and Romagna, the administrative Region of Northern Italy, and its capital Bologna. Says Ms. Cloake:

“Then there is the classic Italian cookery bible, The Silver Spoon, which gives a ragu alla bolognese in its most basic form: minced steak, onion, celery, carrot and tomato purée, cooked for an hour and a half with a little water to keep it moist. The end result is tasty enough, but doesn’t deliver the richness of flavour I’d expect from a real Italian meat sauce. The recipe hints it can be adapted for use with “mixed meats” In fact reputable sources from around Bologna features minced beef, or ground beef chuck, or chicken livers and chopped bacon or uncooked ham, in addition to the usual vegetables, plus white wine, stock, tomato purée and nutmeg.”

Purportedly, the liver gives the sauce more depth, although some consider it to be slightly overpowering in this quantity, though some like the slight salty smokiness that the bacon imparts, as opposed to say cured ham, bacon pancetta or the balance between pork and beef.

There is no such thing as an “authentic” ragu alla bolognese, but there is a consistency that can be applied and this is largely based on the specific source, quality, freshness, region and combination of the ingredients. In general, to stay true to the spirit of the dish, white wine, meat and milk, rather than tomatoes or Chianti, should be the key flavours. Cook long and slow, and serve with anything but spaghetti.

Traditional Programming of A Recipe

Anyway, back to the premise of this piece. Certainly a traditional recipe to make the perfect Bolognese can help. In this case a recipe is similar to a traditional computer program that can help you choose the proper number, quantity and relative quality of the ingredients. You would write rules of the following kind:

if (certain ingredients are included) the sauce can be considered a Bolognese “type” sauce.

if (certain directions are adhered to) the sauce will taste passable if not good

and so on.

You would use the rules that you created in your computer program to make a passable Bolognese sauce. You could even share the recipe with others and assuming they follow the ingredients and steps they might approximate the same result of decency.

But and here is a rather large BUT, the computer program would not be able to consider the variability in the specific year of the wine, size and quality of the vegetables, quality of the milk or dairy, etc. This is to say nothing of the various new recipe insights that come out of the legitimate region of Emilia and Romagna or the other great cooks of Europe. This would immediately require you to “ingest” or read every Google alert on the subject let alone the requirement to constantly have to change the recipe or aforementioned computer program.

In fact you would probably need at least three full-time people to scour blogs, magazines, books and the very subject. So every time you make a new observation, you would have to manually modify the computer program. You have to understand the intricate details of all the factors affecting the quality of the Bolognese and if the problem gets complicated enough, it can get really difficult to make accurate rules by hand that cover all of the possible variables.

Here’s the Beef on Machine Learning

Machine Learning algorithms are awesome! They completely upend normal algorithms that are based on static computer programs. With ML, your computer programs become smarter as they are refined by a “curator” so that over time they automatically learn from a “corpus” (latin for the word body or collection of written texts) of data you “ingest”. Curator comes from 14th century latin from the noun curatus, which refers to someone who is an “overseer, manager, guardian.” And that is exactly how a corpus is refined, through the management and oversight of the information that enters the corpus.

In this case you begin the ML process for the perfect Bolognese by feeding the information regarding all the information about the sauce in a system (this is called training data). You make a table of all the characteristics of the sauce, including ingredients, cooking steps, etc, along with the feedback on the final sauce (output variables). You feed this data to the machine learning algorithm (classification/regression), and it learns a model of the correlation between an average sauce’s many and various characteristics, and its resultant quality.

Then you can continue to refine the data based on results and variables (test data), and feed it to the ML algorithm. It will use the model computed earlier to predict and refine the quality of the sauce. Better yet it may refine the rules you originally created for the sauce over time based on new information that is ingested (reinforcement learning), so that it will improve its accuracy as it reads more training data, and modifies itself when it makes a wrong prediction. It will even determine new rules based on variables that you may not have initially considered. But the best part is, you can use the same algorithm to train different models, one each for predicting the quality of other recipes with complicated ingredients.

And as we say in Italian boom di ba, you have Machine Learning. Enjoy and share. As an added bonus, I thought to share with you a fantastic Bolognese recipe. Mangiare!


Perfect Bolognese (Serves 4)

Courtesy of Felicity Cloake

  • Generous knob of butter
  • 100g smoked streaky bacon, finely diced
  • 1 onion, finely diced
  • 1 carrot, finely diced
  • 2 sticks celery, finely diced
  • 250g coarsely minced beef, at room temperature
  • 40g chicken liver, finely chopped
  • 150ml whole milk
  • Nutmeg, to grate
  • 150ml dry white wine
  • 400ml tin plum tomatoes

1. Melt the butter in a large flameproof casserole set over a gentle heat, and then add the bacon. Once the bacon fat has started to melt, add the onion, and cook gently until softened, then tip in the carrot, and cook for 5 minutes before adding the celery and cooking for a further 2 minutes.

2. Crumble the beef into the pan and brown, stirring occasionally to break up any lumps. Season, then stir in the liver, and let it cook for another 5 minutes.

3. Pre-heat the oven to 125C. Pour in the milk, and grate a little nutmeg over the top. Simmer gently until almost all the milk has evaporated, which should take about half an hour.

4. Pour in the wine and the tomatoes and stir well. Put the casserole into the oven, with the lid slightly ajar, and cook for at least 3 hours (4 is even better) until the meat is very tender. Check on it occasionally and top up with a little water if it seems too dry, although this probably won’t be necessary. Serve with pasta or gnocchi, and grated Parmesan or pecorino cheese.