How the new content ranking algorithm helped us increase the time spent by the user in the app.
Recently, we talked about how important it is for any content project to offer relevant content to its audience. Today we will talk about how important it is to show it correctly and how the creation of a new algorithm for the main feed helped us increase key project indicators.
Basic algorithm for ranking posts
A year ago, when we launched MDK, we faced the question of ranking posts in the feed. Since the content in MDK is created by a multitude of authors and falls into one common feed, we had to decide which posts to show to users in the first place, and which to place a little lower. Moreover, we had to find the right balance between showing the most interesting posts and offering new content that users have not yet seen.
These tasks were handled well by the classic hot feed algorithm, which we started with. It is arranged as follows. Each post has its own rating, which is simplified by the formula:
𝑟𝑎𝑡𝑖𝑛𝑔 = 𝛼 ∗ 𝑡𝑖𝑚𝑒 + lg(𝑣𝑜𝑡𝑒),
where time is the post publication time after the MDK launch moment; 𝛼 — time ratio; vote — post evaluation by users.
The graph of this function for positive values of the vote is shown in the figure below. For clarity, the maximum value on the time axis on the graph is limited to 12, and on the vote axis — 100, but it is clear that the graph can be extended to infinite values of these variables.
From the graph it is clear that each new post always comes out with a higher base rating than all previous ones, because the time variable is constantly growing. After the post is published, other users begin to evaluate it, and the post rating starts to grow, due to a change in the vote axis. The more up votes a post receives, the higher its rating. This allows an interesting post to overtake new posts and climb to the top of the feed.
It should be noted that in this formula we use not a linear dependence of the post rating on the number of votes received, but a logarithmic one. The logarithm function works in such a way that each new up vote has a smaller impact on post’s rating than the previous one. This is done to ensure that popular posts could not always remain at the top of the feed, collecting more and more votes and endlessly increasing their rating.
Problems of hot feed formula
This algorithm of the main feed in most cases works quite well. It allows to show at the top of the feed the most interesting posts that were best rated by users, at the same time gradually replacing them with other interesting, but newer posts.
However, this algorithm has one significant drawback, which lies in its formula. The fact is that it is designed for one average frequency of use of the app. In our case, it is about once every 6 hours. If you open the app every 6 hours, then everything works fine. The feed has time to be updated and at the top of the hot you can see the most interesting posts that you have not yet seen. Problems begin when you visit the app more or less often than at this average interval.
- For example, if you open the app once every 2 hours, the hot feed does not have time to fully update. Thus, at the top of the feed, along with new interesting posts, you see those posts that you have already viewed. In this case, the search for new posts turns into a rather difficult task. You need among the variety of old and new posts to find those posts that you have not yet seen. This is further complicated by the fact that during the time you were not in the app, the rating of posts has changed, as they continued to receive new votes from other users, which means that all posts also change places.
- If you visit the app less often than this average interval, for example, once a day, then you will most likely see only posts that came out in the last 6 hours, losing other interesting content that was created in the app a little earlier but has already dropped down in the hot feed. Thus, your overall impression of the content is reduced, since you do not see all the interesting posts for the day.
Partly, we have already tried to solve the problem of this formula by introducing floating time ratios that vary depending on the time of the last opening of the app. However, this approach also has several disadvantages. If you watch the feed very often, then it starts to change very quickly, and you lose the most interesting posts, under which there are still hot discussions. If you visit the app very rarely, then, of course, you will see the most interesting posts that you missed, but you will not be able to enter into discussions with other members of the community, since the main discussions there have already been completed. Moreover, when you reopen the app after a short period of time, the time ratio will change and you may get the impression that the content in the app has deteriorated sharply, although you simply see more new content that users have not yet had time to evaluate.
In addition, with this approach, there are some technical problems. The fact is that the algorithm considers that if you opened a feed, you watched it, although in reality this is not always the case.
Another problem of the hot feed, perhaps less obvious, but, in our opinion, much more important, is related to the psychology of consumption. The fact is that people like to perform specific tasks. If we clearly understand what is required of us, then we always strive to complete it in order to get a sense of satisfaction from the accomplished task.
In the case of an endless hot feed, we do not know how many posts we need to view. We keep scroll it down and down until we reach posts with very low ratings, while our impression of viewed content continues to decline. Moreover, we constantly have to decide when we finally have to stop, which also requires some effort from us and makes it difficult to relax and have fun.
This consumption model introduces users to a state of stress. It never gives a feeling of satisfaction from the fact that we looked through all the interesting posts and constantly makes the user think about how interesting each viewed post was.
The new feed of the best posts
We understood that we must solve this problem and offer the user a different, simpler consumption model. So, we came up with a feed of the best posts.
Its algorithm works as follows. Each fixed interval of time the “Top” feed appeals to the “Hot” feed, finds the highest rated post there that has not yet been in the “Top” feed, and adds it to the very top of the feed. Thus, over the course of a day, a fixed number of the most interesting posts, ordered by their relevance, gradually falls into the “Top” feed. So, the users, whenever they went into the app, can always view all the most interesting posts that have appeared while they were gone, and be sure that they saw all the most important. At the same time, with such an algorithm for replenishing the feed, users always know which posts they have seen before and which ones they still need to see.
Results of implementation
We have introduced a new main feed in the beginning of June 2019 and now we are ready to share with you the first results. After the launch of the new feed, the average number of posts viewed by one user increased by 11%. Yes, at first glance, this is an insignificant increase, but we must take into account the fact that now there are much fewer posts on the main feed than there were in the infinite “Hot” feed, and even despite this fact, the views still grew.
In the future, with an increase in the amount of content, we plan to gradually increase the number of posts that fall into the “Top” feed, and also start adding there posts that correspond to the personal interests of each user. We believe that in this way we will gradually be able to significantly increase the number of posts viewed by users, while continuing to keep their attention.
Much more interesting are the other indicators of the project. The new algorithm of the main feed has significantly changed the behavior of users. Thus, the four-week retention rate increased by an average of 40% for each of the four weeks, compared with the previous version of the application. Having received a more understandable model of content consumption, 40% more new users wanted to return to the app again and continue using the app.
The number of sessions per user also increased by about 20%. Since now the main feed of the app has been regularly updated with new interesting posts, users began to open MDK more frequently in order not to miss something important. They have a clear goal for the number of posts they need to look through, and they are eager to achieve it.
Moreover, what is most interesting, the average time spent by the user in the app per day increased by 47%! This means that the content in the feed has now become more interesting and users are ready to spend more time watching it.
It is clear that all these indicators still have to pass the test of time, but the first results show that the new feed has a great future.