A new approach to Content Reward Allocation

in #steem8 years ago

Today I decided to step back and really dig into the nature of Steem and get a better understanding of the exact problem we are trying to solve. You would think that living and breathing Steem for almost 6 months I would understand the problem perfectly, but each day I learn more and today is no exception.

A problem well stated is a problem half solved. So I decided to ask myself what I would do if it was just me and a couple of good friends trying to divide up a pot amongst ourselves based upon some kind of subjective value judgement. The result was quite illuminating.

Stating the Problem

Suppose a group of 10 friends gets together for a competition to see who is the best writer. Each individual puts $100 into a pot and then submits a sample of writing. The friends agree that no outside judges are allowed and that each individual should receive a share of the pot proportional to quality of the writing as judged by their peers.

The friends need to come up with a system that ensures everyone judges fairly. The temptation is to judge your own work to be of the highest quality and everyone else's to be worthless. If everyone did this then everyone would get their money back. If only one person did this, and everyone else was fair, then the cheater would profit. If this competition were to repeat and defection became profitable, then the amount of defection would increase until everyone defected.

The challenge is to make it more profitable to be honest than to lie.

A Proposed Solution

If you only have 10 friends, then each individual's impact on the judgment will have a massive impact on the average. If you have 100 friends then the most any individual could bias the results in their favor would be 1%. The more people involved, the harder it becomes for an individual defector to profit from lying about the quality of his own submission.

If each individual casts their votes in secret, then the resulting average will be unknown in advance. An honest appraisal will tend to be much closer to the average appraisal if everyone is attempting to predict the average. If all of the voters share an reward pool weighted by the square of their accuracy, then the most honest voters will be rewarded and most dishonest voters will receive almost nothing.

So long as the profit from being honest is greater than what the voter could earn from biasing their appraisal of their own work we can trust all voters to be honest. If 100% of the rewards went to the voters then over many independent trials smart honest voters would earn a profit at dumb or dishonest voters. Because Steem needs to reward the author there is a natural bias toward the author that can never be fully eliminated, but for all practical purposes it will be within the natural margin of error for subjective human evaluation.

Getting a Quorum

Suppose only some of your friends show up to vote and you don't want to wait for everyone to show up. How would you divide the funds then? A simple solution would say that if half showed up, then half of the rewards could be spent by consensus. This approach provides no incentive to reach a quorum. Instead we can use the percent squared metric. If half of your friends show up, then you can spend 25% of the budget. If only 1% show up then you then only 0.01% of the budget be spent.

Pulling it all Together

The user interface would work as follows: each post would have a 5 star rating bar and a spam button. Posts would be sorted by the size of the quorum that has voted. When a user votes they will submit both the blinded amount and the unblinded amount to Steemit. Steemit would automatically reveal the unblinded amount when the time comes. This requires some trust in Steemit. Users who do not trust steemit can run their own full nodes to automatically submit the unblinded result at the appropriate time.

  1. someone makes a post
  2. N people post blinded votes on the relative value of the post
  3. M people reveal their blinded vote
  4. The Steem Power weighted average vote is calculated (value between -5 and 5 on log10 scale)
  5. Author payout is calculated (VotingSteemPower / TotalSteemPower)^2 * budget * weighted_average_vote^10 / 5^10
  6. Each voter's margin of error is calculated as ABS( weighted_average_vote - user_vote )^2
  7. Voters split an amount equal to the maximum author payout weighted by Steem Power * (1-error)

The financial incentive is for voters to vote on stuff other voters have voted and to do so honestly. To the extent they are dishonest (or are poor predictors of public opinion) they will earn less than those who are good predictors. Honest voters receive income proportional to how much they are diluted, dishonest or inactive voters do not receive income proportional to the dilution. The result is gradual value transfer from dishonest to honest voters and authors.

There is less financial incentive to vote on things no one has voted on unless one desires to reward the author by getting more people to see and vote on the same content. Authors want as many people to see and vote on their content as possible.

Punishing Users who fail to Reveal

Users have nothing to gain by failing to reveal. They will get 0 rewards instead of a small reward.

