BeerAI
data statistics beverage

BeerAI is a recommender system I created that attempts to find new beers that someone may like when provided with another beer that they already like. My primary motivation for this project was that I never know what kind beer to buy at the store. It’s time consuming to try and research beers and make an informed buying decision when in a rush. I wanted a faster way to find good beers, so I made BeerAI.

Making good recommendations is challenging because it’s hard to define what a good recommendation is. Different people view recommendations differently. Some people like novelty and unexpectedness in a good recommendation, while others are more conservative. If someone likes an Oatmeal Stout from Brewery A, should they get a recommendation for another Oatmeal Stout from the same brewery? Perhaps. However, it’s an obvious choice that lacks some creativity. I wanted to make good recommendations that struck a balance between suggestions that are popular and obvious with suggestions that that more unexpected and surprising. The later is potentially more interesting and valuable because these suggestions are harder for a user to discover on their own.

Another important aspect I wanted to capture in BeerAI were geographically scoped recommendations. If I search for a beer that’s exclusively distributed in New England, I don’t want to see a list of recommendations predominated by beers that are limited to Southern California. The recommendations may be good, but they are useless since I can’t obtain the beers in my area. By trying to limit suggestions to beers that are distributed in the geographical scope as the beer that was search for, the system makes more useful recommendations to users.

To make beer recommendations, BeerAI uses several low rank approximation techniques in conjunction with collaborative filtering and nearest neighbor methods. The latent factor models capture hidden features of the data that haven’t been explicitly modeled, thereby providing some of the novelty in the recommendations. By combining all of these approaches, ensemble learning helps to improve the recommendations that the system produces and eliminate bad recommendations resulting from user biases, algorithmic pitfalls, or sparsity issues.

BeerAI’s recommender system is built on top of Amazon’s serverless compute architecture. So called serverless systems require no infrastructure and therefore no servers, no deployments onto servers, and no installed software onto servers. This setup greatly simplifies development, reduces cost, and is easier to scale. I used S3 for this project as a static front end to communicate with various backend processes using Lambda. Lambda responds to events such as whether a user is requesting recommendations or providing feedback on a specific recommendation they have received. In response to feedback, Lambda dispatches new data to the system to continually improve BeerAI’s recommendations as it sees more data.

Check out BeerAI here.