Analyzing the 2025 Board election

I see that OpaVote now allows downloading anonymized raw ballots. That’s great, for election nerds :wink:. Many things can be learned from analyzing them. I can’t make time to dig into it now, and am still trying to reverse-engineer exactly what the cryptic format of the download says.

Things I intend to dig into:

  • How many empty ballots? There are always some, and OpaVote requires that people who cast an empty ballot explicitly confirm that’s their intent. However, people get confused, and OpaVote does not allow changing a ballot if they figure out what they did. One possibility is that they genuinely don’t want any of the candidates. Another is that they’re in a rush, don’t think they can make an informed choice in the time they have, and just want to keep their “active voter” status intact.

  • How many ballots that approve of every candidate? Likewise. They have exactly the same effect on the final winners as an empty ballot: none.

  • How many “bullet ballots”? There are always some of those too. This means a ballot with just one approval. Again, various “reasons” are possible. Like they truly only approve of one candidate, or that they’re trying to game the system, or that they don’t understand how Approval voting works and think “pick exactly one” is a Law of Nature™. By eyeball, I see fewer bullet ballots than is “the norm” for Approval votes, But the more comfortable people get with Approval, the fewer bullet ballots typically get cast, and the PSF has been using Approval for quite a while.

  • How many “there are N open seats so I’ll approve of exactly N” ballots? This may again suggest a weak grasp of Approval’s goals (consensus, not domination), but is obscured in this particular election because the number of open seats wasn’t spelled out during the voting experience (to the contrary, OpaVote believed there would he 13 winners, due to a minor misconfiguration when the election was set up).

  • Would a “proportional representation” (PR) scheme matter to the outcome? I have 4 such in mind, and this is the first time we’ve had enough data to say for sure what the outcome under those would be. Best guess from earlier attempts was that the final outcomes would have been the same, but the relative order of “winners” would vary a bit. I’ve cautioned before that PR schemes may not accomplish what you may hope they would: “the math” is blind to ideology, and will elevate the chances of any “minority view” winning a seat, regardless of whether you love or hate such a view. But it typically doesn’t matter much unless an electorate is highly polarized, and candidates are also highly polarized along the same lines.

Anything else you’d like to know about? Or if you don’t care, tell me not to bother. I’ll do it for my own edification regardless, but feel no compulsion to share the results.

16 Likes

Regarding the funky file format, I think the initial 13 13 row is just pick 13 winners out of 13 candidates. Then there’s the big ragged array of numbers in the middle where each row represents a ballot with the initial 1 and trailing 0 presumably being something we don’t use and the rest of the numbers being enumerations of the selected candidates. Then at the end is the candidates that the enumerations correspond to. That seems to tally up with the right totals at least… :slight_smile:

4 Likes

So 14 votes for nobody, 23 votes for everyone, 57 bullet votes, 152 votes for 4 candidates and 5 votes for anyone but this guy.

10 Likes

Thanks! Definitely revealing “high-order bits”. The leading “1” can be ignored: it’s :“the weight” of a ballot, and for us all ballots have equal weight (1).

OpaVote also allows rescoring ballots under other methods, but clear as mud how they reinterpret Approval ballots for those. In any case, trying to rescore under various PR schemes suggests it still wouldn’t make any real difference. Because it still believes we had 13 winners, all such schemes end up saying “all 13 win!” after their first round. But under most such schemes, output then showed that our top half dozen scorers were the only ones that would have survived into a 2nd round.

File format documentation.

2 Likes

Great! That matches everything @bwoodsend (& I) guessed about the format, although not all the things described there appear in the current download.

And the docs clarify something else: there is no special “approval ballot” format. The format is the same as for ranked elections, like using Condorcet or IRV (confusingly called “Ranked Choice”) in the US. That’s how it’s able to rescore our ballots using methods that require ranking. but the results are “garbage in, garbage out”: the order in which candidate numbers appear on our ballots says nothing at all about how our voters would rank them. So I’ll have to dust off my old code to get a credible answer to whether PR schemes designed for Approval would matter.

1 Like

I just read the results; can someone clarify something?

There are 13 candidates competing for 13 seats.