The primary downside to this approach is the need to "commit and reveal" which requires most users to trust a service to automatically reveal on their behalf. This downside may be insignificant considering how many people trust the same service to collect their vote, secure their private keys, and submit it to the blockchain in the first place.

What do you think?

Would this method of allocating rewards be perceived as "simpler" and/or "more fair" than the current system? Is the proposed user interface simple enough that most people can use it without thinking? What could go wrong?

Sort:  

It sounds too complicated.

My suggestion is to take a step back and simply let community dynamics play out for a couple of weeks - groups tend to alter behavior automatically to resolve issues without the "system" having to be changed.

Here is a comment I wrote on another thread which was complaining about Ned upvoting noobs:

It is better that the rewards get spread about rather than just concentrated on a few.

Suppose the voting bots are designed to look at your blog posts, assess the average earnings and then compile a list of those with an average above a certain amount. They then automatically vote for any new posts people on the list make.

If the "usual suspects" are no longer getting the rewards and the new people are, then the lists start to change. In fact if the whales spread their love far and wide enough, it will become impossible for a bot to tell from the previous average, which will be the new high paying posts. The owners will be forced to log in and read - because if the rewards are genuinely going to those with great content you should be able to find this out only by reading...

And lo and behold Steemit's problems are solved!

Agreed. 5 star for me complicated too. Most people vote 5 or 1. But if you should thing that average would be then 4 would be good guess if bot voting based on reputation.

We are dealing with unorganic behavior driven by bots. Its a question of incentives that rewards people to upvite before the bots...even if they didnt read the articles.

You miss the point - the bots only upvote because they believe the whales will. I saw a post today that had 31 votes but it only had a value of $4, because the whales were concentrating on noobs. So any bot voting that post in expectation it would perform the way previous ones by that writer did, would have been disappointed.

If the distribution is spread out far and wide, it becomes harder for a bot to predict, and will require the owner of the account to actually log in and read, to predict the value.

A agree with @alyssas but I'd add that it is all part of system dynamics. As the user base grows beyond the extreme early adopters, whales, and steemit insiders that have dominated it so far, the results will change, including the behavior and success rate of bots.

@dantheman's proposal here is good in the sense that it tries to take a fresh look at the problem and improve the algorithm overall, rather than being as clearly a knee-jerk reaction to current dynamics as was the earlier proposal to simply remove curation rewards. Still I think there is a lot of value in letting the system grow and seeing how things actually work as it grows, rather than jumping to hasty conclusions.

I want to see @dan make at least 1 shitpost and laugh at the bots upvoting him $6k. :)

It will reduce number bot that of votes for him. It will correlate with his reputation.

It will reduce number bot that of votes for him.

You say that like it's a bad thing. ;)

I see bots blindly voting for Dan the same way I see people who praise every word that comes out of a president's mouth.

President : "We tortured some folks".
Sycophants : "UPVOTE!!!! OMG!!! He's so cool!!!"

Except here it's even worse in my opinion, because the sycophant follows up with, "how much money did I just make?!".
;)

It is good thing that bots will stop voting if author with reputation start posting junk. Such author just trading his reputation for the money directly.
I just don't see a big problem with bots. They are measure instrument for reputation and individual network capacity of individual.

This only happens because everyone in the community knows Dan. It's like how Mark Zuckerberg at one time had us all on his friend list.

I think you might be right. Maybe a wait and see approach is best. It's still very early and not enough time is being given to the current algorithm to find out if it works or not when it scales. With enough people it might work better but with 10 people or 1000 people it might not work well.

There is a lot information left on blockchain to make prediction. Who voted for whom in the past. Top 50 payouts. Just username is enough to predict. How could we hide reputation of the person?

The more info we hide, the less interesting it becomes to average people. People starting to use bots, because they wanting leverage their knowledge, so knowledge should be public for everyone to leverage.

For bots having same voting strategy is not profitable, it's encourage people to invent more sophisticated algorithms and it's good.

Why people perceive that if @dan recives 10 votes in first minute as wrong thing with a system? For me it is perfectly right. He has reputation and system fast and correctly measures it. There is no problem with that for sure.

