Introducing RScore - A democratic ranking system

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):

GroupUsersCumulative SPCumulative Power-Down
All94,173 (100.00%)75,528,309 (100.00%)433,973 (100.00%)
MW16 (0.02%)31,844,589 (42.16%)234,223 (53.97%)
W94 (0.10%)26,439,700 (35.01%)145,021 (33.42%)
HMC370 (0.39%)11,473,894 (15.19%)41,798 (9.63%)
LMC1,258 (1.34%)3,813,096 (5.05%)10,230 (2.36%)
M16,739 (17.77%)1,589,906 (2.11%)2,701 (0.62%)
D75,696 (80.38%)367,124 (0.49%)0 (0.00%)

Classification:

ClassShortSP
Mega WhaleMV1 Million+ SP
WhaleW100k - 1M SP
High Middle ClassHMC10k - 100k SP
Low Middle ClassLMC100 - 10k SP
MinnowsMLess than 100 SP
DustD~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:

SettingValue
ModelLinear
Stake in USDLow: $100, High: $10,000
ReputationMin: 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


H2
H3
H4
3 columns
2 columns
1 column
16 Comments