and from my understanding, all 13 candidates won? how does it work now? will there be more elections until a clear majority winner is decided? who will be the new candidates? the top 3 that had 400+ votes? I guess I missed something on this election format

3 Likes

See this topic instead for the results of the election. That’s settled:

Nope, it was “user error” in configuring the election at the start. It was always intended that there would be exactly 4 winners, as was announced all along in various places, but the “number of winners” box in the voting service election setup UI was left blank by mistake.

As glitches go, very minor.

3 Likes

for whatever reason, I had searched for “PSF election” on the search bar and only this post came up :slight_smile: ; I’ll read thru that one now.

As glitches go, very minor.

I wouldn’t call it minor, subtle details like that could put the question of legitimate elections; specially by bad faith actors.

4 Likes

The ballot file format is originally from:
Hill, I. D., B. A. Wichmann, and D. R. Woodall. 1987. Algorithm 123 — Single Transferable Vote by Meek’s method. Computer Journal 30:277-281.

2 Likes

They could, but today Franz’s account here was suspended for 18 months, so he won’t/can’t be pushing it here. So who would? I suppose some people are implacably convinced that I’m the very embodiment of “bad faith”, but leaving aside that it’s not true of me, this is a “very minor” irregularity to me regardless.

A technical detail that didn’t work to anyone’s advantage or disadvantage. Tallying Approval votes is very straightforward, and it was instantly obvious to everyone (well, to me :wink:) how the election results “should have been” reported. Nothing about the ballots or procedures was in question, the voting service just neglected to identify the 4 highest vote totals at the very end. Which were reported correctly from the start - we just had to pick out the 4 highest by hand.

I only recall one strongly disputed election here. The announcement didn’t specify a time zone for the deadline for nominations, and a late filer objected that was unfair to them (despite that, no, IIRC, they weren’t in an affected time zone)..One person in particular raised a major stink over that, and wouldn’t stop, until the Board chair unilaterally canceled the election already in progress.

And it wasn’t clear either whether they had the authority to do that. A tempest spanning two teapots :wink:.

Compared to that minimal-burger, this one is nothing.

That said, best practice for anyone new to setting up a web election is to run test elections first. This is a “red team” exercise. You’re not looking for “feedback”, you’re actively looking for complaints and people who (can at least pretend to) assume bad faith of you. No software on the planet is actually “easy to use” the first time, elections have multiple moving parts, and mistakes are inevitable. Make the mistakes, and prepare defenses, before it really matters.

God knows I’ve annoyed the STAR people by urging them to prepare defenses against unwarranted accusations of corruption, via incorporating some crypto-strength proof that tie-breaking wasn’t (& couldn’t have been) rigged. They’re not “annoyed” by me pointing it out, but by that addressing this is real work for them. Nobody wants to bother. Until it’s too late.

4 Likes

All right - ASCII art!

Here’s the distribution of number of approvals per ballot.

  • number of approvals
  • number of ballots giving that many approvals
  • and as a percentage of all ballots
  • happy stars, a number of which proportional to that

Total number of ballots is 683.

 0  14  2.0% ^^^^
 1  57  8.3% ^^^^^^^^^^^^^^^^
 2  63  9.2% ^^^^^^^^^^^^^^^^^^
 3  91 13.3% ^^^^^^^^^^^^^^^^^^^^^^^^^^
 4 152 22.3% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 5  91 13.3% ^^^^^^^^^^^^^^^^^^^^^^^^^^
 6  80 11.7% ^^^^^^^^^^^^^^^^^^^^^^^
 7  46  6.7% ^^^^^^^^^^^^^
 8  26  3.8% ^^^^^^^
 9  16  2.3% ^^^^
10  14  2.0% ^^^^
11   5  0.7% ^
12   5  0.7% ^
13  23  3.4% ^^^^^^

The spike at 4 is remarkable. That was the number of open seats. I would really like to see another breakdown by cultural background of voter, but that’s not available (nothing about voter identities is revealed).

What it suggests is that too many people still fear “wasting their vote”, which is common among people conditioned by a lifetime of “pick only one!”, “settle for the lesser of evils” plurality voting. It tends then to become a contest not among people who are actually most favored, but among those voters think can win.

