Dealing with Down Voting

Dealing with Down Voting

Many users have expressed vehemently their opposition to down voting when reviewing Project Spark user generated content (UGC), however, the powers that be at Team Dakota, the creators of Spark, do not yet wish to remove down voting as there has not been a consensus on the topic, and there are some cases which there are good games that do have high ratings (ignoring the quality levels with low ratings (fine example: the newest addition to TD library, Guily All the Same, has received a ton of downvotes (86% rating at the time of this post) despite the quality effort put into the level), and also overlooking ignoring the marginal levels with high ratings, but I digress).  BigDaddy has already written an article explaining the opposition to down voting (found here ), so this "opinionated editorial" will focus on identifying and briefly evaluating the potential alterations to the current down voting system which have been mentioned by Team Dakota, as well as mention some of my own ideas for reducing the impact of downvote trolls in Spark.

Inform the Voters

What is a down vote supposed to mean?  Tell us the intended use.  Is this supposed to a Zoidbergian troll call "Your level is bad and you should feel bad!"? Should it be an anti-DLC statement, "this level contains DLC which I do not own, and cannot remix it, feel my misplaced wrath!"?  How about remixes, "You didn't do most of the work, I am going to down vote so the original creator will get attention" (this may be addressed soon with the upcoming improved lineage system, but people may continue to vote in such a way)?  Or is it just to be "This game has a high rating, but I didn't quite like it at the level of 95%, I think it is more of an 85% game, so I will down vote to impose my will on the game rating"?  How about X1 compatibility, "this game doesn't function well on the X1, which I am using, it looks cool, and I want to play it, but I can't- BURN!"? None of the above, all of the above?  At least tell us before voting the intent so we can be consistent and have the scores be meaningful.

Captcha Censoring

I am not in a position to say if there are bots in Project Spark at the moment, but a captcha form being required for a down vote to be processed would have two effects.  Firstly, it would prevent down vote bots from becoming a thing, if they haven't already.  Secondly, basically everyone hates captcha, so if they want to down vote, they will need to hate the level more than they hate doing a captcha.  However, this will also likely result in levels ratings being skewed higher, with only especially bad levels being filtered down.  And of course those people would likely feel especially embarrassed.

Feedback Tags

Perhaps require feedback to be tagged with why the level was down voted.  These tags could be displayed in a histogram to the creator so that they may improve their level, or future levels.  This way a down vote will come with constructive feedback.  Heck, allow anyone to submit feedback tags even if they don't plop down a down vote.  It may be worth adding a "Be Trollin'" feedback tag in case any trolls feel like being frank about it.

Scale the Down Votes

First and Foremost

Regardless of which algorithms Team Dakota implements, please do not tell us, keep it a black box.  Do not tell trolls how to be effective trolls, if the trolls know which obstacles are up, they will figure out how to get the most troll for their time.

You Must Be This Tall to Down Vote

A minimum spark level for down votes to actually be counted may negate the effect of trolls who log in to Spark with no intent on creating or actually playing games.  If there were a level of 5, it wouldn't be hard for a real user to reach, however if a user switches to troll mode after losing interest, it would be a rather low barrier of entry for them, as I recall reaching level 5 within a day or two of playing.  Higher levels or 10 or 15, or what ever, would be more likely to filter out potential turn coats, but would have a minor side effect of also removing legitimate down votes from members who have not yet rising above the threshold.  This may be mitigated by decensoring the down vote after the user reaches the appropriate level.

Weighting the Down Vote

It has been mentioned that some factor could scale the impact of a vote, such as the user's spark level.  At first glance, this would also reduce the impact of a low level troll.  But at the moment, it isn't all that entirely difficult to quickly level in Spark, especially with a few tricks which any mildly clever user could come up with.  So do users who figured out these tricks really have a more important opinion when it comes to voting than a user who has ignored the dailies and didn't concern themselves with leveling?  The low hanging fruit aspect would be combining the minimum level discussed previously with the weighting.  Perhaps a hard cap and a soft cap, concepts that may be familiar to MMORPG players, but flipped upside down.  The hard cap could be that users of a spark level below 5 would carry a weight of zero, while users between level 5 and 15 would have a soft cap reducing their effectiveness by some amount.