Is it problem that first voters make profits? Make vote allocation linear? We could do it anytime, but they do work of measuring reputation, they should be compensated then! Is is useful, we could take post like this and filter them and put in "reputation" category or something. Top ten reputable post! Public information is useful for everyone.

Well said. We shouldn't hide things or make them overly complicated. Average people need to believe they can come in here and make money, even if they're just voters and not writers. Keep it simple & transparent, but go ahead and mess with that algorithm as much as needed.

Here's the kernel of a simpler alternative, which captures some of the prediction market component without needing blinding, and also without needing a complex UI.

Post score is a number from 0 to 1 which changes as votes are cast. Perhaps this could be displayed as a "star" or numeric 1-10 rating (tbd, and this aspect could be split tested). Each vote is viewed as a prediction of whether the future post score will be higher (upvote) or lower (downvote) than the current score at the time the vote is placed. Votes are evaluated for payouts on the basis of how much the post score changes between the time the vote is cast and the end of the scoring period (24 hours?). Total payout is some combination (tbd) of resulting score and vote weight cast.

This provides an incentive to downvote, if the post is getting too many early upvotes relative to its more thoughtfully perceived quality, or vice versa.

EDIT: One detail I omitted is that every post starts with a prior average of 0.5 with some predetermined small but nonzero weight. This provides a basis for evaluating even the first vote, and it also provides a mechanism to continue to give some very small weight to later votes that endorse a strong upvote (because the average will never quite reach 1, even if all votes are up).

Ohhhh...ahhhh...I like that! (You are a smart cookie)

I also like this idea.

Wish my votes actually pushed so I could get this towards the top. This is good.

Buy Steem Power :)

Sounds cool

Total payout is some combination (tbd) of resulting score and vote weight cast.

Need to figure out a way to reward the ones who down-voted a "bad" post especially if it ever has a high score, make curation rewards less related to the post's final score.

Yes I agree. But there is really no reason why the post score and vote score have to be related at all right? They're just coming out of two different pools effectively.

After thought deeper, I found there is an issue with this approach: for example, if current score of a post is 0.55, a whale thinks it should get higher score for example 0.6, so she up-voted, but perhaps the score become 0.9 after the vote and hard to correct unless she revoke the vote. From this POV, dan's proposal is better: vote on the result but not direction.

This could be done under something close to the current mechanism by using reduced vote power (indeed I already do this sometimes when voting for content that is good but not great). I think that's pretty much what it means for a whale to upvote something but still believe it is really only good enough to rate slightly better than average. A full power vote would also tend to give such content a large reward, which makes little sense.

There are some other interesting aspects to this, and I may write a separate post if I have time later.

Another issue: This looks like a one round system, which means people who vote after the blind period are shut out from participating, especially if the blinding period is short. If the blinding period is long, then vote results won't be available for ranking or display for a long time. Both of these are bad for usability and user engagement. I prefer the attribute of the current system where even late votes still "count", although they may not numerically count for much (casual users are probably more influenced by the former). Add multiple rounds? Well, I'll not go there.

Well, the fact that this post has almost $1k in upvotes in 7 minutes without a comment is rather telling that something needs to be done. I would like some clarification - it may be obvious but I missed it in the post.

How is M decided? Why don't N people show the unblinded vote? It seems we should see the results of all votes or am I reading something wrong?

How does this prevent all the bots from automatically 5 staring the typical "high value" posts? Right now it seems that bots are doing a lot of voting for you, ned, and a few others posts. If the 5 star bots are still the majority vote, they still win because they (currently) have the most weight and (also currently) most number of votes.

Overall long term I see this as a good plan once there is much more content - however it doesn't seem to fix the problem as it stands right now. The bots continue, and as long as they are all close (5 star for the "big guys") then they still win.

EDIT: So M is the subset of N that choose to reveal their vote. I guess I was confused because there is no reason not to reveal that it didn't make sense to have a different number there. I see it though. My other question still stands.

Well, the fact that this post has almost $1k in upvotes in 7 minutes without a comment is rather telling that something needs to be done. I would like some clarification - it may be obvious but I missed it in the post.

