Hey all! I've been exploring new ranking algorithms.

Problem

SN's homepage is a commons. We are all share the feed, but people have incentives to abuse it. While it costs 1 sat to post/upvote, it might be worth thousands (or more) sats to get something on the frontpage.
While we could make it more expensive to post/upvote, it will discourage average, earnest users from posting/upvoting.

Solutions

As far as I see it, there are two approaches to solving this problem:
  1. quantifying how much a user is trusted (trusted)
  2. using economic incentives (trustless)

Trusted

We quantify how much a user is trusted and weight their upvotes accordingly. If a user is untrusted, their upvotes don't count. If a user is trusted 50%, their upvotes half count. If a user is fully trusted, their upvotes fully count.
AFAIK this is how Reddit/HN/etc. do their ranking. They use user metrics to score a user's trust. We'd instead favor a Web of Trust model but the goal is similar.

Trustless

This looks a lot like Proof of Stake.
In summary, a post is ranked strictly based on how many sats it's received. The people who put sats into the post (stake) are paid their sats back depending on the ranking of the post. They are paid more if it does really well, less if it does poorly.
My fears with this approach are mostly that:
  1. it's hard to communicate the scheme to users
  2. it creates a keynesian beauty contest
  3. we'd have to introduce a downvote

Asks

What do you think? Do you see any problems with either approach? How would you address the fears of the trustless approach? Which would you like to see implemented? General advice?
@k00b On the trusted side, have you ever considered exposing upvote and traffic metrics via API, and allowing users to create their own WoT algorithms with the raw feed of posts to SN. Everyone could be free to create their own filters/algorithms, and I can imagine an emerging a marketplace for filters/algorithms of the raw SN feed. This provides ultimate freedom to the users and relieves you of the burden of being the sole arbiter of truth and spam. One could apply various algorithms and see how their feed shows up - pick one. Mix and match.
reply
Yeah for sure that'd be cool. We don't even have a public API yet though lol, but definitely something to keep in mind
reply
I'm in favor of a Web of Trust approach.
This is how communities in the physical world have operated for thousands of years.
New members to a tribe, community, or town start off with little trust. They can either build up trust by working for it or can sometimes kick-start their trust by having a friend, relative, or other community member vouch for them.
The key with a vouched model of trust is that the person vouching for a new community member is also putting their reuptation on the line. If they make a bad recommendation, they too lose trust within a community (along with the new member).
Stacker News could implement an identical system with one-time referral links, where any user can refer their friends who will automatically get a portion of their "reputation points" to start with.
If users want to start without a referral, they can, but as mentioned above they won't have much influence from the start.
As they post good content (judged by the number of upvotes * the reputation of the upvoters), they will begin to grow a reputation score themselves.
The biggest benefit to this system is in how it eliminates spam.
Today, I can create 1,000 accounts on Stacker News, fund each account with a few sats, and brute-force my content to the top of the feed.
Under a Web of Trust model, my 1,000 new accounts will each have 0 "reputation points", so even though there are 1,000 of them, 1,000*0 is still 0.
reply
The key with a vouched model of trust is that the person vouching for a new community member is also putting their reuptation on the line. If they make a bad recommendation, they too lose trust within a community (along with the new member).
Determining whether a post is good or bad without downvotes is not very easy to do - maybe people just didn't see it and upvote it. We likely won't implement this kind of reputation sharing to start.
reply
What if we reframe the words ‘good’ and ‘bad’ to mean 'good or bad to the Stacker News community'?
If we let go of the idea that there is an objective way to measure good or bad, we are free to design a system around what this specific community deems to be good or bad.
A high sum of reputation points from upvoters is a signal of good content, and a low (or zero) sum of reputation points is a signal of bad content.
Posts that get a certain # of upvotes backed by people with a certain sum of reputation points could confirm quality content, rewarding those upvoters with additional reputation points. Vice-versa for content that doesn’t get enough upvotes from users with good reputations.
Anyone can accrue reputation points - as they create good content or vouch for other members, but also lose reputation points - as they create bad content or upvote things that the community doesn’t like. Reputation points can also decay over time if users are inactive (similar to how your reputation in a tribe would decay if you disappeared for a year).
As Stacker News grows, the possibility of a good post being ignored approaches zero.
reply
Yes I think as usage increases, posts getting missed is less likely. However, it doesn’t go to zero. It’s a well know problem on HN/Reddit that good posts get missed depending on time of day or day that they get posted.
Anyhow, I just meant to say I won’t ship WoT with penalties to start because good posts certainly do get missed now. People hardly upvote new stuff as is.
reply
Fair enough, so maybe the ratio of viewers to posts is what determines how likely something is to be missed?
If so, Stacker News should actually get closer to zero quality posts missed than Hacker News, because under a Web of Trust system bad content is costly (to one's wallet and reputation), while there are no reputation or financial penalties on Hacker News.
People will be less likely to post random junk on Stacker News, raising the ratio of viewers to posts.
Also, Stacker News can start paying users fees generated by the platform in accordance to their reputations, so there will be a direct incentive for people to participate honestly.
Crucially, the loss of reputation points matters here - otherwise, people could just mindlessly upvote random posts for 1 sat, get a few extra reputation points along the way when one of their upvoted posts does well, and then collect additional fees with their reputation gains... even if 90% of their upvotes are junk.
Without some potential to lose reputation points, there is no incentive to vote honestly, and the web of trust model falls apart.
The reputation of any person in any IRL community goes up and down over time, there needs to be some mechanism that punishes actions the community doesn't like for this approach to work.
reply
I agree. There will need to be penalties eventually.
reply
Here are my 2 sats:
Trusted
The issue here is how to quantify how much a user is trusted. You're now talking about a large effort of essentially human involvement or some algorithm that's ripe to be gamed.
Further, it sounds like this is pretty divorced from any Lightning/Bitcoin model of incentives.
This quickly descends into moderators etc. which is something I've been advocating for a while, at least in some weak form, and have received significant pushback on.
Trustless
I don't quite understand what you're proposing. Multiple people can stake the post and then receive back their sats? Is upvoting staking? How is upvoting different from staking? Or can you now have another option to 'stake' the post to bolster the post and then maybe get back sats depending on its upvotes?

Here's an off the cuff proposal:
Have upvoting be variable for each person, depending on how many posts they've like before.
For example, say I upvote a post by @koob (for 1 sat), now, the next time I upvote a post made by @koob, it will automatically give 2 sats, 3 sats for the subsequent one, etc.
This facility is automatically run in the background, can be changed by the user to either be turned off on an individual basis, on a global basis or otherwise be tweaked by the individual.
The idea is that this "builds in" a trust model, where people who submit quality content are then automatically given more "power/trust" to submit other content. Bots and the like that submit crap content might get some traction but not enough to overpower the trusted folks.
The ramp up might not need to be linear and one could imagine something like a logarithmic ramp up, with clear communication at each 'jump' in sat expenditure.
One could even imagine a 'trusted' user (ranked by the 'average' sat upvote they would receive for a post, say) having a higher default for upvotes as well.
These are all just "default" policies of the site that could be overridden and are only meant to guide "good" behavior. Anyone could dump a lot of sats into their account and then tweak their own default upvotes to mimic the same behavior.

I just want to remind you again that the point is not to eliminate spam, it's to make sure it's mitigated against and that any effort by spammers to abuse the system will make them pay.
One way to look at it is to try and fix arbitrage situations. If there's an avenue that spammers think will make them more money by some small expenditure of sats, then that's an arbitrage opportunity for them. The way to fix this from an economics perspective is to close that arbitrage opportunity so that any outlay of cash will not be recovered from the effort.
How are you noticing unwanted posts? What do they get out of it? My feeling is that an economic foil has to depend on the type of attack.
reply
The issue here is how to quantify how much a user is trusted. You're now talking about a large effort of essentially human involvement or some algorithm that's ripe to be gamed.
Trust will always be violated or gamed on long time scales. I'd never argue we'll be able to create a perfect trusted system (Bitcoiners know this better than anyone). WoT might however provide a better, less gameable model than alternative trust models. Also, such a model would allow users to have their own WoT (where they are the source node of the graph) so that their feed is no longer a commons.
Multiple people can stake the post and then receive back their sats? Is upvoting staking? How is upvoting different from staking?
Upvoting and staking would become the same thing. Every sat put into a post would go into a pot with the sats from other posts, then get distributed to all stakers at some interval depending on how well the posts do.
How are you noticing unwanted posts? What do they get out of it? They are low quality, promoting something, or are off topic. They get the attention of users.
reply
Upvoting and staking would become the same thing. Every sat put into a post would go into a pot with the sats from other posts, then get distributed to all stakers at some interval depending on how well the posts do.
I'll have to think on this but this sounds like it might be ripe for abuse.
They are low quality, promoting something, or are off topic. They get the attention of users.
My point being is that you should use this test to then push for economic action. Maybe there's an off-topic sat pool that gets filled up on a per user basis that then devalues their ability to promote or submit posts. Maybe promotion posts require a sat expenditure by the poster to overcome some lower threshold (maybe flagged by users?).
reply
Re: trustless. Other than UX and legal considerations, the biggest unknowns are:
  1. how to structure payouts, because
    • posts come in at irregular intervals
    • upvotes come in at irregular intervals
    • the ranking curve favors newer content over old
  2. how to thwart large economic actors from taking over the page
    • maybe a downvote could solve this, but it's unclear how
    • e.g. a new dog coin comes out and creates a post promoting the coin and puts in 100,000 sats; how do we knock it off the frontpage in a way that costs the poster and rewards the defenders
reply
I'm more for the staking approach, so ranking based on how many Sats it's received, because:
  1. it's more focused on the content rather than the creators.
  2. you're helping create a circular economy, and repay the 'curators' of quality content.
  3. i think this is the simplest approach to understand actually.
this will have interesting implications:
  • This may actually help to understand what the community is most interested in, judging by what's at the top
  • will create arbitration opportunities, with 'searchers' looking fo quality content at the bottom of the page.
the main problem i see:
  • how long does the content live in SN for? what if it existed for exactly 24 hrs? and then disappeared, leaving room for the others? this may be better than clearing ALL content every 24 hrs.
Check out RARA's incentive mechanism in their NFT RA!CE (based on a token): Sounds similar to what RARA is doing with a token, but is much more scalable and interesting with lightning. https://rara.mirror.xyz/pkz9TVZYk0Va2ygupo-SQbMMSC0C1PsaiT3SkhgybaY
reply
I think you do need some sort of ranking to keep out the dross or mega boosted posts from polluting the front page. The trusted method sounds good and would be an incentive for quality posting. How would the downvote work? Would sats be taken off someone or would the post just lose rank?
Could account age or regularity of visits be a useful factor in the ranking system? Although I'm sure there are probably ways they could be abused as well.
I assume it's difficult to create lots of spam accounts because a separate node would be required for each one? Or maybe I don't understand LNURL well enough!
reply
I think you do need some sort of ranking to keep out the dross or mega boosted posts from polluting the front page.
At some point I'll introduce a high fixed cost to boosting rather than letting it be arbitrarily set.
How would the downvote work? Would sats be taken off someone or would the post just lose rank?
It depends on whether it's in the trusted or trustless model. In the trusted, the post would just lose rank. In the trustless, the downvotes would do both: if they post does poorly (other people also downvote it), then the downvoters get the sats else the poster gets them.
Could account age or regularity of visits be a useful factor in the ranking system? Although I'm sure there are probably ways they could be abused as well.
There are a number of metrics we can use like these to quantify trust. They are kind of arbitrary though ... That's why we'll probably do WoT.
I assume it's difficult to create lots of spam accounts because a separate node would be required for each one? Or maybe I don't understand LNURL well enough!
Nah, it's pretty inexpensive to spin up new nodes/wallets. LNURL-auth just requires a key pair ... we could do something to make sure users have funded channels or something but we can't expect all users to be running ln nodes in the future.
reply