Recommender systems are a hot topic in mathematical applications to retail and search.  There are various approaches, using mathematical techniques ranging from Matrix factorisation to PCA methods for similarity determination, from Classifiers and Collaborative filters, to Decision trees and K-Nearest-Neighbours. 

As should be expected given the wide variation in application areas, there is no "best" approach that works across all possible problem domains  -- what works pragmatically is to get started, tune your recommender agent to your particular problem domain, and then see how well it performs against either practical performance measures (e.g. improved conversion) or theoretical measures of error on benchmark training data sets (e.g. the Netflix prize)

Some reasonable mathematical understanding is needed to feel comfortable with the algorithms, as most use applied mathematics, modern statistics or machine learning techniques.

However, neither a strong mathematical background nor previous software development expertise is needed to simply try out pre-existing algorithms using "canned packages" and to play around with various data sets.  This is a good way to build up some intuition if you have never seen a recommender algorithm in action.  This intuition will then help as you begin the process of building up the knowledge necessary to understand the technical details.

I am often asked how to get started in this area of applied mathematics.  Below are some general responses with references that should get you started should you be interested.

Question 1:  Where can I get rich data sets from real world situations?

There are free data sets available from a variety of sources.  One good place to start is RecSysWiki [1]

Another is the competition site Kaggle. [2]


Question 2:  What programming language should I use to give these ideas a try?

Use any language you know well!  Python is a useful modern software language that is well worth knowing as it has a large collection of well designed numerical libraries.  R is another popular choice, especially if you're interested in statistical applications and machine learning more generally.

Indeed, many languages will have existing canned packages offering recommender systems.

R has recommenderlab [3], and yhat has written a nice blog article on the subject. [8]

Python has python-recsys [4]

Ruby and Perl also have entries.

So, if you want something pre-canned, you can probably find something in just about any reasonably modern language.  The more important question will be: can you find something that works for you in that language.  And if not, should you "roll your own"...

Question 3:  Should I use a pre-canned algorithm or "roll my own"?

For your learning about algorithms and implementations, roll your own.  There's no better way to understand an algorithm than to attempt to write your own implementation.

For a production grade implementation however, it's probably wiser to work with a reputable package that has a wide installed user base, so that you can be sure that most of the bugs have been worked out, that the maths is sound, and that any updates will be made available to you.


Question 4: Which algorithms should I focus on?  What about X?

There are at least a dozen popular algorithms that you could consider.  I will not cover all of them here.

But I often get asked about Neural Networks in recommender systems.  My personal opinion is that neural networks are more work than they are worth.  They are often tuned very specifically to specific training data, and don't have a general theory behind why they are or are not effective, beyond the fact that neural networks are a form of multi-dimensional piecewise linear approxiation, which means a neural network can in principle be made to work well with anything, by introducing enough neurons.

My recommendation is to steer clear from Neural Networks when you're first starting out.  Matrix factorisations or other direct measures of similarity are much more appealing (in my opinion) both on theoretical grounds and on their practical performance.


Question 5:  Are there some useful papers I can start with to get a good overview of the subject?

Yes.  Here's three that I think would have something useful for someone entering the subject at a variety of levels.  All three great papers are freely available from the internet.  A Google search on "Recommender Systems" will turn up a number of others.

* Matrix Factorisation Techniques for Recommender Systems (2009) [5]

* Mining of Massive Data Sets, Ch.9: Recommender Systems (2010) [6]

* Tutorial: Recommender Systems (Slides) (2013) [7]


Good luck! and feel free to write about your learnings in the comments.


References:

[1] Datasets from RecSysWiki:
http://www.recsyswiki.com/wiki/Category:Dataset

[2] Kaggle
http://www.kaggle.com

[3] RecommenderLab (R)
http://cran.r-project.org/web/packages/recommenderlab/

[4] Python-Recsys:
http://ocelma.net/software/python-recsys/build/html/quickstart.html

[5] Matrix Factorisation Techniques for Recommender Systems;  Yehuda Koren, Robert Bell, and Chris Volinksy; August 2009; IEEE;
http://www2.research.att.com/~volinsky/papers/ieeecomputer.pdf

[6] Mining of Massive Data Sets, Ch.9: Recommender Systems; Jure Leskovec; Anand Rajamaran; Jeffrey Ullman; 2010; URL: http://www.mmds.org/    and   http://infolab.stanford.edu/~ullman/mmds/ch9.pdf

[7] Tutorial: Recommender Systems (Slides); August 2013; International Joint Conference on Artificial Intelligence; Beijing; Dietmar Jannach and Gerhard Friedrich
Source:  ijcai13.org/files/tutorial_slides/td3.pdf

[8] Tutorial: Building a Recommendation System in R; July 2013; yhat
http://blog.yhathq.com/posts/recommender-system-in-r.html

Image Credit: cover of the book Recommender Systems: An Introduction, by Dietmar Jannach et.al.