My Custom Uber Eats Recommendation Engine

Hashem Alsaket
3 min readApr 22, 2022

Note: This is not a critical piece on Uber Eats. I love the service and use it regularly.

In my experience, the Uber Eats app is easy to navigate and does an overall great job at serving its purpose. The only frustration I’ve had since the beginning of using the app is how much big food chains are pushed. For obvious reasons, Uber will almost certainly not build out an option to filter out “big food chains”. To solve for this, I built my own recommendation engine to bypass all the big food chains I have no desire to order from.

When I visit the Uber Eats website, I see a few non big food chain restaurants I might like…

But when I scroll just a bit… big food chain recommendations take over my page…

The Solution

Since I started using Uber Eats, I’ve placed a little over 400 orders. Analyzing those orders reveals quite a strong Middle Eastern/Mediterranean palate shown in the following word cloud. Some relevant terms in the cloud: Mediterranean, kebab, Jerusalem, shawarma, skewer. Yet, not one of the 27 restaurants in the image above is Mediterranean or ethnically relevant.

The analysis I carried out was straightforward:
1. Check how relevant the menu of each restaurant in Chicago is to my orders (I wrote some code to collect hundreds of menus online quickly).
2. Rank the restaurants by relevance.

How the Analysis Works

To make this quick and easy to understand, I’ll be doing just a bit of hand waving which won’t compromise the understanding but if you want to dive deeper into the math, feel free to send me a message.

When I say I want to measure “the relevance” a menu has to my historic orders, I’m referring to measuring how “far away” the average item on the menu is from my average order. So if my “average” order is: grilled lamb and chicken skewers over rice, I should rarely see McDonald’s or Wendy’s as a recommendation as I have never seen a McDonald’s serve lamb.

Through a bit of natural language processing through Google’s quick Word2vec model, I am able to convert these orders to coordinates much like you see on a map (little hand waving). This allows me to measure how far each menu is from my order! So, the shorter the distance to my orders, the more relevant that menu is to my taste! Here’s how the analysis played out:

Clearly, instead of seeing so many big food chains, based on the food I order most often, my recommendations should be overwhelmingly local, ethnic restaurants mixed with burger, pizza and sandwich shops.

This is what I was able to do with just a little data cleaning and light analysis. I imagine if I spend more time on this project, I will see mostly Mediterranean restaurants.

What’s Next

In the future, I would like to integrate capabilities to reach menus in Arabic and other languages as well. In my word cloud earlier in this blog, you’ll notice some squares. Those squares are items in Arabic in my orders. The word cloud was unable to display them.

Me

As always, thank you for reading and I hope you learned something useful! Feel free to check out my GitHub and connect with me on LinkedIn. Thank you for reading!

--

--