Social Poisson Factorization


Web users consume media; we choose which books to download, which news articles to read, and which movies to watch. In the past, we often found media by asking trusted friends for recommendations. In the modern web, however, we rely more on algorithmic preference-based recommendation models to find media we are likely to enjoy. Preference-based recommendation systems have transformed how we consume media; these methods uncover our latent preferences from usage data and form recommendations based on the behavior of others with similar tastes.

But preference-based recommendations focuses us and reinforces our preferences, losing the social aspect of consumption where a trusted friend might point us to an interesting item that does not match our typical preferences. In this work, we aim to bridge the gap between preference- and social-based recommendations. We exploit that our social structure—that is, the friends and colleagues from whom we might enjoy recommendations—is often encoded on the same platform as the one which we use to find media. This opens the door to using the preferences and histories of users we know to inform algorithmic recommendations.

Specifically, we have developed a probabilistic model that incorporates social network information into traditional recommendation models, reintroducing the social aspect to recommendation and improving recommendations.


A Probabilistic Model for Using Social Networks in Personalized Item Recommendation. Recsys, 2015. (slides)

    author = {Chaney, Allison J.B. and Blei, David M. and Eliassi-Rad, Tina},
    title = {A Probabilistic Model for Using Social Networks in Personalized Item Recommendation},
    booktitle = {RecSys},
    year = {2015},
    isbn = {978-1-4503-3692-5},
    pages = {43--50},

For a full list of written materials related to this work, please visit my projects page.


  1. Prepare data. The format used for ratings is one set of user,item,rating per line, tab separated. Network file should also be tab separated, one pair of user,friend per line. Ratings should be split into train, test, and validation sets, named accordingly.
  2. Clone the repo:
    git clone https://github.com/ajbc/spf.git
  3. Navigate to the spf/src directory
  4. Compile by running make
  5. Run the executable (see README for full options), e.g.:
    ./spf --data ~/my-data/ --out my-fit