Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement personalized feed ranking?

Tags:

ranking

feed

I have an app that aggregates various sports content (news articles, videos, discussions from users, tweets) and I'm currently working on having it so that it'll display relevant content to the users. Each post has a like button so I'm using that to determine what's popular. I'm using the reddit algorithm to have it sorted on popularity but also factor in time. However, my problem is that I want to make it more personalized for each user. Each user should see more content based on what they like. I have several factors I'm measuring: - How many of each content they watch/click on? Ex: 60% videos and 40% articles - What teams/players they like? If a news is about a team they like, it should be weighed more heavily - What sport they like more? Users can follow several sports

What I'm currently doing: For each of the factors listed above, I'll increase the popularity score by X of an article. Ex: user likes videos 70% than other content. I'll increase the score of videos by 70%.

I'm looking to see if there's better ways to do this? I've been told machine learning would be a good way but I wanted to see if there are any alternatives out there.

like image 321
Adam Sebti Avatar asked Jun 03 '18 06:06

Adam Sebti


People also ask

What is name for Facebook ranking algorithm?

EdgeRank is the name commonly given to the algorithm that Facebook uses to determine what articles should be displayed in a user's News Feed.

How does Facebook rank content?

Essentially, the Facebook algorithm evaluates every post. It scores posts and then arranges them in descending, non-chronological order of interest for each individual user. This process happens every time a user—and there are 2.9 billion of them—refreshes their feed.


1 Answers

It sounds like what your doing is a great place to start with personalizing your users feeds.

Ranking based on popularity metrics (likes, comments, etc), recency, and in you case content type is the basis of the EdgeRank algorithm that Facebook used to use.

There are a lot of metrics that you can apply to try and boost engagement. Something user liked post from team x, y times, so boost activity in feed by log(x) if post if is from y, boost activity if it’s newer, boost activity if it’s popular, etc… You can start to see that these EdgeRank algorithms can get a bit unwieldy rather quickly the more metrics you track. Also all the hyper-parameters that you set tend to be fixed for each user, which won’t end up with the ideal ranking algorithm for every user. Which is where machine learning techniques can come into play.

The main class of algorithms that deal with this sort of thing are often called Learning to Rank, and can be on a high level generalized into 3 categories. Collaborative filtering techniques, content based techniques, and hybrid techniques (blend of the first two)

In you case with a feed that most likely gets updated fairly frequently with new items, I would take a look at content based methods. Typically these algorithms are optimized around engagement metrics such as likelihood that the user is going to click, view, comment, or like an activity within their feed.

A little bit of self-promotion: I wrote a couple blog posts that cover some of this that you may find interesting.

https://getstream.io/blog/instagram-discovery-engine-tutorial/ https://getstream.io/blog/beyond-edgerank-personalized-news-feeds/

This can be a lot a lot to take on, so you could also take a look at using a 3rd party service like Stream (disclaimer, I do work there) who helps developers build scalable, personalized feeds.

like image 167
Balazs Horanyi Avatar answered Oct 16 '22 18:10

Balazs Horanyi