But there’s no such a thing as a wasted vote under no-limits Approval. Approving of your true favorite can’t hurt the chances of the “major party” candidate you’re willing to settle for.

And unlike as in, say, so-called RCV, there is only one “round”, so your support remains visible in the final reported results. Under RCV, your true minority favorite(s) are likely to be thrown away in the first round, never to be seen or mentioned again.

Over time, that can matter a lot to building support for persistent “minor” candidates.

The # of “bullet ballots” (only 1 approval) is remarkably low, which I’ll take as evidence that educational efforts have been largely (although not entirely) successful at getting across that Approval is not at all plurality voting.

The #-of-approval counts other than 1 and 4 aren’t particularly noteworthy; different people make different tradeoffs, and Approval doesn’t structurally encourage any particular voting style.

STAR voting is structurally more devious, with incentives to give more-than-less honest relative rankings to all candidates.

7 Likes

To prepare for future results, a brief account of PR (Proportional Representation) schemes for Approval voting.

There’s no end of ways to approach this, but most have this in common: start with ballots all having the same weight. If a given candidate wins a seat, reduce the weight of all ballots that approved of that candidate. As things go on, clusters of voters who all tend to vote for mostly the same cluster of candidates see their ballots lose weight as their candidates win, and their candidates have a harder and harder time winning more seats There’s no attempt to identify clusters, of voters or candidates. It all works “by magic”, quite beautifully..

There are 4 schemes I already have code for (although I’m still searching for it :rofl:): JS, WS, JP, WP.

“J” or “W” refers to “Jefferson” or “Webster”. Yup! The US President and the dictionary dude. They wrestled with PR schemes inspired by the requirement that the US House of Representatives give each state a number of representatives more-or-less proportional to each state’s population.

They differ in how quickly ballots lose weight. The quicker, the better the chances for ever-smaller minority views to win seats.

“S” or “P” is subtler. “S” is short for sequential. The description above relied on an intuitive view of picking winners one at a time, reweighting ballots between winners. Which is exactly what the “S” versions do. “P” is short for parallel, although there’s no dirt-simple way to explain it. There is only one step, which optimizes an objective function that effectively does all the eventual reweightings of the S versions “at once”.

The P version is much more computationally expensive than the S version. but on computers that hardly matters for one-shot elections. Only S versions were used in the “by hand” days. Papers and studies found that P versions generally give better results. so they’re generally preferred

It’s possible to contrive cases where no two of the 4 methods deliver the same set of winners, so there’s no more a “slam dunk” to be found here than in any other area of election theory. It bristles with paradoxes and impossibility theorems.

There’s also an infinite family of reweighting schemes between (or going beyond) J and W, in how quickly ballots lose weight. They’re trivial variations on the code I already have, but haven’t attracted much interest. J and W do seem to be “natural sweet spots”.

At the extremes, if you never reduce weights, you’re left with plain Approval. If you instead throw out a ballot as soon as one of its approvals wins, a candidate can easily win despite having close to no support.

5 Likes

Here’s a surprise! Looks like PR designed for approval could have changed the results of the 2025 election, although slightly so. It will take considerable time to write it up in a coherent way. Let me get a preliminary out of the way for now:

The weight of a ballot that’s already picked nwin winners is

1 / (1 + nwin * h)

where h defines how quickly weights decrease. Regardless of h, at the start nwon is 0 for all ballots, so all ballots have equal weight. So the first winner picked is the same as for plain Approval, regardless of h.

h=0 is plain Approval. h=1 is Jefferson, and h=2 Webster. So under Jefferson weights degrade like so:

1, 1/2, 1/3, 1/4, ...

and under Webster

1, 1/3, 1/5, 1/7, ...

Anyway, Jefferson is enough to swap the order in which our 4th and 5th place candidates finished, so would have elected our #5 instead of our #4. They had very close to the same number of approvals (343 vs 328) to begin with, so “the math” detecting any hint of “factions” could sway that.

On the other end, even setting h=10**9 couldn’t manage to lift our 12th-place finisher (by far the most polarizing) to higher than 8th place. Jefferson left them at 12th place, but Webster boosted them to 11th.

3 Likes

And this remains so under all 4 PR methods I named (JS, JP, WS, WP). I won’t spell out what the .P methods do, apart from saying that they construct all possible

