← All projects

Recommender systems · INFO345 · November 2025

03 / Recommendation

Finding your next beer

A recommender built around a simple question: how do you help someone discover something they might like when you know very little about their taste?

Search for beers you know, rate them, and explore five suggestions. This experimental demo adapts the model for new visitors; the research results below describe the original offline experiments.

The problem

Lots of reviews. Very uneven information.

The BeerAdvocate dataset contains more than 1.5 million reviews, but that doesn’t mean every user or beer has a useful amount of data. The median user has just three reviews. A small number of very active reviewers and popular items account for much of the activity.

That makes personalisation difficult. Recommending the same popular choices to everyone is easy. Learning enough about someone to suggest something that fits their taste is a different problem.

This project compares collaborative filtering methods—models that learn from patterns in user ratings—and explores a simple hybrid that combines personalised predictions with popularity-based ones.

The approach

Use the history you have

The experiments compared SVD, KNNBaseline and Co-Clustering against random and popularity-based baselines. SVD learns underlying preference patterns from ratings; KNNBaseline uses similarities between users or items; Co-Clustering groups users and items to make predictions.

SVD offered the strongest overall balance of rating accuracy and runtime in the evaluation. But at the chosen recommendation threshold, it provided at least one recommendation to only 84% of evaluated users.

The hybrid uses a straightforward rule: popularity-based predictions for users with 11–45 reviews, and SVD for users with more than 45. It tests whether a simple fallback can reach more people without giving up too much accuracy.

Your rating history
11–45 reviews Popular picks Community favourites
More than 45 reviews Personalised picks Patterns learned with SVD
Discover your next beer
Data preparation and evaluation setup
  • Items were represented as brewery-and-style combinations to reduce sparsity. A recommendation therefore refers to that combination, rather than necessarily one individual beer.
  • Only users with at least 11 reviews were included in the modelling dataset.
  • A 75% training / 25% test split kept test users and items represented in training.
  • A rating of 4.0 or above was treated as positive. Hyperparameters were tuned using rating prediction error.
  • Evaluation covered rating error, precision, recall, top-five recommendations, coverage, list diversity and runtime.
  • Implemented in Python using pandas, NumPy, Surprise, scikit-learn and Matplotlib. All evaluation was offline.

Results

Reaching more users has a trade-off

Reported offline results from the SVD–hybrid comparison.
Measure SVD Hybrid
User coverage ↑ 84.0% 97.1%
Rating error (RMSE) ↓ 0.592 0.647
Precision@5 ↑ 72.2% 70.5%
Intra-list similarity ↓ 0.182 0.165

User coverage means the share of evaluated users receiving at least one recommendation scored at or above 4.0. The hybrid increased this by 13.1 percentage points. It did so with higher rating error and a 1.7 percentage-point reduction in Precision@5, the reported precision of the top-five recommendations.

The hybrid also had lower intra-list similarity, suggesting less repetitive lists under the project’s diversity measure. That is useful evidence, but it doesn’t establish that people would enjoy those recommendations more.

What I took from it

A model’s score is only part of the answer

The interesting part for me is deciding what counts as a useful recommendation system. Rating accuracy matters, but so does whether someone receives a recommendation at all. Looking at both changed how I interpreted the results.

The hybrid is deliberately simple. There is no learned switching mechanism: just a threshold on review history. That makes it easy to understand, and it gives a concrete starting point for testing something more adaptive.

I would next look at whether additional information, such as beer style and alcohol content, could help users with less history. A user study would also be needed to find out whether the recommendations actually encourage people to try something new.

What this experiment doesn’t answer

This is an offline evaluation, not a live recommendation service. The tests used known users and items, and excluded users with fewer than 11 reviews. The hybrid therefore doesn’t demonstrate a solution for someone arriving with no rating history.

The dataset reflects BeerAdvocate reviewers and their choices, rather than everyone who drinks beer. The 45-review switching threshold is also a design choice, not an established optimum. These results support further testing of the hybrid, rather than a claim that it is ready for production.

Dataset and tools