Voting for a group
Voting for one person is complicated enough. Electing a group of people is a surprisingly difficult job! Here’s some work we did recently at BVN to elect a group of 13 people.
As with all the stuff I do, I’m sure this has been studied to death, by some field or other. If anyone knows what the field is called then I’d love to know.
Throughout this, when I’m talking about “we” I mean Shane Dalton, a 15 year old work experience student who was with me for two weeks, and me.
What we were trying to develop is called a “multiple winner voting system” which hasn’t been studied very much1 as far as I can tell.
Let’s start by stating our goals:
- We want to elect 13 people
- Those people should have equal status
- There should be no ambiguity about membership of the group
- The results should be reflective of the electorate's aggregate opinion.
One and two can easily be handled by an unbiased returning officer. We had a great one, her job was to interpret the results and release 13 names. (In no particular order.)
The hard part is in making her job easy. We need to be able capture the electorate’s preferences. This isn’t as easy as it sounds!
Kenneth Arrow was the youngest person ever to get a Nobel prize for economics. His impossibility theorem proves2 that no voting system is perfect, or in the words of wikipedia:
In short, the theorem states that no rank-order voting system can be designed that always satisfies these three “fairness” criteria:
- If every voter prefers alternative X over alternative Y, then the group prefers X over Y.
- If every voter's preference between X and Y remains unchanged, then the group's preference between X and Y will also remain unchanged (even if voters' preferences between other pairs like X and Z, Y and Z, or Z and W change).
- There is no "dictator": no single voter possesses the power to always determine the group's preference.
This is actually pretty freeing for us! It means that we can just rank different methods of choosing people.
We’ve tested 4 methods of voting and ranked them on the same dimensions.
- one vote per voter
- 13 votes per voter
- Preference voting (order the candidates)
- Currency allocation voting
These all result in an ordering of candidates, so it’s possible to see who is the most popular and least, but for our use we just need to trim off the top 13. We couldn’t come up with a model that elected whole groups3.
We didn’t expect number one to work, but we included it to give some indication of how it fares against more complicated methods4.
From our exploration we’ve found that the factor that matters from a voting point of view is the distinction between 13th and 14th place. We need to make sure that the method we pick is unlikely to give a tie. Imagine how miffed Xavier be if he missed out on his place in the council to Aaron because of a secondary sorting choice; that wouldn’t be acceptable.
The other criteria we need to think about is how hard it is to actually vote correctly. Remember the fuss about the hanging chad5 problem in the Bush Gore election. That whole election may have gone differently if the voting method was more reliable.
Most voting systems need to cope with people of wide ranging abilities (language, mental capacity, physical capacity). We’re really lucky to only need to design this system for a fairly narrow group of capacities. We do have one major problem though–scarce attention makes us stupid. This system needs to work for geniuses who are only able to give it a small proportion of their full brain power.
The systems
Method
We’ve used 220 voters and 62 candidates. We ran each test 200 times and used the Python random number generator for all our randomness. If you’d like to read the code then it’s available here (open source of course – never trust a closed source voting system, it’s almost certainly corrupt!)
One vote per voter
In this system each person gets one vote. They then use it to say who they think is the best person for the job. We take the 13 people who have the most votes and they become the council.
This is a familiar voting method for most things, but in our context it has some huge problems! In most voting situations there are thousands of voters; that makes the ratio of candidates to voters tiny. In our case that ratio is more like 1:4. It would be sort-of-ok if we were only voting for one person, but for 13 it’s a disaster.
This is a really pretty graph, but that’s about all it’s got going for it. Out of 200 sample runs of this election it gave a tie between 13th and 14th place 189 times. So 94.5% of the time this method failed to give us what we were looking for.
Thirteen votes per voter
This is the closest we’ve got to electing the group as a whole, un-preferentially. Fans of direct mappings between metaphor and implementation will probably be drawn to this. It’s a bit better than the previous method at avoiding clashes, but it’s still not really good enough (131 out of 200 or 65.5% of the time it will give a clash).
Preference ordering
We’re in serious consideration territory now. This method is very similar to the way voting works in Australia6 It works by reordering a list of candidates, so that the person at the top gets a point, second place gets 2 points etc. Then the 13 people with the lowest number of points form the council.
The downfall of this model is that if you vote below the line you need to number all the boxes. We’ve got around this by introducing a line that you can move about yourself. All candidates below the line get the average value of the points left over. We’ve simulated this by randomly placing the line somewhere between 5 and 30 candidates down. This gives an excellent clash avoidance of 6 out of 200 or 3%
Currency allocation
This is the method that Shane and I both liked the best from an intuitive point of view. You are given lots of voting tokens, 100 in this case. You then ‘spend’ them on candidates. You might want to give 25 to 4 candidates, or 10 to 10 candidates, or 50 to one, and five to another ten people. The idea is that you are given a lot of expressiveness.
This is pretty good, but not as good as preference ordering, giving 35 out of 200 or 17.5% clashes.
Summary of results
One vote per voter | 94.5% |
Thirteen votes per voter | 65.5% |
Preference ordering | 3.0% |
Currency allocation | 17.5% |
This is a pretty clear win for preference ordering. Preference ordering also has the benefit of being well understood by Australian voters and an easily implemented UI for when we actually need to implement it!
Known problems
All this analysis is done with unbiased picking. What that means is that there’s no reason to pick one candidate over another. Imagine that we were electing a group of the tallest people, that’s an objective ordering, so our voting simulation should reflect that objective reality as closely as possible. If there really wasn’t anything to chose between the candidates we might as well have a lottery. These simulations are assuming that situation. I’d like to spend more time running these with biased picking, but undifferentiated candidates are a worst case so it should only get better from there.
Now we know what sort of voting procedure will suit us the best, we need to be able to actually do the voting. As I said above we are dealing with the scarce resource of attention. We need a system that:
- Is simple enough for children to use (let's the spare attention is about equivalent to a 7 year old)
- Can be used anywhere (not locked behind a firewall) so that people can vote at home or on the train etc.
- Doesn't require much maintenance or developer skill (I had to make it, and to call myself a hobbyist is probably rude to hobbyists)
Here’s what we ended up with, It’s only tested in Chrome because that’s the only browser we have at work7. I also made it have a print stylesheet so that it could be filled in by people who are totally technophobic. Turns out that after staying exceptionally late to make this happen a grand total of ZERO votes were submitted on paper. Oh well.
We’ve since used this to vote for a photo competition too, so it’s pretty reusable. Here’s the instructions I gave everyone. I thought I’d leave them more or less unchanged, mainly because I’m lazy.
How to vote – simple
- First thing to do is to go to the voting page, but keep reading and _then_ go.
- When you get there you'll see a list of people with some buttons next to them.
- You can reorder them by clicking–or tapping–the buttons
- Make sure you've put in your email address
- Press **Submit vote**
- Go about your business
You can do this on your phone, tablet or on your regular computer. If you are afraid of technology you can also do a paper vote. To print a paper voting form–or to see all the candidates at once–go to the voting form and press [ctrl]+[p] to print one.
How to vote – less simple8
I’m told that if you vote below the line you need to rank all the parties, that’s a bit of a faff, so we’ve got a movable line.
The all candidates above the red line line will be scored by their position in the list. All candidates below the line get the average of whatever is left over. Remember that every person who votes affects the ordering of all candidates. That means that your votes beyond the 13 are still important!
I found that the easiest way to organise candidates is to scroll down the list, sending each person who I think I might like to vote for to the top. Once I get to the bottom I scroll back up to the top and do the detailed work of ordering people precisely. Only when that is done and I’ve decided who I’m voting for do I move the red line to level off the rest of the candidates.
How to vote – detailed
The red line stuff can be a bit confusing. I find this diagram useful:
Until the red line everyone gets an increasing score according to their ordering. Once the red line is placed we pivot the score through the middle of the leftover part of the line and give everyone who is left the same score. If you are mathematically inclined:
\[uniformScore = \frac{numberOfCandidates - cutoffPoint}{2} + cutoffPoint\]The data from the votes gets sent to a spreadsheet through a google form. A sample payload looks like this:
{"aaa_email":"[email protected]","aaa_timestamp":"2015-06-10T08:59:53.568Z","Chi Tang":0,"Sam Sweeny":1,"Paolo Frigenti":2,"Heather McCabe":3,"Ali Bounds":4,"Rana Abboud":5,"Katherine Withnell":6,"Tony Ogden":7,"Stella DeVulder":8,"Rebeca Buffington":9,"Simon Longstaff":10,"Brian Clohessy":11,"Michael Holt":12,"Damian Eckersley":13,"Bianca Smith":14,"Rob Vider":15,"Simon Swain":16,"Kellie Newman":17,"Mark Gazy":18,"Joanna Newton":19,"Jared Bird":43,"Caren Mok":43,"Glenn Millar":43,"Irina Belova":43,"Tim Gibson":43,"Barry Cantor":43,"Kristin Neise":43,"Tim Crawshaw":43,"Max Rampertshammer":43,"Palina Zhalniarovich":43,"Nikita Notowidigdo":43,"Chris Bickerton":43,"James Scott":43,"Graham Bligh":43,"Bella Pescia":43,"David McGirr":43,"Paul Wintour":43,"Catherine Skinner":43,"Naomi Stead":43,"Danielle McParland":43,"Domino Risch":43,"Glenn Irwin":43,"Luke Chalmers":43,"Izzie White":43,"Mitchell Medway":43,"Morten Weaver":43,"Nicholas Crawford":43,"Domenic Mesiti":43,"Craig Burns":43,"Nick Flutter":43,"Neil Haybittel":43,"Hayley Sainsbury":43,"Joseph O'Meara":43,"Ben Doherty":43,"Rose Steadman":43,"Gary Cai":43,"Kim Small":43,"Glenn Bliesner":43,"Jonathan Capparelli":43,"Abbie Lewis":43,"Sarah Barnes":43,"Kat Martindale":43,"Katherine Wiedersehn":43,"Marco Montevecchi":43,"Kirby Rees":43,"Kerwin Datu":43}
It’s then processed by the spreadsheet into columns. The totals of those columns are taken and the lowest 13 scores are elected.
If you’d like do some scrutineering of your own, all the code for the voting and simulations is all here on Github. Feel free to fork it if you need to elect some people. Let me know and I’ll even give you a sanitised copy of the spreadsheet, it’s got some sweet graphs in it9.
Results
This is how our ordering turned out, it was similar to the simulation, but more biased. In retrospect that makes sense, with more votes going where aggregate opinion went. There wasn’t a draw, and everyone is happy!
-
compared to single winner voting systems. See Multi-Winner Elections: Complexity of Manipulation, Control, and Winner-Determination and On Manipulation in Multi-Winner Elections Based on Scoring Rules for an idea of how freaky it all is. ↩
-
if you know me, you’ll know how particular I am about using the word “prove”! ↩
-
we could have had people form parties, but there aren’t really enough people to make enough parties so they’d need to overlap, which would be really hard ↩
-
Or in more salty language, to show that it’s crap and that we’re not idiots for not including it. ↩
-
Justices Breyer and Souter stated:
It is true that the Equal Protection Clause does not forbid the use of a variety of voting mechanisms within a jurisdiction, even though different mechanisms will have different levels of effectiveness in recording voters’ intentions; local variety can be justified by concerns about cost, the potential value of innovation, and so on. But evidence in the record here suggests that a different order of disparity obtains under rules for determining a voter’s intent that have been applied (and could continue to be applied) to identical types of ballots used in identical brands of machines and exhibiting identical physical characteristics (such as “hanging” or “dimpled” chads).
↩ -
or so I’m told, I’m not allowed to vote. ↩
-
we also have IE, apparently, but that’s no a browser is it? ↩
-
but still pretty damned simple! ↩
-
watching those graphs writhe about as more people voted was fascinating! ↩