Why, and do you think the proposed method would produce a significantly different result? I don't. The post happens to be thoughtful, well written, and relevant. There is no reason for it to not get a high score and payout.

The problem only really comes up when a "good" author makes a "bad" post, and even then it is unproven whether people wouldn't still downvote it and kill the rewards (and the voting power of those who stupidly upvoted it)

I guess that did come across as "this post shouldn't be upvoted" which isn't what I meant at all. I just had some, what appeared to me, pretty obvious questions that hadn't been asked by anyone yet.

I also stated that I did not think the proposed method would fix the issue. The "please don't upvote this" post comes to mind with exactly what you describe. Good author, bad post.

Can someone put this into words that make sense to me so that I can form an opinion? Being stupid sucks. :/

I'll give it a shot, but I'm not great with words.

Basically instead of a simple up/down vote, it would be rated on a 5 star system (though it looks from 10 star from the math, from -5 to 5) where its easy to go from 0 to 1, harder to get to 2, harder still for 3, and so on. The closer your vote to the "final vote" the more you get paid (based on your voting power)

  1. post topic / comment
  2. people vote -5 to 5. This is blind, no one else can see your vote (my assumption of what "blind" means)
  3. after some time (not specified in the post) votes are revealed by all that choose to do so (if you don't reveal, you don't get paid)
  4. the more STEEM you have, the more weight your vote is given in the -5 to 5 scale. That gets calculated to give a "final vote" number (weighted_average_vote below) .
  5. Author payout is calculated (not really sure how to put this in words) (VotingSteemPower / TotalSteemPower)^2 * budget * weighted_average_vote^10 / 5^10
  6. Each voter's margin of error is calculated - See if your vote is close to what the "final vote" from 4 is. The closer your vote is to the "final vote" the more share of the reward you get
  7. Voters split an amount equal to the maximum author payout weighted by Steem Power * (1-error) <- this is the formula for what I described in 6.

Thanks!

if you don't reveal, you don't get paid

Then what's the point of having a blinding option? Everyone wants to get paid in a system that pays, I assume. Is it so that you can give a rating on the content but not give a reward to the content creator?

Each voter's margin of error is calculated - See if your vote is close to what the "final vote" from 4 is. The closer your vote is to the "final vote" the more share of the reward you get

So it sounds like I should vote 5 on dan and ned and the Steem related service accounts, 4 on all of the other top 10 earners and 3 on everyone else that's not spam. Can I get a bot for this? :b

Then what's the point of having a blinding option? Everyone wants to get paid in a system that pays, I assume. Is it so that you can give a rating on the content but not give a reward to the content creator?

Blind isn't an option, its how you vote so other people can't see the vote until the "reveal" of what everyone else voted. Revealing is an option (which you would never not do unless you wanted to vote and not get paid). The blind is there to prevent early bandwagon effect on something that gets popular quick.

Your second point is what I brought up in my first post. I still don't see it to be bot proof of even resistant honestly. Maybe not as simple as you describe, but still easily gamble in my opinion.

Edit: had to edit post instead of respond to question because comment depth is limited.
Clarified the reveal option statement.

if you don't reveal, you don't get paid

Revealing is an option (which you would never take unless you wanted to vote and not get paid).

Ok so the first one should read, "if you do reveal, you don't get paid". Correct?

Star system is too complicated. Up or down is better but there should be the addition of context with up or down.

In one sentence: it's good for whales (or perhaps everyone) to collude in voting with same (perhaps highest) score within a given period.

Same here. Im too dumb for this but it does sound cool.

Let me see if I got this straight. the problem is we don't want the bots to come in and just upvote on every post that dan or any other post and take all the rewards and make it unfair to the other members, right? or am i way off base? if i'm right then could you add more of the voting power to the people that contribute more to Steemit? for example the bots probably don't post any content , they probably just come on and just upvote post, But the members who are posting content and adding more value to the site could have more weight added to there voting power. So basically if i am a bot or just try to come on here just to upvote and don't add any content of any kind it makes my voting power pretty much useless. now if i am creating good content and posting regularly the my voting power goes up. and when i do upvote something then the more i share in the rewards. wouldn't that take the power away from the bots and give it to the people that contribute to steemit? You could combine your steem power with a contrubuting power ( how much content plus the quality of the content contributed to the site) to determine your voting power. i don't know if that makes any sense at all or am i just way off base?

