I have a very large dataset of user-item interactions. It tells me how many times a user bought, viewed or liked an item - all these actions are in binary form and I don't have any explicit ratings. I am trying to build a scalable recommender system and trying to figure out a way to update it as and when I receive new data.
Due to its scalability, low memory overhead and extensibility, matrix factorization with stochastic gradient descent is my algorithm of choice. I read up on Collaborative Filtering with Implicit Feedback but that only deals with a single implicit data source. How can I extend that for multiple sources? Just adding them up, as I am doing right now, does not account for the relative importance of the different actions (for example, a like would be more indicative of a preference than a view, and so on), and is a very naive way to handle them.
I am also wondering what is a good strategy for updating them. Currently each user-item pair has a unique "rating" (which I obtained from adding up the counts for the different actions) and so whenever I get a new rating, I dig out the previous rating and update that. This is quite memory intensive, as it means I cannot just discard old data once I have used it to train the model. But on the other hand, if I just use the new rating to update the model, then it in a way "over writes" what the model learned from the previous ratings. That too, is something I would like to avoid.
What kind of best practices are recommended for these issues? Does any one know of any papers/results that show that just updating using the new ratings works well in practice?
I am aware of the paper by Rendle and Schmidt-Thieme which experimentally shows that updating the latent factor vectors for only the user and item that the new rating is for, does almost as well as retraining the entire model (they report an error of at most 1%) from scratch. But they show this for explicit data, where a new rating from an exist user-item pair does mean that it over writes any previous data that we may have had for the same. This is not the case for implicit data, where, if a user buys an item a second time, we should not be ignoring the first purchase/view/like, but adding to it.