Today we are happy to add personalized recommendations to steemit.com.
Steemit analyses your voting patterns to identify other users who vote like you. The more you and someone else vote alike the more weight their votes have in promoting (or demoting) content on your personalized feed.
When you vote for a post, it creates a strong link between you and the author of the post. When others vote the same way on the same post a weaker link is established between you and your fellow voters.
Down voting a post means you are much less likely to see future posts from the same author.
If you find the content in your recommendation page is not accurately reflecting your interests, then the best course of action is to find stuff you do like and up vote it.
The Algorithm
For those of you who are interested in the algorithm it is divided into several parts. The first part is identification of users who are similar to you. The second part involves identifying recent articles voted on by similar users.
Measuring User Similarity
Any time two users vote the same way on a post the vote is deemed to be similar. It is assumed that the author of a post votes for his own post. direct and indirect fields below measure the percent of similar voting.
direct = direct_similar_votes / total_direct_votes;
indirect = indirect_similar_votes / total_indirect_votes;
The algorithm needs to factor in a weighting factor based upon the number of votes sampled. This is done on a log scale so that all users approach the same weight as the number of measurements approaches infinity.
direct_order = log(total_direct_votes)
indirect_order = log(total_indirect_votes)
Any user for whom we have no similar votes is deemed to have a negative order.
if( direct_similar_votes + indirect_similar_votes == 0 ) {
direct_order *= -1;
indirect_order *= -1;
}
Lastly we combine these terms giving a 10x weight to the author. The direct and indirect measures are squared to bias the results heavily toward users with high degree of similarity and to greatly discount users who vote in opposite ways on even a few posts.
user_similarity = 10 * direct_order * direct ^ 2 + indirect_order * indirect ^ 2
Generating Recommendations
Armed with a measure of user similarity, we are now ready to start ranking posts. The first step is to go over your list of similar peers and fetch all posts they have voted on in the last 24 hours. The posts are further filtered to remove any posts with global negative down votes, posts that are older than 24 hours, or posts that the user has already voted on.
For each post we calculate the sum of the ranks of all users voting for it. Lastly we multiply it by age.
post_rank = sum(ranks) * (24 hr - now + creation_date) / 24 hr`.
Something that is just posted has the full rank. Something that is 24 hours old is ranked at 0.
Finding your Recommendations
It is now easier than ever to find the best content from your favorite posters.
You can find recommendations customized for you in the account menu located in the upper right hand corner of steemit.com.
Enjoy!