A Less Dystopian Reputation System

An exploratory essay about Reputation Systems by Alexander G. M. Smith.

Thanks to Black Mirror and a long walk for inspiring this algorithm and essay.
$Id: AGMSReputationSystem.html,v 1.25 2021/07/12 21:54:48 agmsmith Exp $


This really short summary is worth a digital signature:
Hash: SHA256

This is an essay about the AGMS Reputation System.  It uses time decay and
periodic point awards to keep scores current, avoiding some of the traps
seen in many science fiction stories.  It is also strangely amenable to a
block chain implementation.


Longer summary:

To prevent excessive accumulation of inequality in social reputation rating points, and to forgive past sins, I suggest making the points decay over time, combined with a periodic infusion of new points. The decay rate can be set to control how long the "memory" of good and bad deeds lasts. The periodic new points give people the opportunity to keep on rating other people (each rating performed costs a point and either adds or subtracts a point from the target person). The periodic infusion of points also lets the overall economy of the points system scale smoothly with the number of users.

You could use a distributed database to keep track of the points, but a blockchain ledger would work equally well. Though both systems would need some central authority to verify that new users are real people.


After seeing yet another SF (science fiction) story* about reputation systems, I contemplated how similar they were to my SPEC ethical calculus*. I was thinking of talking about them as a footnote, but then I wondered how a better reputation system could be designed. Thus this essay.

People rate each other in a reputation system, updating an overall score that indicates a person's reputation. Previously we used gossip and social pecking orders to do that. With the Internet, you are in contact with many more people and it would be nice to know their reputations at a glance*.

Besides the SF versions, real reputation systems exist, such as the ones eBay and Amazon use to rate buyers and sellers. They have the advantage of being tied to exchange of real money (harder to fake) and are relevant to a simple topic - how well people perform their end of a transaction (payment made successfully, shipping was quick, quality of goods). Social pecking order reputation systems instead measure the more personal interactions between people.

The most frequent trouble in SF dystopias is mob rule: a large number of people frivolously rating someone down using shallow criteria, not understanding the deeper situation of why their target is seemingly doing something bad. I want to counter that by doing two things - making rating more expensive so the user thinks about it more deeply, and by removing mob discredit after time passes.

Rating Points

Rather than a 5 star rating system, I want to use "rating points". Each user conceptually has an integer number of points (can be negative), which varies over time. Call the total number of points their "rating score". One user performing a rating on a target user changes that target user's score up or down by one point (up or down is the user's choice, presumably depending on their opinion of the target), at the cost of one point to the score of the user doing the rating. If a user's score is zero or less, they can't rate other users*. If you want to display stars, you can compare a score to the global score distribution to come up with a number of stars. Perhaps use median statistics; if your score is in the same range as the bottom 20% of the world's scores then you get 1 star, etc.

Fading Away History Weekly

To keep scores relevant to recent history, to forget the past, and to permit people to perform new ratings on other people (otherwise they'd stop when they'd used up all their points doing ratings), we fade away old points and periodically add new points. For psychological reasons*, the point updates should happen weekly; I suggest at 00:00 UTC on Mondays.

Each week, every user would have their score faded away towards zero, similar to the way social pecking order gossip fades away over time (minor things are forgotten, big events become less significant). Mathematically this is done by multiplying the score by a factor such as 0.97* and rounding towards zero, which essentially forgets ratings over 3 years old (156 weekly updates: 0.97 ^ 156 = 0.0086, so a bit under 1% of the original points remain after 3 years). Negative or positive, both fade away towards zero.

New Points Weekly

After the weekly fading away has been done, new points are added to the user's score. I suggest 10 points, which will permit the average user to do 10 ratings per week, if nobody rates them up to give them more points. If they don't use their points, their score will go up over time, until it hits the balance point when fading takes away 10 points. With a fade of 0.97, and 10 new points each week, that means an inactive user's score will grow and stabilise at 301 points in almost two years (stability is between 301 and 333, depending on if the score started from below or above the stable zone)*.

Using Ratings