math.comb(number_of_candidates, number_of_open_seats)

final results and score each “as if” their winners had been discovered one at a time.

Harder to explain, but easier to reason about, and less prone to “mysterious results”.

When all 4 methods agree, though, there’s some “faction” in play (conscious or not), although in the case at hand it’s minor. Reducing h to 3/4 is enough to make the change vanish.

2 Likes

Note: I refer to cadidates here only by number, an integer in 1 through 13. Their names aren’t important to analysis, and I don’t want to unintentionally create needless drama. The little numbers I use are the ones OpaVote uses in its raw-ballot download. Getting that yourself is one way to connect them to names, if you care.

Bottom lines here: JP and WP both produce the same set of winners: [1, 6, 8, 11]. There is no ordering among them - the P methods score a set of potential winners as a whole. The set that actually won was {1, 8, 10, 11}. Candidate 10 came in 4th place, and candidate 6 in 5th.

The sequential methods deliver results consistent with that, with other minor changes in ranking. Here are the orders in which they pick winners. Columns are for plain approval, JS, and WS:

h=0 h=1 h=2
--- --- ---
  1   1   1
 11  11  11
  8   8   8
 10   6   6
  6  10  12
 12  12  10
  4   4   4
  2   2   2
  9   9   3
  3   3   9
 13  13   7
  7   7  13
  5   5   5
1 Like

FYI, this is the paper that most influenced me back when I wrote this code (which, surprisingly enough, still works :wink:)

Multiwinner Approval Voting:An Apportionment Approach
Steven J. Brams, D. Marc Kilgour

2 Likes

Noting that people with emotional and/or ideological “egalitarian” attachment to the phrase “proportional representation” are often surprised by its implications in practice. It’s the entire point of PR schemes to amplify the voices of minorities by suppressing majority voices. You don’t get to elevate only the minorities you approve of.

Consider: in this election 227 ballots approved of all of our top 3 vote-getters. You can’t get much more “majority view” than that :wink:. But under Jefferson, the rest of their approvals only carry 1/4th of their original weight then, and under Webster only 1/7th, as if to say “hang on there - you people already got a whole lot of what you wanted, let someone else have a chance now”. It’s working as intended.

I’m not in tune enough with current in-group/out-group social maneuvering in the Python world to make a credible guess as to “why” PR switched the order of our 4th and 5rth place candidates. But that the higher h got, the more pronounced the effect got, is unlikely to be purely accidental. Group attachments don’t have be formal, or even conscious, for PR schemes to pick up on their consequences. Indeed, consequences are all it can see.

2 Likes

Which appears to go some way toward explaining what the PR methods “saw” here. There were only 9 ballots that approved of our #4 finisher that approved of none of the top 3.

But there were 17 ballots that approved of our #5 finisher that approved of none of the top 3.

So when it came to picking that fourth PR winner, our #5 finisher enjoyed 17 approvals still at full strength, but our #4 finisher only 9, #4 appeared to be part of a cluster of candidates that had already gotten its “fair share” of representation. - #5 appeared to be more of an “outsider”.

Anyway, we can no longer claim that PR would make no difference to PSF Board elections. It would have changed the outcome of this one a bit. Whether for good or ill is up to you to decide.

I don’t think it’s serious enough yet to force changes regardless. But it’s something to keep an eye on. Overt biases aren’t the only kind, and unchecked biases tend to spread.

If there is will to change, note this red flag: gamers gonna game, and if the rules change, so does voter behavior. My analysis here was conducted on ballots cast knowing plain old Approval would be used to score. If it was known that JS (or any other specific PR scheme) would be used, some voters just will try to game it. For example, if you believe that some candidate you really like is viable, but not super-popular, withhold approving of any of the super-popular ones (even if you like them too), to keep your ballot at full strength as long as possible.

What about STAR? It’s harder to game that system (there are two stages, carefully designed to use methods so fundamentally different that games you might try to play in one stage will likely backfire on you in the other), but it’s still subject to “tyranny of the majority” outcomes (in a polarized electorate, a slim majority winning all open seats). There’s an official PR version of STAR too, but it’s much more complicated.

3 Likes