RScore, is an abbreviation for Ranking Score, however the capital letters also reveal the secret to its internals - the score is derived from users Reputation and Steem power.
Why RScore?
RScore has been created to provide an alternative approach to content visibility. RScore does NOT have any effect on payouts or curation rewards.
Furthermore, I do not claim that this approach is better or worse than what Steemit currently has. A delegated curation model currently employed might be a superior, if not ideal solution for steemit.com.
SteemQ will be based on two different models:
1.) A personalized feed that is a hybrid of interests and subscriptions to brands.
2.) A sharded community model based on common interests (similar to how Reddit does it).
Individuals will have a highly personalized experience, and a very narrow exposure to the content ecosystem.
Whats more, the expected amount of video content is to be at least an order of magnitude higher than written content.
This makes it very hard, if not completely impractical for delegated curation to scale.
In the current system, posts are ranked by the payout. In practical terms, this means that only a small group of people has the ability to make posts visible (the curators).
Another issue is that users might feel like they have no voice. Unlike Reddit, where each vote is worth a vote, the votes based on rshares don't have any impact on visibility for most users.
The main motivation behind RScore is to find a more democratic mechanism for content propagation. This would allow us to crowdsource content filtering to a much larger group of people.
Note:
This post is based on the snapshot taken on Sept. 22nd 2016. The users selected for the dataset are all users with at least 100 steem power - which amounts to 5246 users.
Steemit Inc account has been excluded from the dataset, as it isn't used for voting.
Reputation
For starters, lets look at the distribution of reputation users have:
We can see a large spike at 25. That is the default reputation every account starts with. Looks like we have about 2,000 accounts that haven't posted anything yet...
If we filter out all the negative reputation, as well as the stock reputation (25), the distribution looks like this:
The majority of high value users have a reputation between 50 and 62. Ideally, we would like to give these people a higher RScore.
Steem Power
This is the distribution of Steem Power:
No, this is not a glitch. Lets look at the SP distribution table (with Steemit Inc account being excluded):
Group | Users | Cumulative SP | Cumulative Power-Down |
---|---|---|---|
All | 94,173 (100.00%) | 75,528,309 (100.00%) | 433,973 (100.00%) |
MW | 16 (0.02%) | 31,844,589 (42.16%) | 234,223 (53.97%) |
W | 94 (0.10%) | 26,439,700 (35.01%) | 145,021 (33.42%) |
HMC | 370 (0.39%) | 11,473,894 (15.19%) | 41,798 (9.63%) |
LMC | 1,258 (1.34%) | 3,813,096 (5.05%) | 10,230 (2.36%) |
M | 16,739 (17.77%) | 1,589,906 (2.11%) | 2,701 (0.62%) |
D | 75,696 (80.38%) | 367,124 (0.49%) | 0 (0.00%) |
Classification:
Class | Short | SP |
---|---|---|
Mega Whale | MV | 1 Million+ SP |
Whale | W | 100k - 1M SP |
High Middle Class | HMC | 10k - 100k SP |
Low Middle Class | LMC | 100 - 10k SP |
Minnows | M | Less than 100 SP |
Dust | D | ~3 SP |
We can look at the distribution from orders-of-magnitude perspective. It makes for a nicer chart, but it doesn't help us much.
What if we ask a different question?
How much should the user invest in USD terms to be granted a right to the potential of having 1 RScore point in voting power? $5,000? $10,000? $100,000?
How much should be the minimum buy-in? $100, $1000, etc..?
Implementation
The first version of RScore is very simple. Each user gets a voting power between 0 and 1 based on their reputation, steem power and vote percentage.
The formula is as follows:
vote_rscore = n_voter_reputation * n_voter_steem_power * vote_pct
Spec
The sample spec for the RScore algo is as follows:
Setting | Value |
---|---|
Model | Linear |
Stake in USD | Low: $100, High: $10,000 |
Reputation | Min: 26, Max: 72* |
*Max Reputation is currently whatever the most reputable user on the platform has. It could also be averaged out from top 1 percentile user reputation.
n_voter_reputation
This is a normalized (0 to 1) voter reputation. Users with reputation below 26 will have n_voter_reputation of 0. To understand it better, lets look at Reputation's impact on RScore in a Linear model.
n_voter_steem_power
This is a normalized stakeholding. First, we need to convert USD into SP using the current implied market rates.
Example:
(Low: $1,000 USD, High: $10,000 USD)
(Low: 1657.8737995110566, High: 16578.737995110569)
I have upped the low end of the range from $100 to $1,000 for this example, as it makes for a more insightful chart.
Now we can look at SP's impact on RScore in a Linear model:
People with less than $1,000 worth of SP will have RScore voting power of 0, and people above $10,000 worth of SP will have their voting power capped at 1.
n_voter_reputation * n_voter_steem_power
When we combine the two, and apply the model to the userbase, we get to see what kind of RScore would people get (blue is lowest, red is highest).
The SP axis is skewed because its scaled with a log. The graph only contains the users whom would have a RScore greater than 0 (2567 out of 5246).
Animated:
n_voter_reputation * n_voter_steem_power * vote_pct
Now we simply multiply our RScore with the percentage we voted with.
If a vote is 50%, then vote_pct
is 0.5. For a full vote, it would have been 1.
Final RScore
Final RScore on a post is simply a sum of individual votes.
Example:
(SP Low: 165.12576181280619, SP High: 16512.576181280619)
User: furion, Score: 0.75
User: positive, Score: 0.06
User: smooth, Score: 0.87
User: ned, Score: 0.79
User: unlonely-soul, Score: 0.00
User: craigwilliamz, Score: 0.00
Final RScore: 2.47
Alternative Models
We can alter the RScore behaviour by applying non-linear models to its components.
n_voter_steem_power
Because we are range-bound by a tight high-low spread, we could improve our model with exponentiation.
This would allow us to speed up the power increase they approach the n_voter_steem_power max
(ie. $10,000). It would also force bot owners to commit the full $10k for a maximum yield.
n_voter_reputation
We could improve our Reputation component by using a sigmoid function to program a desirable behaviour. With a nice S shaped curve, we pick off slowly, then speed up, and taper off towards the end of the spectrum.
If you remember the distribution chart, most of the active userbase is in 50-62 reputation range. We can tweak our curve to make that range super rewarding:
Sybil Attacks
RScore does not guarantee that the system isn't game-able. We can remedy this by configuring it in a way that makes the attacks non-economical from risk-reward perspective.
Individuals
Lets assume that Reputation component is game-able, and that the economic cost of forging a reputation is 0.
To get the account with the RScore voting power of 1.0 per vote, the attacker needs to power up $10,000 (or whatever max_stake_usd
setting is).
The attacker needs several accounts with powered up Steem to successfully boost the visibility of the post.
Risks:
1.) Increased visibility does not guarantee monetary rewards. If people don't like the content, they won't vote for it.
2.) If the attacker is caught, his reputation is destroyed. He is left with tens of thousands of dollars locked into accounts with effective RScore voting power of 0.
Organized groups
RScore makes attacks hard for individuals, however this is not the case for organized groups.
The system could be gamed when a group of individuals colludes to increase visibility of the post, and splits the loot. This could easily be done in private Slack group.
Another way to game the system is trough an automated vote-exchange. People would give their posting keys to the exchange to vote on their behalf, and earn revenue from 'advertisers'. Advertisers are content creators who want to pay to game the system.
In both cases, there are two outcomes:
- The content is actually really good, and the 'attack' succeeds. More power to them.
- The content is bad or outright spam. This is almost not a problem, because buying visibility does not guarantee economic rewards. If people dislike the content, they will down-vote it, effectively nullifying the attack.
Perhaps this problem could be largely remedied by having a community sourced moderation effort (like @steemcleaners).
Going Forward
It is hard to tell how this system will perform in real-world. SteemQ will be experimenting with different models heavily, until a good fit is found.
Any feedback on the idea, as well as suggestions for improvements are welcome.
I have also deployed the linear RScore implementation on steem.li.
Don't miss out on the next post - follow me.
SteemQ | steemtools | steem.li | witness
Cool idea! I think it is a very innovative way to rank content. It could be added to Steemit too for regular posts. They could keep the "trending" page as-is, and add a new page with posts ranked by RScore.
One small tweak - you may want to set the threshold lower than $1,000. 1k seems like regular users would feel like they have no voice if they had to invest this much to have a say.
A whole post could be written about this in the context of the current Steem voting algorithm.. I think it is one of the biggest hurdles that is currently holding back investment in SP.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
well thought through and presented. How about using some fuzzy logic and coming up with a set of if then rules as well?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Hello @furion. In my opinion, really democratic ranking could be only implemented if the users in the steem blockchain were inevocably 1 to 1 mapped to a real person.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Upvoted and followed. Great post. Clear to understand
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Nice, resteemed :^)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you :)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
This seems like a very exciting track to run on!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Great idea! I like that minimum SP $1000. Maybe more users will power up! I could create one T-Shirt design for this! If you have any idea just tell me!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
yes a geat and important point you make when you say " a vote is a vote " anything else surely ignores the vote of a new user and I think is totally detrimental to the style of politics that steemit was founded on. Sure it great to make money but when one individual with no matter how much steem power he owns votes, he or she has voted and this vote should be looked on as significant !! upvoted @furion
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
nice charts! where did u get ur data?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Thank you for this. This is valuable, resteemed
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Cool idea @furion as always your works is invaluable. Kinda funny I am low middle class in real life and low middle class on here. Lulz.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Cool
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit