Personalized Movie Recommender System
Assignment 11, Planned Approach
1 Data Overview
The dataset consists of ratings provided by 16 critics across 6 movies:
- Captain America
- Deadpool
- Frozen
- Jungle Book
- Pitch Perfect 2
- Star Wars: The Force Awakens
Ratings range from 1 to 5, with many entries missing, as is typical of real-world recommender system datasets where users have not seen every item.
2 Planned Approach
2.1 Algorithm Selection
I plan to implement User-to-User Collaborative Filtering. This algorithm identifies users who have rated movies similarly to a target user (I’ll refer to them as “neighbors”), and uses their ratings to predict what the target user would rate an unseen movie.
This is a natural progression from the Global Baseline Estimate because:
- It uses the same survey data without requiring additional inputs
- It is interpretable and conceptually straightforward
- It directly addresses the limitation of the GBE by incorporating individual user similarity
2.2 Step-by-Step Plan
2.2.1 Step 1 — Load and Prepare the Data
First things first we will load the MovieRatings.xlsx file and convert it into a numeric ratings matrix, handling missing values (NA) appropriately.
2.2.2 Step 2 — Compute User Similarity
The first real task is figuring out how similar each pair of users is to each other. I’ll do this using Pearson correlation, which basically asks: when one person rates a movie higher than usual, does the other person do the same? It’s less about whether two people give the same scores and more about whether their taste moves in the same direction.
2.2.3 Step 3: Identify Nearest Neighbors
Once I have similarity scores, I will rank everyone by how similar they are to the target user and pick the top k neighbors which are basically the users who are most alike, as long as they have actually rated the movie I am trying to predict.
2.2.4 Step 4: Generate Predictions
From there, I will take a weighted average of those neighbors’ ratings. Users who are more similar to the target get more say in the final prediction than users who are only loosely similar.
2.2.5 Step 5: Evaluate Performance
To see how well the model actually works, I will use leave-one-out cross-validation. The idea is pretty simple:
- Hide a rating we already know
- Predict it using the model
- See how far off we were
- Repeat for every known rating and average the errors using RMSE
RMSE just measures how far off our predictions are on average. Lower is better.
2.2.6 Step 6: Compare to Baseline
Finally, I will compare the personalized model’s RMSE to the one from the Global Baseline Estimate to see if going personalized actually made things better.
3 Anticipated Challenges
3.1 Sparse Data
The dataset is pretty small, just 16 users and 6 movies, and a lot of ratings are missing. That means many pairs of users will not have rated many of the same movies, which makes their similarity scores pretty shaky.
Plan: I will only calculate similarity between users who have at least 2 movies in common. If there are not enough valid neighbors to make a prediction, I will fall back on the Global Baseline Estimate instead.
3.2 Small Sample Size
Even if two users look similar on paper, with only 16 people total that could just be a coincidence rather than a real pattern.
Plan: I will flag this as a known limitation in the write-up and make sure not to over-interpret the results.
3.3 Undefined Similarity
If two users have not rated any of the same movies, there is literally nothing to compare and the similarity score is undefined.
Plan: I will treat these as NA and leave them out of the neighbor selection entirely.
3.4 Evaluation Difficulty
Leave-one-out cross-validation gets a little wobbly on tiny datasets like this. Pulling out even one rating can noticeably change what the model has to work with.
Plan: I will keep this in mind when reporting RMSE and focus more on how it compares to the baseline rather than treating the number itself as gospel.
3.5 Cold Start Problem
A few users like Burton and Nathan have barely rated anything, just 2 movies each, which makes it really hard to find meaningful neighbors for them.
Plan: For anyone with fewer than 2 ratings, I will skip the collaborative filtering entirely and just use the Global Baseline Estimate for their predictions.