Skip to content
Reverie: A Recommender That Reads Watch History

Reverie: A Recommender That Reads Watch History

Reverie reads a viewer's watch history and predicts the next title they will enjoy. A sequential GRU trained on MovieLens pairs with a neural collaborative-filtering model trained on about 9.9 million Letterboxd ratings, and both ship inside a web app with accounts, a swipe-based history builder, and a Blend that intersects two people's recommendations.

TensorFlowGRUFastAPIReactRecommender Systems

0.257

hit rate at 10, validation

0.242

hit rate at 10, test, three seeds

1.372

rating error (RMSE)

Problem

Understanding the challenge and user needs

Popularity lists and genre filters ignore order. What a person watched last week says more about tonight than what they watched last year, and a five-person team set out to prove that a model reading the sequence beats models that read only the totals.

The landing screen takes an imported watch history and returns a ranked list.

Approach

Strategy and methods used to address the problem

A GRU learned from 1 million ratings by 6,040 MovieLens users, measured against three baselines on the same split: most-popular, recent-genre popularity, and item-kNN. Twenty-five logged runs tested embeddings, genre features, and regularization, and three seeds fixed the final test number. A FastAPI service and a React front end turned the model into a product, covered by 22 automated tests.

A poster grid builds a history for viewers with nothing to import.
Architecture slide showing sources, data layer, models, and serving (opens in a new tab)
The architecture runs from open datasets through a data layer and two models to a FastAPI service and a React interface.
Validation loss bottoms out while training loss keeps falling; early stopping restores the best weights.
The feature ablation: genre lifts the hit rate, while the rating signal on its own lowers it.

Final Solution

The final design and outcome

The GRU reached a hit rate at 10 of 0.257 on validation against 0.076 for item-kNN and 0.042 for most-popular, and 0.242 plus or minus 0.002 on the held-out test set across three seeds. The collaborative model cut rating error to an RMSE of 1.372 against 1.619 for the movie-mean baseline and beat that baseline for 94 percent of users.

Reverie profile screen with a radar chart of genre taste and a row of top picks (opens in a new tab)
The profile screen summarizes a viewer's taste as a radar chart across genres and ranks top picks beneath it.
Recommendation rows group picks by the reason behind them, such as a film already watched or a preferred genre.
The sequential model's hit rate at 10 stands well clear of both baselines; the frozen test figure appears at right.
The collaborative model posts a lower rating error than the movie, user, and global means.

Next-title ranking on validation

ModelHit rate at 10MRR
Reverie (GRU)0.2570.120
Item-kNN0.0760.035
Recent-genre popularity0.0450.023
Most popular0.0420.022

Held-out test result across three seeds: 0.242 plus or minus 0.002.

Rating prediction on the test set

ModelRMSE
Neural collaborative filtering1.372
Movie mean1.619
User mean1.963
Global mean2.072

Lower is better. Ratings run from 1 to 10.

Impact & Validation

Results, learnings, and outcomes

Reverie shows the full path from a research question to a product: a model with honest baselines, an experiment log, a tested API, and an interface a person can use to find something to watch with a friend.

The Blend intersects two viewers' recommendations and lists what they already have in common.

Presentation

The deck, slide by slide

Title slide: REVERIE. What should I watch next? Deep Learning, IE University, Functional MVP. Amaly Attia, Em Echeverria, Lea Sarouphim Hochar, Stephan Pentchev, Cécile Tambey. A film strip icon sits above the title.

Slide 1 of 25