Generating recommendations using matrix multiplications The Mahout In Action (Chapter 6) book contains a recommendation method based on matrix multiplication that uses co-occurrence data (C) in combination with user preferences (U) to generate user recommendations (R).
Here's a small example to illustrate it. Say the co-occurrence matrix for 4 items is 
 C = [5 3 4 4
      2 1 0 3
      2 2 1 6
      1 4 1 5]

and the user preference vector is 
 U = [2 3 0 0]

Here, we know the user's relative level of interest in the first two items and we are trying to gauge which one of the other two items can be used as a recommendation.
To find this, we first fill in 0s for those items and then perform a simple matrix multiplication and compute R = C * U
 R = [19
      7
      10
      14]

With this information, we ignore the first two terms (because we already know the level of the user's interest in them) and conclude that item #4 is a better recommendation compared to item #3.
Question:
Is there a "formal" name for this method or is this just a variant of collaborative filtering? Is there a mathematical basis (and/or intuition) for why such a method should work? 
Compared to other recommendation methods (such as matrix factorization for instance), this approach is very simple because it only requires simple matrix multiplication. I'm wondering if there has been a study to compare such a simple method to the more complex ones.
 A: Considering your request as well as the fact that your question fits the context of recommender systems, I think that you may benefit from reviewing some information on matrix factorization techniques (including NNMF - non-negative matrix factorization) for producing recommendations. I hope that the following resources will be useful for you in this regard as a starting point:


*

*Matrix factorization techniques for recommender systems: http://www2.research.att.com/~volinsky/papers/ieeecomputer.pdf

*Matrix factorization: A simple tutorial and implementation in Python: http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python

*NNMF and recommender systems (simplified R version of the previous item): http://econometricsense.blogspot.com/2012/10/nonnegative-matrix-factorization-and.html
Speaking of tools, specifically focused on Non-Negative Matrix Factorization (NMF) or supporting this technique, the following resources might be of your interest:


*

*One of such tools is Python Matrix Factorization (PyMF) library with home page at https://code.google.com/p/pymf and source code at https://github.com/nils-werner/pymf.

*Another, even more interesting, library, also Python-based, is NIMFA, which implements various NMF algorithms: http://nimfa.biolab.si. Here's a research paper, describing NIMFA: http://jmlr.org/papers/volume13/zitnik12a/zitnik12a.pdf.

*Finally, CMU's GraphLab machine learning library looks very promising, containing, among other components, a collaborative filtering library, which supports NNMF and other algorithms (scalable via MapReduce & multicore): http://select.cs.cmu.edu/code/graphlab/pmf.html.

A: As the book mentions, this is a form of item similarity based recommendation. When we compute the rating estimation for an item i, we take into account the ratings the user has given for items similar to i, where simliarity is defined in terms of co-occurrence. There is some further explanation in the book (section 6.2.4) about the intuition behind this.
As noted in the book, an apparent disadavantage of this method that it only yields a preference order of items, without any meaningful scalar scores. My impression is that on real data even with a moderate number of items, this method runs into data sparsity problems: most of the users will have rated only a few items, and the co-occurrence matrix might be sparse, so there will be too few non-zero elements in the rating estimation vector we compute.
I fully agree, this method is by far simpler than matrix factorization or any other approach in actual use. I think in the book it serves the purpose of what we may call a "toy example".
I find it very well possible that on a set of a few hundred items and lots of ratings this method performs reasonably, just as any other simple heuristics would (although unrelated items might co-occur a lot in such a scenario). More complicated recommender approaches are designed to operate on a much larger scale, as applications with a few hundred items do not necessarily benefit from having a recommender system (users can explore all the interesting items relatively easily). 
Recommending only the n most popular items sort of works, but methods having access to all the items generally outperform these restricted versions (a little bit depending on the domain -- for instance, in news recommendation popularity matters a lot). There has been a lot of research around the comparison of different recommender algorithms, but I'm not aware of any article using this particular one. 
