Friday, November 18, 2016

Ranked-Choice Voting Results in San Francisco

Screenshot of a bar chart of 1 round of ranked-choice voting results.
San Francisco is in the process of counting the ranked-choice voting ballots for its city elections.  To make it easier to visualize the results, we have also processed the ballots with OpaVote and are sharing our results.  You can see an example bar chart here, and click the links below for full results.

San Francisco is amazing in that they publish all of the ballot data.  You can download it yourself here.  We downloaded the ballot data, converted it into the BLT format used by OpaVote, counted the ballots, and you can see our results here:
This is based on the November 17th data release, and you can see that our results match the official results.
You will see one difference between the official results here and our results.  In the official results, the last place candidate is eliminated one by one.  In the OpaVote results, all losing candidates are eliminated simultaneously.  Look at the second round of the District 1 election to see an example. OpaVote eliminates 8 candidates simultaneously because none of these candidates could possibly win the election (the sum of all their votes is less than both Sandra and Marjan).

So who is right?  Technically, OpaVote is right, but in practice it doesn't make a difference. The San Francisco city charter says at Sec. 13.102(e):
If the total number of votes of the two or more candidates credited with the lowest number of votes is less than the number of votes credited to the candidate with the next highest number of votes, those candidates with the lowest number of votes shall be eliminated simultaneously and their votes transferred to the next-ranked continuing candidate on each ballot in a single counting operation.
This is what OpaVote does and we call it a batch elimination.

In practice, it doesn't matter since the outcome will always be the same regardless of whether candidates are eliminated one by one or in batches.

You need to be careful, however, with other implementations of IRV.  I won't go into to the details here, but if you implement IRV with a tie-breaking scheme that break ties by looking at previous rounds (which San Francisco doesn't) then it is possible that one-by-one elimination gives a different result than batch elimination.