if i'm right then could you add more of the voting power to the people that contribute more to Steemit? for example the bots probably don't post any content , they probably just come on and just upvote post, But the members who are posting content and adding more value to the site could have more weight added to there voting power.

This is already going to happen over time. Content rewards redistribute ownership of Steem Power to both posters and voters. Someone who both posts (includes comments) and votes well will make more than someone who just votes well and doesn't post.

Much of the current reaction is based on the early adopter dynamics and not necessarily what will happen once Steem Power starts getting redistributed. Even right after July 4, things will change a lot, as there will be a much larger group of people with big chunks of Steem Power than there is now.

Loading...

This downside may be insignificant considering how many people trust the same service to collect their vote, secure their private keys

Huh? I thought the private keys are client-side.

Is the proposed user interface simple enough that most people can use it without thinking?

Without thinking? I doubt it. Upvoting something good can be done without thinking. But when I rate items on a "stars" scale (Amazon, etc.), it does require thought to decide if an appropriate rating. Also if you look at how many items often get rated, there is a concentration of 5 star and 1 star ratings. That suggests to me people don't like thinking about the fine gradations.

Huh? I thought the private keys are client-side.

I don't think so in this case. Augur has client side keys but that means I have to export my account and upload it to another computer if I want to use it there. I can log into this account from any computer I've tried. Maybe I'm wrong and they've worked some magic. If so, I hope they share it with the Augur guys.

The private key IS client-side, but in this system it's derived from a combination of your password (only you know) and some other info (known by the service), aka a "brain key". You can also export the WIF to other computer, and use it directly (forget the password).

That makes it sound like the other info is only known by the service and the user the service shares it with, which isn't true. The other info is public knowledge. Which means someone who has (or guesses) your password can derive all your private keys (unless you changed them from their default after registering with Facebook or Reddit).

So to everyone reading this: you better be using a strong[1] and unique[2] password. The best approach is to use a password manager and have the password manager generate the password with 256-bits of entropy for you. Also, it is better to have a separate password for your owner key that you normally keep securely stored offline (with some redundancy is a good idea too).

[1] By strong, I don't only mean long. Steemit requires that you use at least 16 characters. But if your password is, for example, just some combination of your full name plus birth date, then it isn't strong because it can easily be brute forced by a hacker targeting you specifically who knows your identity (by following the linked Facebook account perhaps).

[2] Unique is important because if you reuse the same password you use on some other service, and that service gets hacked (and they had bad security practices so that they were holding your plain-text password in their database), then a hacker who gets that hacked information from the black market can try those passwords out on your account.

Also will there by 1/2 stars (like RottenTomatoes.com) or full stars (like IMDB.com)?

Keys are kept in browser, but you trust server to serve JavaScript.

Yes, and I misunderstood your comment about private keys. I thought you were suggesting the private key are sent to the server.

The idea of the server keeping the vote secret raises two issues:

  1. Possibility of insider abuse of the secret information (as was alleged with daily fantasy sports and contributed to potentially almost killing a billion dollar industry). This is likely a higher burden to secure compared to static javascript code.

  2. You can't prevent people from revealing their votes early without adding even more complexity to it, and it is often (always?) to their advantage to do so. So this incentivizes votebots that talk to a private server to share their votes and collude.

Another disadvantage: doubles the transaction rate for voting. Those are likely to be the largest share of transactions, right?

And that is the problem. The star system puts much more work on the curator for the same pay or less pay? Not cool.
People might freely attach meta data to a post though like "funny" or "insightful" and maybe give different weight to different metadata but again it seems too complicated to go to a star system.

Is it possible to just have votes be secret like Reddit has done? You know something is voted up but you don't know how many votes it received or how much money it recceived? Of course people could still check the blockchain with their bots but it might make voting more honest for people not using bots.

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.029
BTC 67443.68
ETH 3234.73
USDT 1.00
SBD 2.65