How would ratings be used? If your points are over the stable zone (more than 333) then people will know that someone actively likes you. At the bottom of the zone you're likely to be inactive (you would have to look at the ratings history to know if that's true). Zero could mean that you are always using all your points for doing ratings (and worrying that your points will fade away if you don't use them by the end of the week). Negative means something horrible.


Popular people like movie stars will have fans giving them a point or more every week or so, thus maintaining their high rating. The celebrity then has points they can use for their own rating choices, making their voice louder. True fans would use all their points to boost their favourite person's rating, and thus consider zero points as the sign of someone truly dedicated to someone else. The same applies but in a negative direction for famous criminals (such as mass murderers in the news), except that they can't rate other people with their negative points so their voice is silenced.

Fading movie stars (or serial killers) would start with high ratings while they are in the news, but that would fade away over the years to the levels their smaller fan/hate base can support. Similarly, reformed criminals can recover from negative ratings over the years.

Unfair Events

People with one time sudden ratings booms or busts would have that fade back to normal. For example, someone with a million points plus or minus would have that fade to around eight thousand after three years, and back to normal stability after almost seven years.

Frequent Followers

What happens if a person has true fans who always give them a weekly point? Consider the case where they have 100 fans giving them +100 points each week; what would their stable score become? It would rapidly rise up to two thousand in half a year, then rise more slowly until it reaches 3634 after three years. Similarly, -100 points weekly would drop the score rapidly and gradually slow down to stabilise it at -2967 after three years. Ten times as many fans (+1000 points per week) gets to 20 thousand after about half a year and reaches 33 thousand after three years, essentially the same curve but 10 times taller, though it takes longer to get to the exact stable value of 33634 after almost 5 years. So, yes, the score does reflect the number of fans accurately. It also seems to stabilise near 100/3 (or 1 / (1 - 0.97)) times the number of weekly points received.

Changing your Mind

Opinions do change over time. What happens if you want to revoke or modify your opinion about something? If we just removed the points from the target and returned them (with fading for the amount of time passed), that would work but essentially cost you nothing* to make an opinion for a short period of time. That defeats the goal of making people think about making opinions. Instead of allowing that, you can add a new opinion in the opposite direction to counteract the effect of your first opinion. Or delete the original opinion, which costs extra points to do based on how long you want the delete to last (deletes fade away too).

Permission to have an Opinion?

Sometimes you need permission to have an opinion, sometimes not. If it's an opinion about a celebrity, the celebrity shouldn't have the right to reject opinions. But if you want an opinion with a connection to reality, the opinion needs to be approved (perhaps that means verifying that you know the target personally). Also you need to approve an opinion if a third party makes it on your behalf, such as a beer company sponsoring suggested opinions (their points get used but you have to approve that pre-made opinion linking you to that beer brand). Let's ignore the overly rare case where the beer company buys you a dishwasher and sponsors an opinion in your name about the dishwasher brand.

Party System

There are failure modes similar to democratic systems. For example, parties could gain in popularity, where you vote the party ticket (transfer your points to the party's agent to spend as the party decides). The advantage is that coordinated action makes the group's voice louder. The disadvantage is that someone sets the coordinated direction, which may not be exactly where the party followers want to go. That gets worse as a party gets larger; it has a more powerful voice so more people want to join the party, even if the party direction diverges more from what the followers want.

When it is large enough, it becomes worthwhile for someone to take control of the party, using it for their purposes, and the followers keep on following because there is no alternative. We might need an anti-monopoly rule to break up parties when they get too large. Or perhaps people could make their own ratings if they get too annoyed with their party, and their peers could quickly redirect their points to their friend who makes choices they like better, essentially creating a new party. So, lowering the cost of creating a party would be useful.

A related group failure mode is the lack of effort in making decisions by lazy people. They may not really be lazy, but there's always the lack of time and other resources to figure out the truth and make accurate ratings. That's how mob ratings happen - following the peer group (ratings are public so you wouldn't want to stand out from your peers) and lack of time to make up your own mind leads to mass mistakes, as in the aforementioned dystopias.

There are more ways ratings could become inaccurate due to the interactions between groups of people, but that's a familiar topic for social and political studies.

Rating Things other than People?

What should the rating system apply to? People may want to rate brands (effectively corporations) as well as other people or even things. Does that make sense? The rating is really for interpersonal social pecking order determination. But if you do include brands, you can say that movie star A is more popular than brand B of soap, and that is more popular than ordinary person C. If you want to rate a thing, then it would be represented in the system by a person responsible for it (such as the manufacturer). Keep in mind that brands and celebrities need their weekly rating points, unlike ratings systems without fading where anybody can "like" a brand into perpetual popularity. That mixing of people and things sort of works, if we are rating popularity in general rather than interpersonal popularity.

Category Ratings

How about rating more specific things, like book reviewers or dish washing machines? You'd really want a separate system to keep track of who writes the best (most useful to the reader) reviews. Mixing it in with general popularity ratings won't work - while movie star A is popular, they likely aren't good at writing book reviews. That suggests having multiple rating systems, one for each category of things that is too unlike other categories to share ratings.

To avoid ease of use problems when splintering rating functionality into separate ratings systems with too many different points of access (web sites, application programs, etc), it would be better to have one system that keeps track of ratings for multiple categories.

A multiple category system lets you mix ratings, which brings up some new opportunities and problems. The things being rated in each category may need to be only the entities that are relevant; you'd only have book reviewers in the writers of book reviews category. But then how would people who only read book reviews rate the book reviewers since they wouldn't be users in that category and thus not have any points for performing ratings? We could allow everyone to be in the book reviewer category, give them weekly points there, and assume they award them properly to just people who are book reviewers. With real Humans, that probably won't work. Also, book reviewers could give their points to other book reviewers, which doesn't make sense if you're trying to evaluate how good their writing ability is.

I suggest using the popularity rating points to rate book reviewers (or dishwashers). People in the book reviewer category wouldn't get weekly new points there, can't use the book review points for rating other things, though their book reviewer score would still fade with time. Thus the book reviewer score would reflect what people thought of their book reviewing capability. For fairness when calculating someone's popularity rating score, you should include the points from all of the category ratings they have received.

Using Tags for Categories

Functionally speaking, that half-separate system for rating book reviewers could be folded into the popularity rating system by tagging ratings points with a category. When you award the point, you're also saying you like the target person because they are a good book reviewer. The tagged points would count in the target's category score (book reviewer +1) and since it's a sign of popularity, also count in their general popularity score. Now, should those tagged points be unusable by the recipient (so that ratings for a purpose - book reviewer or dishwasher - stay relevant) or should they be able to convert them back to popularity points, at the cost of making them less of a book reviewer? I'd prefer to make tagged points unusable so that people can't modify their own category rating, which is useful information for other people. Also, fading points over time now has to pick which category points are removed each week*.

Creating Categories

Once you can have categories, you need a way of creating them. The easiest way would be to use something like hashtags, where anybody can create a category by specifying a short text string that names the tag when they award tagged points. Ideally the user doing a rating would see a list of existing categories and choose from that, rather than creating slightly different spellings for categories that should really just be one category.

Another way to create categories would be to use the new newsgroup process used by the Big 8 Management Board of Usenet - online discussions followed by a board decision. Yet another way is to use a meta category in the reputation system to vote for the creation of new categories, and deletion of old ones.

Category Moderators

To increase the quality of information, have moderators for each category. They approve or deny adding and rating things in a category. There can also be a list of pre-approved people who know about the category and can add things without the need for a moderation check. Continuing on the security road, you could also have categories which are more private (such as for rating companies for investment purposes), perhaps needing a subscription fee or other membership qualification to just read the category contents.

Total Economy

How does the reputation system respond to changes in the number of people in the system? It scales up well (assuming that the distributed database scales) and stays fair - everybody gets the same number of new points each week, no matter how many people there are. But could there be something like economic booms and busts? There are a few situations to consider, where N is the number of users in the system:

  1. Everybody does nothing. If all users are inactive, their scores will tend towards the stable range, 301 to 333 points in our earlier example. The overall economy total size will be N * 333 points or slightly less due to rounding.
  2. Everybody likes one particular person. Everybody's points will be at zero each week, except the one person who will be receiving N * 10 points each week. Their score will stabilise at 1/(1-0.97) * 10 * N = 333 * N. The total economy size will then be the same as the previous situation.
  3. Everybody hates one particular person. The total economy size will then be -301 * N. No points are available for further ratings, other than the 10 weekly ones, which could damp down rating activity.
  4. A mixed case. Positive ratings are reusable for making further ratings; people given points can use them to rate other people. Negative ratings reduce the size of the economy, reducing the amount of rating activity.

Things seem reasonable from the economic point of view. The system as a whole won't inflate, so a point in the distant future is worth about as much as a point now. The main difficulty is that negative ratings (such as when an evil dictator declares war and gets many negative ratings) will cut down the overall rating activity, but that isn't necessarily bad since people will still be getting weekly points and the rating activity will recover.

Blockchain or Distributed Database or Kludge?

We need to store a bit of information* and make it available globally to run the reputation system. A new rating record is added to the ledger or database for each rating performed. Current score is calculated as needed for each user based on the current time and the ratings records (and maybe cached rating totals). Thus the system has to support a lot of activity if there are many users, but most of it will be reading existing records.

The two main choices for doing that are a Distributed Database and a Blockchain Ledger, while a third alternative is a kludge layered on top of an existing social media service's messaging feature. I think blockchain has a bit of an advantage, at least once the system gets into general use. Perhaps start with a prototype that uses a database (easier to write the software) then move to blockchain later if it takes off. However, if blockchain algorithms still have scalability limits like Bitcoin scalability, we may have to stick with a high performance database*, or do whatever the big Internet services like Twitter currently do.


One of blockchain's advantages is transparency. Everyone can see all the transactions in the ledger, while a database would have gatekeepers who may hide part of it or censor transactions or delete history when under external political pressure. Blockchain is similarly resistant to malicious activity, with multiple miners checking the validity of transactions (such as date stamps being near the current time, signatures valid, points actually available, etc) before accepting them.

Blockchain miners collect transactions (point award records submitted by users) into a new block, do a bit of work on the block which essentially sets the time between new blocks, and then propose adding it to the chain. Other miners then accept that block if it is correct (award records don't exceed user's points, work done etc), and build the next block on top of it. The first miner to do the work gets rewarded with a few points (a few times the periodic new points any typical user receives, 10 times sounds about right) and doesn't impose a transaction fee, so that the reward isn't so big that mining ruins the environment by becoming too energy expensive, yet mining is still worthwhile for individuals to do. This also avoids the distortions of advertising* or access fees by distributing the expense of running the system to the users and miners.

Blockchain is more reliable in that copies of the data are in many places, so there's no single point of failure, other than political arguments over the blockchain parameters. Though if the network splits due to communications failures, transactions from only one of the split parts get accepted, and the rest get rejected. Thus due to communications delays, each planet in a solar system would need its own rating system; a slight disadvantage for blockchain.

Social Media Kludge

A third alternative is to make use of a social media's messaging service to send the point ratings as plain text messages. Twitter comes to mind as it already handles messages with the same volume problems a rating system would encounter. It already provides authentication - no need to sign a Tweet (message) to prove it came from you. It also provides date stamps, queries by user name, off-site backups, etc. Client software would calculate someone's score by summing up their Tweet history to find points awarded, and reject bogus messages (such as ones awarding points you don't have). To award 3 points to a user named @Someone, you'd tweet something like*:

RSAGMS0 Award @Someone 3 Popularity {"comment": "Thanks for the birthday card."}

You can also use social media systems for other functionality, such as custom star ratings. Take your "friends" list and calculate your score relative to their scores, giving a number of stars that shows your ranking relative to your friends, rather than the whole world. Repeat for categories and other possibly interesting groups.

Another social media kludge is to use it for caching award totals. For example, a robot Twitter user could weekly (or monthly) add up a subscribed (just "follow" the 'bot to sign up) user's rating scores in all categories and tweet the totals to their public message feed. If the 'bot is well known and trusted to add things up while rejecting invalid awards, then people (or their client software) wouldn't have a problem with using its totals to save time when calculating someone's score. This is doubly useful if the social media system doesn't keep old messages.

Fake Users

If anyone can sign up to be a user of the reputation system then you'll have fake users sending their points to a controlling user, forgeries pretending to be another users, and lots of spam. Once we know that a user is a particular real person, they can use a password (for database) or digital signature (for blockchain) to verify their identity with the system.

The simple solution is to have a few authorities which can certify that a user is a real person, and have some identifiable information (such as name, home address) attached to the user (via profile data) to avoid duplicate users. Perhaps use a country's government passport system for that, or a digital identity service which does something similar to verify real people.

Another partial solution is to have users become more accepted the longer they have been active on the system. Assuming the continuous rooting out of fake accounts, older accounts with an activity history can be more trusted. It takes longer term planning and maintenance to make an old fake account, so it will mostly be big state actors doing that, not the usual quick buck fraudsters.

Yet another worry is whether to have placeholder users, standing in for real people. Some social media companies already do this so that their users can make comments about people not in the system. The reputation system may have to do the same thing, for the same reason. It usually uses an e-mail address as the key to identify a user, which the real user can use to get control of their account by having the system send them an introductory e-mail.

Comparison with other Rating Systems

There are quite a few discussions and papers about reputation systems out there, though not many that use score fading. Several about using blockchain (usually Ethereum), many about the problems reputation systems face, and a few academic surveys of the topic. Rather than redoing the same work, I refer you to a Google Search for surveys or the Wikipedia References on the topic.

I did find that some of the features of the large online discussion systems are relevant to the AGMS reputation system. These systems are probably the most active rating systems in use and have to deal with thousands of people and controversial topics, which bring out lots of rating activity and malicious actors. They should then have good real world answers to many reputation system problems.


Slashdot (an online discussion system) primarily rates comments posted by users on various discussion topics. Users with a good enough reputation can rate comments into predefined categories such as "funny", "offtopic", "interesting", "flamebait", etc. Each category also increases or decreases (as appropriate) a score for the comment (starts at 0 or 1, varies from -1 to +5). When reading, you can filter out comments below a specified threshold level.

Rating Users

Their moderation system also does meta-moderation for rating the raters, using "karma" points. Karma seems to be mostly derived from what people think of comments you wrote, plus a few points for doing work such as rating other people's ratings or starting a new discussion. Karma is displayed to the user as a few rough levels (Terrible, Bad, Neutral, Positive, Good, and Excellent) rather than an actual point score, to make gaming the system less tempting. Every once in a while, people with good enough karma get a few moderator points, which they can spend to rate comments into categories, one point per rating done. If the moderator points aren't used, they vanish after a few days.

Meta-moderating gets people with good karma to rate recent random comments as plus/good or minus/bad. Formerly meta-moderation was used to rate the ratings themselves as "fair" or "unfair". I wonder if the change to good/bad choices was made to make it more understandable to users. In that case, it rewards category moderation choices with karma when your positive or negative rating of the comment agrees with the positive or negative direction of the moderation.


When compared with the AGMS Reputation System, Slashdot has some interesting features.

First, rating the ratings to affect a person's score seems useful. However, we already have similar functionality in directly rating a person. You could just reference one of their ratings in your point award as the reason you awarded the points. Additionally, we also include category awards in a person's total popularity score, so rating their other actions (like writing a book review, or a good comment) is already included.

Secondly, hiding the actual value (Slashdot karma) using a rough range (impossible to keep secret if using blockchain) is similar to star displays, though those can be relative to a particular group of people as well as globally calculated. This is mostly a user interface feature, easily added if needed.

Finally, the appearance and then disappearance of moderator points after a few days is similar to the weekly new points and fading. However, Slashdot awards moderator points more often (or more points) to people with higher karma. I don't think that would be good in a popularity reputation system, since that could lead to runaway growth in score for someone already popular, distorting the meaning of the score to users.


Reddit is another discussion system with ratings for posts and the comments on them. Users get two vote options: an "up-vote" or a "down-vote". They can see the number of comments and usually see the total (up - down votes) points sum, though it is fuzzed (randomly offset from the true total) to make it hard for cheaters to determine if their tricks are working. Besides voting, moderators of a particular Reddit community have the power to delete comments and ban users from their community, in an effort to keep the discussion on-topic.

For Reddit to make money, besides advertisements (ad targeting is easy, but you may get ridiculed, or ignored), it sells Coins. They're used to attach markers (silver, gold, platinum) to posts or comments, separately from the voting system. The awardee also receives a few coins. Going further into monetisation*, you can turn off advertising if you get a coin subscription.

Rating Users

Reddit also has a "Karma" score for users; one kind for new posts/links and another for making comments. Low karma reduces commenting ability (separate karma based rates for the number of comments allowed for each of hour, day, week, month periods), and you need some karma to create subreddits. You get karma by posting comments people like by up-voting, lose karma when your comment is down-voted. There are rumours of an anti-brigading system that cuts off down-votes if there are too many, or maybe it is some sort of lower cap for comment karma down-votes. Reddit keeps its anti-cheating code secret so this is just speculation on what it does.

Sorting by Up and Down Votes

Besides the point totals, you can also sort the display of comments by various algorithms. There are simpler ones like sorting by the up-vote to down-vote ratio with age weighting, but most interestingly they added a better one called "Best" in 2009, put in by Randall of xkcd fame. Bugi Abdulkarim has a good history and explanation of Reddit's different sorting schemes, and explains the "Best" or "Confidence" one's origins as coming from Edwin B. Wilson's "Wilson Score Interval" (1927). Both blog posts and the source code lead to Evan Miller's blog post How Not To Sort By Average Rating that talks about the advantage of keeping track of up-votes and down-votes separately, and using Wilson's Score Interval to give an estimate of what the votes say.

The interval is a range around the estimated true rating (from 0.0 meaning everyone down-votes to 1.0 where everyone up-votes, 0.5 means the votes are split evenly). The range width is affected by the number of votes (more of them narrows it down) and by a preset probability, usually 95%, or in other words the range contains the ultimate (everyone voted) ratio 19 times out of 20 when you have a given number of up and down votes as input. To keep comments with few votes from appearing overly positive, sort by the lower limit of the range.


There are lots of good ideas we can borrow from Reddit. In particular, keeping track of positive and negative ratings separately for use in sorting, rather than just doing it in order of the score total. In particular this is most useful for category ratings where you want a reliable measure (total score makes more sense for popularity). We already have the individual point awards in the database, only the caching would need to be updated to keep track of plus and minus separately.

Reddit's restricting of votes by time limits is interesting, but we already have the weekly new points for that purpose.

Making the creator of a category the moderator (able to delete ratings, ban people, add moderators) for that category is another idea worth stealing.


Twitter's rating system for "tweets" (short messages) currently uses "likes" via a heart shaped button to let users rate the messages. You can also "retweet", which means reissuing a tweet under your name, with additional text. Retweets also imply you think the original tweet was important. Formerly (changed in 2015) they had a "favorite" button that bookmarked tweets. Apparently the "likes" psychologically appeal to users, making them more "engaged"* while using Twitter. Those "likes" and retweets presumably affect the order of tweets (their documentation says "powered by a variety of signals") that Twitter displays in your timeline. You can sometimes also ask for the tweets ordered by date (a feature recently put back, though not available in the web interface).

Twitter's hidden sorting scheme has brought up criticism for low quality messages, misleading propaganda and "troll" users (often robots) harassing other users. Chuq Von Rospach has a good discussion of the problems with Twitter's rating (and other reputation systems) in Fixing Twitter: Why Twitter is Broken and why reputation systems can help. He suggests improving it by bringing bad tweets to the attention of administrators, and rippling administrative reputation changes to related users and related tweets (such as ones containing the same URL link). Though he worries about the reduced diversity of an "echo chamber" if there is too much administration, yet wants the company to have a definite bias right from the start rather than allowing everything. Like other karma systems, he suggests keeping ratings secret.

While Twitter's actual rating system is obscure, one of their engineers did publish the ActiveRecord Reputation System add-on Gem for Ruby on Rails to make it easy to add voting to arbitrary database objects (such as product description records, or comment records, etc).


Well, it's a less dystopian rating system than existing ones, but it still has the usual problems of group dynamics and malicious actors. The bad actors can be handled by using trusted identity verification authorities and administrators, if they stay honest. The group dynamics that lead to dystopias are tamed a bit by making rating points rarer so people think a bit more when making a rating. The fading of a score helps forget bad ratings over time (I didn't notice any other ratings systems explicitly using fading points, though I think it's an obvious idea). But with all that, you still have Human behaviour so you'll still get dystopian mob actions, just fewer of them.

After writing up this design, I'd like to run off and implement the AGMS reputation system. A database one would be quick, but nobody would know about it. The blockchain variety would be nifty, and maybe garner more users due to its open source nature and a use that actually fits blockchain, but would take a bit of work to set up. The Twitter Kludge would be the easiest to do (assuming Twitter permits that warping of their API) and has the best chance of gaining use, but that's really a job for a company like Twitter (would appreciate a credit if they use this idea). So, I had a few days of fun writing this up, but it's back to studying Ruby on Rails (maybe with the reputation system as an exercise) in hopes of a stable job at you-know-where with the interestingly themed office floors in Ottawa.

Footnotes & Asides

A collection of notes, answers to quibbles and other comments about the text. They're not important to understanding the main text, so reading them is optional. However, thanks to modern hypertext technology*, you can quickly jump to them, read the note, and go back to the main text when viewing this essay in a web browser.

  1. Reputation systems are a frequent SF story topic now that we have online rating sites (first one in 1999, public internet access started in 1995). Once the general readership started understanding how the Internet and reputation systems work, stories about dystopian reputation systems could be written. Cory Doctorow in particular has used them in his science fiction stories, most famously in Down and Out in the Magic Kingdom (2003), and criticised them too in a Locus Magazine article Cory Doctorow: Wealth Inequality Is Even Worse in Reputation Economies (2016). More recently, the topic has appeared on the small screen, with Black Mirror episode Nosedive in 2016 (The Atlantic review here), and Orville episode Majority Rule in 2017. I saw Nosedive last night, and thought about it on today's exercise walk.

  2. I'm still writing up an essay about my SPEC ethical calculus, which turns out to be a reinvention of utilitarianism, with a few modern twists in the math and usage. This essay on reputation systems was going to be a footnote, but it seemed interesting enough to write up as an essay on its own. By the way, unlike reputation systems, utilitarianism can be used to decide on the worthiness of all sorts of actions, and indeed was originally created in 1789 by Jeremy Bentham as a moral justification for writing legislation.

  3. It's always at a glance. Quite often with augmented reality showing a nearby person's score once the system identifies the person. They also gamify the user interface, with people dashing off ratings at the slightest excuse and getting a pleasant or horrible sound effect psychological reward. Reminds me of certain dog training… Besides being time consuming, it trivialises the rating process too. Which is why I suggest using up one of your own rating points to rate someone else, and only receiving a few new points at a time. The at a glance is also needed for technical reasons - the system has to identify the person whom the rating targets.

  4. Should users be allowed to continue rating other users when their own rating is zero or negative? If they could do that then they could run their score into large negative numbers, which would then be decayed towards zero, giving them cheap rating ability. So, no, don't allow rating when your own score is zero or negative. Though if we don't want to totally silence a negative user, we can allow them to use their weekly new points to do ratings.

  5. How often should new points be distributed and old ones faded away? This is mostly a psychological factor. Do it too often, such as once an hour, and users would be continuously making ratings and checking their own, exhausting all but the most dedicated people. I also want them to think about their choices, so fewer ratings over a longer time is better. How often do relationships change and events happen? How long can people remember things? A year would be too long to wait for new points to do a rating. A week seems like an appropriate duration. A month would be the upper limit.

  6. The fade factor should be fast enough to fade away things over a few years, slow enough to remember recent history. How long do people remember? Usually just a few years then the event becomes "history" and is no longer important to their daily life.

  7. Here is some Ruby code that simulates the reputation score of one user, when they do nothing after starting with some points. Their score converges to 333 if you start with a high score, 301 for a low score, and stays the same if you start with a score between 301 and 333.

    # Reputation system simulation.  AGMS20190114
    fade = 0.97
    score = 1000000
    years = 8
    newpoints = 10
    (years * 52).times do |week|
      score = (score * fade).truncate + newpoints
      puts "Week: #{week}, year: #{(week / 52.0).round(2)}, score: #{score}."
    Week: 0, year: 0.0, score: 970010.
    Week: 1, year: 0.02, score: 940919.
    Week: 2, year: 0.04, score: 912701.
    Week: 3, year: 0.06, score: 885329.
    Week: 355, year: 6.83, score: 335.
    Week: 356, year: 6.85, score: 334.
    Week: 357, year: 6.87, score: 333.
    Week: 358, year: 6.88, score: 333.
    Week: 359, year: 6.9, score: 333.
    Week: 360, year: 6.92, score: 333.
  8. Removing an opinion by giving back the faded points would cost you nothing in effect because the points would also fade away by the same amount if you didn't spend them.

  9. I prefer using a FIFO queue of category points to decide which ones get deleted during fading. FIFO is better than random choice since it can be recalculated without needing to store anything extra in the database.

  10. The global database needs to store a few things:

    It looks like many of the records have miscellaneous user data attached. A key/value system or something like JSON for attached data can be used to identify the purpose of the data, so that other programs can find particular items (time stamp, description, photo, etc.) and know how to display them. However, we don't want to fill up the database with useless user content (spam), so there should be a size limit. Users can include a URL to larger content.

  11. The example Twitter message used for a reputation system data storage kludge: RSAGMS0 Award @Someone 3 Popularity {"comment": "Thanks for the birthday card."}, awards 3 points to user @Someone (Twitter's user names start with an "@"). In general, the kludge text starts with a word specifying the reputation system, a verb word, and subsequent words specific to that verb, and then some optional data. In "RSAGMS0", the RS means it is a reputation system message, AGMS is the name of the particular system, 0 is the protocol version number. The verb is "Award", which is used to award points. We may want to save space and use a single letter code like "A", depending on whether or not end users see these messages. Next is "Popularity" which specifies the category to award the points in, again it could be shortened to something like "P" (there would need to be a dictionary of abbreviations, like the ones used by telegraphers or SMS Text Messages, if end users see the messages). That's followed by the user ID whom is getting the points, and then comes the number of points (can be negative too). After the points number comes the optional data, in this case represented in JSON format (we want something readable and compact). The optional stuff here shows a user specified comment explaining the reason why the points were awarded. Hopefully all of that can fit in the 140 character Tweet limit.

  12. The MySQL database is actually fast enough for large volumes. Twitter used it as a base in their layers of data processing, back in 2011. Now that I think of it, Twitter's infrastructure is very close to what a reputation system would use, and suffers from the same spikes in load when a popular person does something. Twitter now uses something else.

  13. "Engaged" means that the users are actively using the service (perhaps even addicted to the gratification of being liked by other users), and thus stay on the service for a longer time doing whatever it takes to be "liked". That has the side effect of making more appealing content to entice yet other users, and thus more advertisements are shown, and thus more money is made by the social media service. Engagement as an advertising term means the user has an emotional attachment to the brand, hopefully in the positive sense. The use of that word also implies that social media services consider advertising to their users to be important, perhaps to the users' detriment (but it can't be too bad, otherwise the users will leave the service).

    By the way, the Like button really got its start on Facebook, with Leah Pearlman wanting it as a way to cut down on comments saying essentially "I like this". FriendFeed (now Facebook) engineer Justin Rosenstein implemented the "likes" feature in 2007, though there is a 1998 patent (declared invalid) for something similar on the Surfbook site.

  14. Obviously monetisation is a problem. If you use advertising, you'll suffer the same distortions (selling reputation to advertisers for cash) as other mainstream social media. Peeple is thinking of charging for access to negative reviews. Charging for extra rating points is obvious, but warps reputation towards being similar to wealth. Blockchain is the best answer - an open source, distributed system, where clients pay for their own network services and miners run the database in exchange for some reputation points, though it still needs new user verification to prevent the creation of fake users just for their points.

    If I'm running the database prototype of the reputation system and it becomes popular (unlikely since it's still too dsytopian - it's better as a résumé / art piece where I'm the only user, with the best reputation in the world :-), I'd like to fund its growth from revenue of some sort. If it grows too big for my home computer, I'd have to pay for cloud services (more uptime, better bandwidth), and if it grows even more I'd have to start a company and pay employees. The most basic source of funding would be to charge users for extra points of reputation to be added to their score. A subscription model would be better for revenue, say a fee for 3 months of an extra new point weekly. Paying users would also get priority when the system is busy.

    Paid points (perhaps a dollar each) would add to the user's score. I considered adding weekly new points with another level of fading, but there are already enough time delayed effects so a one time addition to the total score is good enough (its effects persist for most of a year), and that's simpler for the users to understand. To limit the effect of wealth on ratings yet reflect the increased reliability of paid points (someone was serious enough about their rating to pay for it), the maximum paid points in a week would be 100; 10 times a new user's weekly new points.

    I'd like to make the weekly new points adjustable for another reason - to reward long time users. It would be useful to increase the weekly new points by a bit for them since they may have more experienced opinions and be less fraudulent than new users. If a user has been active during the previous year then we'll give them one more new point each week, up to a maximum of 20 additional new points per week after 20 years of activity (not too large so new users don't feel totally ignored). To weed out inactive accounts I'd remove a weekly point if the user hasn't done anything during the previous year.

    Of course, people could trade with other people for points. It might be worthwhile running an aggregation and auction service on the side. Though this implies a need for stronger fraudulent new user detection, or making the initial weekly points zero.

  15. Hypertext, the concept of selecting a link in a document and jumping to another spot in the document is fairly recent (Memex in 1945) and HTML web browsing (the first widely used hypertext) started in 1990. I remember going to a lecture by Ted Nelson (wearing running shoes decorated with puffy Mercury wings) at university around 1984, where he talked about Project Xanadu, a very fancy hypertext system he started developing in the mid-1960s. Anyway, simple HTML hypertext does the job for this essay and lets me leave the main text uncluttered with silly asides like this one.

Copyright © 2019 by Alexander G. M. Smith. Here's a link to the digital signature of this HTML document. Everyone has permission to distribute and reproduce this essay so long as the text is unmodified and complete. If you find spelling or grammatical errors, e-mail me at agmsmith@ncf.ca. Comments are welcome too, though if there are too many it would be worthwhile to move to a discussion group somewhere (please let me know if such a group exists).