Assume that there is a 5 $\times$ 6 matrix that records the ratings of six users on five movies.

I have computed the singular value decomposition (SVD) for such a matrix.

Suppose I add another movie so now it becomes 6 $\times$ 6 matrix.

However, I only have a rating of that movie for two people.

How can I estimate the ratings the other users would give to this new movie?


This is a very well-studied problem known as matrix factorization or matrix completion, in which you have some observations of a matrix which is assumed to be low-rank and wish to fill in the remainder.

Two of the standard models are:

There are a lot of extensions to these models to make them more effective in various applications. They're described by any of many introductions to matrix factorization for collaborative filtering. You could try, for example, this introduction [though note that their python implementation is pretty bad], or if you like real books the Recommender Systems Handbook is probably pretty good (though expensive).

If you want to take into account the SVD that you apparently have of your complete 6 x 5 submatrix, you could initialize the optimization process for either of the above at that solution. In practice, of course, that situation is pretty rare.

| cite | improve this answer | |

I would use a simple additive model, in which the rating of movie $i$ by person $j$ is approximated by the sum of two values, $a_i + b_j$. Least-squares estimates of $a_1,...,a_6$ and $b_1,...,b_6$ can be obtained based on all 32 ratings. There are many ways to do this; I identified the solution by imposing the constraint $\sum b_j=0$. Then, if movies 1,...,5 were rated by all 6 people and movie 6 was rated by only persons 1 & 2, inspection of the symbolic expressions for the estimated ratings $a_6 + b_j,\; j=3,4,5,6$, shows that each estimated rating is given by the sum of a common component plus a component that is specific to person $j$. The person-specific component is the average of person $j$'s ratings of movies 1,...5. The common component is the average rating of movie 6 by persons 1 & 2, minus the average ratings of movies 1,...,5 by persons 1 & 2.

| cite | improve this answer | |
  • $\begingroup$ This isn't very effective for movie recommendation, since when user $i$ is asking for a movie to watch, your estimated ratings are all of the form $a_i + b_j$. Since $a_i$ is constant, your recommendations are the same for all users (just ordered by the $b_j$s). $\endgroup$ – Dougal Aug 20 '13 at 3:31
  • 1
    $\begingroup$ The question was how to estimate the ratings the sixth movie would have received from the four people who did not rate it, not how to make recommendations about that movie or how to impute missing data in general. $\endgroup$ – Ray Koopman Aug 20 '13 at 6:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.