Frequency of Voting

It may be useful to take into consideration how many down votes the down voter is doing, either per day or as a percent of how many ratings in total they have given.  If a user down votes every level they come across, their rating could mean less.  Or if they down vote a lot, but also up vote a lot, their vote could have a normal weight.  Or perhaps if they rarely down vote, and/or rarely up vote after playing a game, perhaps their votes should have more of an impact.

Voting Relativity

If a user down votes a level which has a substantially high number of up votes, perhaps the down vote shouldn't mean as much.  Even Babe Ruth didn't get 100% of votes on Hall of Fame Ballots (today writers use that as rationale for leaving surefire hall of famers off their ballot, essentially down voting, just because if the best player in their minds wasn't perfect, why should anyone be given a perfect rating? It's silly, but again I digress), so maybe the people in the minority shouldn't impact the score very much.

Subtract the Toxic Noise

Alternatively, find a "background noise" of level ratings, this view of this approach comes from my background in analyzing genetic/epigenetic microarrays, where even something that should be 100/100 or 0/100 will have its signal altered by the overall and/or nearby environment.  Essentially, look at all levels, with particular attention to the very good levels.  If even really good levels with 100 total votes is expected to get 5-10 down votes just from the toxic environment of the internet, reduce the impact of the first 5-10 down votes per 100 votes.

Other Suggestions

Do you have any other possible solutions worth considering? Post in the comments below.

Preview: "A Simple Task" by wertandrew (released)
Bungie Community Hosting a Competition in Project ...

Comments 8

An_Average_Recon on Saturday, 29 March 2014 21:25

This pretty much covers everything, nice post.

Another idea: Maybe you have to play 10 hours of ugc and create mode combined before you get to vote? This way people new to the game don't just downvote because their expectations are too high.

This pretty much covers everything, nice post. Another idea: Maybe you have to play 10 hours of ugc and create mode combined before you get to vote? This way people new to the game don't just downvote because their expectations are too high.
Crikey! There was an error...
Whoops \ Exception \ ErrorException (E_COMPILE_ERROR)
require_once(): Failed opening required '/home/gamersin/public_html/administrator/components/com_easysocial/includes/storage/amazon/autoloader.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') Whoops\Exception\ErrorException thrown with message "require_once(): Failed opening required '/home/gamersin/public_html/administrator/components/com_easysocial/includes/storage/amazon/autoloader.php' (include_path='.:/usr/lib/php:/usr/local/lib/php')" Stacktrace: #0 Whoops\Exception\ErrorException in /home/gamersin/public_html/administrator/components/com_easysocial/includes/storage/amazon/amazon.php:15
Stack frames (1):
0 Whoops\Exception\ErrorException
* EasySocial is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
defined('_JEXEC') or die('Unauthorized Access');

// Include amazon's autoloader
require_once(__DIR__ . '/autoloader.php');

use Aws\S3\S3Client;

class SocialStorageAmazon implements SocialStorageInterface
	public $config = null;
	public $bucket = null;
	public $region = null;
	public $endpoint = '';
	public $secure = null;

Environment & details:

Key Value
joomla TzoyNDoiSm9vbWxhXFJlZ2lzdHJ5XFJlZ2lzdHJ5IjoyOntzOjc6IgAqAGRhdGEiO086ODoic3RkQ2xhc3MiOjE6e3M6OToiX19kZWZhdWx0IjtPOjg6InN0ZENsYXNzIjozOntzOjc6InNlc3Npb24iO086ODoic3RkQ2xhc3MiOjM6e3M6NzoiY291bnRlciI7aToxO3M6NToidGltZXIiO086ODoic3RkQ2xhc3MiOjM6e3M6NToic3RhcnQiO2k6MTQ2Njg1NjcwMztzOjQ6Imxhc3QiO2k6MTQ2Njg1NjcwMztzOjM6Im5vdyI7aToxNDY2ODU2NzAzO31zOjU6InRva2VuIjtzOjMyOiJtMTNXRkZsejBpTGVBQ2pDMGJxZmhBTEN1REpETFZTbyI7fXM6ODoicmVnaXN0cnkiO086MjQ6Ikpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeSI6Mjp7czo3OiIAKgBkYXRhIjtPOjg6InN0ZENsYXNzIjowOnt9czo5OiJzZXBhcmF0b3IiO3M6MToiLiI7fXM6NDoidXNlciI7Tzo1OiJKVXNlciI6MjY6e3M6OToiACoAaXNSb290IjtiOjA7czoyOiJpZCI7aTowO3M6NDoibmFtZSI7TjtzOjg6InVzZXJuYW1lIjtOO3M6NToiZW1haWwiO047czo4OiJwYXNzd29yZCI7TjtzOjE0OiJwYXNzd29yZF9jbGVhciI7czowOiIiO3M6NToiYmxvY2siO047czo5OiJzZW5kRW1haWwiO2k6MDtzOjEyOiJyZWdpc3RlckRhdGUiO047czoxMzoibGFzdHZpc2l0RGF0ZSI7TjtzOjEwOiJhY3RpdmF0aW9uIjtOO3M6NjoicGFyYW1zIjtOO3M6NjoiZ3JvdXBzIjthOjE6e2k6MDtzOjE6IjkiO31zOjU6Imd1ZXN0IjtpOjE7czoxMzoibGFzdFJlc2V0VGltZSI7TjtzOjEwOiJyZXNldENvdW50IjtOO3M6MTI6InJlcXVpcmVSZXNldCI7TjtzOjEwOiIAKgBfcGFyYW1zIjtPOjI0OiJKb29tbGFcUmVnaXN0cnlcUmVnaXN0cnkiOjI6e3M6NzoiACoAZGF0YSI7Tzo4OiJzdGRDbGFzcyI6MDp7fXM6OToic2VwYXJhdG9yIjtzOjE6Ii4iO31zOjE0OiIAKgBfYXV0aEdyb3VwcyI7YToyOntpOjA7aToxO2k6MTtpOjk7fXM6MTQ6IgAqAF9hdXRoTGV2ZWxzIjthOjM6e2k6MDtpOjE7aToxO2k6MTtpOjI7aTo1O31zOjE1OiIAKgBfYXV0aEFjdGlvbnMiO047czoxMjoiACoAX2Vycm9yTXNnIjtOO3M6MTM6IgAqAHVzZXJIZWxwZXIiO086MTg6IkpVc2VyV3JhcHBlckhlbHBlciI6MDp7fXM6MTA6IgAqAF9lcnJvcnMiO2E6MDp7fXM6MzoiYWlkIjtpOjA7fX19czo5OiJzZXBhcmF0b3IiO3M6MToiLiI7fQ==
Key Value
HTTP_ACCEPT_ENCODING x-gzip, gzip, deflate
HTTP_ACCEPT_LANGUAGE en-us,en-gb,en;q=0.7,*;q=0.3
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH /usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/courier-imap/sbin:/usr/lib/courier-imap/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin:/opt/bin
LD_LIBRARY_PATH /usr/local/apache/lib
DOCUMENT_ROOT /home/gamersin/public_html
CONTEXT_DOCUMENT_ROOT /home/gamersin/public_html
SCRIPT_FILENAME /home/gamersin/public_html/index.php
REDIRECT_URL /blog/entry/dealing-with-down-voting
REQUEST_URI /blog/entry/dealing-with-down-voting
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1466856703.59
REQUEST_TIME 1466856703
argv Array ( )
argc 0
Key Value
TERM linux
USER root
LD_LIBRARY_PATH /usr/local/apache/lib
PATH /usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/courier-imap/sbin:/usr/lib/courier-imap/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin:/opt/bin
HOME /root
_ /usr/local/apache/bin/httpd
0. Whoops\Handler\PrettyPageHandler