tag:blogger.com,1999:blog-171712062026-04-05T05:17:33.063-07:00TechnoCaliforniaXavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.comBlogger195125tag:blogger.com,1999:blog-17171206.post-1720781012089009822016-02-02T10:35:00.001-08:002016-02-02T10:35:10.267-08:00Where am I?There have recently been some articles (e.g. <a href="https://www.poweradmin.com/blog/51-devops-influencers-to-start-following-today/">This</a> list of influencers) that have pointed to this blog and lamented that I don't update it regularly anymore. It is true. I now realize I should have at least posted something here to direct readers to the places where I keep posting in case they find I might have something interesting to say.<br /> <br /> First and foremost, given that I joined <a href="http://www.quora.com/">Quora</a> about a year ago, I have been using the Quora product itself to post most of my writing. You can find my profile <a href="https://www.quora.com/profile/Xavier-Amatriain">here</a>. I have found that I can reformulate almost anything I want to say in the form of an answer to a Quora question. Besides, my posts there get a ton of views (I am almost about to reach 2 million views in about a year) and good interactions. Also, I have written some posts in the <a href="https://engineering.quora.com/">Quora Engineering Blog</a> describing some of our work.<br /> <br /> I also keep very active on <a href="https://twitter.com/xamat">Twitter</a>, and every now and then I will update my <a href="https://www.linkedin.com/in/xamatriain">LinkedIn</a> with some professional posts.<br /> <br /> Recently, I gave <a href="https://medium.com/@xamat">Medium</a> a try. I am not really sure how often I will update my blog there, but I am almost certain that my Medium blog will take precedence over this one. Medium is indeed a much better blogging platform than Blogger.<br /> <br /> So, yes, I guess this is a farewell to Technocalifornia unless every now and then I decide to simply post a collection of posts elsewhere just to make sure that people visiting this blog don't get the sense that I am not active anymore. Let me know if you feel that would be interesting for you.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-9844232771029000032014-12-18T22:50:00.000-08:002015-12-15T23:26:46.813-08:00Ten Lessons Learned from Building (real-life impactful) Machine Learning Systems(This is a blogpost version of a talk I gave at <a href="http://mlconf.com/mlconf-sf/">MLConf SF</a> 11/14/2014. See below for original video and slides)<br /> <br /> There are many good textbooks and courses where you can be introduced to machine learning and maybe even learn some of the most intricate details about a particular approach or algorithm (See <a href="http://www.quora.com/What-are-the-best-talks-lectures-related-to-big-data-algorithms-machine-learning/answer/Xavier-Amatriain">my answer on Quora </a>on what are good resources for this). While understanding that theory is a very important base and starting point, there are many other practical issues related to building real-life ML systems that you don’t usually hear about. In this post I will share some of the most important lessons learned in years of building large-scale ML solutions that power products such as Netflix and scale to millions of users across many countries.<br /> <br /> And just in case it doesn't come across clearly enough, let me insist on this once again: it does pay off to be knowledgeable and have deep understanding of the techniques and theory behind classic and modern machine learning approaches. Understanding how Logistic Regression works or the difference between Factorization Machines and Tensor Factorization, for example, is a necessary starting point. However, this in itself might not be enough unless you couple it with the real-life experience of how these models interact with systems, data, and users in order to obtain a really valuable impact. The next ten lessons are my attempt at trying to capture some of that practical knowledge.<br /> <br /> <h2> 1. More Data <strike>vs.</strike> and Better Models&nbsp;</h2> A lot has been written about whether the key to better results lays in improving your algorithms or simply on throwing more data at your problem (see <a href="http://technocalifornia.blogspot.com/2012/07/more-data-or-better-models.html">my post</a> from 2012 discussing this same topic, for example).<br /> <br /> In the context of the <a href="http://www.netflixprize.com/">Netflix Prize</a>, <a href="http://anand.typepad.com/datawocky/anand-rajaraman.html">Anand Rajaraman</a> took an early stand on the issue by claiming that "more data usually beats better algorithms". In <a href="http://anand.typepad.com/datawocky/2008/03/more-data-usual.html">his post</a> he explained how some of his students had improved some of the existing results on the Netflix ratings dataset by adding metadata from <a href="http://www.imdb.com/">IMDB</a>.<br /> <br /> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="260" id="docs-internal-guid-a151bd0c-0d4f-1450-e347-fce69844d204" src="https://lh5.googleusercontent.com/cLDPJ8z2wGz_cvgtbJBACyNh4T-f77_yh_Y82RWHdvQJqNKiSKzx3qxgkBIFsPYGtH7TA5pqdq8KKkY8qU36TvkzdUWZNTWHWKs70g98hrj_dhwqlsrwcxIfzTEX8iz1A34E" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 1.</b> More data usually beats better algorithms</td></tr> </tbody></table> <br /> Although many teams in the competition tried to follow that lead and add extra features to improve results, there was little progress in that direction. As a matter of fact, just a year later some of the leaders of what would become the runner up team published <a href="http://dl.acm.org/citation.cfm?id=1639731">a paper</a> in which they showed that adding metadata had very little impact in improving the prediction accuracy of a well-tuned algorithm. Take this as a first example of why adding more data is not always the solution.<br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="258" id="docs-internal-guid-a151bd2c-0d4f-7605-22fb-f3c291a9cf2c" src="https://lh6.googleusercontent.com/UdGUvRU2Hmux2zAiOzkmI9h4ZyXz4r5XW0A4_uthtk6XgcNpXttV6XVZGzcIqnXQqUIytY9BraFQqhL-px8aVpjT6HlihJVxaI2RWcJHoUhUSd7EBWw_ZE_ueCn6ojdKPDkb" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 2.</b> Even a Few Ratings Are More Valuable than Metadata</td></tr> </tbody></table> <br /> Of course, there are different ways to "add more data". In the example above we were adding data by increasing the number and types of features, therefore increasing the dimensionality of our problem space. We can think about adding data in a completely different way by fixing the space dimensionality and simply throwing more training examples at it. Banko and Brill <a href="http://dl.acm.org/citation.cfm?id=1073017">showed </a>in 2001 that in some cases very different algorithms responded equally well by improving to more training data (see figure below)<br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="315px;" id="docs-internal-guid-a151bd33-0d4f-d7b1-f28a-c49ef172952d" src="https://lh3.googleusercontent.com/OfMe_wqQCONpoNbBrOzJNARrhj5TDF5cqWNMy5w65O6Nb5SKodAcP3DdIGtAH_CqoBnTn023laHgQ6VZmWpak5bPvmzczef06vJ4HWPBMWZ1eAw-APLrJFqLP-2YK3D5DEjN" style="margin-left: auto; margin-right: auto;" width="289px;" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 3.</b> Banko and Brill's "famous" model performance curves&nbsp;</td></tr> </tbody></table> <div> Google's Research Director and renowned AI figure Peter Norvig is quoted as saying that "Google does not have better algorithms, just more data". In fact, Norvig is one of the co-authors of "<a href="http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/35179.pdf">The Unreasonable Effectiveness of Data</a>" where in a similar problem to the one in Banko and Brill (language understanding) they also show how important it is to have "more data".</div> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="148px;" id="docs-internal-guid-a151bd33-0d4f-ff37-acb4-193a48b711f1" src="https://lh4.googleusercontent.com/3K9GF2qX97K0hAeu61Es0O3j6t-oTZgvfeMEQUu94g3UQUTQXH3Ed_SS_oqMHTkGH-Z0vLW8RfFboB9gYDGEm2ghjecI4qm_r-pXLVfOw7-pNP8s8K-gP84Jc6bwfWWZgD_l" style="margin-left: auto; margin-right: auto;" width="371px;" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 4.</b> The Unreasonable Effectiveness of Data&nbsp;</td></tr> </tbody></table> <div> So, is it true that more data in the form of more training examples will always help? Well, not really. The problems above are complex models with a huge number of features which lead to situations of "<a href="http://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff">high variance</a>". But, in many other cases this might not be true. See below for example a real-case scenario of an algorithm in production at Netflix. In this case, adding more than 2 million training examples has very little to no effect.</div> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><img height="202" id="docs-internal-guid-a151bd6a-0d50-23e0-fede-27877995569a" src="https://lh6.googleusercontent.com/iIRqH3yADGbKXS94ZIoy7P_ArXjc6BldQb3uFsfBGPxx84O4t9KYTl_6QGlfwJnyurSbCEn_E2J1ozDmJfggDOfmr-CroI_i_xF9TnSS1AZVFT1Nw74tt6n8ImCvBdYpQIKh" style="margin-left: auto; margin-right: auto;" width="400" /></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 5.</b> Testing Accuracy of a real-life production model</td></tr> </tbody></table> <h2 style="text-align: center;"> </h2> <div> So, this leads to our first lesson learned, which in fact will expand over several of the following ones: it is not about more data versus better algorithms. That is a false dichotomy. Sometimes you need more data, and sometimes you don't. Sometimes you might need to improve your algorithm and in others it will make no difference. Focusing exclusively on one or the other will lead to far from optimal results.</div> <h2> 2. You might not need all your "Big Data"</h2> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">This second lesson is in fact a corollary of the previous one, but I feel it is worth to mention explicitly on its own. It seems like nowadays everyone needs to make use of all their "Big Data". Big Data is so hyped that it seems like if you are not using huge quantities of data you must be doing something wrong. The </span></span><span style="line-height: 16px; white-space: pre-wrap;">truth</span><span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"> though, as discussed in lesson 1, is that there are many problems for which you might be able to get similar results by using much less data than the one you have available.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Think for example of the Netflix Prize where you had 0.5 Million users in the dataset. In the most favored approach, the data was used to compute a Matrix of 50 factors. Would the result change much if instead of the 0.5 M users you used, say 50 Million? Probably not.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">A related, and important, question is how do you determine what subset of your data to use. A good initial approach would be to random sample your original data to obtain as many samples you need for your model training. That might not be good enough though. Staying with the Netflix Prize example, users might be very different and not homogeneously distributed in our original population. New users, for example, will have much fewer ratings and increase sparsity in the dataset. On the other hand, they might have a different behavior from more tenured users and we might want to make our model capture it. The solution is to use some form of <a href="http://en.wikipedia.org/wiki/Stratified_sampling">stratified sampling</a>. Setting up a good stratified sampling scheme is not easy since it requires us to define the different strata, and decide what is the right combination of samples for the model to learn. However, as surprising as it might sound, a well-defined stratified sampled subset might accomplish even better results than the original complete dataset.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="line-height: 16px; white-space: pre-wrap;">Just to be clear, I am not saying that having lots of data is a bad thing, of course it is not. The more data you have, the more choices you will be able to make on how to use it. All I am saying is that focusing on the "size" of your data versus the quality of the information in the data is a mistake. Garner the ability to use as much data as you can in your systems and then use only as much as you need to solve your problems.</span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <br /> <h2> 3. The fact that a more complex Model does not improve things does not mean you don't need one</h2> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Imagine the following scenario: </span><span style="line-height: 1; white-space: pre-wrap;">You have a linear model and for some time you have been selecting and optimizing features for that model. One day you decide to </span><span style="vertical-align: baseline; white-space: pre-wrap;">try a </span><span style="vertical-align: baseline; white-space: pre-wrap;">more complex</span><span style="vertical-align: baseline; white-space: pre-wrap;"> (e.g. non-linear) </span><span style="vertical-align: baseline; white-space: pre-wrap;">model</span><span style="vertical-align: baseline; white-space: pre-wrap;"> with the same features you have been engineering. Most likely, you will </span><span style="vertical-align: baseline; white-space: pre-wrap;">not</span><span style="vertical-align: baseline; white-space: pre-wrap;"> see any </span><span style="vertical-align: baseline; white-space: pre-wrap;">improvement.</span><br /><span style="vertical-align: baseline; white-space: pre-wrap;"><br /></span></span><br /> <span style="font-family: inherit;"><span style="vertical-align: baseline; white-space: pre-wrap;">After that failure, you change your strategy and try to do the opposite: You keep the old model, but </span></span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">add </span><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">more</span><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"> expressive </span><span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">features that try to capture more complex interactions. Most likely the result will be the same and you will again see little to no improvements.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">So, what is going on? The issue here is that simply put more complex features require a more complex model, and vice versa, a more complex model may require more complex features before showing any significant improvement.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> So, the lesson learned is that you must improve both your model and your feature set in parallel. Doing only one of them at a time might lead to wrong conclusions.<br /> <br /></div> <h2> 4. Be thoughtful about how you define your training/testing data sets</h2> <div> <span style="line-height: 16px; white-space: pre-wrap;">If you are training a simple binary classifier, one of the first tasks to do is to define your positive and negative examples. Defining positive and negative labels for samples though may not be such a trivial task. Think about a use case where you need to define a classifier to distinguish between shows that users watch (positives) and do not watch (negatives). In that context, would the following be positives or negatives?</span><br /> <ul> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">User watches a movie to completion and rates it 1 star</span></li> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">User watches the same movie again (maybe because she can’t find anything else)</span></li> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">User abandons movie after 5 minutes, or 15 minutes… or 1 hour</span></li> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">User abandons TV show after 2 episodes, or 10 episode… or 1 season</span></li> <li><span style="font-family: inherit; white-space: pre-wrap;">User adds something to her list but never watches it</span></li> </ul> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">As you can see, determining whether a given example is a positive or a negative is not so easy.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Besides paying attention to your positive and negative definition, there are many other things you need to make sure to get right when defining your training and testing datasets. One such issue is what we call <i>Time Travelling</i>. </span></span>Time traveling is defined as usage of features that originated after the event you are trying to predict. <span style="vertical-align: baseline;">E.g. </span><span style="font-style: italic; vertical-align: baseline;">Your rating a movie is a pretty good prediction of you watching that movie, especially because most ratings happen AFTER you watch the movie.</span><span style="font-style: italic; vertical-align: baseline;"><br /></span> In simple cases as the example above this effect might seem obvious. However, things can get very tricky when you have many features that come from different sources and pipelines and relate to each other in non-obvious ways. </span></span><span style="font-family: inherit;"><span style="white-space: pre-wrap;"><i>Time traveling</i> has the effect of increasing model performance beyond what would seem reasonable. That is why whenever you see an offline experiment with huge wins, the first question you might want to ask yourself is: “Am I time traveling?”.</span></span><span id="docs-internal-guid-b10ab187-3d2a-e838-b4e4-bffc8cd4eb91"></span><br /> <span style="font-family: inherit;"><span style="white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="white-space: pre-wrap;">And, remember, Time Traveling and positive/negative selection are just two examples of issues you might encounter when defining your training and testing datasets. Just make sure you are thoughtful about how you define all the details of your datasets.</span></span><br /> <span style="font-family: inherit;"><span style="white-space: pre-wrap;"><br /></span></span> <br /> <div> <span id="docs-internal-guid-b10ab187-3d2a-e838-b4e4-bffc8cd4eb91"><span id="docs-internal-guid-b10ab18c-3d2b-58de-0f93-9fb017560787"></span></span></div> <span id="docs-internal-guid-b10ab187-3d2a-e838-b4e4-bffc8cd4eb91"> </span></div> <h2> 5. Learn to deal with (the curse of) the Presentation Bias</h2> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL4VJBnC6uEF9vWroMDP7LIvZXfpRxBfShkwMAh7WV8rk4PBc4DNP9ZxagpekYyJ0lc6o1yoPo8KW59oUs1JTyjdA_WK31ox3AHXSNImyT2agYYTit_qQ08BzH8x6K77e8dQx0pA/s1600/Screenshot+from+2014-12-11+22:26:27.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL4VJBnC6uEF9vWroMDP7LIvZXfpRxBfShkwMAh7WV8rk4PBc4DNP9ZxagpekYyJ0lc6o1yoPo8KW59oUs1JTyjdA_WK31ox3AHXSNImyT2agYYTit_qQ08BzH8x6K77e8dQx0pA/s1600/Screenshot+from+2014-12-11+22:26:27.png" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 6.</b> Example of an Attention Model on a page</td></tr> </tbody></table> <div> <br /></div> <span id="docs-internal-guid-a151ba49-0d50-b49d-dad4-e8c3299922b6"><span id="docs-internal-guid-704b7fa8-3d2c-0727-b62e-9a09a90f347d"></span></span><span id="docs-internal-guid-a151ba49-0d50-b49d-dad4-e8c3299922b6"></span><span id="docs-internal-guid-a151ba49-0d51-4591-bc30-f4bcaf178ac9"></span><span id="docs-internal-guid-a151ba49-0d51-8d0d-69f3-57381be5df4c"></span> <br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Let's face it, users can only click and act on whatever your algorithm (and other parts of your system) has decided to show them. Of course, what your algorithm decided to show is what it predicted was good for the user.&nbsp;Let's suppose that a new user comes in and we decide to show the user only popular items. The fact that a week later the user has only consumed popular items does not mean that's what the user like. That's the *only* thing she had a chance to consume!</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">As many (<a href="http://technocalifornia.blogspot.com/2011/09/recommender-problem-presentation.html">including myself</a>) have mentioned in the past, is important to take that into account in your algorithms and try to somehow break this "Curse of the Presentation Bias". Most approaches to addressing this issue are based on the idea that you should "punish" items that were showed to the user but not "clicked on".&nbsp;One way to do so is by implementing some presentation discounting mechanism (see <a href="http://www.cs.ubc.ca/~peil/papers/kdd2014.pdf">this KDD 2014 paper</a> by the LinkedIn folks).&nbsp;</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Another way to address the issue is to use viewed but not clicked items as negatives in your training process. This, in principle, makes sense: if a user searched for a query and ended up clicking in result number three it means the first two results were bad and should be treated as negatives... or not? The problem with this is that although the first two items were likely worse than the third one (at least in that particular context), this does not mean they were any worse than item in position 4, let alone item in position 5000, which your original model decided was no good at all. Yes, you want to remove the presentation bias, but not all of it since it responds to some hopefully well-informed decisions your model took in the first place.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">So, what can we do? First thing that comes to mind is to introduce some sort of randomization in the original results. This randomization should allow to collect unbiased user feedback so as to whether those items are good or not (see some of the early publications by Thorsten Joachims such as <a href="http://www.cs.cornell.edu/People/tj/publications/radlinski_joachims_06a.pdf">this one</a> or take a look at the idea of <a href="http://www.slideshare.net/tdunning/which-algorithms-really-matter">result dithering</a> proposed by Ted Dunning).</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Another better approach is to develop some sort of "attention model" of the user. In this case both clicked and non-clicked items will be weighted by the probability that the user noticed them in the first place depending on their location on the page (see <a href="http://scholar.google.com/citations?user=95PaR-QAAAAJ&amp;hl=en">some of the recent work by Dmitry Lagun</a> for interesting ideas on this area.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Finally, yet another and well established way to address presentation bias is by using some sort of explore/exploit approach, in particular multi-armed bandits. By using a method such as <a href="http://en.wikipedia.org/wiki/Thompson_sampling">Thompson Sampling</a>, you can introduce some form of "randomization" on the items that you are still not sure about, while still exploiting as much as you can from what you already know for sure (see Deepak Argawal's <a href="http://www.ueo-workshop.com/wp-content/uploads/2013/10/UEO-Deepak.pdf">Explore/Exploit approach to recommendations</a> or one of the many publications by <a href="http://www.cs.cornell.edu/People/tj/">Thorsten Joashims</a> for more details on this).</span></span><br /> <br /> <h2> 6. The UI is the only communication channel between the Algorithm and what matters most: the Users</h2> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxt9tlHysiy4h5uLvAnJoDKiRwYl08_l_SNTTE1FXA2wWG2_-5zlr5tbHdZg-nFeXCg-q0-5uknuk2ElOdqAwVT2wKLLaY2wUdsr2X6EJfXNS3Ot4wP08pey1KDcNmt8p3mcsWSw/s1600/Screenshot+from+2014-12-11+22:29:37.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxt9tlHysiy4h5uLvAnJoDKiRwYl08_l_SNTTE1FXA2wWG2_-5zlr5tbHdZg-nFeXCg-q0-5uknuk2ElOdqAwVT2wKLLaY2wUdsr2X6EJfXNS3Ot4wP08pey1KDcNmt8p3mcsWSw/s1600/Screenshot+from+2014-12-11+22:29:37.png" width="320" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 7. </b>The UI is the algorithm's connection point with the user</td></tr> </tbody></table> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">From the discussion in the previous lesson it should be clear by now how important it is to think about the presentation layer and the user interface in our machine learning algorithmic design. On the one hand, the UI generates all the user feedback that we will use as input to our algorithms. On the other hand, the UI is the only place where our algorithms will be shown. It doesn't matter how smart our ML algorithm is. If the UI hides its results or does not give the user the ability to give some form of feedback, all our efforts on the modeling side will have been in vain.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">Also, it is important to understand that a change in the user interface might require a change in the algorithms and vice versa. Just as we learned before that there is an intimate connection between features and models, there is also another to be aware of between the algorithms and the presentation layer.</span></span><br /> <br /></div> <h2> 7. Data and Models are great. You know what is even better? The right evaluation approach.</h2> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3PM90dRhhm5k_k_GcOS-CunRAH380rlGhYQa_uc-SInDmorio2wzTTRV4ROiP3W-qOQ61Q5UJVPWEBBEi471n3D1_vIxCfo1ItE_2HmdO9-nUABXJUDmGR7rNCkZlXSD0Fx-HLA/s1600/Screenshot+from+2014-12-11+22:30:42.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3PM90dRhhm5k_k_GcOS-CunRAH380rlGhYQa_uc-SInDmorio2wzTTRV4ROiP3W-qOQ61Q5UJVPWEBBEi471n3D1_vIxCfo1ItE_2HmdO9-nUABXJUDmGR7rNCkZlXSD0Fx-HLA/s1600/Screenshot+from+2014-12-11+22:30:42.png" width="640" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 8. </b>Offline/Online Innovation Approach</td></tr> </tbody></table> <div> <br /></div> <div> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">This is probably one of the most important of the lessons in this post. Actually, as I write this I feel that it is a bit unfortunate that this lesson might seem as "just another lesson" hidden in position 7. This should be a good place to stress that these lessons in this post are not sorted from more to less important, they are just grouped in topics or themes.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">So, yes, as important as all the other discussions about data, models, and infrastructure may be, they are all rather useless if you don't have the right evaluation approach in place. If you don't know how to measure an improvement you might be endlessly spinning your wheels without really getting anywhere. Some of the biggest gains I have seen in practice have indeed come from tuning the metrics to which models were being optimized.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">Ok, then what is the "right evaluation approach"? Figure 8 illustrates an offline/online approach to innovation that should be a good starting point. Whatever the final goal of your machine learning algorithm is in your product you should think of driving your innovation in two distinct ways: offline and online.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCkTSAJldktpw7-fJZaAH4zlSrHmfkCSj-uo2ORplc-RkSFfjDmzIXG_Qvk8vXeAx3wfa7IR7BJsPUYA9TOmE5ci4ldSrcMxqywKRr-_bCf8s8P4LlotXNFUFk50kKjo1qei-vw/s1600/Screenshot+from+2014-12-11+22:32:32.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXCkTSAJldktpw7-fJZaAH4zlSrHmfkCSj-uo2ORplc-RkSFfjDmzIXG_Qvk8vXeAx3wfa7IR7BJsPUYA9TOmE5ci4ldSrcMxqywKRr-_bCf8s8P4LlotXNFUFk50kKjo1qei-vw/s1600/Screenshot+from+2014-12-11+22:32:32.png" width="320" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 9.</b> Offline Evaluation</td></tr> </tbody></table> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">First, you should generate datasets that allow to try different models and features in an offline fashion by following a traditional ML experimentation approach (see Figure 9): You train your model to a training seat, you probably optimize some (hyper)parameters to a validation set, and finally measure some evaluation metrics on a test set. The evaluation metrics in our context are likely to be IR metrics such as precision and recall, ROC curves, or ranking metrics such as <a href="http://en.wikipedia.org/wiki/Discounted_cumulative_gain">NDCG</a>, MRR, or FPC (Fraction of <a href="http://en.wikipedia.org/wiki/Concordant_pair">Concordant Pairs</a>). Note though that the selection of the metric itself has its consequences. Take a look at Figure 10 for an example of how the different ranking metrics weight different ranks being evaluated. In that sense, metrics such as MRR or (especially) NDCG will give much more importance to the head of the ranking, while FPC will be weighting more on the middle of the ranks. The key here is that depending on your application you should choose the right metric.</span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtDEktg_UFqibvgXnGn0RYlwOgWfMxHccPNWta8EUukBZxGhxj_tN4bptiAsRZlRGlTvRg8vJP48Ymh0_kWXJrkQ-5r3BXmEBVo7C1PfcPYTq9SjgQ8ogc0OftIvJjaU0bvxfNXg/s1600/Screenshot+from+2014-12-11+22:32:48.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtDEktg_UFqibvgXnGn0RYlwOgWfMxHccPNWta8EUukBZxGhxj_tN4bptiAsRZlRGlTvRg8vJP48Ymh0_kWXJrkQ-5r3BXmEBVo7C1PfcPYTq9SjgQ8ogc0OftIvJjaU0bvxfNXg/s1600/Screenshot+from+2014-12-11+22:32:48.png" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig. 10. </b>Importance given to different ranks by typical ranking metrics</td></tr> </tbody></table> <br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;">Offline experimentation is great because once you have the right data and the right metric it is fairly cheap to run many experiments with very few resources. Unfortunately, a successful offline experiment can only be generally used as an indication of a promising approach worth testing online. While most companies are investing in finding better correlation between offline and online results, this is still, generally speaking, an unsolved issue that deserves more research (see <a href="http://dl.acm.org/citation.cfm?id=2488215">this KDD 2013 paper</a>, for example). </span><br /> <span style="font-family: inherit; vertical-align: baseline; white-space: pre-wrap;"><br /></span> <span style="white-space: pre-wrap;">In online experimentation the most usual approach is to do A/B testing (other approaches such as <a href="https://support.google.com/analytics/answer/2844870?hl=en">Multiarmed Bandit Testing</a> or <a href="http://www.cs.cornell.edu/people/tj/publications/chapelle_etal_12a.pdf">Interleaved Testing</a> are becoming more popular recently but are beyond the scope of this post). The goal of an A/B test is to measure difference in metrics across statistically identical populations that each experience a different algorithm. As with the offline evaluation process, and perhaps even more here, it is very important to choose the appropriate evaluation metric to make sure that most if not all decisions on the product are data driven.&nbsp;</span><br /> <span style="white-space: pre-wrap;"><br /></span> <span style="white-space: pre-wrap;">Most people will have a number of different metrics they are tracking in any AB test, but it is important to clearly identify the so-called Overall Evaluation Criteria (OEC). This should be the ultimate metric used for product decisions. In order to avoid noise and make sure the OEC maps well to business success it is better to use a long-term metric (e.g. customer retention). Of course, the issue with that is that you need time, and therefore resources, to evaluate a long-term metric. That is why it is very useful to have short-term metrics that can be used as initial early reads on the tests in order to narrow down worthwhile hypothesis that need to wait until the OEC read is complete.</span><br /> <br /> If you want more details on the online experimentation piece there are many good reads, starting with the many good articles by Bing's Ronny Kohavi (see <a href="http://ai.stanford.edu/~ronnyk/2013%20controlledExperimentsAtScale.pdf">this</a>, for example).</div> <div> <span id="docs-internal-guid-91e5a539-3d32-4035-9513-f42bed9adb25"><span style="font-family: inherit;"><span style="line-height: 16px; white-space: pre-wrap;"><br /></span></span></span></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <h2> 8. Distributing algorithms? Yes, but at what level?</h2> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">There always comes a time in the life of a Machine Learning practitioner when you feel the need to distribute your algorithm. Distributing algorithms that require of many resources is a natural thing to do. The issue to consider is at what *level* does it make sense to distribute.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">We distinguish three levels of distribution:</span></span><br /> <ul> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">Level 1. For each independent subset of the overall data </span></li> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">Level 2. For every combination of the hyperparameters</span></li> <li><span style="font-family: inherit; line-height: 1; white-space: pre-wrap;">Level 3. For all partitions in each training dataset</span></li> </ul> <br /> In the first level we may have subsets of the overall data for which we need to (or simply can) train an independently optimized model. A typical example of this situation is when we opt for training completely independent ML models for different regions in the world, different kinds of users, or different languages. In this case, all we need to do is to define completely independent training datasets. Training can then be fully distributed requiring no coordination or data communication.<br /> <br /> In the second level, we address the issue of how to train several models with different hyperparameter values in order to find the optimal model. Although there are smarter ways to do it, let's for now think of the worst-case grid search scenario. We can definitely train models with different values of the hyperparameters in a completely distributed fashion, but the process does require coordination. Some central location needs to gather results and decide on the next "step" to take. Level 2 requires data distribution, but not sharing since each node will use a complete replica of the original dataset and the communication will happen at the level of the parameters.<br /> <br /> Finally, in level 3 we address the issue of how to distribute or parallelize model training for a single combination of the hyperparameters. This is a hard problem, but there has been a lot of research put into it. There are different solutions with different pros and cons. You can distribute computation over different machines splitting examples or parameter using, for example, <a href="http://stanford.edu/~boyd/admm.html">ADMM</a>. Recent solutions such as the <a href="http://parameterserver.org/">Parameter Sever</a>&nbsp;promise to offer a generic solution to this problem. Another option is to parallelize on a single multicore machine using algorithms such as <a href="http://www.eecs.berkeley.edu/~brecht/papers/hogwildTR.pdf">Hogwild</a>. Or, you can use the massive array of cores available in GPU cards.<br /> <br /> As an example of the different approaches you can take to distribute each of the levels, take a look at <a href="http://techblog.netflix.com/2014/02/distributed-neural-networks-with-gpus.html">what we did</a> in our distribution of Artificial Neural Networks over the AWS cloud (see Figure 11 below for an illustration). For Level 1 distribution, we simply used different machine instances over different AWS regions. For Level 2 we used different machine in the same region and a central node for coordination. We used Condor for cluster coordination (although other options such as StarCluster, Mesos, or even Spark) are possible. Finally, for level 3 optimization, we used highly optimized CUDA code on GPUs.<br /> <div> <span style="font-family: &quot;arial&quot;;"><span style="white-space: pre-wrap;"><br /></span></span></div> <span id="docs-internal-guid-2e000fb4-3d33-e866-ae0f-47dcdd6ee409"> </span> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRc3IBt0iXh2bzQYf9nQfiGL8cyaR11KWjBEpvR4RF2iZsXYK9CIFDR7BSDkDNXuRv6ldTKbduG6i13V5pW4D7rb5GA2izhtebfJ_Hcin5rV9oBHM3_Al7PsBr6C3vNaUaCZTCWA/s1600/DistributedANN-Final.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRc3IBt0iXh2bzQYf9nQfiGL8cyaR11KWjBEpvR4RF2iZsXYK9CIFDR7BSDkDNXuRv6ldTKbduG6i13V5pW4D7rb5GA2izhtebfJ_Hcin5rV9oBHM3_Al7PsBr6C3vNaUaCZTCWA/s1600/DistributedANN-Final.png" width="320" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 11. </b>Distributing ANN over the AWS cloud</td></tr> </tbody></table> <div class="separator" style="clear: both; text-align: center;"> <span id="docs-internal-guid-2e000fb4-3d33-e866-ae0f-47dcdd6ee409"></span></div> <span id="docs-internal-guid-2e000fb4-3d33-e866-ae0f-47dcdd6ee409"> </span> <br /> <div> <span id="docs-internal-guid-2e000fb4-3d33-e866-ae0f-47dcdd6ee409"><span style="color: #666666; font-family: &quot;arial&quot;; font-size: 32px; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div> <span id="docs-internal-guid-2e000fb4-3d33-e866-ae0f-47dcdd6ee409"> </span></div> <h2> 9. It pays off to be smart about your Hyperparameters</h2> <div> <span id="docs-internal-guid-b7ec9469-3d35-8cb0-546e-5738b3abc26a"><span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">As already mentioned in the previous lesson, one of the important things you have to do when building your ML system is to tune your hyperparameters. Most, if not all, algorithms will have some hyperparameters that need to be tuned: learning rate in matrix factorization, regularization lambda in logistic regression, number of hidden layers in a neural network, shrinkage in gradient boosted decision trees... These are all parameters that need to be tuned to the validation data.</span></span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="line-height: 16px; white-space: pre-wrap;">Many times you will face situations in which models need to be periodically retrained and therefore hyperparameters need to be at least fine-tuned. This is a clear situation where you need to figure out a way to automatically select the best hyperparameters without requiring a manual check. As a matter of fact, having an automatic hyperparameter selection approach is worthwhile even if all you are doing is the initial experimentation. A fair approach is to try all possible combinations of hyperparameters and pick the one that maximizes a given accuracy metric on the validation set. While this is, generally speaking, a good idea, it might be problematic if implemented directly. The issue is that blindly taking the point that optimizes whatever metric does not take into account the possible noisiness in the process and the metric. In other words, we can't be sure that if point A has an accuracy that is only 1% better than point B, point A is a better operating point than B.&nbsp;</span><br /> <span style="line-height: 16px; white-space: pre-wrap;"><br /></span> <span style="line-height: 16px; white-space: pre-wrap;">Take a look at Figure 12 below, which illustrates this issue by showing (made up) accuracy results for a model given different values of the regularization parameter. In this particular example the highest accuracy is for no regularization, plus there is a relatively flat plateau region for values of lambda between 0.1 and 100. Blindly taking a value of lambda of zero is generally a bad idea since it points to overfitting (yes, this could be checked by using the test dataset). But, beyond that, going to the "flat region", is it better to stick with the 0.1 value? By looking at the plot I would be inclined to take 100 as the operating point. This point is (a) non-zero, and (b) noise-level different in terms of accuracy from the other non-zero values. So, one possible rule of thumb to use is to keep the highest non-zero value that is noise level different in terms of the optimizing metric from the optimal point.</span><br /> <br /></div> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span></div> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5wRmdlkdCEPxtUCprXt4gP0FcE3mozArZ-J5EtKoRpTr9TWmhty-7cl1EVncyzc_5Jdx5bhhFtzlXvV1Jb1j4cacK9S0WP8m9nywrBIos6pK0zFzY9Wqi7UmHam4LH_0LTJZw6A/s1600/Screenshot+from+2014-12-11+22:36:34.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="401" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5wRmdlkdCEPxtUCprXt4gP0FcE3mozArZ-J5EtKoRpTr9TWmhty-7cl1EVncyzc_5Jdx5bhhFtzlXvV1Jb1j4cacK9S0WP8m9nywrBIos6pK0zFzY9Wqi7UmHam4LH_0LTJZw6A/s1600/Screenshot+from+2014-12-11+22:36:34.png" width="640" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 12. </b>Example of model accuracy vs. regularization lambda</td></tr> </tbody></table> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">I should also add that even though in this lesson I have dsf about using a brute-force grid search approach to hyperparameter optimization, there are much better things you can do which are again beyond the scope of this post. If you are not familiar with Bayesian Optimization, start with <a href="http://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf">this paper</a> or take a look at <a href="https://github.com/JasperSnoek/spearmint">Spearmint</a> or <a href="http://engineeringblog.yelp.com/2014/07/introducing-moe-metric-optimization-engine-a-new-open-source-machine-learning-service-for-optimal-ex.html">MOE</a>.</span></span><br /> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;"><br /></span></span></div> <h2> 10. There are things you can do Offline and there are things you can't... and there is Nearline for everything in between</h2> <div> <span style="line-height: 16px; white-space: pre-wrap;">In the lessons so far we have talked about the importance of data, models, UI, metrics... In this last lesson I thought it was worth to focus on systems and architecture. When the final goal of your ML model is to have impact on a product, you are necessarily going to have to think about the right system architecture. </span><br /> <span style="line-height: 16px; white-space: pre-wrap;"><br /></span> <span style="line-height: 16px; white-space: pre-wrap;">Figure 13 depicts a three level architecture that can be used as a </span><span style="line-height: 16px; white-space: pre-wrap;">blueprint for any machine learning system that is designed to have a customer impact. The basic idea is that it is important to have different layers in which to trade off latency vs. complexity. Some computations need to be as real-time as possible to quickly respond to user feedback and context. Those are better off in an online setting. On the other extreme, complex ML models that require large amounts of data and lengthy computations are better done in an offline fashion. Finally, there is a Nearline world where operations are not guaranteed to happen in real-time but a best effort is performed to do them as "soon as possible".</span><br /> <br /></div> <div> <span style="font-family: inherit;"><span style="color: #666666; line-height: 1; white-space: pre-wrap;"><br /></span></span></div> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWw7TGRBEay1SAcm5-7vii4YgETQoo3htdvKyjaly2ZDGg1fcVIxS0NywB2HcfR3FruKctPY4js0wqZuCoc8kKoIh7fE3csAPHU26yE_12CtITXHLOUWHxnopUnCEOCpTHbUoSYw/s1600/MachineLearningArchitecture-v3.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWw7TGRBEay1SAcm5-7vii4YgETQoo3htdvKyjaly2ZDGg1fcVIxS0NywB2HcfR3FruKctPY4js0wqZuCoc8kKoIh7fE3csAPHU26yE_12CtITXHLOUWHxnopUnCEOCpTHbUoSYw/s1600/MachineLearningArchitecture-v3.jpg" width="579" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 13.</b> This three level architecture can be used as a blueprint for machine learning systems that drive customer impact.</td></tr> </tbody></table> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: left;"> Interestingly, thinking about these three "<a href="https://gigaom.com/2013/03/28/3-shades-of-latency-how-netflix-built-a-data-architecture-around-timeliness/">shades of latency</a>" also helps breaking down traditional machine learning algorithms into different components that can be executed in different layers. Take matrix factorization as an example. As illustrated in Figure 14, you can decide to do the more time-consuming item factor computation in an offline fashion. Once those item factors are computed, you can compute user factors online (e.g. solving a closed-from least squares formulation) in a matter of milliseconds in an online fashion.</div> <div class="separator" style="clear: both; text-align: left;"> <br /></div> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRs4NdOTWOFg8EvF81KRzyahjzcPDtSGuF325IaiCCEMu_ZCsINMzRz1_-iPplr8Ggzl7YSs34lXSnqmVGHYIVyMh10Uuxu_hy9qc7TlOnkCppcb0t665HteuMqcjjZ5ZARXjX5Q/s1600/Screenshot+from+2014-12-11+22:39:21.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRs4NdOTWOFg8EvF81KRzyahjzcPDtSGuF325IaiCCEMu_ZCsINMzRz1_-iPplr8Ggzl7YSs34lXSnqmVGHYIVyMh10Uuxu_hy9qc7TlOnkCppcb0t665HteuMqcjjZ5ZARXjX5Q/s1600/Screenshot+from+2014-12-11+22:39:21.png" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><b>Fig 14. </b>Decomposing matrix factorization into offline and online computation</td></tr> </tbody></table> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div> <span style="font-family: inherit;"><span style="line-height: 1; white-space: pre-wrap;">If you are interested in this topic take a look at our original <a href="http://techblog.netflix.com/2013/03/system-architectures-for.html">blog post </a>in the Netflix tech blog.</span></span></div> <h2> Conclusions</h2> <div> The ten lessons in this post illustrate knowledge gathered from building impactful machine learning and general algorithmic solutions. If I had to summarize them in 4 short take away messages those would probably be:</div> <div> <br /></div> <ol id="docs-internal-guid-4adf011f-0d4b-3cf3-4e30-1bc4c93ad704" style="margin-bottom: 0pt; margin-top: 0pt;"> <li dir="ltr" style="background-color: transparent; font-family: &quot;Gloria Hallelujah&quot;; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="font-size: small;"><span style="background-color: transparent; font-family: &quot;gloria hallelujah&quot;; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Be thoughtful about your data</span></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: &quot;Gloria Hallelujah&quot;; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="font-size: small;"><span style="background-color: transparent; font-family: &quot;gloria hallelujah&quot;; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Understand dependencies between data and models</span></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: &quot;Gloria Hallelujah&quot;; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="font-size: small;"><span style="background-color: transparent; font-family: &quot;gloria hallelujah&quot;; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Choose the right metric</span></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: &quot;Gloria Hallelujah&quot;; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;"> <span style="font-size: small;"><span style="background-color: transparent; font-family: &quot;gloria hallelujah&quot;; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">&nbsp;Optimize only wha</span></span><span style="font-size: small;"><span style="background-color: transparent; font-family: &quot;gloria hallelujah&quot;; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">t matters</span></span></div> </li> </ol> <span style="font-size: small;"><br />I hope they are useful to other researchers and practicioners. And, would love to hear about similar or different experiences in building real-life machine learning solutions in the comments. Looking forward to the feedback.</span><br /> <h2> Acknowledgments</h2> Most of the above lessons have been learned in close collaboration with my former Algorithms Engineering team at Netflix. In particular I would like to thank <a href="https://twitter.com/JustinBasilico">Justin Basilico</a> for many fruitful conversations, feedback on the original drafts of the slides, and for providing some of the figures in this post.<br /> <h2> Original video and slides</h2> <br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/WdzWPuazLA8?feature=player_embedded' frameborder='0'></iframe>&nbsp;</div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div style="text-align: center;"> <br /> <iframe allowfullscreen="" frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/41571741" style="border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="425; text-align: center;"> </iframe> </div> <div style="margin-bottom: 5px; text-align: center;"> <b> <a href="https://www.slideshare.net/xamat/10-lessons-learned-from-building-machine-learning-systems" target="_blank" title="10 Lessons Learned from Building Machine Learning Systems">10 Lessons Learned from Building Machine Learning Systems</a> </b> from <b><a href="https://www.slideshare.net/xamat" target="_blank">Xavier Amatriain</a></b> </div> Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-55308691958832201822014-08-04T22:19:00.001-07:002014-08-04T22:23:34.875-07:00Introduction to Recommender Systems: A 4-hour lecture<br /> <div class="separator" style="clear: both; text-align: center;"> <a href="http://mlss2014.com/index.html"><img border="0" src="http://mlss2014.com/images/mlsslogo.png" height="94" width="320" /></a></div> <br /> <br /> <div style="text-align: justify;"> A couple of weeks ago, I gave a 4 hour lecture on Recommender Systems at the <a href="http://mlss2014.com/index.html">2014 Machine Learning Summer School at CMU</a>. The school was organized by Alex Smola and Zico Kolter and, judging by the attendance and the quality of the speakers, it was a big success.&nbsp;</div> <div style="text-align: justify;"> <br /></div> <div style="text-align: justify;"> This is the outline of my lecture:</div> <div style="text-align: justify;"> <br /></div> <ol style="margin-bottom: 0pt; margin-top: 0pt;"> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Introduction: What is a Recommender System</span></i></span></li> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">“Traditional” Methods</span></i></span></li> <ol style="margin-bottom: 0pt; margin-top: 0pt;"> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Collaborative Filtering</span></i></span></li> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Content-based Recommendations</span></i></span></li> </ol> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">"Novel" Methods</span></i></span></li> <ol style="margin-bottom: 0pt; margin-top: 0pt;"> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Learning to Rank</span></i></span></li> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Context-aware Recommendations</span></i></span></li> <ol style="margin-bottom: 0pt; margin-top: 0pt;"> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Tensor Factorization</span></i></span></li> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Factorization Machines</span></i></span></li> </ol> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Deep Learning</span></i></span></li> <li dir="ltr" style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.04; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i><span style="color: #999999;">Similarity</span></i></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.04; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i><span style="color: #999999;">Social Recommendations</span></i></span></div> </li> </ol> <li><span style="font-family: Arial; line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Hybrid Approaches</span></i></span></li> <li dir="ltr" style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.04; margin-bottom: 0pt; margin-top: 0pt;"> <span style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i><span style="color: #999999;">A practical example: Netflix&nbsp;</span></i></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.04; margin-bottom: 0pt; margin-top: 0pt;"> <span style="line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">Conclusions</span></i></span></div> </li> <li dir="ltr" style="background-color: transparent; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.04; margin-bottom: 0pt; margin-top: 0pt;"> <span style="line-height: 1.04; white-space: pre-wrap;"><i><span style="color: #999999;">References</span></i></span></div> </li> </ol> <div style="text-align: justify;"> <span id="docs-internal-guid-75f3313b-a494-d759-5bfd-3fe0636d864e"><br /></span></div> You can access the slides in Slideshare and the videos in Youtube, but I thought it would make sense to gather both here and link them together.<br /> <br /> Here are the slides:<br /> <br /> <div style="text-align: center;"> <iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/37206312?rel=0" style="border-width: 1px; border: 1px solid #CCC; margin-bottom: 5px; max-width: 100%;" width="427"> </iframe> </div> <div style="margin-bottom: 5px;"> <strong> <a href="https://www.slideshare.net/xamat/recommender-systems-machine-learning-summer-school-2014-cmu" target="_blank" title="Recommender Systems (Machine Learning Summer School 2014 @ CMU)">Recommender Systems (Machine Learning Summer School 2014 @ CMU)</a> </strong> from <strong><a href="http://www.slideshare.net/xamat" target="_blank">Xavier Amatriain</a></strong> <br /> <br /> Here is the first session (2 hours):</div> <div class="separator" style="clear: both; text-align: center;"> <iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/bLhq63ygoU8?feature=player_embedded' frameborder='0'></iframe></div> <br /> <br /> Here is the second session (2 hours):<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/mRToFXlNBpQ?feature=player_embedded' frameborder='0'></iframe></div> <br />Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1tag:blogger.com,1999:blog-17171206.post-63784813533833982492014-06-20T14:03:00.002-07:002014-06-20T14:03:33.028-07:00Blog posts and Summer gigsI have recently heard complaints that this blog is <a href="http://www.stackdriver.com/top-devops-influencers-blogs-follow/">rather quiet lately</a>. I agree. I have definitely been focused on publishing through other sources and have found little time to write interesting things here. On the one hand, I find twitter ideal for communicating quick and short ideas, thoughts, or pointers. You should definitely <a href="http://www.twitter.com/xamat">follow me</a> there if you want to keep up to date. On the other hand,&nbsp; I have published a couple of posts on the <a href="http://techblog.netflix.com/">Netflix Techblog</a>. A few months ago we published a post describing <a href="http://techblog.netflix.com/2013/03/system-architectures-for.html">our three-tier system architecture</a> for personalization and recommendations. More recently we described our implementation of <a href="http://techblog.netflix.com/2014/02/distributed-neural-networks-with-gpus.html">distributed Neural Networks</a> using GPUs and the AWS cloud.<br /> <br /> The other thing I continue on doing very often is give talks of our work at different events and venues. In the last few months, for instance, I have given talks at LinkedIn, Facebook, and <a href="http://i.stanford.edu/infoseminar/">Stanford</a>.<br /> <br /> This week I gave a talk and attended the Workshop on Algorithms for Modern Massive Datasets (<a href="http://mmds-data.org/">MMDS</a>). This is a very interesting workshop organized by <a href="http://www.stat.berkeley.edu/~mmahoney/">Michael Mahoney</a> every two years. It brings together a diverse crowd of people, from theoretical physicist and statisticians to industry practicioners. All of them are united by their work on large scale data-driven algorithms. You can find the slides of my presentation <a href="http://www.slideshare.net/xamat/mmds-2014-talk-distributing-ml-algorithms-from-gpus-to-the-cloud">here</a>.<br /> <br /> So, what is next? If you want to catch some of my future talks, I will be giving a couple of public ones in the next few months.<br /> <br /> First, I will be lecturing in the Machine Learning Summer School (<a href="http://www.mlss2014.com/">MLSS</a>) at CMU in early July. I am really looking forward to joining such a great least of speakers and visiting Pittsburgh for the first time. I will be lecturing on Recommendation Systems and Machine Learning Algorithms for Collaborative Filtering.<br /> <br /> Late August I will be giving a 3 hour long <a href="http://www.kdd.org/kdd2014/tutorials.html">Tutorial</a> at KDD in New York. The tutorial is entitled "The Recommender Problem Revisited" and I will be sharing stage with <a href="http://www.cdm.depaul.edu/people/pages/facultyinfo.aspx?fid=653">Bamshad Mobasher</a>.<br /> <br /> Finally, I was recently notified that a shorter version of the same tutorial has been accepted at <a href="http://recsys.acm.org/recsys14/">Recsys</a>, which this year is held in the Silicon Valley.<br /> <br />I look forward to meeting many of you in any of these events. Don't hesitate to ping me if you will be attending.<br /> <br />Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-45575110102874191462013-07-23T11:50:00.000-07:002013-07-23T11:51:41.973-07:00Recommendations as Personalized Learning to RankAs I have explained in other publications such as the<a href="http://techblog.netflix.com/2012/04/netflix-recommendations-beyond-5-stars.html"> Netflix Techblog</a>, ranking is a very important part of a Recommender System. Although the Netflix Prize focused on rating prediction, ranking is in most cases a much better formulation for the recommendation problem. In this post I give some more motivation, and an introduction to the problem of personalized learning to rank, with pointers to some solutions. The post is motivated, among others, by a proposal I sent for a tutorial at this year's <a href="http://recsys.acm.org/recsys13/">Recsys</a>. Coincidentally, my former colleagues in Telefonica, who have been working in learning to rank for some time, proposed a very similar one. I encourage you to use this post as an introduction to <a href="http://recsys.acm.org/recsys13/tutorials/#content-tab-1-1-tab">their tutorial</a>, which you should definitely attend. The goal of a ranking system is to find the best possible ordering of a set of items for a user, within a specific context, in real-time. We optimize ranking algorithms to give the highest scores to titles that a member is most likely to play and enjoy. <br /> <br /> If you are looking for a ranking function that optimizes consumption, an obvious baseline is item popularity. The reason is clear: on average, a user is most likely to like what most others like. Think of the following situation: You walk into a room full of people you know nothing about, and you are asked to prepare a list of ten books each person likes. You will get $10 for each book you guess right. Of course, your best bet in this case would be to prepare identical lists with the "10 most liked books in recent times". Chances are the people in the room is a fair sample of the overall population, and you end up making some money. However, popularity is the opposite of personalization. As I explained in the previous example, it will produce the same ordering of items for every member. The goal becomes is to find a personalized ranking function that is better than item popularity, so we can better satisfy users with varying tastes. Our goal is to recommend the items that each user is most likely to enjoy. One way to approach this is to ask users to rate a few titles they have read in the past in order to build a rating prediction component. Then, we can use the user's predicted rating of each item as an adjunct to item popularity. Using predicted ratings on their own as a ranking function can lead to items that are too niche or unfamiliar, and can exclude items that the user would want to watch even though they may not rate them highly. To compensate for this, rather than using either popularity or predicted rating on their own, we would like to produce rankings that balance both of these aspects. At this point, we are ready to build a ranking prediction model using these two features. <br /> <br /> Let us start with a very simple scoring approach by choosing our ranking function to be a linear combination of popularity and predicted rating. This gives an equation of the form <i>score(u,v) = w1 p(v) + w2 r(u,v) + b</i>, where <i>u</i>=user, <i>v</i>=video item, <i>p</i>=popularity and <i>r</i>=predicted rating. This equation defines a two-dimensional space as the one depicted in the following figure.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2uPraqcDfdg5yllhKjtEnVtpwkXjjEPLa6xyK7rEkg_U-GMuZrRnnA3uwlRLLxiVgl_c9Jmi8UjyWpayiF5wTaSC7Q1hSJV8xUN9bAU-PktN_dNxx1oTW4_70swb0yTLpYq-UJA/s1600/TwoDimensionalRanking.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2uPraqcDfdg5yllhKjtEnVtpwkXjjEPLa6xyK7rEkg_U-GMuZrRnnA3uwlRLLxiVgl_c9Jmi8UjyWpayiF5wTaSC7Q1hSJV8xUN9bAU-PktN_dNxx1oTW4_70swb0yTLpYq-UJA/s1600/TwoDimensionalRanking.png" height="253" width="320" /></a></div> <br /> Once we have such a function, we can pass a set of videos through our function and sort them in descending order according to the score. First, though, we need to determine the weights <b><i>w1</i></b> and <b><i>w2</i></b> in our model (the bias <b><i>b</i></b> is constant and thus ends up not affecting the final ordering). We can formulate this as a machine learning problem: select positive and negative examples from your historical data and let a machine learning algorithm learn the weights that optimize our goal. This family of machine learning problems is known as "Learning to Rank" and is central to application scenarios such as search engines or ad targeting. A crucial difference in the case of ranked recommendations is the importance of personalization: we do not expect a global notion of relevance, but rather look for ways of optimizing a personalized model. <br /> <br /> As you might guess, the previous two-dimensional model is a very basic baseline. Apart from popularity and rating prediction, you can think on adding all kinds of features related to the user, the item, or the user-item pair.Below you can see a graph showing the improvement we have seen at Netflix after adding many different features and optimizing the models. <br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtexc0VvMpCkhqDawIZl9GqIoU-Myj9tlY8fy44SYTX3sTtS_djXcSAy5xHxr4e6VVS0aTFgCuBpjDSubx3NyKLpOFS3hriMOCLjjI9VUIrh4oPd-yyMO_jmuROk82lVyOguhTSQ/s1600/Ranking-FeaturesPerformance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtexc0VvMpCkhqDawIZl9GqIoU-Myj9tlY8fy44SYTX3sTtS_djXcSAy5xHxr4e6VVS0aTFgCuBpjDSubx3NyKLpOFS3hriMOCLjjI9VUIrh4oPd-yyMO_jmuROk82lVyOguhTSQ/s1600/Ranking-FeaturesPerformance.png" height="200" width="400" /></a></div> <br /> The traditional pointwise approach to learning to rank described above treats ranking as a simple binary classification problem where the only input are positive and negative examples. Typical models used in this context include Logistic Regression, Support Vector Machines, Random Forests or Gradient Boosted Decision Trees. <br /> <br /> There is a growing research effort in finding better approaches to ranking. The pairwise approach to ranking, for instance, optimizes a loss function defined on pairwise preferences from the user. The goal is to minimize the number of inversions in the resulting ranking. Once we have reformulated the problem this way, we can transform it back into the previous binary classification problem. Examples of such an approach are RankSVM [Chapelle and Keerthi, 2010, <a href="http://olivier.chapelle.cc/pub/ordinal.pdf">Efficient algorithms for ranking with SVMs</a>], RankBoost [Freund et al., 2003, <a href="http://machinelearning.wustl.edu/mlpapers/paper_files/FreundISS03.pdf">An efficient boosting algorithm for combining preferences</a>], or RankNet [Burges et al., 2005, <a href="http://research.microsoft.com/en-us/um/people/cburges/papers/icml_ranking.pdf">Learning to rank using gradient descent</a>]. <br /> <br /> We can also try to directly optimize the ranking of the whole list by using a listwise approach. RankCosine [Xia et al., 2008. <a href="http://research.microsoft.com/en-us/people/tyliu/icml-listmle.pdf">Listwise approach to learning to rank: theory and algorithm</a>], for example, uses similarity between the ranking list and the ground truth as a loss function. ListNet [Cao et al., 2007. <a href="ftp://ftp.research.microsoft.com/pub/tr/TR-2007-40.pdf">Learning to rank: From pairwise approach to listwise approach</a>] uses KL-divergence as loss function by defining a probability distribution. RankALS [Takacs and Tikk. 2012. <a href="http://wanlab.poly.edu/recsys12/recsys/p83.pdf">Alternating least squares for personalized ranking</a>] is a recent approach that defines an objective function that directly includes the ranking optimization and then uses Alternating Least Squares (ALS) for optimizing. <br /> <br /> Whatever ranking approach we use, we need to use rank-specific information retrieval metrics to measure the performance of the model. Some of those metrics include <a href="http://en.wikipedia.org/wiki/Information_retrieval#Mean_average_precision">Mean Average Precision </a>(MAP), <a href="https://en.wikipedia.org/wiki/Discounted_cumulative_gain">Normalized Discounted Cumulative Gain</a> (NDCG), <a href="http://en.wikipedia.org/wiki/Mean_reciprocal_rank">Mean Reciprocal Rank</a> (MRR), or Fraction of Concordant Pairs (FCP). What we would ideally like to do is to directly optimize those same metrics. However, it is hard to optimize machine-learned models directly on these measures since they are not differentiable and standard methods such as gradient descent or ALS cannot be directly applied. In order to optimize those metrics, some methods find a smoothed version of the objective function to run Gradient Descent. CLiMF optimizes MRR [Shi et al. 2012. <a href="http://www.ci.tuwien.ac.at/~alexis/Publications_files/climf-recsys12.pdf">CLiMF: learning to maximize reciprocal rank with collaborative less-is-more filtering</a>], and TFMAP [Shi et al. 2012. <a href="http://www.ci.tuwien.ac.at/~alexis/Publications_files/tfmap-sigir12.pdf">TFMAP: optimizing MAP for top-n context-aware recommendation</a>], optimizes MAP in a similar way. The same authors have very recently added a third variation in which they use a similar approach to optimize "graded relevance" domains such as ratings [Shi et. al, "<a href="http://arxiv.org/pdf/1307.3855.pdf">Gapfm: Optimal Top-N Recommendations for Graded Relevance Domains</a>"]. AdaRank [Xu and Li. 2007. <a href="http://research.microsoft.com/en-us/people/hangli/xu-sigir07.pdf">AdaRank: a boosting algorithm for information retrieval</a>] uses boosting to optimize NDCG. Another method to optimize NDCG is NDCG-Boost [Valizadegan et al. 2000. <a href="http://books.nips.cc/nips22/spotlight_show/Monday1.pdf">Learning to Rank by Optimizing NDCG Measure</a>], which optimizes expectation of NDCG over all possible permutations. SVM-MAP [Xu et al. 2008. <a href="http://research.microsoft.com/en-us/people/tyliu/sigir08-directoptimizeevalmeasure.pdf">Directly optimizing evaluation measures in learning to rank</a>] relaxes the MAP metric by adding it to the SVM constraints. It is even possible to directly optimize the non-diferentiable IR metrics by using techniques such as Genetic Programming, Simulated Annealing [Karimzadehgan et al. 2011. <a href="http://labs.yahoo.com/files/www2011.pdf%E2%80%8E">A stochastic learning-to-rank algorithm and its application to contextual advertising</a>], or even Particle Swarming [Diaz-Aviles et al. 2012. <a href="http://dl.acm.org/citation.cfm?id=2366001">Swarming to rank for recommender systems</a>]. <br /> <br /> As I mentioned at the beginning of the post, the traditional formulation for the recommender problem was that of a rating prediction. However, learning to rank offers a much better formal framework in most contexts. There is a lot of interesting research happening in this area, but it is definitely worth for more researchers to focus their efforts on what is a very real and practical problem where one can have a great impact.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1tag:blogger.com,1999:blog-17171206.post-56146905367806077262013-06-09T11:19:00.002-07:002013-06-10T08:55:58.473-07:00Tools for Data Processing @ Webscale<br /> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> A couple of days ago, I attended the <a href="http://analyticswebscale.splashthat.com/">Analytics @Webscale workshop</a> at Facebook. I found this workshop to be very interesting from a technical perspective. This conference was mostly organized by Facebook Engineering, but they invited LinkedIn, and Twitter to present, and the result was pretty balanced. I think the presentations, though biased to what the 3 "Social Giants" do, were a good summary of many of the problems webscale companies face when dealing with Big Data. It is interesting to see how similar problems can be solved in different ways. I recently described how we address at Netflix many of these issues in our <a href="http://techblog.netflix.com/2013/03/system-architectures-for.html">Netflix Techblog</a>. It is also interesting to see how much sharing and interaction there is nowadays in the infrastructure space, with companies releasing most of what they do as open source, and using - and even building upon - what their main business competitors have created.<br /> <br /> These are my barely edited notes:</div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> Twitter presented several components in their infrastructure. They use Thrift on HDFS to store their logs. They have now build&nbsp;<a href="http://parquet.io/">Twitter Parquet</a>, a columnar storage database that improves storage efficiency by allowing to read columns at a time.<br /> <br /> <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIoYDQKBgQzd9ERXKMlEC9fitrWFnjB56o5epOIaE4dwFayqGUf98xXL4oiQq1XLXEWFu7YwmxqvFOfOWmAwWo21zUX-klJfX6LSqCQAz7llSvZ9HUEcHAUu_pJhqXwbkdxI1b6w/s1600/ParquetTwitter-Poster.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIoYDQKBgQzd9ERXKMlEC9fitrWFnjB56o5epOIaE4dwFayqGUf98xXL4oiQq1XLXEWFu7YwmxqvFOfOWmAwWo21zUX-klJfX6LSqCQAz7llSvZ9HUEcHAUu_pJhqXwbkdxI1b6w/s320/ParquetTwitter-Poster.JPG" width="240" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;">@squarecog talking about Parquet</td></tr> </tbody></table> <br /> They also presented their DAL (Data Access Layer), built on top of <a href="http://incubator.apache.org/hcatalog/">HCatalog</a>.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjycRanuNeXSiPAcP2Sob84tEa4k0XhRHaetn3-XIJcSyy28kYVYhvZt4P5dncddRT7ezdtfEso052aYaCsdztLuaf361vvYMpT7rueNdoa_-HQwpY1HVkZizwgVTbw8jMz5GdxdA/s1600/TwitterDAL-HCatalog-Slide.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjycRanuNeXSiPAcP2Sob84tEa4k0XhRHaetn3-XIJcSyy28kYVYhvZt4P5dncddRT7ezdtfEso052aYaCsdztLuaf361vvYMpT7rueNdoa_-HQwpY1HVkZizwgVTbw8jMz5GdxdA/s320/TwitterDAL-HCatalog-Slide.JPG" width="320" /></a></div> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgexp3_GYhxU_hmAnoJzqrX_PXN3j8Sy-OzUwdaoVnwR_Wy7ULE55yEGNtEQhpGqZjZwYIBFKkX5pRqsm1N57867qIpXTxe_MVamoUdaR8FkuuEaeBlqs3CJjX6skAII9C8sqlJzQ/s1600/DALTwitter-Poster.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgexp3_GYhxU_hmAnoJzqrX_PXN3j8Sy-OzUwdaoVnwR_Wy7ULE55yEGNtEQhpGqZjZwYIBFKkX5pRqsm1N57867qIpXTxe_MVamoUdaR8FkuuEaeBlqs3CJjX6skAII9C8sqlJzQ/s320/DALTwitter-Poster.JPG" width="240" /></a></div> <div class="separator" style="clear: both; text-align: center;"> </div> <br /> <br /> Of course, they also talked about <a href="http://storm-project.net/">Twitter Storm</a>, which is their approach to distributed/nearline computation. Every time I hear about Storm it sounds better. Storm now supports different parts of their production algorithms. For example, the ranking and scoring of tweets for real-time search is based on a Storm topology.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMrkaBVAYebgkRtAOOSgILmXaqu4aSp-FRUZdpwG13CEA_9vOfcOqs5sHz0Gk8WZNS_CrKy3dUsD0gaBYLETkDem5uiOW6zE_Gr8Uo4KECs5OOmipZxcPWh1AY3Zyb7PMPyZYb8A/s1600/TwitterRankingStorm-Slide.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMrkaBVAYebgkRtAOOSgILmXaqu4aSp-FRUZdpwG13CEA_9vOfcOqs5sHz0Gk8WZNS_CrKy3dUsD0gaBYLETkDem5uiOW6zE_Gr8Uo4KECs5OOmipZxcPWh1AY3Zyb7PMPyZYb8A/s320/TwitterRankingStorm-Slide.JPG" width="320" /></a></div> <br /> <br /> Finally, they also presented a new tool called <a href="http://lanyrd.com/2013/lambda-jam/scghxb/">Summingbird</a>. This is still not open sourced, but they are planning on doing so soon. Summingbird is a DSL on top of <a href="https://github.com/twitter/scalding">Scalding</a> that allows to define workflows that integrate offline batch processing from Hadoop and near-line from Storm.<br /> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO-XlsOO4XL0iwrepfwsj-v-c-RCD4jhYB3_U1RFDgDWW5MeT3a4SDdSZx7c8U1LBBRcU9r0fo3xxFKqx2qu4VjUV5xGw3Ou0ICF9rEN_vdNvFK_zO8BgxdZG-tHputuI3hbvirA/s1600/TwitterSummingbird-Slide.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO-XlsOO4XL0iwrepfwsj-v-c-RCD4jhYB3_U1RFDgDWW5MeT3a4SDdSZx7c8U1LBBRcU9r0fo3xxFKqx2qu4VjUV5xGw3Ou0ICF9rEN_vdNvFK_zO8BgxdZG-tHputuI3hbvirA/s320/TwitterSummingbird-Slide.JPG" width="320" /></a></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcxKfqVWVFDV-J_7tZnSEjdWCpocRDG3n6Ms2Buy9wMNxT94zr1-5QGvgVnBplzSW_1aXdsgtfsVv1CZIEnhsMxKmUdYARYlxQyB-s_fqMSAZhItuS69wNNsGdF2Ye6AYf8bcy4Q/s1600/Summingbird-Poster.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcxKfqVWVFDV-J_7tZnSEjdWCpocRDG3n6Ms2Buy9wMNxT94zr1-5QGvgVnBplzSW_1aXdsgtfsVv1CZIEnhsMxKmUdYARYlxQyB-s_fqMSAZhItuS69wNNsGdF2Ye6AYf8bcy4Q/s320/Summingbird-Poster.JPG" width="240" /></a></div> <div class="separator" style="clear: both; text-align: center;"> <br /></div> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> LinkedIn also talked about their approach to combining offline/near-line/real-time computation although I always get the sense that they are much more leaning towards the former. They talked about three main tools: <a href="http://kafka.apache.org/">Kafka</a>, their publish subscribe system; <a href="http://data.linkedin.com/opensource/azkaban">Azkaban</a>, a batch job scheduler we have talked about using in the past; and <a href="http://data.linkedin.com/projects/espresso">Espresso</a> a timeline-consistent NOSQL database.<br /> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirKn3N-5EtXaHihYsLoCXNbVndszykhYBXQD-nk1koA4zTqwfuIDAfnZbLeIEOGWpWiEdhqN8DDRTt5n7kN2E1zFuscl8OEi4v2wCtvIiEpLCP0qrTul2GLjV-j65Oh4T0uIgPZQ/s1600/Exa-scaleSystemsFacebook-Slide.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirKn3N-5EtXaHihYsLoCXNbVndszykhYBXQD-nk1koA4zTqwfuIDAfnZbLeIEOGWpWiEdhqN8DDRTt5n7kN2E1zFuscl8OEi4v2wCtvIiEpLCP0qrTul2GLjV-j65Oh4T0uIgPZQ/s320/Exa-scaleSystemsFacebook-Slide.JPG" width="320" /></a></div> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> Facebook also presented their whole stack. Some known tools, some not so much. <a href="https://www.facebook.com/notes/facebook-engineering/under-the-hood-data-diving-with-scuba/10150599692628920">Facebook Scuba</a>&nbsp;is a distributed in-memory stats store that allows them to read distributed logs and query them fast. <a href="http://gigaom.com/2013/06/06/facebook-unveils-presto-engine-for-querying-250-pb-data-warehouse/">Facebook Presto</a> was a new tool presented as the solution to get fast queries out of Exabyte-scale data stores. The sentence "A good day for me is when I can run 6 Hive queries" supposedly attributed to a FB data scientist stuck in my mind ;-).&nbsp;<span style="line-height: 1.428571em;">Morse is a different distributed approach to fast in-memory data loading. And,</span><span style="line-height: 1.428571em;">&nbsp;</span><a href="http://www.quora.com/Why-did-Facebook-develop-Puma-pTail-instead-of-using-existing-ones-like-Flume" style="line-height: 1.428571em;">Puma/ptail</a><span style="line-height: 1.428571em;">&nbsp;</span><span style="line-height: 1.428571em;">is a different approach to "tailing" logs, in this case into HBase.&nbsp;</span><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8QyRz_VVTNoiof6bLUpdup2tkuRThzEFSZgRkd1XX5WfrqScTCefh6rIsz2ENlMtkwYm5uDyX7kG3ZX8ppjW0lJ4bJ4gng8pl72i56oIKJP74GZ5o4m_icJ567hdsxnawAXnMlA/s1600/FacebookScubaPoster.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8QyRz_VVTNoiof6bLUpdup2tkuRThzEFSZgRkd1XX5WfrqScTCefh6rIsz2ENlMtkwYm5uDyX7kG3ZX8ppjW0lJ4bJ4gng8pl72i56oIKJP74GZ5o4m_icJ567hdsxnawAXnMlA/s320/FacebookScubaPoster.JPG" width="240" /></a></div> <br /> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> Another Facebook tool that was mentioned by all three companies is <a href="https://github.com/apache/giraph">Giraph</a>. (To be fair, Giraph was started at Yahoo, but Facebook hired the creator Avery Ching). Giraph is a graph-based distributed computation framework that works on top of Hadoop. Facebook claims they ran a Page Rank on a graph with a trillion edges on 200 machines in less than 6 minutes/iteration. Giraph is another alternative to <a href="http://graphlab.org/">Graphlab</a>. Both LinkedIn and Twitter are using it. In the case of Twitter, it is interesting to hear that they now prefer it to their own in-house (although single-node)&nbsp;<a href="https://github.com/twitter/cassovary">Cassovary</a>. It will be interesting to see all these graph processing tolls side by side in this year's <a href="http://graphlab.org/graphlab-workshop-2013/">Graphlab workshop</a>.</div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> <br /></div> <div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 1.428571em; margin: 0px; padding: 0px;"> Another interesting thread I heard from different speakers as well as coffee-break discussions was the use of <a href="http://www.quora.com/How-does-YARN-compare-to-Mesos">Mesos vs. Yarn</a> or even <a href="http://spark-project.org/">Spark</a>. It is clear that many of us are looking forward to the NextGen Mapreduce tools to reach some level of maturity.<br /> <br /> <br /></div> Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-16308401253706682862013-01-15T22:50:00.000-08:002013-01-23T23:31:02.668-08:0010 "Little" lessons for life that I learned from running(Sorry for allowing myself to depart from the usual geeky computer science algorithmic talk in this blog. I owed it to myself and my biggest hobby to write a post like this. I hope you bear with me.) <br /> <br /> Around 3 years ago, I smoked, I was overweight, and only exercised occasionally. Being a fan of radical turns in my life, I decided one day to go on a week-long liquid diet, I stopped smoking, and I took up running, with the only goal in my mind to some time run the half marathon in my home town. Little did I know that the decision to run would change my life in so many ways. This last year 2012, I have run 3 marathons, 4 half marathons, and a 199 mile relay with a team of 12. But, beyond that, I am convinced that I owe part of my personal and professional success these past years to the fact that I am a runner.<br /> <br /> This post is my little homage to running and to the many lessons I have found in my journey.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwKwb9kHGWFfm6oPhzmpVwo3eptqNrlwbGwKKDa_af8KtlObOHRyvac5Avtc_hB07EqRo3wYyh7T6jZyclpuMmY8Ivag-bzO_C3pUT4aLZAC_RrAkQcJCzBW03vq4wnb3poJF1JA/s1600/ChicagoFinisher.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwKwb9kHGWFfm6oPhzmpVwo3eptqNrlwbGwKKDa_af8KtlObOHRyvac5Avtc_hB07EqRo3wYyh7T6jZyclpuMmY8Ivag-bzO_C3pUT4aLZAC_RrAkQcJCzBW03vq4wnb3poJF1JA/s320/ChicagoFinisher.jpg" width="209" /></a></div> <br /> <h2> </h2> <br /> When I started running I had lots of problems. The main one was due to an old knee injury that hit back on me. I had an ACL surgery when I was 16, and ever since my right knee has not been the same. When my knee started hurting this time, I visited several doctors, some specialized in sports. All of them recommended I should give up running. Some told me straight out that I would never be able to run a marathon. It took me lots of visits to the chiropractor, and lots of quads exercises over months to get back to running. But, I overcame these initial hurdles, and went into running not one but several marathons.<br /> <br /> <i><b>Lesson 1. Beginnings are hard:</b> Starting anything new in life will be hard. You will need to invest lots of energies, and at times you will want to give up. The more important and significant the change is, the more it will take from you. </i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEged1aCBEL19vAHxu73aTkrhp-9IMe_qQTW-NFgDopmmvfklQKrSKpxfZ7FN5obHMJVcMbU7ur3rezkrVsZnv_9OQ2DNjrA-sbNMsn_jGioZ59Tu4IMzw1ntDyc6zYbLgR1fAezAA/s1600/97632-082-020f.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEged1aCBEL19vAHxu73aTkrhp-9IMe_qQTW-NFgDopmmvfklQKrSKpxfZ7FN5obHMJVcMbU7ur3rezkrVsZnv_9OQ2DNjrA-sbNMsn_jGioZ59Tu4IMzw1ntDyc6zYbLgR1fAezAA/s320/97632-082-020f.jpg" width="320" /></a></div> <br /> After I finished my first marathon in Santa Cruz, and when I thought all my knee problems were long gone, my knee started hurting again. This was nothing like what I had experienced when starting. Still, it could have been enough to stop me from trying again. But, it didn't. I focused on recovering. Soon I was back on the road.<br /> <br /> <b> <i>Lesson 2. There will be ups and downs:</i></b><i> Once you have overcome the initial difficulties in starting something new, you will be tempted to think that everything else should be easy . But, life, like most running courses, will have hills with ups and downs.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq2P8lAOhoCOJuMWLmUnaHj9hi-LElM2QBXnTV5mveNExovso4rL1zdaG6BGXZmx2ckpZxP5hfUkFGsjnOSh0qC3-xoMLkGcWtRLZ1m2Ib3JFDdFk_kiLk481gfoGzU2WjWsGFUA/s1600/Los3Mosqueteros.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq2P8lAOhoCOJuMWLmUnaHj9hi-LElM2QBXnTV5mveNExovso4rL1zdaG6BGXZmx2ckpZxP5hfUkFGsjnOSh0qC3-xoMLkGcWtRLZ1m2Ib3JFDdFk_kiLk481gfoGzU2WjWsGFUA/s320/Los3Mosqueteros.jpg" width="303" /></a></div> <br /> It is hard to wake up at 6 am for the morning run. It is easy to stay in bed when your legs are still sore from yesterday's training. It is tough to go out running when it is raining or freezing outside. It is even harder to decide not to stop when you hit the wall on mile 20 of a marathon. All these day to day small decisions end up adding up and making the difference between you improving and accomplishing your running goals.<br /> <br /> <i><b>Lesson 3. The importance of those small decisions:</b> The small day to day decisions play a huge role in building your character. They will end up determining your long term success and the direction your life takes.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2sB-Hl9AlHL1kMRBkHVnHJKzYGHiCt4-35beUfT-hcCL1J_KKasK3UL2t31HLyb2viAKfyiZntXgqZU1QdNoXACXNvwt8TvefapFxcqo6NH4SrRNxTFZ813tl0xEfP-iLGCLH6Q/s1600/Sacramento.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2sB-Hl9AlHL1kMRBkHVnHJKzYGHiCt4-35beUfT-hcCL1J_KKasK3UL2t31HLyb2viAKfyiZntXgqZU1QdNoXACXNvwt8TvefapFxcqo6NH4SrRNxTFZ813tl0xEfP-iLGCLH6Q/s320/Sacramento.jpg" width="320" /></a></div> <br /> When you are not at your best, it is even harder to face all these small decisions I mentioned. If you are down for some time because of an injury, it is tough to start again on your own. Having a group of friends that share your passion for running is extremely important. I am fortunate to have a large group of friends that push me to become better, and help me get up when I fall.<br /> <br /> <i><b>Lesson 4. You are not alone - the power of social influence... and friends:</b> Whatever new adventure you start in life, it is important to have people around you that understand and support it. People that share your passion can make a difference when you need it.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcG3rZLpJEewG5rQiG6aymClCHzyv-m5Wl-UZHVT9Pt6g66-CH312Tjo3GZnYlAUVNzgUQlgZXqIMg87iYCy88zf6AzUK2bDI9Nt00FRY-lK0Ow18kAekdzapjy-9YSYjpNvaNYA/s1600/723255-1001-0002s.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcG3rZLpJEewG5rQiG6aymClCHzyv-m5Wl-UZHVT9Pt6g66-CH312Tjo3GZnYlAUVNzgUQlgZXqIMg87iYCy88zf6AzUK2bDI9Nt00FRY-lK0Ow18kAekdzapjy-9YSYjpNvaNYA/s320/723255-1001-0002s.jpg" width="320" /></a></div> <br /> As much as I have appreciated having that extra support from friends and other fellow runners, there are many times I have felt the pressure of having to make a decision on my own. Many of those small decisions such as getting up off bed on a rainy day, for example. Nobody is going to make them for you. I have also felt alone in many of my training runs. And, of course, in mile 20 of a marathon, when everyone is giving their best but you can only see strangers around you. In all those moments it is important to be strong and be ready to carry on, on your own.<br /> <h3> </h3> <i><b>Lesson 5. But, you will be alone: </b>No matter how many friends support you, you will have to face important decisions on your own, and carry your own weight.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiZAX0M-MaH1OP2ULO5gTQ8k8iXv3Rsyl2OWHWMdz-QdNCIAXoyUtNeaRN4NhjQ1lvZIQGIhESBt9imyH-f38D1NkiCvplY20g_4SYp4w_Eo-QuzVqnq9ruXQCkijqRP-oaxE7Vw/s1600/Relay.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiZAX0M-MaH1OP2ULO5gTQ8k8iXv3Rsyl2OWHWMdz-QdNCIAXoyUtNeaRN4NhjQ1lvZIQGIhESBt9imyH-f38D1NkiCvplY20g_4SYp4w_Eo-QuzVqnq9ruXQCkijqRP-oaxE7Vw/s320/Relay.jpg" width="320" /></a></div> <br /> It is well known that "repetition leads to mastery". This is even more so for activities that require developing physical strength and resistance. There is no other secret to becoming a better runner than to run, and run often. Putting on more miles is the goal. Everything else will come.<br /> <br /> <i><b>Lesson 6. Repeat, repeat, repeat, repeat: </b>Repetition is the key to mastering most things in life. If you want to become good at doing something, ask yourself how you can invest thousands of hours in it (read about <a href="http://www.gladwell.com/outliers/outliers_excerpt1.html">the 10k hour rule</a> in Malcolm Gladwell's Outliers).</i><br /> <h4> </h4> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYAdPB9YTZUXv7n6RAVa8jCmXkpDaHSvUnY5lwlIf_bpCHthRJH-DFjv42pf-WjhYjqWyBR3kV7l-HZQcq9o1Hc0Tcim4GlMdOs1Ez_IcF1U0ls04YZtwb0bJ7SNNVOYgGBRQDxg/s1600/WithAitor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYAdPB9YTZUXv7n6RAVa8jCmXkpDaHSvUnY5lwlIf_bpCHthRJH-DFjv42pf-WjhYjqWyBR3kV7l-HZQcq9o1Hc0Tcim4GlMdOs1Ez_IcF1U0ls04YZtwb0bJ7SNNVOYgGBRQDxg/s320/WithAitor.jpg" width="191" /></a></div> <br /> <br /> As much as repetition is needed to improve, it is hard to do so without a goal in mind. During my time running I have learned the power of having concrete goals. Setting up goals that are achievable in the long run, but not too easy to get to. As I have progressed, I have learned to be more demanding. My current goals is to do a 3:30 marathon, and a 1:30 half. The first one is achievable, the second one will need much more work. But these goals will keep me going and focused for some time.<br /> <br /> <i><b>Lesson 6. Set your goals:</b> Setting ambitious but achievable goals in life will help you push harder and will keep you focused and looking forward.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpwegnty_HEPBnkWfgLo2-OO8jJeCYTf2p4JINahas1xPU6pYwuCMhEarCxlEgx7iezFXFaf7sE4i8fWFMUCt2Pq5udbFDWOARubgoLfLzNJT6D82EaJc2qRPCPvSYNbL71ZGXg/s1600/IMAG0506.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="191" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHpwegnty_HEPBnkWfgLo2-OO8jJeCYTf2p4JINahas1xPU6pYwuCMhEarCxlEgx7iezFXFaf7sE4i8fWFMUCt2Pq5udbFDWOARubgoLfLzNJT6D82EaJc2qRPCPvSYNbL71ZGXg/s320/IMAG0506.jpg" width="320" /></a></div> <br /> When I look back at the way I started running, I realize how many things I did wrong. I have learned so much since then. I have read books, watched movies and online videos, talked to people that know much more than I do. I have also learned from looking at the data that I generate from each of my trainings. I have also learned to listen to and understand my body I am fortunate enough that I love learning, and I have enjoyed every bit of this learning experience.<br /> <h3> </h3> <b><i>Lesson 7. Data and knowledge:</i></b><i> Use all the information around you to improve your life. Data about you can give you insights into how to become better. And any knowledge you gain from external sources can make a difference when taking a decision.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCbuci00Ic6F7jx58bGdXeI2tCea15A6seNtSzxtUpZG7OQUxLKbYRfNOq5nj0_HX1vXHlrUKrr8-IwZGw2MKGdMZNvhlUy88xdXPfSjlJasLQKoaBwVTNAB0mV9bRN4CC8kecWA/s1600/ClothesReady.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCbuci00Ic6F7jx58bGdXeI2tCea15A6seNtSzxtUpZG7OQUxLKbYRfNOq5nj0_HX1vXHlrUKrr8-IwZGw2MKGdMZNvhlUy88xdXPfSjlJasLQKoaBwVTNAB0mV9bRN4CC8kecWA/s320/ClothesReady.jpg" width="320" /></a></div> <br /> One of the reasons why beginnings are hard (Lesson 1) is that people that start running tend to overdue it by, for example, increasing distance and pace at the same time. This typically leads to injury, and frustration. One of the most important things to learn when starting to run is to understand your own limitations. Even when you do, you will be tempted to push to hard by continuing to run when your leg hurts, or by doing one too many races in a short period. I have done all of the above. But it is important to remember that everyone has their limits and forcing beyond them can result in long term problems.<br /> <h3> </h3> <b><i>Lesson 8. Everyone has their limits: </i></b><i>Pu</i><i>shing yourself hard is good. However, there is such a thing as pushing *too* hard. You need to understand where your limits are to push them further, but only little by little.</i><br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZIbn2qgqe2Runu8eUpKhAN0qO60P9oAkYtfyqb6-hV5BSUW90zBcnQJ6UkQJTZRDWRn4yWcc9VClQjKGxT90lC5aTMR4cXIng2co_lsIHQrjaYYm9iN0_uQ_0aFPL0IxNrmw1Xg/s1600/HMB.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZIbn2qgqe2Runu8eUpKhAN0qO60P9oAkYtfyqb6-hV5BSUW90zBcnQJ6UkQJTZRDWRn4yWcc9VClQjKGxT90lC5aTMR4cXIng2co_lsIHQrjaYYm9iN0_uQ_0aFPL0IxNrmw1Xg/s320/HMB.jpg" width="320" /></a></div> <br /> <br /> No matter how hard it can get at some points, no matter how long it can take you, there is no doubt that you can do whatever you set your mind to. I don't have any special conditions for running, and I have never had. I don't think I will ever be a "great" runner. However, now I look back and laugh when I remember my unreachable goal a little over 3 years ago was "only" to run a half marathon. If someone like me, with little or no pre-existing conditions, family and work obligations, and very little time, can do it, so can you.<br /> <br /> <i><b>Lesson 9. But, yes you can: </b>No matter how low you fall or how far your goal is,&nbsp; you can do it. Only think about the many people just like you who have done it before (e.g. Estimates are that around 0.1 to 0.5% of US Population has completed a Marathon). Why should you be any less? <b><br /></b></i><br /> <div class="separator" style="clear: both; text-align: center;"> </div> <div class="separator" style="clear: both; text-align: center;"> </div> <div class="separator" style="clear: both; text-align: center;"> </div> <br /> <div class="separator" style="clear: both; text-align: center;"> </div> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbyMwa4XE7uDmkDoskkVY0RN3yaZjPrhx_vM6sa6EXN4pwXJlW6xPWWnGbNu-kdMLJPBJj6eV9QTibaLcSaQ4Y1K0SEZ9J_MASWLbqVuuWjxw15mNnkfOGj-zHhQpegPPdo24nQ/s1600/VasonaLakePedroAlbertoXavi.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbyMwa4XE7uDmkDoskkVY0RN3yaZjPrhx_vM6sa6EXN4pwXJlW6xPWWnGbNu-kdMLJPBJj6eV9QTibaLcSaQ4Y1K0SEZ9J_MASWLbqVuuWjxw15mNnkfOGj-zHhQpegPPdo24nQ/s320/VasonaLakePedroAlbertoXavi.JPG" width="239" /></a></div> <br /> As a conclusion, let me stress that the fact anyone can run does not mean that running is easy, and it requires no effort. It is precisely the fact that it is hard and requires effort for a long period of time what makes it worthwhile. Like most good things in life.<br /> <br /> <i><b>Lesson 10. All good things come hard:</b> Think about it, all worthy things in life require effort and dedication. Being healthy, fit, happy, having a career, or a family, they all require your energy and long time investment. Just go with it, and enjoy every bit of the journey.</i><br /> <br />Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com3tag:blogger.com,1999:blog-17171206.post-31368086052455457792012-09-17T10:47:00.000-07:002012-09-17T16:41:14.500-07:00Recsys 2012: A long (and likely biased) summaryAfter a great week in beautiful and sunny Dublin (yes, sunny), it is time to look back and recap on the most interesting things that happened in the 2012 Recsys Conference. I have been attending the conference since its first edition in Minnesota. And, it has been great to see the conference mature to become the premiere event for recommendation technologies. I can't hide that this is my favorite conference for several reasons: perfect size, great community, good involvement from industry, and good side program of tutorials, workshops, and demos.<br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBs1syiHzsU4JOWOM-dXkZgm-4W319Jqn7IcRldsn5nhGUQgDdGoUbjv-0TXgWtR4q5XlLHfkEct-ZcUZcBH0jsJa4PTQWyubXRY_aX7mWIHncsjO7_KeEy5CAaHzq9GldT_8CCA/s1600/RecsysPhoto.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBs1syiHzsU4JOWOM-dXkZgm-4W319Jqn7IcRldsn5nhGUQgDdGoUbjv-0TXgWtR4q5XlLHfkEct-ZcUZcBH0jsJa4PTQWyubXRY_aX7mWIHncsjO7_KeEy5CAaHzq9GldT_8CCA/s320/RecsysPhoto.JPG" width="239" /></a></div> <br /> This year I arrived a bit late and missed the first day of tutorials, and first day of the conference. But, was able to catch up after jumping right in with my 90 minute tutorial on "Building Industrial-scale Real-world Recommender Systems"<br /> <br /> In my tutorial (<a href="http://www.slideshare.net/xamat/building-largescale-realworld-recommender-systems-recsys2012-tutorial">see slides here</a>), I talked about the importance of four different issues in real-world recommender systems:<br /> <ul> <li>Paying attention to user interaction models that support things like explanations, diversity, or novelty.</li> <li>Coming up with algorithms that, beyond rating prediction, focus on other aspects of recommendation such as similarity, or, in particular, ranking.</li> <li>Using results of online A/B tests, and coming up with offline model metrics that correlate with the former.</li> <li>Understanding the software architectures where your recommender system will be deployed.</li> </ul> I was happy to see that some of these issues not only were mentioned, but almost became conducting threads throughout the conference. Of course, this might be in the eye of the beholder, and others might have come back with the impression that the main topics were others (I recommend you read these two other Recsys 2012 summaries by <a href="http://thenoisychannel.com/2012/09/14/recsys-2012-beyond-five-stars/">Daniel Tunkelang</a> and <a href="http://www.syslog.cl.cam.ac.uk/2012/09/14/recsys-2012-few-things-i-remember/">Daniele Quercia</a>). In any case, grouping in topics will help me summarize the many things I found interesting.<br /> <h3> Online A/B Testing and offline metrics</h3> I am glad to see that this has become a relevant topic for the conference, because many of us believe this is one of the most important topics that need to be addressed by both industry and academia. One of these people is Ron Kohavi, who delivered a great keynote on "<a href="http://www.exp-platform.com/Pages/2012RecSys.aspx">Online Controlled Experiments: Introduction, Learnings, and Humbling Statistics</a>", where he described his learnings of many years of AB Testing in Amazon and Microsoft. It is funny that I cited his KDD 2012 paper in two slides in my tutorial, not knowing that he was in the audience. I recommend you go through his slides, it was one of the best talks of the conference for sure.<br /> <br /> The importance of finding relevant metrics was, as a matter of fact, the focus of a workshop we organized with Harald Steck (Netflix), Pablo Castells (UAM), Arjen de Vries, and Christian Posse (LikedIn). The title of the workshop was "Recommendation Utility Evaluation: Beyond RMSE". Unfortunately, I was not able to attend. But, I do know the keynote by Carlos Gomez-Uribe, also from Netflix, was very well received. And, the workshop as a whole went very well with several interesting papers and even more interesting discussions. You can access the papers on the <a href="http://ir.ii.uam.es/rue2012/">website</a>.<br /> <br /> A couple of papers in the main track of the conference also touched upon the importance of optimizing several objectives at the same time. In "<a href="http://www.slideshare.net/mechanistician/recsys-2012-slides?ref=http://thenoisychannel.com/">Multiple Objective Optimization in Recommender Systems</a>", Mario Rodriguez and others explain how they design LinkedIn recommendations by optimizing to several objectives at once (e.g. candidate that is good for the job + who is open to new opportunities). They report results from an AB Test run on LinkedIn. In "<a href="http://www.slideshare.net/marcotulioribeiro54/presentation-recsys12">Pareto-Efficient Hybridization for Multi-Objective Recommender Systems</a>", Marco Tulio Ribeiro and others from Universidade Federal de Minas Gerais &amp; Zunnit Technologies take the multi-objective a step further. In their case, they optimize the system to not only be accurate, but also present novel or diverse items.<br /> <br /> Some other papers went beyond the academic experimental procedure and implemented real systems that were tested with users. A good example is "Finding a Needle in a Haystack of Reviews: Cold Start Context-Based Hotel Recommender System" by researchers from the Tel Aviv Yaffo College and Technicolor.<br /> <h3> Learning to Rank</h3> Another hot topic in this year's recsys was ranking (or Top-n Recommendations as some prefer to call it). It is good to see that after some time publicly speaking about the importance of ranking approaches, the community seems now to be much more focused on ranking than on rating prediction. Not only there was a whole session devoted to ranking, but actually many other papers in the conference dealt with the topic in some way or another.<br /> <br /> I will start by mentioning the very good work by my former colleagues from Telefonica. Their paper "CLiMF: Learning to Maximize Reciprocal Rank with Collaborative Less-is-More Filtering" won the best-paper award. And, I think most of us thought that it was very well-deserved. It is a very good piece of work. Well motivated, evaluated, and, it addresses a very practical issue. It is great to see the Recsys team at Telefonica that I started be acknowledged with this award. You can access the paper <a href="http://baltrunas.info/papers/Shi12-climf.pdf">here</a> and the slides <a href="http://www.slideshare.net/kerveros99/climf-collaborative-lessismore-filtering">here</a>.<br /> <br /> In that same session, researchers from the Université Paris 6 presented "Ranking with Non-Random Missing Ratings: Influence of Popularity and Positivity on Evaluation Metrics", an interesting study on the very important issue of negative sampling, and popularity bias in learning to rank. The paper discusses these effects on the AUC (Area Under the Curve) measure, a measure that is not very well-behaved, nor very much used in evaluating ranking algorithms. Still, it is a valuable first step in a very interesting line of work. It is interesting to point out that the CLiMF paper addressed the issue of negative sampling in a radically different way: only considering positive samples. Yet another interesting paper in that session was "<a href="http://www-users.cs.umn.edu/%7Exning/papers/Ning2012.pdf">Sparse Linear Methods with Side Information for Top-N Recommendations</a>", a model for multidimensional context-aware learning to rank.<br /> <br /> Another ranking paper, "Alternating Least Squares for Personalized Ranking" by Gábor Takács from Széchenyi István University and Domonkos Tikk from Gravity R&amp;D, received an honorable mention. The main author coined an (un)popular sentence during his presentation when he invited anyone not interested in Mathematics to leave the room. An unnecessary invitation in a conference that prides itself for being inclusively multidisciplinary. In Recsys, psychologists are seating through systems presentations as much as mathematicians are seating through user-centric sessions, and that is what makes the conference appealing. In any case, the paper presents an interesting way to combines a ranking-based objective function introduced in last year's kdd and the use of ALS instead of SGD to come up with another approach to learning to rank.<br /> <br /> Two papers dealing with recommendations in Social Networks also focused on ranking. "<a href="http://eeweb.poly.edu/faculty/yongliu/docs/topk_tr.pdf">On Top-k Recommendation Using Social Networks</a>" by researchers from NYU and Bell Labs, and "<a href="http://www.l3s.de/web/upload/documents/1/diaz_recsys2012.pdf">Real-Time Top-N Recommendation in Social Streams</a>" by Ernesto Diaz-Aviles and other researchers from the University of Hannover. The same first author had an interesting short paper in the poster session: "<a href="http://www.l3s.de/web/upload/documents/1/sp197-diaz.pdf">Swarming to Rank for Recommender System</a>". In that poster he proposes the use of a Particle Swarm Optimization algorithm to directly optimize ranking metrics such as MAP. The method proposes an interesting alternative to the use of Genetic Algorithms or Simulated Annealing for this purpose.<br /> <br /> Finally, the industry keynote by Ralf Herbrich from Facebook, also introduced the world of Bayesian Factor Models for large-scale distributed ranking. This method, introduced by the same author and others from MSR as "<a href="http://www2009.eprints.org/12/1/p111.pdf">Matchbox</a>" is now used in different settings. For example, the poster "<a href="http://www.eng.tau.ac.il/%7Enoamk/papers/KNPS12.pdf">The Xbox Recommendation System</a>" presented its applicability for recommending movies and games for the Xbox. And, in "<a href="http://research.microsoft.com/pubs/166623/RecSys-2012.pd">Collaborative Learning of Preference Rankings</a>" the authors apply it to... sushi recommendation!<br /> <h3> User-centric, interfaces &amp; explanations</h3> This was probably the third big area of focus of the conference, with many contributions in papers, tutorials, and workshops. The first day, there were actually two tutorials that would fall into this category. In "Personality-based Recommender Systems: An Overview", the authors presented the idea of using personality traits for modeling user profiles. Among other things, they introduced their proposal to use PersonalityML, an XML-based language for personality description. Interestingly, in the industry session, we saw that this is actually a quite practical thing to do. Thore Graepel from Microsoft explained their experiments in using The Big Five personality traits for personalization. In the other tutorial, "<a href="http://www.slideshare.net/usabart/tutorial-on-conducting-user-experiments-in-recommender-systems">Conducting User Experiments in Recommender Systems</a>", Bart Knijnenburg gave a thorough overview of how to conduct user studies for recommender systems. He also introduced his model for using structural equations to model the effects to evaluate. Again, I missed this tutorial, but I was fortunate to hear a very similar presentation by him in Netflix.<br /> <br /> In "<a href="http://bostandjiev.com/Content/publications/SocialRecStudy.pdf">Inspectability and Control in Social Recommenders</a>", Bart himself (and researchers from UCSB) analyze the effect of giving more information and control to users in the context of social recommendations. A similar idea is explored in the short paper "The Influence of Knowledgeable Explanations on Users' Perception of a Recommender System" by Markus Zanker.<br /> <br /> Two papers addressed the issue of how much information we should require from users. In "User Effort vs. Accuracy in Rating-Bbased Elicitation" Paolo Cremonesi and others analyze how many ratings "are enough" for producing satisfying recommendations in a cold-start setting. And, in "How Many Bits Per Rating?", the Movielens crew try to quantify the amount of information and noise in user ratings from an information-theoretical perspecive. An interesting continuation to <a href="http://technocalifornia.blogspot.com/2009/04/i-like-it-i-like-it-not-or-how-miss.html">my work on user ratings noise</a>. However, as the first author himself admited, this is just initial work.<br /> <br /> Other highlights of user-centric work that fell more on the UI side were the paper "TasteWeights: A Visual Interactive Hybrid Recommender System" by my friends at UCSB, as well as the many papers presented in the <a href="https://homepages.abdn.ac.uk/csc284/pages/InterfaceRS/">Workshop on Interfaces for Recommender System</a>. <br /> <h3> Data &amp; Machine Learning Challenges</h3> If somebody thought that data and machine learning challenges would fade away after the Netflix Prize, this year's Recys was a clear example that this is far from being the case. Many challenges have taken over after that: the yearly KDD Cups, Kagel, Overstock, last year's MoviePilot challenge, the Mendeley Challenge... Recsys had this year a <a href="http://recsys.acm.org/2012/tutorials.html#best">Tutorial/Panel</a> and a <a href="http://2012.recsyschallenge.com/">Workshop</a> on Recommender Systems Challenges, both organized by Alan Said, Domonkos Tikk, and others. I could not attend the Tutorial since it was happening at the same time than mine. But, I was able to catch some interesting presentations in the Workshop. Domonkos Tikk from Gravity R&amp;D gave <a href="http://www.slideshare.net/domonkostikk/from-a-toolkit-of-recommendation-algorithms-into-a-real-business-the-gravity-rd-experience">a very interesting presentation</a> on how they evolved from being a team in the Netflix Prize to a real-world company with very interesting projects. Kris Jack from Mendeley also gave two interesting talks on the Mendeley recommender systems. In <a href="http://www.slideshare.net/KrisJack/mendeley-suggest-engineering-a-personalised-article-recommender-system">one of them</a>, he explained how they make use of AWS and Mahout in a system that can generate personalized recommendations for about $60 a month. In <a href="http://www.slideshare.net/KrisJack/rec-sys12mendeleydatachallenges">the other</a>, he talked about their perspective on data challenges.<br /> <h3> Context-aware and location-based recommendations</h3> This has become a traditional area of interest in Recsys. It has now matured to a point that it has it own session, and two workshops: "<a href="http://loca.mobilelifecentre.org/">Personalizing the Local Mobile Experience</a>", and the "<a href="http://cars-workshop.org/">Workshop on Context-Aware Recommender Systems</a>". But, besides having its own session in the conference, several other papers in others also deal with context-aware recommendations. I have already mentioned "Sparse Linear Methods with Side Information for Top-N Recommendations", for example. Other interesting papers in this area were "Context-Aware Music Recommendation Based on Latent Topic Sequential Patterns", on the issue of playlist generation, and "<a href="http://www.cl.cam.ac.uk/%7Edq209/publications/trumper12ads.pdf">Ads and the City: Considering Geographic Distance Goes a Long Way</a>" for location-aware recommendations.<br /> <h3> Social</h3> A similar area that has already matured over several Recsys is Social. It has its own session, and Workshop, "<a href="http://ls13-www.cs.uni-dortmund.de/homepage/rsweb2012/index.shtml">Workshop on Recommender Systems and the Social Web</a>" , and trancends over many other papers. In this area, the paper that I have not mentioned in other categories and found interesting was "<a href="http://www.slideshare.net/daniele.quercia/recsys-14297597">Spotting Trends: The Wisdom of the Few</a>". One of the reasons I found the paper interesting is because it builds on our idea of using a reduced set of experts for recommendations, what we called "<a href="http://technocalifornia.blogspot.com/2009/05/wisdom-of-few.html">The Wisdom of the Few</a>". <br /> <h3> Others</h3> And yes, I still have some interesting stuff from the poster session that I could not fit into any of the above categories.<br /> <br /> First, the short paper "<a href="http://ir.ii.uam.es/%7Ealejandro/2012/recsys.pdf">Using Graph Partitioning Techniques for Neighbour Selection in User-Based Collaborative Filtering</a>" by Alejandro Bellogin. Alejandro won the Best Short Paper Award, for a great piece of work and presentation. He described an approach to use the Normalized Cut graph clustering approach for grouping similar users, and improve neighborhood formation in standard kNN Collaborative Filtering.<br /> <br /> I also liked the poster "<a href="http://cse.iitkgp.ac.in/%7Epabitra/paper/recsys12.pdf">Local Learning of Item Dissimilarity Using Content and Link Structure</a>", another graph-based approach, in this case to learn a similarity function.<br /> <br /> Finally, in "When Recommenders Fail: Predicting Recommender Failure for Algorithm Selection and Combination", Michael Ekstrand starts to tap into an extremely important question: when and why do some recommendation algorithms fail? This question has been informally discussed in the context of hybrid recommenders and ensembles. But, there is clearly much more work to do, and many things to understand.<br /> <br /> <br /> ----------------------<br /> <br /> <br /> Well, if you made it all the way to here, it means that you are really interested in Recommender Systems. So, chances are that I will be seeing you in next year's Recsys. Hope to see you in Hong Kong!<br /> <br />Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1tag:blogger.com,1999:blog-17171206.post-21165056286107699392012-09-05T10:18:00.001-07:002012-09-05T10:28:40.312-07:00Netflix @ Recsys 2012<div class="separator" style="clear: both; text-align: center;"> <a href="http://recsys.acm.org/2012/images/header.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="104" src="http://recsys.acm.org/2012/images/header.png" width="320" /></a></div> <br /> We are just a few days away from the <a href="http://recsys.acm.org/2012/images/header.png">2012 ACM Recommender Systems Conference</a> (#Recsys2012), that this year will take place in Dublin, Ireland. Over the years, Recsys has become my favorite conference because of its unique blend of academic research and industrial applications. If you are not familiar with the conference, you might get a flavor by reading <a href="http://technocalifornia.blogspot.com/2011/11/recsys-2011-notes-and-pointers.html">my report from last year</a>. Needless to say that it is also dear to my heart because of my involvement as General Cochair in its <a href="http://recsys.acm.org/2010/">2010 edition in Barcelona</a>.<br /> <br /> If you had to mention a single company that is identified with recommender systems and technologies, that would probably be Netflix. The Netflix Prize started a year before the first Recsys conference in Minneapolis, and it impacted Recommender Systems researchers and practitioners in many ways. So, it comes as no surprise that the relation between the conference and Netflix also goes a long way. Netflix has been involved in the conference through the years. And, this time in Dublin is not going to be any different. Not only Netflix is a proud sponsor of the conference, but you will have the chance to listen to presentations and meet some of the people that make the wheels of Netflix recommendations turn. Here are some of the highlights of Netflix' participation:<br /> <ul> <li>&nbsp;Both Harald Steck and myself are involved in organizing the workshop on "<b><a href="http://ir.ii.uam.es/rue2012/">Recommender Utility Evaluation: Beyond RMSE</a></b>". We believe that finding the right evaluation metrics is one of the key issues for recommender systems. This workshop will be a great event to not only discover latest research in the area, but also brainstorm and discuss on the issue of recsys evaluation. Unfortunately, I will miss the workshop because of my traveling schedule. But, Harald will be representing Netflix on the organization side.</li> <li>On that same workshop, you should not miss the keynote by our Director of Innovation Carlos Gomez-Uribe. The talk is entitled "<a href="http://ir.ii.uam.es/rue2012/keynote.html"><b>Challenges and Limitations in the Offline and Online Evaluation of Recommender Systems: A Netflix Case Study</b></a>". Carlos will give some insights into how we deal with online A/B and offline experimental metrics.</li> <li>On Tuesday, I will be giving a 90 minute tutorial on "<b><a href="http://recsys.acm.org/2012/tutorials.html#building">Building industrial-scale real-world Recommender Systems</a></b>". In this tutorial, I will talk about all those things that matter in a recommender system, and are usually outside of the academic focus. I will describe different ways that recommendations can be presented to the users, evaluation through AB testing, data, and software architectures. I look forward to seeing you all there.</li> </ul> Besides Harald, Carlos and myself, you should also look forward to meeting other members of the personalization team at Netflix. Rex Lam, Justin Basilico, and Kelvin Jiang, will also be attending the conference. We are all looking forward to meeting old and new friends and interacting with the Recsys community during the conference. If you want to make sure we meet, feel free to send me an email (first name initial+last name at netflix.com) or contact through <a href="https://twitter.com/xamat">twitter</a>. Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-8638386195375956982012-07-02T23:22:00.000-07:002012-07-03T23:58:08.762-07:00More data or better models?The discussion of whether it is better to focus on building better algorithms or getting more data is by no means new. But, it is really catching on lately. This was one of the preferred discussion topics in <a href="http://news.cnet.com/8301-13556_3-57389685-61/data-vs-models-at-the-strata-conference/">this year's Strata Conference</a>, for instance. And, I do have the feeling that because of the Big Data "hype", the common opinion is very much favoring those claiming that it is "all about the data". The truth is that data by itself does not necessarily help in making our predictive models better. In the rest of this post I will try to debunk some of the myths surrounding the "more data beats algorithms" fallacy.<br /> <h3> The Unreasonable Effectiveness of a Misquote</h3> Probably one of the most famous quotes defending the power of data is that of Google's Research Director <a href="http://en.wikipedia.org/wiki/Peter_Norvig">Peter Norvig</a> claiming that "We don’t have better algorithms. We just have more data.". This quote is usually linked to the article on "The Unreasonable Effectiveness of Data", co-authored by Norvig&nbsp; himself (you should probably be able to find the pdf on the web although <a href="http://googleresearch.blogspot.com/2009/03/unreasonable-effectiveness-of-data.html">the original</a> is behind the IEEE paywall). The last nail on the coffin of models is when Norvig is misquoted as saying that "All models are wrong, and you don't need them anyway" (read <a href="http://norvig.com/fact-check.html">here</a> for the author's own clarifications on how he was misquoted).<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0XHRIAOpKzBtohbdqZFmayHl2971rwSMzfzLXs0Yvi0_j-tpUD19OwnYM1CR92bM3ZLaFjZ7bkNgONOFqViIE6H0by2GqOzqzWXFh8Bf2lzwi-an4QOL3nV2xiZgYU7ARR7LJ5g/s1600/TheUnreasonableEffectivenessOfData.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0XHRIAOpKzBtohbdqZFmayHl2971rwSMzfzLXs0Yvi0_j-tpUD19OwnYM1CR92bM3ZLaFjZ7bkNgONOFqViIE6H0by2GqOzqzWXFh8Bf2lzwi-an4QOL3nV2xiZgYU7ARR7LJ5g/s320/TheUnreasonableEffectivenessOfData.png" width="320" /></a></div> The effect that Norvig et. al were referring to in this article, had already been captured years before in the famous paper by Microsoft Researchers Banko and Brill [2001] "<a href="http://acl.ldc.upenn.edu/P/P01/P01-1005.pdf">Scaling to Very Very Large Corpora for Natural Language Disambiguation</a>". In that paper, the authors included the plot below.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhntB-7_eZ2cCYkUMX2g5A66El8Y1_6G0d2FGvMSTUwDhbVNNreVduwxAc1mRtyGEgcbOQH8PKcTO2TvbNMZ4c8YE6-KTr3vsyLBJyDZO6QXj39qfUTL_lvG_95oCYpdPM1-_0zXA/s1600/BankoAndBrill.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhntB-7_eZ2cCYkUMX2g5A66El8Y1_6G0d2FGvMSTUwDhbVNNreVduwxAc1mRtyGEgcbOQH8PKcTO2TvbNMZ4c8YE6-KTr3vsyLBJyDZO6QXj39qfUTL_lvG_95oCYpdPM1-_0zXA/s320/BankoAndBrill.png" width="299" /></a></div> That figure shows that, for the given problem, very different algorithms perform virtually the same. however, adding more examples (words) to the training set monotonically increases the accuracy of the model.<br /> <br /> So, case closed, you might think. Well... not so fast. The reality is that both Norvig's assertions and Banko and Brill's paper are right... in a context. But, they are now and again misquoted in contexts that are completely different than the original ones. But, in order to understand why, we need to get slightly technical. I don't plan on giving a full machine learning tutorial in this post. If you don't understand what I explain below, read Andrew Ng's <a href="http://cs229.stanford.edu/materials/ML-advice.pdf">Practical Advice for Machine Learning</a>. Or, better still, enroll in his <a href="https://www.coursera.org/course/ml">Machine Learning course</a>.<br /> <h3> Variance or Bias? </h3> The basic idea is that there are two possible (and almost opposite) reasons a model might not perform well.<br /> <br /> In the first case, we might have a model that is too complicated for the amount of data we have. This situation, known as <i>high variance</i>, leads to model overfitting. We know that we are facing a high variance issue when the training error is much lower than the test error. High variance problems can be addressed by reducing the number of features, and... yes, by increasing the number of data points. So, what kind of models were Banko &amp; Brill's, and Norvig dealing with? Yes, you got it right: high variance. In both cases, the authors were&nbsp; working on language models in which roughly every word in the vocabulary makes a feature. These are models with many features as compared to the training examples. Therefore, they are likely to overfit. And, yes, in this case adding more examples will help.<br /> <br /> But, in the opposite case, we might have a model that is too simple to explain the data we have. In that case, known as <i>high bias</i>, adding more data will not help.&nbsp; See below a plot of a real production system at Netflix and its performance as we add more training examples.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuhnnBRqBjI_HkZ_fhLTVny9Yklt-hNIxYAxCPllx3f9jKSq7V8eyFazedcSuY2nzrWlyNeOXL8ZvUYIhcpwlZORFyGyiAvcPfCxocoOPjvhsN-EeseYZn5JuWUn3Oz0T2dAATdQ/s1600/PerformanceVsTrainingSize.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuhnnBRqBjI_HkZ_fhLTVny9Yklt-hNIxYAxCPllx3f9jKSq7V8eyFazedcSuY2nzrWlyNeOXL8ZvUYIhcpwlZORFyGyiAvcPfCxocoOPjvhsN-EeseYZn5JuWUn3Oz0T2dAATdQ/s320/PerformanceVsTrainingSize.png" width="320" /></a></div> <br /> <br /> So, no, <b>more data does not always help</b>. As we have just seen there can be many cases in which adding more examples to our training set will not improve the model performance.<br /> <h3> More features to the rescue</h3> If you are with me so far, and you have done your homework in understanding high variance and high bias problems, you might be thinking that I have deliberately left something out of the discussion. Yes, high bias models will not benefit from more training examples, but they might very well benefit from more features. So, in the end, it is all about adding "more" data, right? Well, again, it depends.<br /> <br /> Let's take the Netflix Prize, for example. Pretty early on in the game, there was <a href="http://anand.typepad.com/datawocky/2008/03/more-data-usual.html">a blog post</a> by serial entrepreneur and Stanford professor <a href="http://en.wikipedia.org/wiki/Anand_Rajaraman">Anand Rajaraman</a> commenting on the use of extra features to solve the problem. The post explains how a team of students got an improvement on the prediction accuracy by adding content features from IMDB. <br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRgLcxY8Ow2qC9UiTQ3hQ4AMXKsUk6E6hhnRznrW2amUuunJrxOJT0F9LnOssQK95sIQy-bu-zlYH8uwZfuecQBHeiyqNjTz-xacDCHbNcdwKJlB6prP8jCH7JOVFIRcTrCtpccg/s1600/Datawocky.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRgLcxY8Ow2qC9UiTQ3hQ4AMXKsUk6E6hhnRznrW2amUuunJrxOJT0F9LnOssQK95sIQy-bu-zlYH8uwZfuecQBHeiyqNjTz-xacDCHbNcdwKJlB6prP8jCH7JOVFIRcTrCtpccg/s640/Datawocky.png" width="640" /></a></div> <br /> <br /> In retrospect, it is easy to criticize the post for making a gross over-generalization from a single data point. Even more, the <a href="http://anand.typepad.com/datawocky/2008/04/data-versus-alg.html">follow-up post</a> references SVD as one of the "complex" algorithms not worth trying because it limits the ability of scaling up to larger number of features. Clearly, Anand's students did not win the Netflix Prize, and they probably now realize that SVD did have a major role in the winning entry.<br /> <br /> As a matter of fact, many teams showed later that adding content features from IMDB or the like to an optimized algorithm had little to no improvement. Some of the members of the <a href="http://www.gravityrd.com/references/netflix-prize?lang=en">Gravity team</a>, one of the top contenders for the Prize, published a detailed paper in which they showed how those content-based features would add no improvement to the highly optimized collaborative filtering matrix factorization approach. The paper was entitled "<a href="http://dl.acm.org/citation.cfm?id=1639731&amp;dl=ACM&amp;coll=DL&amp;CFID=122239967&amp;CFTOKEN=16331362">Recommending New Movies: Even a Few Ratings Are More Valuable Than Metadata</a>".<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS55Rj-pE7oPyBVrJ46k1GPOOL03BLhguyqJ7sJiL8ZeXzY5s82IZC6OZk44gk_ksgfAyHeuv8RFdXhMfdXu-NeyYYu2ingAzZ1CvpixuhTh-UaoK1WSJMvB_Seajr0SK2oKFiZQ/s1600/AFewRatings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS55Rj-pE7oPyBVrJ46k1GPOOL03BLhguyqJ7sJiL8ZeXzY5s82IZC6OZk44gk_ksgfAyHeuv8RFdXhMfdXu-NeyYYu2ingAzZ1CvpixuhTh-UaoK1WSJMvB_Seajr0SK2oKFiZQ/s640/AFewRatings.png" width="640" /></a></div> <br /> <br /> To be fair, the title of the paper is also an over-generalization. Content-based features (or different features in general) might be able to improve accuracy in many cases. But, you get my point again: <b>More data does not always help</b>.<br /> <h3> The End of the Scientific Method?</h3> Of course, whenever there is a heated debate about a possible paradigm change, there are people like Malcolm Gladwell or Chris Anderson that make a living out of heating it even more (don't get me wrong, I am a fan of both, and have read most of their books). In this case, Anderson picked on some of Norvig's comments, and misquoted them in an article entitled: "<a href="http://www.wired.com/science/discoveries/magazine/16-07/pb_theory/">The End of Theory: The Data Deluge Makes the Scientific Method Obsolete</a>".<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_F2J1QyE-vucDZX6lMM0MK7hyphenhyphenJe8fcRoXg6QJb7XHG3wxfltJwiReKH3TF2_WNomJ4ndANVK9ripM8JgJu64USOCdEbi9rbZDRwPMsfymaZm4e44tRZbuhaOuwZqdc325zYdGPg/s1600/EndOfScientificApproach.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_F2J1QyE-vucDZX6lMM0MK7hyphenhyphenJe8fcRoXg6QJb7XHG3wxfltJwiReKH3TF2_WNomJ4ndANVK9ripM8JgJu64USOCdEbi9rbZDRwPMsfymaZm4e44tRZbuhaOuwZqdc325zYdGPg/s320/EndOfScientificApproach.png" width="320" /></a></div> <br /> The article explains several examples of how the abundance of data helps people and companies take decision without even having to understand the meaning of the data itself. As Norvig himself points out in <a href="http://norvig.com/fact-check.html">his rebuttal</a>, Anderson has a few points right, but goes above and beyond to try to make them. And the result is a set of false statements, starting from the title: the data deluge does not make the scientific method obsolete. I would argue it is rather the other way around.<br /> <h3> Data Without a Sound Approach = Noise </h3> So, am I trying to make the point that the Big Data revolution is only hype? No way. Having more data, both in terms of more examples or more features, is a blessing. The availability of data enables more and better insights and applications. More data indeed enables better approaches. More than that, it <b>requires</b> better approaches.<br /> <br /> <div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1F33y_uIwwrV6z9LCNFD502j90jmayjA9CGAEVeskmYGH58hVBa2bpxdtPLxRByMyW01Uob0k2z-IUPc-DLhc6C3RQZhKoEtBuBFLI7e_rHwevY-pxu8jAG4zXJ94p6qCcWGGg/s1600/NoToAnderson.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1F33y_uIwwrV6z9LCNFD502j90jmayjA9CGAEVeskmYGH58hVBa2bpxdtPLxRByMyW01Uob0k2z-IUPc-DLhc6C3RQZhKoEtBuBFLI7e_rHwevY-pxu8jAG4zXJ94p6qCcWGGg/s320/NoToAnderson.jpg" width="320" /></a></div> <br /> In summary, we should dismiss simplistic voices that proclaim the uselessness of theory or models, or the triumph of data over these. As much as data is needed, so are good models and theory that explains them. But, overall, what we need is good approaches that help us understand how to interpret data, models, and the limitations of both in order to produce the best possible output.<br /> <br /> In other words, data is important. But, data without a sound approach becomes noise.<br /> <br /> (<b>Note</b>: this post is based on a few slides included in my <a href="http://strataconf.com/strata2012/public/schedule/detail/22364">Strata talk</a> a few months back. Those slides sparked an interesting debate, and follow up emails that prompted me to write these lines)Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com3tag:blogger.com,1999:blog-17171206.post-72172787419317541542012-04-16T22:56:00.005-07:002012-04-17T09:33:56.654-07:00Beyond the 5 Stars Round upLast week, I published a post on the Netflix tech blog. The post, entitled "<a href="http://techblog.netflix.com/2012/04/netflix-recommendations-beyond-5-stars.html">Netflix Recommendations: Beyond the 5 stars</a>" describes how recommendations have evolved at Netflix since the Netflix Prize. If you haven't read the post, do so now.<br /><br />The post stirred quite some interesting reactions and many comments. Here is a list of some of the ones I picked up, grouped by "category":<br /><ul><li>Our post got picked up by the usual content aggregators:<br /></li><ul><li>Hacker News posted a link to the post, and as always attracted <a href="http://news.ycombinator.com/item?id=3810058">a great number of comments</a></li><li>Likewise, <a href="http://www.reddit.com/r/programming/comments/rxp2e/netflix_recommendations_beyond_the_5_stars_part_1/">Reddit </a>also attracted some interesting comments.<br /></li></ul><li>Some online media gave a summary of our post:<br /></li><ul><li>Engadget was the first one to have a brief piece with several interesting comments: <a href="http://www.engadget.com/2012/04/08/netflix-explains-its-recommendation-system-cant-find-a-reason/#disqus_thread">Netflix explains its recommendation system, can't find a reason for Adam Sandler's last movie</a></li><li>The CNN also had a longer article, with a detailed summary of our post: <a href="http://whatsnext.blogs.cnn.com/2012/04/09/inside-netflixs-popular-recommendation-algorithm/">Inside Netflix's popular 'recommendation' algorithm </a></li><li>Econsultancy reflects on our post by calling us <a href="http://econsultancy.com/us/blog/9554-netflix-the-algorithm-company">Netflix: the algorithm company</a><br /></li></ul><li>Others focused on the figure we gave on the post related to the percentage of views coming from recommendations.<br /></li><ul><li>The Verge picked up on this for their piece: <a href="http://www.theverge.com/2012/4/8/2934375/netflix-recommendation-system-explained">Netflix offers details on its recommendation engine, says it guides 75 percent of viewership</a></li><li>Also PC Magazine focused on this issue, but gave a more detailed summary of the post: <a href="http://www.pcmag.com/article2/0,2817,2402739,00.asp">75 Percent of Netflix Viewing Based on Recommendations</a></li><li>Finally, Business Insider, also focused on this issue in their <a href="http://www.businessinsider.com/netflixs-recommendation-engine-drives-75-of-viewership-2012-4">Netflix's Recommendation Engine Drives 75% Of Viewership</a><br /></li></ul><li>The last few reactions I picked up, focused on the reasons why we are not using the winning entry to the Netflix Prize .</li><ul><li>The Next Web, entitled their piece <a href="http://thenextweb.com/media/2012/04/13/remember-netflixs-1m-algorithm-contest-well-heres-why-it-didnt-use-the-winning-entry/?awesm=tnw.to_1E23j">Remember Netflix’s $1m algorithm contest? Well, here’s why it didn’t use the winning entry</a></li><li>Techdirt focused only exclusively on this issue in their <a href="http://www.techdirt.com/blog/innovation/articles/20120409/03412518422/why-netflix-never-implemented-algorithm-that-won-netflix-1-million-challenge.shtml">Why Netflix Never Implemented The Algorithm That Won The Netflix $1 Million Challenge</a></li><li>Both the previous articles are ok, but a bit misleading in that they seem to imply that not implementing the final solution to the prize might have been a loss for Netflix. But, the prize to the worst uninformed and ill-intentioned reaction to our post has to go to Forbes' <a href="http://www.forbes.com/sites/ryanholiday/2012/04/16/what-the-failed-1m-netflix-prize-tells-us-about-business-advice/">What The Failed 1m Netflix Prize Tells Us About Business Advice</a>. It should be clear to anyone that the Netflix Prize was a huge success in all metrics. And, Netflix had already recovered the $1m long before the competition ended.<br /></li></ul></ul>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-85996251161474527902011-11-02T21:29:00.000-07:002011-11-02T22:31:45.054-07:00Recsys 2011 - Notes and Pointers<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://recsys.acm.org/2011/images/Chicago_night1.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 518px; height: 201px;" src="http://recsys.acm.org/2011/images/Chicago_night1.jpg" alt="" border="0" /></a><br />I found <a href="http://recsys.acm.org/2011/index.shtml">Recsys</a> this year of very high quality in general. There were many good papers and presentations. The <a href="http://recsys.acm.org/2011/industry_track.shtml">Industry track</a> was also very high-quality, with very interesting talks from companies such as Twitter, Facebook, or eBay. Jon Sanders and I also gave two presentations explaining how recommendations have evolved since the Netflix Prize (more on this soon).<br /><br />Here are my rough notes with pointers to some papers I considered especially interesting. I have grouped them in 5 categories that I think summarize the main topics in the conference: (1) Transparency and explanations, (2) Implicit Feedback, (3) Context, (4) Metrics and evaluation, and (5) Others. Note that the selection is completely biased towards my personal interests.<br /><br /><span style="font-weight: bold;">(1) TRANSPARENCY &amp; EXPLANATIONS.</span> One of the recurring themes was the fact that user trust and perceived quality of the recommendations was very much influence not by accuracy alone, but by how transparent the system was, and the amount of "explanations" that were added.<br /><ul><li>Daniel Tunkelang(LinkedIn) did a very interesting tutorial on "Recommendations as a Conversation with the User", where he focused on these kinds of issues. See his slides in <a href="http://thenoisychannel.com/2011/10/31/recsys-2011-tutorial-recommendations-as-a-conversation-with-the-user/">his blog</a>.<br /></li><li>Neel Sundaresan (eBay) also stressed in his keynote that adding explanations can sometimes be more important than getting the recommendation right.</li><li>In the paper "<a href="http://www.usabart.nl/portfolio/KnijnenburgReijmerWillemsen-recsys2011.pdf">Each to His Own: How Different Users Call for Different Interaction Methods in Recommender Systems</a>", the authors found that depending on how experts are users in the domain, they prefer different kind of recommendations and interaction models. For example, in one of the extremes, novices, prefer top-10 non-personalized to their personalized recommendations. In general a hybrid model of interaction is better than either implicit or explicit-only.</li></ul><span style="font-weight: bold;">(2) IMPLICIT FEEDBACK.</span> A lot of papers this years on using implicit consumption data instead of (or in combination with) ratings.<br /><ul><li>The best paper, by Yehuda Koren and Joe Sill, addressed the issue of non-linearity in ratings. "<a href="http://labs.yahoo.com/node/640">OrdRec: An Ordinal Model for Predicting Personalized Item Rating Distributions</a>" modifies the standard Matrix Factorization approach to adapt to the fact that user ratings are ordinal, but not numerical. The way they model ratings, with a set of thresholds, can be used in combination with any model, not only SVD-like approaches. This paper effectively addresses most of the issues I raised in my previous post "<a href="http://technocalifornia.blogspot.com/2011/04/recommender-systems-were-doing-it-all.html">We are doing everything wrong...</a>"</li><li>In "<a href="http://unical.academia.edu/NicolaBarbieri/Papers/803078/Modeling_Item_Selection_and_Relevance_for_Accurate_Recommendations">Modeling Item Selection and Relevance for Accurate Recommendations: A Bayesian Approach</a>" they define the concept of a "Free probabilstic model" where they try to predict independently the probabilty of play and rating. </li><li>In "Multi-Value Probabilistic Matrix Factorization for IP-TV Recommendations", the authors present a Matrix Factorization model that allows for multiple observations of the same item. In particular, it is applied for IPTV recommendations where the fact that the user watched part of an episode is interpreted as negative feedback.</li><li>"<a href="http://www.cs.purdue.edu/homes/fangy/hetrec11-fang.pdf">Matrix Co-factorization for Recommendation with Rich Side Information and Implicit Feedback</a>" presents a combined Matrix Factorization model that includes ratings, content features, and implicit feedback. They use cosine item similarity for weighing negative examples.</li><li>In "<a href="http://www.slideshare.net/alansaid/personalizing-tags-a-folksonomylike-approach-for-recommending-movies/download">Personalizing Tags: A Folksonomy-like Approach for Recommending Movies</a>", they use tags (or categories) as a very simple method of recommending movies: for each user compute average rating given to movies with a certain tag.<br /></li></ul><span style="font-weight: bold;">(3) CONTEXT.</span> There were 2 workshops (<a href="http://cars-workshop.org/">CARS</a> and <a href="http://2011.camrachallenge.com/">CAMRA</a>), and several papers in the main conference, talking about how to add contextual information for the recommendations:<br /><ul><li>"The Effect of Context-Aware Recommendations on Customer Purchasing Behavior and Trust" is an interesting paper, focusing on the evaluation side. They include an A/B test for measuring the effect of context-aware recommendations. Using context increased overall sales in $ but not in number. Therefore, users tend to spend more $ per item.</li><li>In the <a href="http://2011.camrachallenge.com/">CAMRA</a> workshop, many papers (such as "Temporal Rating Habits: A Valuable Tool for Rater Differentiation" or "Identifying Users From Their Rating Patterns") were related to how to identify who the author of a rating in a household was, since this was one of the tasks for the contest.<br /></li><li>Also related to group recommendations, "Group Recommendation using Feature Space Representing Behavioral Tendency and Power Balance among Members", tries to model what is a good recommendation for a group where each of the individuals does not have the same influence.</li></ul><span style="font-weight: bold;">(4) METRICS and EVALUATIONS: </span>There were several papers that offered different ways to measure accuracy for top-N ranked recommendations.<br /><ul><li>"<a href="http://www.slideshare.net/pcastells/acm-recsys-2011-rank-and-relevance-in-novelty-and-diversity-metrics-for-recommender-systems">Rank and Relevance in Novelty and Diversity Metrics for Recommender Systems</a>" presents an interesting framework that includes metric for measuring not only accuracy, but also novelty, diversity....</li><li>"Item Popularity and Recommendation Accuracy" is an interesting work on how to remove popularity bias from accuracy metrics. A user study validates the fact that recall measure is correlated with user perceived quality of recommendation. Besides proposing a recall metric that removes popularity bias, he also proposes a popularity stratified training method that weights negative examples according to how popular they are.</li><li>"<a href="http://ucersti.ieis.tue.nl/files/papers/3.pdf">Evaluating Rank Accuracy based on Incomplete Pairwise Preferences</a>" proposes a measure called expected discounted rank correlation for the specific case of implicit feedback.</li></ul><span style="font-weight: bold;">(5) OTHERS</span><br /><ul><li>eBay and UCSC presented "<a href="http://users.soe.ucsc.edu/%7Ejwang30/index.files/recsys175-wang.pdf">Utilizing Related Products for Post-Purchase Recommendation in E-commerce</a>". The paper won the best poster award</li><li>There were many papers on Social Recommendations. Just to name one, in "Power to the People: Exploring Neighbourhood Formations in Social Recommender Systems", they did a user study to figure out how much users would like and trust recommendations coming from different user groups (those they decided, friends, everyone...). Interestingly, the method of choice did not make much difference... until you told the users what it was.</li><li>In "Wisdom of the Better Few: Cold Start Recommendation via Representative based Rating Elicitation" they discussed how to select most imformative users and items for cold start. I was surprised to see that our "Wisdom of the Few" approach got paraphrased in a paper title.</li><li>There were a couple of very interesting workshops on <a href="http://womrad.org/2011/">Music Recommendations</a> and <a href="http://pema2011.cs.ucl.ac.uk/">Mobile Recommendations</a> that I had to miss since I was attending others. But, they are definitely worth looking into if you are into music or mobile.<br /></li></ul>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1tag:blogger.com,1999:blog-17171206.post-26750186381640469972011-09-25T23:41:00.001-07:002011-12-23T11:01:38.929-08:00The Recommender Problem & the Presentation Context<!--[if gte mso 9]><xml> <o:officedocumentsettings> <o:allowpng/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:trackmoves/> <w:trackformatting/> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:donotpromoteqf/> <w:lidthemeother>EN-US</w:LidThemeOther> <w:lidthemeasian>X-NONE</w:LidThemeAsian> <w:lidthemecomplexscript>X-NONE</w:LidThemeComplexScript> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> <w:splitpgbreakandparamark/> <w:enableopentypekerning/> <w:dontflipmirrorindents/> <w:overridetablestylehps/> </w:Compatibility> <m:mathpr> <m:mathfont val="Cambria Math"> <m:brkbin val="before"> <m:brkbinsub val="&#45;-"> <m:smallfrac val="off"> <m:dispdef/> <m:lmargin val="0"> <m:rmargin val="0"> <m:defjc val="centerGroup"> <m:wrapindent val="1440"> <m:intlim val="subSup"> <m:narylim val="undOvr"> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"> <w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"> <w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"> <w:lsdexception locked="false" priority="39" name="toc 1"> <w:lsdexception locked="false" priority="39" name="toc 2"> <w:lsdexception locked="false" priority="39" name="toc 3"> <w:lsdexception locked="false" priority="39" name="toc 4"> <w:lsdexception locked="false" priority="39" name="toc 5"> <w:lsdexception locked="false" priority="39" name="toc 6"> <w:lsdexception locked="false" priority="39" name="toc 7"> <w:lsdexception locked="false" priority="39" name="toc 8"> <w:lsdexception locked="false" priority="39" name="toc 9"> <w:lsdexception locked="false" priority="35" qformat="true" name="caption"> <w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"> <w:lsdexception locked="false" priority="1" name="Default Paragraph Font"> <w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"> <w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"> <w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"> <w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"> <w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"> <w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"> <w:lsdexception locked="false" unhidewhenused="false" name="Revision"> <w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"> <w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"> <w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"> <w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"> <w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"> <w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"> <w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"> <w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"> <w:lsdexception locked="false" priority="37" name="Bibliography"> <w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style> <![endif]--> <p class="MsoNormal" style="margin-bottom: 12pt; line-height: normal; font-family: arial;"><span style="font-size: 12pt;">In the traditional formulation of the "Recommender Problem", we have pairs of items and users and user feedback values for very few of those dyads. The problem is formulated as the finding of a utility function or model to estimate the missing values.<br /><br />In many real-world situations, feedback will be implicit<span style="font-weight: bold;">**</span> and binary in nature. For instance, in a web page you will have users visiting a url, or clicking on an add as a positive feedback. In a music service, a user will decide to listen to a song. Or in a movie service, like Netflix, you will have users deciding to watch a title as an indication that the user liked the movie. In these cases, the recommendation problem becomes the prediction of the probability a user will interact with a given item. There is a big shortcoming in using the standard recommendation formulation in such a setting: we don't have negative feedback. All the data we have is either positive or missing. And the missing data includes both items that the user explicitly chose to ignore because they were not appealing and items that would have been perfect recommendations but were never presented to the user.<br /><br />A similar issue has been dealt with in traditional data mining research, where classifiers need to be trained only using positive examples. In the "</span><a href="http://www.cse.ucsd.edu/users/elkan/posonly.pdf"><span style="font-size: 12pt; color: blue;">Learning Classifiers from Only Positive and Unlabeled Examples</span></a><span style="font-size: 12pt;">" SIGKDD 08 paper, the authors present a method to convert unlabeled examples into both a positive and a negative example, each with a different weight related to the probability that a random exemplar is positive or negative. Another solutions to this issue is presented in the "</span><a href="http://research.yahoo.com/files/HuKorenVolinsky-ICDM08.pdf"><span style="font-size: 12pt; color: blue;">Collaborative Filtering for Implicit Feedback Datasets</span></a><span style="font-size: 12pt;">" paper by Hu, Koren and Volinsky. In this work, the authors binarize the implicit feedback values: any feedback value greater than zero means positive preference, while any value equal to zero is converted to no preference. A greater value in the implicit feedback value is used to measure the "confidence" in the fact the user liked the item, but not in measuring "how much" the user liked it. Yet another approach to inferring positive and negative feedback from implicit data is presented in the paper I co-authored with Dennis Parra, and I presented in a </span><a href="http://technocalifornia.blogspot.com/2011/07/walk-talk-on-combination-of-implicit.html"><span style="font-size: 12pt; color: blue;">previous post</span></a><span style="font-size: 12pt;">. There, we argue that implicit data can be transformed to positive and negative feedback if aggregated at the right level. For example, the fact that somebody listened only once to a single track in an album can be interpreted as the user not liking that album.<br /><br />In many practical situations, though, we have more information than the simple binary implicit feedback from the user. For unlabeled examples that the user did not directly interact with, we can expect to have other information. In particular, we might be able to know whether they were shown to the user or not. This adds very valuable information, but slightly complicates the formulation of our recommendation problem. We now have three different kinds of values for items: positive, presented but not chosen, and not presented. And this is only if we simplify the model. In reality, information related to the presentation can be much richer than this and we might be able to derive data like the probability the user actually saw the item or weigh in different interaction events such as mouse overs, scrolls...</span></p><span style="font-family: arial;"> </span><br /><div style="text-align: center; font-family: arial;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtpmEpkUSciIL0ooFBw3SauQtTg7meeax-_Weq5XbRW03TZQ3IMWXsnSC6Ejj25BkTJKjiq7auGuMjs76WPo-f_e-_FVM_Hr_WK3WrP2yREvXs4xJTVFStP_Z8_BzIPCy8FAtLSw/s1600/NetflixInterface.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 335px; height: 177px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtpmEpkUSciIL0ooFBw3SauQtTg7meeax-_Weq5XbRW03TZQ3IMWXsnSC6Ejj25BkTJKjiq7auGuMjs76WPo-f_e-_FVM_Hr_WK3WrP2yREvXs4xJTVFStP_Z8_BzIPCy8FAtLSw/s200/NetflixInterface.jpg" alt="" id="BLOGGER_PHOTO_ID_5659880779386987186" border="0" /></a><br /></div><!--[if gte mso 9]><xml> <o:officedocumentsettings> <o:allowpng/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:trackmoves/> <w:trackformatting/> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:donotpromoteqf/> <w:lidthemeother>EN-US</w:LidThemeOther> <w:lidthemeasian>X-NONE</w:LidThemeAsian> <w:lidthemecomplexscript>X-NONE</w:LidThemeComplexScript> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> <w:splitpgbreakandparamark/> <w:enableopentypekerning/> <w:dontflipmirrorindents/> <w:overridetablestylehps/> </w:Compatibility> <m:mathpr> <m:mathfont val="Cambria Math"> <m:brkbin val="before"> <m:brkbinsub val="&#45;-"> <m:smallfrac val="off"> <m:dispdef/> <m:lmargin val="0"> <m:rmargin val="0"> <m:defjc val="centerGroup"> <m:wrapindent val="1440"> <m:intlim val="subSup"> <m:narylim val="undOvr"> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"> <w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"> <w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"> <w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"> <w:lsdexception locked="false" priority="39" name="toc 1"> <w:lsdexception locked="false" priority="39" name="toc 2"> <w:lsdexception locked="false" priority="39" name="toc 3"> <w:lsdexception locked="false" priority="39" name="toc 4"> <w:lsdexception locked="false" priority="39" name="toc 5"> <w:lsdexception locked="false" priority="39" name="toc 6"> <w:lsdexception locked="false" priority="39" name="toc 7"> <w:lsdexception locked="false" priority="39" name="toc 8"> <w:lsdexception locked="false" priority="39" name="toc 9"> <w:lsdexception locked="false" priority="35" qformat="true" name="caption"> <w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"> <w:lsdexception locked="false" priority="1" name="Default Paragraph Font"> <w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"> <w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"> <w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"> <w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"> <w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"> <w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"> <w:lsdexception locked="false" unhidewhenused="false" name="Revision"> <w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"> <w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"> <w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"> <w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"> <w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"> <w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"> <w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"> <w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"> <w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"> <w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"> <w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"> <w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"> <w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"> <w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"> <w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"> <w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"> <w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"> <w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"> <w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"> <w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"> <w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"> <w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"> <w:lsdexception locked="false" priority="37" name="Bibliography"> <w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi;} </style> <![endif]--><span style="font-family: arial;"> </span><p style="font-family: arial;" class="MsoNormal"><span style="font-size: 12pt; line-height: 115%;">In Netflix, we are working on different ways to add this rich information related to presentations and user interaction to the recommender problem. That is why I was especially interested in finding out that this year's SIGIR best student paper award has been awarded to a paper that addresses this issue. In the paper "</span><a href="http://www.cc.gatech.edu/%7Esyang46/papers/SIGIR11CCF.pdf"><span style="font-size: 12pt; line-height: 115%;">Collaborative Competitive Filtering: Learning<br />Recommender Using Context of User Choice</span></a><span style="font-size: 12pt; line-height: 115%;">", the authors present an extension to traditional Collaborative Filtering by encoding into the model not only the <b>collaboration </b>between similar users and items, but also the <b>competition </b>of items for user attention. They derive the model as an extension to standard latent factor models by taking into account the context in which the user makes the decision. That is, the probability I decide to select a given item depends on which are the other items I have as an alternative. Results are preliminary but promising. And, this work is definitely an interesting and appealing starting point for an area with many practical applications.</span></p><span style="font-family: arial;"> </span><p style="font-family: arial;" class="MsoNormal"><span style="font-size: 12pt; line-height: 115%;">However, there are many possible improvements to the model. One of them, mentioned by the authors, is the need to take into account the so-called <b style="mso-bidi-font-weight:normal">position bias</b>. An item that is presented in the first position of a list has many more possibilities to be chosen than one that is farther down. This effect is well-known in the search community and has been studied from several angles. I would recommend, for instance to read some of the very interesting papers on this topic by Thorsten Joachims and his students. In the paper “</span><a href="http://www.cs.cornell.edu/People/tj/publications/radlinski_etal_08b.pdf"><span style="font-size: 12pt; line-height: 115%;">How Does Clickthrough Data Reflect Retrieval Quality?</span></a><span style="font-size: 12pt; line-height: 115%;">”, for instance, they show how arbitrarily swapping items in a search result list has almost no effect. This proves that the positioning of the element can be a most important factor than how relevant the item is.<br /><br />I would love to hear of other ideas or approaches to deal with this new version of the recommender problem that includes, and would encourage researchers in the area to address an issue of huge potential impact.</span></p><span style="font-family: arial;"> </span><span style="font-family: arial;"> </span><p style="font-family: arial;" class="MsoNormal"><span style="font-size: 12pt; line-height: 115%;">**<b style="mso-bidi-font-weight:normal">Note</b>: I am using the word implicit here in the traditional sense in the recommendation literature. The truth is that a user selecting an item is in fact <b style="mso-bidi-font-weight:normal">explicit</b> information. However, it can be considered implicit in that the user is informing about the preferences indirectly by comparing the item to others in a context.</span></p>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-2118817623426679002011-07-28T21:49:00.000-07:002011-07-31T10:36:02.940-07:00Joining NetflixThree weeks ago, I started to work for Netflix. Everything has moved so fast with so many things to do and learn that it seems like I have already been here for a much longer time!<br /><br />I am now working as the manager of a small team working on recommendations &amp; personalization in the company that promoted recommender systems research to major headlines thanks to the <a href="http://www.netflixprize.com/">Netflix Prize</a>. It also feels great to come to the company in an exciting time when it has just reached its 25th million customer and is starting its international expansion to <a href="http://blog.netflix.com/2011/07/netflix-is-coming-to-latin-america.html">Latin America</a>.<br /><br />All the fuzz created around the Netflix Prize <a href="http://news.cnet.com/8301-17852_3-20078504-71/mit-prof-netflix-has-its-recommendations-wrong/">might lead some</a> to believe that rating prediction is all there is to Netflix suggesting a given movie. However, I was happy to find out that rating prediction is only one of the many signals that my team uses in creating the final suggestions.<br /><br />Awesome place, awesome people, and awesome time to be around. And, btw, <a href="http://www.netflix.com/Jobs?id=7563">we are hiring</a>, so let me know if you are interested in joining. (<span style="font-weight: bold;">Update</span>: it seems that the jobs link is currently not active outside US/CA... I'm working on getting this fixed)<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfw2rP41DIk31bWB74_p_HUAg2EBzCtJH8JL-yzo3LVuFw2cP0qJHAAINXGcfomgrg_EfyV-32Y5Iv2WZM7Woa9zEGDseHokkEWWGNkI7SIuczom0e-Yiv46cpzZg4XsPEBG_GzQ/s1600/2011-07-20+08.19.53.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 189px; height: 252px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfw2rP41DIk31bWB74_p_HUAg2EBzCtJH8JL-yzo3LVuFw2cP0qJHAAINXGcfomgrg_EfyV-32Y5Iv2WZM7Woa9zEGDseHokkEWWGNkI7SIuczom0e-Yiv46cpzZg4XsPEBG_GzQ/s320/2011-07-20+08.19.53.jpg" alt="" id="BLOGGER_PHOTO_ID_5634633491833460322" border="0" /></a>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com4tag:blogger.com,1999:blog-17171206.post-44494934300809553792011-07-18T22:32:00.000-07:002011-07-20T23:45:07.868-07:00Walk the Talk: On the Combination of Implicit and Explicit FeedbackLast week, <a href="http://www.sis.pitt.edu/%7Edparra/">Denis Parra</a> presented our paper entitled "Walk the Talk: Analyzing the Relation between Implicit and Explicit Feedback for Preference Elicitation" at the <a href="http://www.umap2011.org/">UMAP conference</a>. The paper won Denis the best-student paper award (Congratulations!).<br /><br />The paper presents our initial work in analyzing the relation between implicit and explicit feedback. In short, the main question we wanted to answer is how does the self-reported preferences users give in a typical 5-star interface relate to what they actually do when looking at their consumption patterns. Our hypothesis was that there should exist simple models that relate both kinds of feedback. Finding a way to robustly convert implicit feedback into explicit ratings would open up the door to applying well-known methods with implicit feedback. But, much more importantly, we could then combine both kinds of input in a single model.<br /><br />In order to test our hypothesis, we prepared an experiment in the music domain. We asked last.fm users to take a <a href="http://technocalifornia.blogspot.com/2010/08/study-on-online-music-taste-call-for.html">survey</a> in which we queried them about how much they liked albums that were already in their listening history. With this data in hand, we could analyze the relation between implicit and explicit feedback and try to fit a simple model.<br /><br />I recommend you read the <a href="http://bit.ly/r1mvkK">full paper</a> if you want to get the longer story of our findings, but here is a brief summary:<ul><li>There is a strong correlation between implicit feedback and self-reported preference (see figure below)<br /></li><li>Variables such as recentness of interaction or overall popularity do not have significant effect. Note that in <a href="http://www.princeton.edu/%7Emjs3/salganik_watts08.pdf">a previous study</a> by Salganik &amp; Duncan Watts, global popularity was found to affect users perceived quality. However, in that case and as opposed to ours, users were made aware of the popularity.<br /></li><li>Interaction effect: When listening to music, some people prefer to listen to isolated songs or albums. The way they interact with music, affects the way they report their taste.<br /></li></ul><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLMyaiZkVaa4kDZLXWtood0p1Vy3SS97keJD-PtWMxs0jCzzjzL4HW6uWavRVcExfrPsVS9S6TJycQK7WPHORmI8YLDVTv-OcSYnLZVn8D5jT0SU5vgUhKITAcXUf8Tj5dTH6BEA/s1600/up-box.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 514px; height: 357px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLMyaiZkVaa4kDZLXWtood0p1Vy3SS97keJD-PtWMxs0jCzzjzL4HW6uWavRVcExfrPsVS9S6TJycQK7WPHORmI8YLDVTv-OcSYnLZVn8D5jT0SU5vgUhKITAcXUf8Tj5dTH6BEA/s320/up-box.png" alt="" id="BLOGGER_PHOTO_ID_5631685818591640962" border="0" /></a><br />After our analysis, we then construct a linear model that takes into account these variables by performing a linear regression. Once we have built these models, we can evaluate their performance in a regular recommendation scenario by measuring the error in predicting ratings in a hold-out dataset.<br /><br />This paper represents an initial but very promising line of work that we have already improved in several ways such as the use of logistic instead of linear regression to account for the non-linearity of the rating scale or the use of the regression model as a way to combine both implicit and explicit feedback. But I will leave those findings for a future post.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-79779460101000198462011-04-07T13:59:00.000-07:002011-04-12T06:32:27.856-07:00Recommender Systems: We're doing it (all) wrongA few days back, there was an interesting post by Judy Robertson in the Communications of the ACM blog. The post, entitled "<a href="http://cacm.acm.org/blogs/blog-cacm/107125-stats-were-doing-it-wrong/fulltext">Stats: We're doing it wrong</a>", builds upon a paper from last year's CHI conference in which they report that more than 90% of the HCI researchers used the wrong statistical tools when analyzing and reporting on likert scale type of data. A Likert scale is a unidimensional scale on which the respondent expresses the level of agreement to a statement - typically in a 1 to 5 scale in which 1 is strongly disagree and 5 is strongly agree.<br /><br />Here is an excerpt from the post that I think is worth highlighting:<br /><blockquote style="font-style: italic; color: rgb(153, 153, 0);">Likert scales give ordinal data. That it (sic), the data is ranked "strongly agree" is usually better than "agree." However, it's not interval data. You can't say the distances between "strongly agree" and "agree" would be the same as "neutral" and "disagree," for example. People tend to think there is a bigger difference between items at the extremes of the scale than in the middle (there is some evidence cited in Kaptein's paper that this is the case). <strong>For ordinal data, one should use non-parametric statistical tests</strong> which do not assume a normal distribution of the data. <strong>Furthermore, because of this it makes no sense to report means of likert </strong><strong>scale data--you should report the mode</strong>.</blockquote>As Judy, I have to admit that I am not a stats expert myself either. But in the general case I would agree with the previous: likert scale data is ordinal and cannot be treated as interval. However, whether treating it as interval is <span style="font-weight: bold;">always</span> a mistake or can be accepted under some circumstances is something that I am not sure and relates to the rest of this post.<br /><br />So for instance, it is not uncommon to find references where they clearly state that likert data can be treated as interval. For example, look at what they say in <a href="http://www.fao.org/docrep/W3241E/w3241e04.htm">this handbook</a> edited by the FAO.<blockquote style="font-style: italic; color: rgb(153, 153, 0);">Likert scales are treated as yielding Interval data by the majority of marketing researchers. </blockquote>Or look at <a href="http://stats.stackexchange.com/questions/10/under-what-conditions-should-likert-scales-be-used-as-ordinal-or-interval-data">the answer</a> to the question of whether likert data can be treated as interval in stackexchange.<br /><br />So there might be some circumstances in which, depending on the analysis, likert could be treated as interval... I guess. But not in the general case.<br /><br /><span style="font-weight: bold;">Implications for Recommender Systems</span><br /><br />Now onto the big question: What does this have to do with Recommender Systems and how does it affect? To start with, let me ask you the question: Does the likert (1 to 5) scale relate to anything we use in recommender systems? You got it: <span style="font-weight: bold;">ratings</span> !<br /><br />So our worry goes now to understanding whether ratings can be treated as interval or they should instead be treated as ordinal data, just as they are in the general case of the likert scale. In order to defend that ratings can be treated as interval, we should have some validation that the distance between different ratings is approximately equal. However, just as in the case of likert scales, we know this is not the case.<br /><br />Look at this figure from <a href="http://technocalifornia.blogspot.com/2009/04/i-like-it-i-like-it-not-or-how-miss.html">our previous work</a> on measuring noise in ratings.<br /><img src="file:///home/xavier/Sandbox/data/articles/xamat_UMAP09/figs/fig2b.jpg" alt="" /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDOYQc6Ck8tCe6tGCBsOb0mjdJOBPRr6K4jhE_P8hpo8mASOTn8oQBkGBPeNQ9eGMWHnTsNs0CMD3ZU5Gh8_YZuJNXdD0GEviqzXoDqTDgi82vpxzAmdtrKu_6_DTNWLVDicjiQ/s1600/fig2b.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDOYQc6Ck8tCe6tGCBsOb0mjdJOBPRr6K4jhE_P8hpo8mASOTn8oQBkGBPeNQ9eGMWHnTsNs0CMD3ZU5Gh8_YZuJNXdD0GEviqzXoDqTDgi82vpxzAmdtrKu_6_DTNWLVDicjiQ/s320/fig2b.jpg" alt="" id="BLOGGER_PHOTO_ID_5592961741347480642" border="0" /></a>Here we are plotting the probability of finding different kinds of inconsistencies between pairs of ratings. The probability that a user changes her rating between 2 and 3 is almost 0.35 while the probability she changes between 4 and 5 goes down to almost 0.1. This is a clear indication that users perceive that the distance between a 2 and a 3 is much lower than between a 4 and a 5.<br /><br /><span style="font-weight: bold;">Consequences</span><br /><br />At this point, we can safely say that ratings are ordinal but not interval data. However, they are treated as a continuous interval scale in most of the recommender systems research! Let us stop to think a few of the consequences of ratings not being interval data.<br /><br /><span style="font-weight: bold;">Distance Measures:</span> All the neighbor based methods in collaborative filtering are based on the use of some sort of distance measure. The most commonly used are Cosine distance and Pearson Correlation. However, both these distances assume a linear interval scale in their computations! We should conclude that using these distance measures with rating data is wrong. Other measures such as <a href="http://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient">Spearman's rank correlation</a>, do not assume this. But to be honest, I don't remember having read many papers using Spearman.<br /><br /><span style="font-weight: bold;">Error Measures:</span> This is my favorite one... The most commonly accepted measure of success for recommender systems is the Root Mean Squared Error (RMSE). But wait, this measure is explicitly assuming that ratings are also interval data! Similar error measures such as MAE also fall in the same trap... banned! So what could we use? Standard Information Retrieval measures such as Precision and Recall do not necessarily assume interval scale on the ratings, although their mapping to recommendation efficiency may also be questioned. Rank-based measures such as <a href="http://en.wikipedia.org/wiki/Discounted_cumulative_gain">Discounted Cumulative Gain</a> (nDCG) seem like our best bet for now.<br /><br /><span style="font-weight: bold;">Matrix factorization</span>: Most MF techniques in Recommender Systems are in fact optimizing for RMSE. Therefore, we should discard them as statistically incorrect for the same reasons stated above. There are interesting alternatives to this though, like the <a href="http://research.yahoo.com/files/recsys2010_submission_150.pdf">PureSVD</a> method presented in Recsys last year, that do not optimize for RMSE but rather for ranking.<br /><br /><span style="font-weight: bold;">Conclusion</span><br /><br />It is clear that explicit ratings, just like likert scale data, have to be treated like ordinal (and not interval data). However, most of the methods and measures currently in use in recommender systems assume in some sense that there is a continuous linear scale in the ratings. Of course I am not advocating for throwing all of this research to the trash (among other things, it would include much of mine), but I would advice for a drastic change in the way we approach these issues.<br /><br />I am writing this post, especially in the hope to get feedback and reactions from you. So I am looking forward to the comments.<br /><br /><span style="color: rgb(204, 0, 0); font-weight: bold;">Update:</span> This post was featured in Ycombinator Hacker News. So far it has received over 6K views and there is a somewhat interesting <a href="http://news.ycombinator.com/item?id=2423313">comment thread</a> in Ycombinator.<br /><br />(I'd like to thank and acknowledge the contribution of <a href="http://www.sis.pitt.edu/%7Edparra/">Denis Parra</a>, <a href="http://www.ci.tuwien.ac.at/%7Ealexis/Welcome.html">Alexandros Karatzoglou</a>, and <a href="http://www.ic.unicamp.br/%7Eoliveira/">Rodrigo Oliveira</a> to this post through previous very fruitful discussions)Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com9tag:blogger.com,1999:blog-17171206.post-35381839373910453952011-03-18T08:25:00.000-07:002011-04-28T15:28:19.445-07:00The Science and the Magic of User FeedbackThat was the main title of a series of talks I gave in different labs and companies during my recent California tour. In this presentation, I talked about many of our recent projects related to how to interpret user feedback, in general, and in the particular case of recommender systems. I talked about our work on <a href="http://technocalifornia.blogspot.com/2009/04/i-like-it-i-like-it-not-or-how-miss.html">measuring user rating noise</a>, our follow-up in devising <a href="http://technocalifornia.blogspot.com/2009/08/rate-it-again.html">algorithms to reduce this natural noise</a>, and on how you can use<a href="http://technocalifornia.blogspot.com/2009/05/wisdom-of-few.html"> experts instead of crowds</a> to not only minimize this noise but address other issues in collaborative filtering.<br /><br />I also gave a sneak preview of our results to the<a href="http://technocalifornia.blogspot.com/2010/08/study-on-online-music-taste-call-for.html"> music survey</a> I announced some time ago. <a href="http://www.sis.pitt.edu/%7Edparra/">Denis Parra</a> and I have submitted this work recently and are hoping to get it accepted to tell you a bit more about how to map implicit to explicit feedback.<br /><br /><div style="width: 425px;" id="__ss_7256546"><div style="text-align: center;"> <strong style="display: block; margin: 12px 0pt 4px;"><a href="http://www.slideshare.net/xamat/the-science-and-the-magic-of-user-feedback-for-recommender-systems" title="The Science and the Magic of User Feedback for Recommender Systems">The Science and the Magic of User Feedback for Recommender Systems</a></strong> <object id="__sse7256546" height="355" width="425"> <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sienceandmagicinuserfeedback-110314043749-phpapp02&amp;stripped_title=the-science-and-the-magic-of-user-feedback-for-recommender-systems&amp;userName=xamat"> <param name="allowFullScreen" value="true"> <param name="allowScriptAccess" value="always"> <embed name="__sse7256546" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sienceandmagicinuserfeedback-110314043749-phpapp02&amp;stripped_title=the-science-and-the-magic-of-user-feedback-for-recommender-systems&amp;userName=xamat" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"></embed> </object></div><div> </div> </div><br /><span style="font-weight: bold;"><br />Update</span>: Thanks to the guys at <a href="http://sna-projects.com/blog/2011/04/improving-recommendations/">LinkedIn's SNA group</a>, I have now added below the video of my presentation at LinkedIn... enjoy!<br /><br /><div style="text-align: center;"><iframe src="http://player.vimeo.com/video/22353044?title=0&amp;byline=0&amp;portrait=0" frameborder="0" height="225" width="400"></iframe></div><p style="text-align: center;"><a href="http://vimeo.com/22353044">Tech Talk: Xavier Amatriain (Telefonica) -- "The Science and Magic of User and Expert Feedback for Improving Recommendations"</a> from <a href="http://vimeo.com/talksatlinkedin">Talks at LinkedIn</a> on <a href="http://vimeo.com/">Vimeo</a>.</p>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com2tag:blogger.com,1999:blog-17171206.post-86152174705502031052011-03-15T03:56:00.000-07:002011-03-15T10:41:00.828-07:00Managing Research the Agile WayI have discussed previously on this blog about how well the <a href="http://technocalifornia.blogspot.com/2008/06/agile-research.html">Scientific Method adapts to Agile approaches</a>. These ideas also took me to an unfinished effort to draft an <a href="http://technocalifornia.blogspot.com/2009/06/very-draft-agile-research-manifesto.html">Agile Research Manifesto</a>. However, by talking to several people with similar ideas, I realized that these attempts were largely interpreted as an intellectual exercise with little practical application. It is clearly my fault for not having explained that all of this in reality comes from many practical experiences. Some of these experiences go back to my PhD years when managing the <a href="http://clam-project.org/">CLAM framework</a>, as well as many undergrad student projects. As a matter of fact, during those days I published a practical guide for students on how to do their final project the "agile way" (I still keep the <a href="http://xavier.amatriain.net/PFC/">webpage</a>, in catalan, for historical reasons).<br /><br />In any case, in this post I wanted to address the practical side of agile research management by giving you a flavor of how I try to manage projects.<br /><br /><div style="text-align: center;"><a href="http://www.flickr.com/photos/tonymangan/754511201/" title="The Plug-Hole por ~~Tone~~, en Flickr"><img style="width: 411px; height: 276px;" src="http://farm2.static.flickr.com/1077/754511201_3067a868d7.jpg" alt="The Plug-Hole" /></a><br /><span style="font-size:78%;">(Picture by <a href="http://www.flickr.com/photos/tonymangan/">~Tone</a>)</span><br /></div><br /><br /><span style="font-weight: bold;">The anatomy of a research project</span><br /><br />What am I talking about when I say a "research project"? Although they might be completely different in theme and even scope, all of the projects that I have in mind when explaining the agile management approach should share at least some of the following properties:<br /><ul><li><span style="font-weight: bold;">Small-sized team</span>: It is very likely that we are dealing with a one or two researchers team. A 3-4 people research team can already be considered large in my experience.</li><li><span style="font-weight: bold;">Very open and imprecise requirements</span>: Especially at the beginning, we might have a coarse idea or hypothesis to validate. However, the approach, method, and scope, are likely to be undecided until very late in the game.</li><li><span style="font-weight: bold;">High risk</span>: By definition, a research project has to be highly innovative and therefore... risky. Our goal is to minimize the cost of a failure and realize early on but not to remove failure since this is an intrinsic feature of risk.</li><li><span style="font-weight: bold;">Imprecise resources</span>: The fact that requirements are not clear and risk is high is usually accompanied by the fact that resources that can be allocated to the project are usually imprecise. If the project is highly successful and proves its interest in the first iterations, it can grow into something larger with more resources added to it. On the other hand, it is also very likely to be killed quickly if it does not yield promising initial results.</li></ul><br /><span style="font-weight: bold;">The planning game</span><br /><br />I will usually start-off by devoting a couple of weeks to a <span style="font-style: italic;">Sprint 0</span> during which the main tasks will be:<br /><ul><br /><li><span style="font-weight: bold;">Understand what has been done before</span>: Obviously, this requires lots of reading. However, it is good practice to also start writing at this same time, maybe in an informal wiki or the like.</li><br /><li><span style="font-weight: bold;">Define the tools</span>: Unless you are in a very specific environment, tools are likely to change for every project. Sometimes it is not only about what is the best tool, but also about what the team is most familiar with. This is usually an important thing in most projects, but it is more so in a project that it is high risk in nature and should avoid spending lots of time/resources in adapting to new tools.</li><br /><li><span style="font-weight: bold;">Define the initial scope</span>: There is no way you can have a complete picture of what is going to be the output of the project by this time. However, you should be able to list what you think will be the main steps and even some findings you anticipate. This list should be written like an ever changing Product Backlog (prioritized list of high-level features).</li></ul><br /><div style="text-align: center;"><a href="http://www.flickr.com/photos/babyowls/2329783873/" title="Fifteen accounts of life, death, and everything that interferes. por Jenna Carver, en Flickr"><img style="width: 414px; height: 311px;" src="http://farm4.static.flickr.com/3169/2329783873_3dc3c6a550.jpg" alt="Fifteen accounts of life, death, and everything that interferes." /></a><br /></div><br /><div style="text-align: center;"><span style="font-size:78%;"><span><span>(Picture by <a href="http://www.flickr.com/photos/babyowls/">Jenna Carver</a>)</span></span><br /></span></div><br /><br /><span style="font-weight: bold;">Prioritizing</span><br /><br /><span>One of the most important activities that you end up doing when planning any project, be it at the initial phase or at any of its iterations, is prioritizing the different requirements, stories... Doing this in a group meeting is a great way to gain insights on the project and to be strategic. Prioritizing tasks is not much different from any cost/benefit analysis: you measure cost, you measure benefit, and then sort items according to benefit/cost ratio.<br /><br />In the case of project planning, I usually like to assign cost to "complexity", and benefit to "interest". In other words, the cost of a feature or story will be how difficult or complex we anticipate it is to implement it. And the benefit is how interesting or important it is for our final goal. Once you sort items using the interest/complexity ratio, you will find that easy-to-do yet interesting features float to the top, while complex and not so important sink down to the bottom.<br /><br />Of course, the interesting discussions happen right in the middle. And especially when we have something that seems to be very important, but also very complex to achieve. In these cases, we feel tempted to jump right away at the problem and devote 100% of our energy to it. However, one of the agile principles is that things seem more complex when you don't have enough understanding. If you put them off to later iterations, they will eventually become clearer and clearer and end up surfacing to the first positions on your priority list. I have found this sort of <span style="font-style: italic;">smart procrastination</span> to be extremely useful for agile research management.<br /><br /><span style="font-weight: bold;">Iterate, Iterate, Iterate</span><br /><br />Once you have come up with your initial product backlog, it is all a matter of breaking the process down in short iterations - I usually plan for one-week. At the beginning of each iteration (or <span style="font-style: italic;">Sprint</span>), you look at your product backlog, pick some of the top stories and break them down into finer grain tasks. You do the prioritization game on this new list and come up with your next week's scrum/iteration backlog.<br /><br />When doing this finer-grain prioritization, I have found it very useful to use the estimated number of hours as the measure of "complexity". Therefore, when picking the top tasks of our list, we will also have an estimate of how feasible it is to have them during this iteration and how much will be the relative effort put into each of them. And, if any task is estimated to be more than a day long, do yourself a favor and break it into several tasks.<br /><br />Also, it is important that, especially during the first iterations, you realize that the continuation of the project might be at stake at each iteration (or at least the current approach). Therefore, when measuring the "importance" of tasks to prioritize, ask yourself how relevant will that task be to convince you and others that you are onto something or you need to change routes.</span><span style="font-weight: bold;"><br /><br /><span style="font-weight: bold;">Test-driven research</span><br /><br /></span><span>If you are familiar with agile methods, you will probably know how important testing is in an agile project. Tests not only guarantee the stability of the project but are actually a way to specify requirements in a more verifiable form. In a similar way, you can think of specifying many of your research hypothesis as a test. For example, you can turn your hypothesis that the effect of a given procedure on your data or population is significant by a verifiable assertion that for t-test(D_original, D_after_procedure)</span>-> p is smaller 5%. There are many hypothesis and research tasks that can - and should - be written in this form before making it to your prioritized todo list. At least you should worry on how any of your results will be validated and how you can trust for them to be consistent and significant.<br /><br /><div style="text-align: center;"> <a href="http://www.flickr.com/photos/dunechaser/3385957841/" title="*splooch!* Gordon Freeman vs. Master Chief por Dunechaser, en Flickr"><img style="width: 289px; height: 218px;" src="http://farm4.static.flickr.com/3540/3385957841_85bf7fcca6.jpg" alt="*splooch!* Gordon Freeman vs. Master Chief" /></a><br /><span style="font-size:78%;">(Picture by <a href="http://www.flickr.com/photos/dunechaser/">Dunechaser</a>)</span><br /></div><br /><span style="font-weight: bold;">Related approaches</span><br /><br />If you are interested in this kind of approaches, I recommend you read the article on the <a href="http://cacm.acm.org/magazines/2010/10/99484-score-agile-research-group-management/fulltext">SCORE method</a>, which is somewhat related to many of the things I am mentioning here. <a href="http://agile2003.agilealliance.org/files/P6Paper.pdf">Here</a> you can read an interesting paper on doing test-driven research. Finally, I find the <a href="http://www.infoq.com/news/2009/09/Pomodoro">Pomodoro</a> method a very interesting approach to individual time management. Since many research projects end up being quasi-individual, Pomodoro fits them pretty well.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com2tag:blogger.com,1999:blog-17171206.post-782722704562580712011-01-31T13:26:00.000-08:002011-01-31T14:56:02.312-08:00On Trust Networks and Gamification. Or How Quora can overcome its Hype and embrace long-term SuccessIf you are reading this blog I am pretty sure that you know quite a lot about <a href="http://www.quora.com/">Quora</a> by now. If not, you should sign on and try it a bit before you continue reading the post.<br /><br />I have to admit it, the first time I saw Quora I thought it looked like a watered-down version of <a href="http://http//stackoverflow.com/">stackoverflow</a> , only with a much broader scope. The ability to follow was nice but... "big deal", I thought. However, I was missing the important point of the seamless integration between Quora and existing OSN, namely Twitter and Facebook. I always say that for an OSN to succeed it needs to ride on all the previous successful ones (including email if you allow me to stretch the definition of OSN that far), but I missed that part in quora until its hype began. Having quick connection to Twitter and Facebook, allowed Quora to overcome the always feared cold-start problem. You sign to Quora and in no time you are "connected" to all your "friends" and can start following their questions, their answers, votes... cool!<br /><br />Well, so it seemed. But in no time, just as quick as people starting hyping about the service they were complaining about it and predicting its failure. This <a href="http://techcrunch.com/2011/01/31/quora-quora-quora-quora-quora-quora-quora/">recent post at Techcrunch</a> does a pretty good at summarizing and linking to the main Quora bitchmemes. Don't miss the<a href="http://techcrunch.com/2011/01/23/why-i-don%E2%80%99t-buy-the-quora-hype/"> original post by Vivek Wadhwa</a> or some of the <a href="http://www.quora.com/What-can-be-said-to-Vivek-Wadhwas-criticism-on-TechCrunch-Why-I-Don%E2%80%99t-Buy-the-Quora-Hype">threads</a> at Quora itself. You should also read <a href="http://scobleizer.com/2011/01/30/why-i-was-wrong-about-quora-as-a-blogging-service/">this very illustrative piece</a> on how Scobble went from love to hate in a matter of weeks.<br /><br />To summarize, the two biggest complaints are the following: (1) Quora will inevitably be overtaken by spam and there will be no way to find good content anymore; and (2) producers of good content (answers) will become tired of the system and progressively leave making problem (1) even more inevitable.<br /><br />While I do agree that these (and many other) issues are very important, I don't see them as inevitable and, in the following paragraphs, I would like to describe two ways to address them. But to start with, let me just state that believing that Quora can survive on being an inside-moderated network is not the answer. So what can be done?<br /><br /><span style="font-weight: bold;font-size:130%;" >Trust networks<br /></span><br />In a trust network, nodes (users) have an associated trust value that is somehow used to decide how its contribution will be taken into account by the rest of users. For instance, in a recommender system, I can push content by neighboring nodes I trust while filtering out that coming from nodes with a lower trust value. In more sophisticated versions, trust is not a unique value but can be topic-specific. That is, my trust value can be very high for independent music but very low for classic literature. (If you are interested in the general topic of Trust and Social Networks you can read <a href="http://www.amazon.com/exec/obidos/ASIN/1848003552/j16t3i5j15-20">Golbeck's book</a> or any of her many publications or presentations available online)<br /><br />So let's go back to Quora now: why should they implement a trust network overlay? and, how could they implement a useful one? There are several reasons for why they should be doing so. But let us focus on the spam issue. You do not want for bad answers to get promoted by bad/evil users. The way around it is to not give these users the power to promote answers. And you can do this quite easily by assigning trust values to users. It would take 100 votes by "level 1" users to get an answer to the level of another one with just one vote by a "level 100" user. Of course, as I was mentioning before, this trust level could be topic-sensitive. Makes sense, doesn't it?<br /><br />But, there a number of issues that are still unsolved on how to implement this trust network. The first one is who decides to promote and demote users? My answer is quite simple: users themselves. Whenever your answer gets voted up/down so would your trust level. And again, how much this level would go up/down would depend on the trust level of the voting user.<br /><br />The only important remaining issue to such an approach is how to deal with the cold-start issue. But the answer to this would come from the integration to other OSN I was mentioning at the beginning. If I were implementing this kind of system, I would give users an initial trust level based on their <a href="http://tunkrank.com/">TunkRank</a> or their <a href="http://klout.com/">Klout</a> Score.<br /><br /><span style="font-weight: bold;font-size:130%;" >Gamification<br /></span><br />The other major issue that still needs to be tackled is how we guarantee that users do not become tired of the system and abandon it. I hope it is clear by now that the approach I described above would make things much more interesting for users interested in promoting their trust level. In fact, this is very close to what is known as <a href="http://gamification.org/wiki/Gamification">gamification</a> (see also game dynamics or game mechanics for very related concepts). Attach a badge to given levels of trust for some topics and you can start competing with Foursquare check-ins.<br /><br />The use of badges, or game dynamics in general in Q&amp;A sites is by no means new. Actually, stackoverflow, that I was referring to earlier in the post, delivers topical <a href="http://stackoverflow.com/badges">badges</a>. And obtaining the first badge on a given topic can be an important accomplishment worth noting in your resume. But stackoverflow did not come up with this idea out of the blue: levels of expertise in forums have been used for a long time (see the<a href="http://ubuntuforums.org/announcement.php?f=48"> Coffee Cups/Beans in Ubuntu forums</a>, for instance).<br /><br />I am not saying that implementing these two approaches would guarantee Quora's success. But not implementing them will probably guarantee the opposite. We have all seen potential in Quora. Apart from the quick integration with existing OSN and the ability to follow, there is the real-time component that brings it closer to a Q&amp;A Twitter. If they don't fix these potential issues, somebody else will come up with an improved version that can very well be the "next big thing" that some social media gurus were seeing in Quora just some weeks ago.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com2tag:blogger.com,1999:blog-17171206.post-6708587030781721352010-11-16T16:12:00.000-08:002010-11-25T12:44:27.306-08:00Did you prepare your talk?I don't consider myself to be a great presenter. As a matter of fact, every time I finish a presentation, I find myself thinking about how many things I screwed up and could have done much better. However, whenever I attend a conference I face the cruel reality: my presentations are way better than most research presentations. If I am really not that good, it can only mean one thing: researchers generally suck at presenting their work. (This is in fact one of the reasons I am against organizing research conferences around oral presentations. But this is another discussion I will leave for another post).<br /><br />So, if you have any doubts of whether you could be in that category of good researcher/poor presenter, you can do a quick test: Watch the video below. If you think your last presentation is well summarized in the video, you definitely fit into the group. Even if you don't, you might find some tips or advice of interest to you in the rest of this post.<br /><br /><br /><div style="text-align: center;"><object height="385" width="480"><embed src="http://www.youtube.com/v/yL_-1d9OSdk?fs=1&amp;hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"></embed></object><br /></div><br />OK, so what are the three basic rules to make a decent presentation? Easy: (1) Prepare yourself, (2) prepare yourself, and (3) prepare yourself.<br /><br />At this point, you might already be tempted to stop reading because you disagree with what I am saying. I have found several reasons why people disagree with something as obvious as the fact that making a good presentation requires preparation, but I think all of them are summarized in the two following:<br /><br /><span style="font-weight: bold;">(a)</span> <span style="font-weight: bold;">I'm a natural</span>: Maybe you are the kind of self-assured person that thinks that has great presentation skills and those shine best the more you improvise. I was pretty close to this myself some time ago. But if you fit into this category, there is a very easy test you can do: tape yourself on video on several presentations. If you still think you are great and need no preparation or further skills, congratulations! But chances are that then you realize how many things you have been doing wrong and how much you can improve. All great presenters I know stress the fact that preparation is key, period.<br /><br /><span style="font-weight: bold;">(b)</span> <span style="font-weight: bold;">I'm a researcher, not a TV Star</span>: On the other extreme, you might be aware of your limitations but might think that this is not such a big deal. You are a researcher and live in the world of formulas, theories, or code. You could care less about what people get from your talks and you would be happy standing up and doing the chicken, chicken, chicken presentation. And this is not an exaggeration: I have seen junior researchers that are still editing slides a couple of hours before their scheduled presentation in a top conference. My take on this is the following: if you think presentation skills are not part of what is required in a researcher, you are wrong.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOUxGgeIzLQnFRAMgfQEUrhCZ6kt8mlfGC0IWkrg3ha0By6yxhmHRwRHDwCCZyrQitIgnkaGsTupAizP8kb_Q_a-ceF-WNfuOlVQCmHX6ZCE2hkguhTzwC9Dxyn34YVN1AJ34F2g/s1600/ted-presenter.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 445px; height: 297px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOUxGgeIzLQnFRAMgfQEUrhCZ6kt8mlfGC0IWkrg3ha0By6yxhmHRwRHDwCCZyrQitIgnkaGsTupAizP8kb_Q_a-ceF-WNfuOlVQCmHX6ZCE2hkguhTzwC9Dxyn34YVN1AJ34F2g/s200/ted-presenter.jpg" alt="" id="BLOGGER_PHOTO_ID_5543278758758227938" border="0" /></a><br />So by this point I will suppose that you are convinced of the importance of preparing research presentations. Ideally, you have also taped yourself and found that there are many things to improve. The question is what to do next. Obviously, I cannot pretend to summarize a presentation skills course in a post. There are thousands of resources out there in the form of books, videos, or similar that you will find without problem. But I do think that I can pinpoint a few issues that are important and tricks that might help.<br /><br />First, I think it is important to separate two kinds of "preparation": (1) mid/long-term preparation aimed at improving your skills, and (2) short-term preparation for your next presentation.<br /><br /><br /><span style="font-weight: bold;font-size:130%;" >Improving your skills</span><br /><br />Again, you can find many books and resources on how to do this. But some of the things that you should at least consider:<br /><br />(1) Tape yourself:<br /><br />This will make you aware of the weak points and where you need to focus your efforts<br /><br />(2) Enjoy the stage:<br /><br />Some people have a really hard time every time they go onto stage, and this shows. There are many things you can do to learn techniques and improve on this that go from playing in a band to taking some acting and performance lessons (I did this and found it very useful and enjoyable)<br /><br />(3) Read about it:<br /><br />No need to become obsessed. But reading a couple of books or watching some videos giving you tips is not going to hurt. And remember, this is part of your expected skill set as a researcher. If you want a starting point, I can recommend you read a short 12 page essay on "<a href="http://pne.people.si.umich.edu/PDF/howtotalk.pdf">How to give an academic talk v4.0</a>" by Paul N. Edwards from U. Michigan.<br /><br />(4) Rehearse the techniques:<br /><br />It is very good if you have situations where you can rehearse what you learn from the previous. Actually, many of the techniques can be applied in "real" life (e.g. when talking to your boss). Others require of a more realistic setting. I have been lucky to use the courses at the university as a rehearse playground for improving my skills<br /><br />(5) If you need help, look for it:<br /><br />I have seen many cases of researchers with severe communication problems when presenting. Maybe I sound too harsh here, but I don't think this is acceptable. If you really want to be a researcher but don't think you can get to an acceptable level of presenting either (a) have some co-author present for you or (b) find some professional help. And this latter would be my preferred option. It is not so hard nowadays to find coaches or places that can help you out and if you agree this is an ability that you need in your job (and, again, you should agree), it is worth that you invest on it.<br /><span style="font-weight: bold;font-size:130%;" ><br /></span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP6a1LElVnzZMWIrBNHhDTem4d9bohEm8GdSk10aALT1ak3AgWJxlE86xt32jG4VewTqRJw1rOU9tJlgJJaUh81R-0rqe5xagBdlAhdC-R28yi2F-JoKcoqTkHjhy3gWggR1j32g/s1600/chairs.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 440px; height: 281px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP6a1LElVnzZMWIrBNHhDTem4d9bohEm8GdSk10aALT1ak3AgWJxlE86xt32jG4VewTqRJw1rOU9tJlgJJaUh81R-0rqe5xagBdlAhdC-R28yi2F-JoKcoqTkHjhy3gWggR1j32g/s320/chairs.jpg" alt="" id="BLOGGER_PHOTO_ID_5543279576234072706" border="0" /></a><br /><span style="font-weight: bold;font-size:130%;" ><br />Preparing your next presentation</span><br /><br />Regardless of whether you manage to improve your general presentation skills or not, you will have to face your next presentation sooner or later. When preparing the talk, you should focus on its two main components: the slides, and the talk itself.<br /><br /><span style="font-weight: bold;">The slides</span><br /><br />Again, there are many resources out there on how to prepare your slides, the style, the design.. I was lucky to attend a course on Zen presentation style by the guys at <a href="http://www.presentacionesartesanas.com/">Presentaciones Artesanas</a>. Zen-style presentations are <a href="http://www.presentationzen.com/presentationzen/2009/05/making-presentations-in-the-ted-style.html">the kind of slides</a> you will see at TED, for instance. I try to bear some of the techniques in mine but (a) I am not a professional presenter (that is, although presentations are important in a researcher's life, I have other things to do), and (b) sometimes, transmitting scientific rigor in a very graphical style is not easy (actually, <a href="http://www.wired.com/wired/archive/11.09/ppt2.html">according to Tufte</a>, even Powerpoint should be banned from scientific publications). However, I do recommend to understand some of the design concepts behind the Zen style and maybe use some of them as a basis.<br /><br />Once you have found your style, you will need to do the following tasks:<br /><br />(1) Know your audience:<br /><br />Before you start preparing the presentation, take some time to understand who you will be talking to. It's not the same to do a talk at a conference than pitch your work to business people, present to a prospective employer, or, like I did last week, try to convince high-schoolers of how cool Computer Science is.<br /><br />Even if you are only focusing on research presentations at conferences, they are not all the same! Sometimes you will be giving a talk in a setting where everybody is an expert in what you are talking about, while in other occasions only a tiny fraction of the audience is working in your same field. In my case, I won't use the same kind of approach if I am presenting at a Recsys conference where everybody knows about Recommender Systems than at a generic one like WWW, where I can only assume that most of the audience does not know the topic in depth.<br /><br />It is also important to look at the program schedule. The name of your session and the talk immediately before and after yours is going to give you more information about who might be sitting in. If you are presenting in a conference with multiple tracks, the talks scheduled at the same time as yours will give you some hint about who is *not* going to be attending yours.<br /><br />(2) Find "the message"<br /><br />Find a simple take-away message that you want to get through to your audience. In many cases it will be something along the lines of "look how important and interesting my research is, please go ahead and look more into it by reading the paper... and don't forget to cite it in your next publication". But in other to transmit that idea you need to make your point. Therefore, find the answers to: (a) what problem does your work solve, (b) what makes your work different from other solutions, and (c) why should anybody care about it. These three questions should help you find the message. Stick to one/two ideas and refer the audience to the paper for more details. Trying to squeeze in too many messages in too little time is a recipe for disaster.<br /><br />Some researchers like to add another secondary message thread: (d) I am really smart and what I did is so complicated you might not even grasp it... I particularly dislike this kind of presentations and find them pretentious and boring (maybe because I am not so smart). But hey, I know some people have made quite a career of this so you should be aware.<br /><br />(3) Prepare a script<br /><br />Once you have identified the "main message," you are ready to prepare the script of the slides. I usually start off by having a bunch of empty slides with only the title on them. By having this, I can see if I might be going over time, need to sort things out differently... The script will depend on the kind of talk and time you have to speak. But in general, it will have a structure such as:<br /><ol><li>Introduce context and situation</li><li>Formulate problem and why it is important to solve</li><li>Main message (Solution to the problem, consequences, details on the solution...)</li><li>Summary on problem and solution</li><li>Future work and things to do<br /></li></ol>The script is important, but be ready and willing to change it. You are likely not to get it perfect from the start and as soon as you start adding more detail you will see a clearer picture. Don't make the "sticking to the plan" hit you back.<br /><br />(4) Make the visuals<br /><br />Maybe you think this is the least important part of your presentation. In my experience, I have come to value the visuals very much. Actually, most of the time I spend in preparing some presentations is looking for appropriate visuals that back up and re-enforce the "main message". The less familiar the audience is with your topic, or the less hardcore researchy it is, the more time you will want to spend choosing appropriate visuals. Some well-chosen pictures will make your message more sticky. And you might find some images that are so powerful that might make you go back to your script and twist it a bit.<span style="font-weight: bold;"><br /><br />The talk</span><br /><br />Once you have the slides more or less ready, you can start preparing the talk itself. Bear this in mind: if you prepare the slides but not the talk, your presentation is likely to suck. Some ideas and tips that can help you in the process:<br /><br />(1) Tape yourself<br /><br />As I mentioned before, taping yourself is one of the best tools I have found for improving your presentation skills. It is also an amazing tool for preparing your next talk. If you watch a video of yourself rehearsing the talk, you will be able to analyze what you are explaining wrong, where you are wasting your time, what jokes don't make sense... Besides, it is a perfect timing tool: not only you will get the exact duration of your talk in the video but also how you distributed it. This will allow you to make sure that you are devoting the right amount of time to getting the "main message" through.<br /><br />(2) Test technical issues as many times as possible<br /><br />Don't need to mention <a href="http://en.wikipedia.org/wiki/Murphy%27s_law">Murphy's law</a>, I suppose, but if something can go wrong, it will. No matter how much I check things over and over, there are always technical issues that catch me by surprise.<br /><br />In my last talk, I had a couple of videos that I knew could be problematic. I spent a lot of time in making sure they were working in the presentation. I even tried my laptop with a secondary monitor to make sure. I asked the host well in advance to make sure that I had the possibility of connecting the audio output of my laptop. And on the day, I went to the hall and tested the audio. I was even going to test the videos but the audience was already half in, so I preferred to keep the surprise and tested with some random music instead (big mistake here!). What happened? Videos did not show, so I had to improvise opening them with another program and that did not work very well either because of a limitation on the projector's resolution, I think.<br /><br />In my case, I like to put myself in situations of technological risks and I like the feeling of doing a complex live demo in a presentation that I know can fail (I guess is like the adrenaline rush I used to have when playing in a concert). But I have to admit that the safest advice is to keep technical challenges as simple as possible. And be anal in checking many times those that you know are likely to fail.<br /><br />Of course, checking technical details means, among other things, that you need to be in the room for your talk well in advance and test the presentation in the same conditions you are going to it later (even if that means missing one of the coffee breaks in the conference!).<br /><br />(3) Be ready for improvising<br /><br />And my last piece of advice may seem to contradict the rest. I have been talking about the importance of preparing many details of the talk. However, a presentation should always leave room for improvisation and adaptation. There is nothing worse than the feeling that the speaker has learned the conference by heart, and is not making any attempt to connect with the audience and the context. Besides, there might be elements during the talk that might force you to improvise: a technical issue, different audience that you expected, a reaction from somebody...<br /><br />You should be able to put any kind of external element into your presentation while not losing the main message. I don't like having to skip slides since it gives the impression that you are in a rush to finish, but many times there is no alternative: You might have lost precious time in trying to play that video, or maybe went too far in the introduction and now you need to cut short. It is again very important that you have a clear picture of what the "main message" is and improvise by skipping those slides that are not needed to understand it.<br /><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieRZyIMenJSQ9-XvP7KvVBwzsMXDplUpjLZ8SyPrUcM3gejMn5fGwlOEDj1gQb1Z0d0SLgyZiQyw2C9pM8LsFfKPYsaTiG4k9aC5Lmxbi6tMZzRi8lc-n4maehvez7o3OlAFBM8Q/s1600/microphone.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 433px; height: 289px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieRZyIMenJSQ9-XvP7KvVBwzsMXDplUpjLZ8SyPrUcM3gejMn5fGwlOEDj1gQb1Z0d0SLgyZiQyw2C9pM8LsFfKPYsaTiG4k9aC5Lmxbi6tMZzRi8lc-n4maehvez7o3OlAFBM8Q/s320/microphone.jpg" alt="" id="BLOGGER_PHOTO_ID_5543279313606197858" border="0" /></a><br />I hope that some of this advice is useful in your next presentations. But I would like to hear from you: how do you prepare your talks? Any tips or suggestions you want to share in the comments?Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com5tag:blogger.com,1999:blog-17171206.post-60334185788075807122010-09-29T02:52:00.000-07:002010-09-29T03:14:50.895-07:00Internship positions on Recommender SystemsAt Telefonica Research we are looking for young and talented researchers willing to expand their horizons by working in an exciting environment in beautiful Barcelona. And, as you will know if you follow this blog, I am particularly interested in working with PhD students whose research focus is Recommender Systems but also neighboring areas such as Data Mining, User Modeling, Social Networks, and Information Retrieval. We offer three month internships and interesting conditions.<br /><br />Work from previous interns has been published in top conferences such as SIGIR, WWW, Recsys, Web Intelligence... (see my <a href="http://xavier.amatriain.net/index_publications.html">list</a> of recent publications, most of which include interns)<br /><br />And, if you want references of what an internship in Telefonica is like, you might want to contact some of our previous interns in the group:<br /><ul><li><a href="http://an.kaist.ac.kr/%7Emycha/">Meeyoung Cha</a>, currently Assistant Professor at KAIST</li><li><a href="http://an.kaist.ac.kr/%7Ehaewoon/">Haewoon Kwak</a>, PhD student at KAIST</li><li><a href="http://www.cs.ucl.ac.uk/staff/n.lathia/">Neal Lathia</a>, currently Researcher at UCL<br /></li><li><a href="http://www.sis.pitt.edu/%7Ejahn/homepage/Home.html">Jae-wook Ahn</a>, PhD student at U. Pittsburgh </li><li><a href="https://www.inf.unibz.it/%7Elbaltrunas/research.html">Linas Baltrunas</a>, PhD student at U. Bolzano</li><li><a href="http://www.sis.pitt.edu/%7Edparra/">Denis Parra</a>, PhD student at U. Pittsburgh</li><li><a href="http://www.dtic.upf.edu/%7Emramirez/">Miguel Ramirez</a>, PhD student at U. Pompeu Fabra</li></ul>Please contact me for more details.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com2tag:blogger.com,1999:blog-17171206.post-15323635302068982662010-09-23T15:53:00.000-07:002010-09-24T05:02:08.467-07:00Contextual Movie Recommendations on an iPhone based on Expert Collaborative FilteringIf you follow this blog, you probably have already read about Expert Collaborative Filtering and <a href="http://technocalifornia.blogspot.com/2009/05/wisdom-of-few.html">The Wisdom of the Few</a>. Maybe you also read about our recent implementation of the approach to <a href="http://technocalifornia.blogspot.com/2010/07/music-recommendation-through-expert.html">recommend music</a>. Well if you are around in <a href="http://recsys.acm.org/2010">Recsys 2010 conference</a> next week you will get to see a demo of yet another prototype on Monday's Demo Session.<br /><br />We are presenting an iPhone application based on the Expert Collaborative Filtering approach. The application is the result of Josep Bach's undergrad final thesis and you can read the full-blown description of the project in <a href="http://xavier.amatriain.net/pubs/GeolocatedRecommendations.pdf">his dissertation</a>. The application, however, is much more than yet another implementation of Expert CF. The main highlights for me is that (a) you can offer personalized recommendations on a phone with 100% privacy guarantees, and (b) you can run a recommendation algorithm on the device, with minimum intervention from the server-side.<br /><br />Both these issues can be explained by the client-server architecture depicted below. The server is in charge of compiling all the public information available on the web by crawling critic websites like Rottentomatoes. It also gathers information about local cinemas and their schedules. All this information, which again is public, is stored in a SQL database and shared through a RESTful API with devices.<br /><br />The device, in this case an iPhone but could be anything else, connects to the server and syncs a local database through the RESTful API. Once this is done, all needed information is local on the device. Plus... all the personal information about the user (i.e. ratings on movies in this case). The recommendation algorithm can then run locally and return results in a reasonable time because the set of experts is limited.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiHiKPALc_pBj6HZMeGkhKwrO1B9yZzbk9KUjHwZF0PVz363Hyfg3utILDwnMIgHjkPerbqjPjPemxFTxzbOSccxiefMTMkNY0ePm1vCg70CJgJCMJNn5mewZ4u6bZdc3UMyzlbw/s1600/Architechture.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 585px; height: 364px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiHiKPALc_pBj6HZMeGkhKwrO1B9yZzbk9KUjHwZF0PVz363Hyfg3utILDwnMIgHjkPerbqjPjPemxFTxzbOSccxiefMTMkNY0ePm1vCg70CJgJCMJNn5mewZ4u6bZdc3UMyzlbw/s320/Architechture.jpg" alt="" id="BLOGGER_PHOTO_ID_5520248902156154770" border="0" /></a><br />Another important addition to the application is that we have added contextual features. The recommendations you will get on the app depend on your location and the time of the day. Therefore, it will recommend things that match your taste according to the expert-based prediction but also are playing in a cinema nearby now.<br /><br />We haven't done a full user evaluation yet, but informal results are very encouraging. We hope you can come and test it in Recsys and give us your feedback. We will soon post a video. But for now, here are some screenshots of the main app screens.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7qXrZOQQ3BRIi9GPLfkDlwNj73AMLBSszUwdPGxaqeS_EM80VEMFbyPRPSv4uMhd1i11rYxk1seNJA7S6t3wXpaB8drRxRntGf4lilJdYOGrLEMsdgliGGZTRFkbQfAXjZGrKng/s1600/Recommendation.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 284px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7qXrZOQQ3BRIi9GPLfkDlwNj73AMLBSszUwdPGxaqeS_EM80VEMFbyPRPSv4uMhd1i11rYxk1seNJA7S6t3wXpaB8drRxRntGf4lilJdYOGrLEMsdgliGGZTRFkbQfAXjZGrKng/s320/Recommendation.png" alt="" id="BLOGGER_PHOTO_ID_5520248717566231618" border="0" /></a><span style="font-style: italic;">List of Recommendations given your preferences, critics ratings but also your location</span><br /><br /></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbKaxDq8m8zSGI1fovTvOUGO8Rb1pFeQEiuIUvCIFWvouUxHtEd2r8Xd_3s5LN0PeDjvUOZA6UBu7xaCfzmgOo2X4R-VQ9UoL_hostmvXc_t8FdyqIbrFDJadp5zmfNk9UM5UhlA/s1600/MovieInfo.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 294px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbKaxDq8m8zSGI1fovTvOUGO8Rb1pFeQEiuIUvCIFWvouUxHtEd2r8Xd_3s5LN0PeDjvUOZA6UBu7xaCfzmgOo2X4R-VQ9UoL_hostmvXc_t8FdyqIbrFDJadp5zmfNk9UM5UhlA/s320/MovieInfo.png" alt="" id="BLOGGER_PHOTO_ID_5520248578706739874" border="0" /></a><span style="font-style: italic;">Information on a movie, including critics ratings, your ratings, and also closest cinema that is playing with next show times<br /></span></div><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ1XXUTfWukQq_P3UEGEFGLxkeUKQtXEu5jE6w3lfGEy_4Gb3YR3SryoTW2EqNh_OJptOgd4T5CWBKkgdzWJHLCAt28QxWnWbJpbrvrg4yCXkJW4KFH_lQnj5W9EYSR58y6v6xYQ/s1600/CinemaScreen.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 310px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ1XXUTfWukQq_P3UEGEFGLxkeUKQtXEu5jE6w3lfGEy_4Gb3YR3SryoTW2EqNh_OJptOgd4T5CWBKkgdzWJHLCAt28QxWnWbJpbrvrg4yCXkJW4KFH_lQnj5W9EYSR58y6v6xYQ/s320/CinemaScreen.png" alt="" id="BLOGGER_PHOTO_ID_5520248375148891458" border="0" /></a><span style="font-style: italic;">Screen showing cinemas near your current location (in blue)<br /><br /></span></div><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWWNpyGGjLaC-F_gjFaqpsg3H2qeysND6K-ilbF7wka_LfJDys18nFUcyY875DfjSPFFVpzYpykYmWUYoV0wjOES3Vnpib53L4vd4SapBheMZycrp8BB0tGL4F4Hb5gTnTGbfmLg/s1600/CinemaInfo.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWWNpyGGjLaC-F_gjFaqpsg3H2qeysND6K-ilbF7wka_LfJDys18nFUcyY875DfjSPFFVpzYpykYmWUYoV0wjOES3Vnpib53L4vd4SapBheMZycrp8BB0tGL4F4Hb5gTnTGbfmLg/s320/CinemaInfo.png" alt="" id="BLOGGER_PHOTO_ID_5520248244158237058" border="0" /></a><span style="font-style: italic;">Information on the closest cinema near you<br /></span></div>Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1tag:blogger.com,1999:blog-17171206.post-66627499762078819972010-09-15T13:26:00.000-07:002010-09-17T01:32:03.454-07:00The end of the Age of Search?A couple of days ago, there was an interesting <a href="http://www.nytimes.com/2010/09/13/technology/13search.html?_r=1">article in the </a><a href="http://www.nytimes.com/2010/09/13/technology/13search.html?_r=1">New York Times</a> on how social networks are changing the search experience. The truth is that the article is a bit confusing and mixes up several different issues. As a matter of fact, most of the article ends up being an introduction to <a href="http://www.hunch.com/">Hunch</a>, a very interesting recommendation site (thus not "search") based on different technologies including social recommendations.<br /><br /><a href="http://hunch.com/media/img/graph-bg.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 367px; height: 220px;" src="http://hunch.com/media/img/graph-bg.png" alt="" border="0" /></a><br />I twitted the link to the article and presented it as another prove of the "End of the Age of Search". That got me into a very <a href="http://www.google.com/buzz/xavier.amatriain/TRHavZcgPte/xamat-social-recsys-and-the-end-of-the-Age-of">interesting Buzz conversation</a> with <a href="http://glinden.blogspot.com/">Greg Linden</a> on why I thought that the age of search is coming to an end. I promised that I would try to write a more elaborate post to make my point if I had the time... and here I am.<br /><br />The first time I read about the "end of the age of search" was in an article titled <a href="http://money.cnn.com/magazines/fortune/fortune_archive/2006/11/27/8394347/">the race to create a smart Google</a> at CNN Money. As a matter of fact, the discussion on how recommender systems were going to render search engines obsolete was cited by Recsys 2009 organizers and turned into <a href="http://recsys.acm.org/2009">their homepage</a> motto.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIGXDAI5ebsSBhno63jbe7SpUzVxRmfnDwABBXw1WBQSuSJDe1pPNToqvPA4go9SORe8bEW76qH9xP1f8O_vylLpzgM2g7cwLbbiMtCmmATxmtf0DuN3rSM7VnGIsC6iF8Ga6Ew/s1600/some-questions-cant-be-answered-by-google.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 257px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIGXDAI5ebsSBhno63jbe7SpUzVxRmfnDwABBXw1WBQSuSJDe1pPNToqvPA4go9SORe8bEW76qH9xP1f8O_vylLpzgM2g7cwLbbiMtCmmATxmtf0DuN3rSM7VnGIsC6iF8Ga6Ew/s320/some-questions-cant-be-answered-by-google.jpg" alt="" id="BLOGGER_PHOTO_ID_5517650791197486018" border="0" /></a><br />So, credit given to Jeffrey O'Brien at CNN Money and Recsys09 organizers, I picked up on this idea and have been elaborating it in several of my presentations. Two years ago, for instance, I gave a presentation on <a href="http://www.slideshare.net/xamat/recommendations-as-the-future-of-search">Recommendations as the Future of Search</a> in an open research day organized by our lab. The main story, that I have repeated several time since then, is the<br />following:<br /><story><br />"<br />Think about it: Search is not an ultimate need for people. What people need is information. The fact that they have been using search and this has been so successful is (mainly) because that is the only tool we gave them.<br /><br />Search by itself is not enough to compensate the ever-growing information overload. First, there is the issue that for most given queries, you will get many more results than a user can ever go through. So you are faced with the problem of how to turn that huge set into the "ten blue links" (i.e. first results page). But, there are more or less smart ways to do so by taking into account context, user preferences and so on.<br /><br />The main issue, however, is a different one: every search action requires users to explicitly formulate a query. From our geek perspective, we usually forget how difficult it is for a regular user to formulate a query given an information need. Even if you are fairly proficient, it might be complicated to turn a fairly trivial information need into something you can formulate in a simple query (take a look at<a href="http://technocalifornia.blogspot.com/2010/07/being-social.html"> the experiment</a> I did with some SIGIR attendees when I asked them to search for my daughter's name, which is actually written in <a href="http://xavier.amatriain.net/">my homepage</a>).<br /><br />So, of course, the bottom line of my story has "traditionally" been that Recommender Systems represent a step forward since (a) they provide ways to assess relevance taking into account personal preferences and context, and (b) they can provide results without the need for explicit queries. I still believe Recommender Systems will have much to say in the way search is handled in the future. Of course, I work on the area, so you might think my opinion is a bit biased. But you don't have to take my word for it. In this year's <a href="http://www.eurospider.com/acm-sigir-industry-track-2010.html">industry track at the SIGIR conference</a> both Yahoo and Google mentioned "implicit search" as one of the most important trends. Now I hear that Google's Schmidt is talking about <a href="http://musically.com/blog/2010/09/08/eric-schmidt-talks-google-music-autonomous-search-and-the-launch-of-google-tv-in-the-us-this-autumn/">autonomous search</a>. They are all different ways of talking of <span style="font-weight: bold;">Recommender Systems</span> (which maybe, as my friend @mramirez suggested, is not the sexiest name for a research/technology area).<br /></story>"<br /><br />But, we have recently learned some data that can be used as a supporting evidence of the end of the Age of Search. Nielsen just published some results that show a <a href="http://blog.nielsen.com/nielsenwire/online_mobile/top-us-search-sites-for-july-2010/">16% drop in web searches</a> over the last year. And this is something pretty symptomatic! I disagree with some of the comments in that same post by Nielsen saying that this drop is due to the use of mobile devices. Unfortunately, I cannot say that this is due to the huge success of recommender systems either. In my opinion, there is one main reason for this: <span style="font-weight: bold;">Search is being replaced by Social Networks</span>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcDWet-RmuyMCMfofFi4CJ0bPpxAtoIxSXonRLltrjIqOjncoRZyNXUFYDtgQ8NqyY8skSdUhgWrmV9iI674qRT2WJkSQLE3nuwztjGNupSS5zK-GSoBZx22DuMsw1YHP2FYz4Lw/s1600/NielsenSearchEngines.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 473px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcDWet-RmuyMCMfofFi4CJ0bPpxAtoIxSXonRLltrjIqOjncoRZyNXUFYDtgQ8NqyY8skSdUhgWrmV9iI674qRT2WJkSQLE3nuwztjGNupSS5zK-GSoBZx22DuMsw1YHP2FYz4Lw/s320/NielsenSearchEngines.png" alt="" id="BLOGGER_PHOTO_ID_5517660421944902754" border="0" /></a><br />If you think about it, most information needs users have are not about a particular and concrete piece of information such as "who wrote War and Piece". They are actually much less precise needs such as "what is there to do this weekend" or "is there a cool music album I could listen to while I go to work tomorrow". Or even things like "what important stuff has happened in the world today" or "I need to find a job better than the one I have". If you consider information needs like this, you will realize that the answer is much more likely to come out of your social network than out of an artificially formulated query.<br /><br />But not only that, I think we would agree that most of the time, when people go into the Internet, they don't have any information need beyond the prototypical "see what's up" or "catch up". And what do they do? They log into Facebook or check Twitter. It is clear that in this cases, search is out of the picture.<br /><br />Yet another worrying trend for the future of search is the decrease in the use of the web browser and the increase of "walled internet gardens". This idea hit front lines last month with <a href="http://www.wired.com/magazine/2010/08/ff_webrip/all/1">Chris Anderson's piece in Wired</a> and has been covered throughout, so I won't go into it (but this is the main reason I am trying to avoid the use of the word "Web" in favor of "Internet" in this post).<br /><br />As a finishing note, I don't want anybody to get the wrong impression that by talking about the end of search as the driver for web development, I am implying that search-oriented companies like Google is doomed. Of course not. Google know most of what is in this post as well as I do. As I mentioned, they are more and more talking about implicit or autonomous search as a proxy word for recommender systems. And in the case of social networks taking over search, I am pretty convinced they would agree with such a vision for the future. That is why they have been trying to get into the social scene so hard lately with Buzz, Wave... and more recently the rumors are that they are working in a Facebook killer called <a href="http://www.pcworld.com/article/205471/google_gets_serious_about_social_networking_is_google_me_coming_in_2010.html?tk=hp_new">Google Me</a> or at least they are looking into adding more and more <a href="http://mashable.com/2010/09/15/google-social-networking/">social features into their search engine</a>.<br /><br />Interesting times to be doing research in this area because as Search supremacy comes to an end, we will have more space to fill in the void with newer and much cooler ideas.<br /><br />As always... looking forward to your feedback.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com11tag:blogger.com,1999:blog-17171206.post-39188819663875550702010-08-25T01:55:00.000-07:002010-08-25T06:36:30.094-07:00Study on online music taste: call for participationAre you a music listener and <a href="http://www.lastfm.com">lastfm</a> user? Are you interested in helping out research while having the chance to win a $600 Amazon gift card? Please help us understand online music tastes by completing a survey that will only take around 15 minutes of your time and might even be fun!<br /><br />All you need to do to participate is go to <a href="http://musicsurvey.webhop.net/MusicSurvey/">this page</a> and provide your last.fm username and a valid email. We will check if you meet the requirements (at least 18 y.o. and 5000 scrobbles on lastfm) and we will then send you a link to your personalized survey.<br /><br />Thanks for your time!Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com0tag:blogger.com,1999:blog-17171206.post-58873247706050684332010-08-08T14:29:00.001-07:002010-08-09T01:34:16.854-07:00Multiverse Recommendations (aka using n-dimensional tensor factorization for context-aware collaborative filtering)This post is the first of several in which I will be explaining some of the things we are presenting in the upcoming <a href="http://recsys.acm.org/">Recsys 2010</a> conference. The project I will talk about is led by <a href="http://www.ci.tuwien.ac.at/%7Ealexis/Welcome.html">Alexandros Karatzoglou</a> and presents a new approach to context aware recommendations that we have named Multiverse. You can access the full paper <a href="http://xavier.amatriain.net/pubs/karatzoglu-recsys-2010.pdf">here</a>, but I will give you a brief description in this post.<br /><br />The introduction of context in recommender systems is an area of growing interest. The reason is simple: While we all value the fact that Recommender Systems are able to infer our tastes and recommend new things, it is clear that whatever we like - and are willing to receive - depends on the context. E.g. We do not want to receive the same movie recommendations on TV if we are sitting with the kids on a Sunday afternoon or if we are alone on a late night session. There is a growing body of literature on contextual recommendations. Without going any further, I already <a href="http://technocalifornia.blogspot.com/2009/09/context-aware-recommendations.html">posted</a> about context-aware recommendations with micro-profiles on this blog. Also, there is a very good chapter on the topic on the upcoming <a href="http://www.springer.com/computer/ai/book/978-0-387-85819-7">Recommender Systems Handbook</a>. But, while we wait for it, you might want to look at some of the publications by <a href="http://ids.csom.umn.edu/faculty/gedas/">Adomavicius</a> and <a href="http://pages.stern.nyu.edu/%7Eatuzhili/">Tuzhilin</a>.<br /><br />Context takes the recommender problem from a two dimensional problem, where we have users and items, to an n-dimensional one where we can have many contextual dimensions added. In our work, we have generalized the successful matrix factorization approach to this n-dimensional case. In order to do this, we have used the idea of <a href="http://en.wikipedia.org/wiki/Tensor">tensors</a>, which are precisely a generalization of matrices to n dimensions. The following figure illustrates the idea (note that, for simplicity, we are illustrating the 3 dimensional case with just one contextual variable).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT-3jhUe6VJ1pwH85_QeAfo5AafO4vTn-PzdF-rslahTt-As-r2tbdUDkdncmQBWOyD1mf6bc_84cks310JdCfW46ojPgtotiHLXnVJudv6IwfRmTxIC2UGQtq0ZuEeeYXZ71uOQ/s1600/hosvd-tensor.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 174px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT-3jhUe6VJ1pwH85_QeAfo5AafO4vTn-PzdF-rslahTt-As-r2tbdUDkdncmQBWOyD1mf6bc_84cks310JdCfW46ojPgtotiHLXnVJudv6IwfRmTxIC2UGQtq0ZuEeeYXZ71uOQ/s320/hosvd-tensor.png" alt="" id="BLOGGER_PHOTO_ID_5503155080308247282" border="0" /></a><br />In the paper, we show how this approach outperforms previously existing methods on a number of different datasets. One of these results is illustrated in the figure below. Note how Tensor Factorization (in green) not only outperforms other methods, but it performs better the more contextual information we add. It is also interesting to note how not observing context information (black line) results in worse performance. When we add contextual information to 80% of our data, not using this information yields a result that is almost 50% worse.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1UrKAuDJ60S1PukzP8KinOChinCkeyQtQiPKTUJb2oG6f9voavbIPYudyH-ExndlQArVTF1cPozVQ1X3mkPUoa3fEesKlTDIqdMGDN7Ad79gteGcCyubYd4t7XAJ9oLOuH_9d9A/s1600/mae-vs-change-prob.png"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 449px; height: 336px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1UrKAuDJ60S1PukzP8KinOChinCkeyQtQiPKTUJb2oG6f9voavbIPYudyH-ExndlQArVTF1cPozVQ1X3mkPUoa3fEesKlTDIqdMGDN7Ad79gteGcCyubYd4t7XAJ9oLOuH_9d9A/s320/mae-vs-change-prob.png" alt="" id="BLOGGER_PHOTO_ID_5503154840723258786" border="0" /></a>The use of context in recommender systems and other areas of information retrieval is a very interesting topic that is likely to get even more attention in the near future. _We will surely contribute to this.Xavier Amatriainhttp://www.blogger.com/profile/14166119485952054870noreply@blogger.com1