Saturday, October 26, 2024

NDP still on track to flip Surrey-Guildford — but not Kelowna Centre

The NDP is still on track to flip Surrey-Guildford from Tory blue to NDP orange. But the NDP now seems unlikely to overtake the Conservatives in Kelowna Centre.

That would give the NDP a technical majority of 47 seats (up from 46) but not the 48 seats they'd need to appoint a speaker and confidently govern without the two Greens.



As of Election BC's 4pm update on Oct. 26, the Conservative margin of victory in Surrey-Guildford has narrowed just slightly from 14 votes to 12. But the NDP is winning the late-counted votes by a large enough margin (22 points) they should pull ahead.

In contrast, while the NDP is narrowing the gap in Kelowna Centre, they're not narrowing it by enough to make it likely they'll take the seat. With 72% of the remaining votes now counted, the NDP is winning the late-counted votes by a margin of 12.8 percentage points — when they need to be winning those votes by 18.2 points.

Based on the votes counted so far, an NDP flip in Surrey-Guildford looks very likely — and a flip anywhere else quite unlikely. But there is still one big unknown as we enter the final stretch of vote counting: Absentee ballots.

The Google Spreadsheet I've created indicates whether a seat is on track to flip or not. But implicit in that is an assumption that the late votes remaining to be counted will look like the late votes already counted. And they may not.

According to Elections BC, mail-in ballots will be counted on Saturday and Sunday but absentee ballots won't be counted in any riding until Monday.

Elections BC defines to the two buckets of vote like so:

Category 1 (Mail-in Ballots and Assisted Ballots): "Includes assisted telephone votes, mail-in ballots received by mail after the close of advance voting, and mail-in ballots returned to a Service BC location. Counted at a secure Elections BC facility in Victoria."

Category 2 (Special and Absentee Ballots): "Includes special ballots, absentee ballots cast at partial-tech and non-tech voting places, and mail-in ballots dropped off at a district electoral office or voting place. Counted at district electoral offices where received."

Making things even more brain-bending, neither of these categories is anything like it has been in previous elections.

As discussed in a previous post, Elections BC used to wait to count all mail-in ballots until after election night. Now mail-in ballots received before the last day of advance voting are counted early and included in the election-night count.

But absentee votes are also a lot different this year. In past elections, when someone voted outside their own district, their ballot was held for counting later, because Elections BC had to make sure the person hadn't already voted. Now, with online voter rolls, most absentee ballots can be counted on election night.

That leaves a small number of absentee ballots in places like "partial-tech and non-tech voting places" — in short, remote locations with spotty Internet service, where the election workers weren't able to check someone off the master online voters list. As I understand it, there are also 'special' voting places like hospitals that could be included in the votes counted on Monday.

We know from past elections that absentee ballots usually favour the NDP. For example, university students often vote outside of their own district and they tend to be left-leaning. But someone who voted absentee at UBC probably had their vote counted on election night. Will this year's absentee ballots break the same way?

Are people who travel to remote areas of B.C. — which could include people like resource workers — more likely to vote NDP or Conservative? What about those in hospital or a long-term care facility?

If I had to guess, I would imagine that absentee ballots will probably skew NDP — but perhaps not by the huge margins we've seen in some of the mail-in ballots.

That said, with only 12 votes separating the NDP and Conservatives in Surrey-Guildford, the NDP wouldn't have to win the absentee ballots by much to close the distance.

Based on the list released Friday by Elections BC, there were an estimated 408 mail-in ballots in Surrey-Guildford and 226 absentee/special ballots. To close their 12-vote deficit, that would mean the NDP would need to win the absentee/special ballots in that riding by a margin of 5.8 percentage points. That's nothing compared to the 22-point margin they won this year's late mail-in ballots by. But it's more than their usual advantage in absentee ballots in past elections.

Monday should be interesting!


(Click on a chart to make it larger.)


NDP on track to flip Surrey-Guildford, maybe Kelowna Centre too

Surrey-Guildford looks on track to flip from Conservative to NDP based on Election BC's first batch of final count results.

And the NDP is doing so well in the late-counted ballots that Kelowna Centre might be in play, too — which would give the NDP just enough seats for a majority and speaker (48) without the support of the Greens.

In contrast, the Conservatives look unlikely to take any seats from the NDP. In the three seats with the narrowest NDP wins, the NDP has widened their margin in all of them.



The final column in the Google Spreadsheet is the most important one to pay attention to. In Surrey-Guildford, with more than 60% of the uncounted votes now counted, the NDP is winning the late counted votes by a margin of 23.2 percent points, well above the 16.4 point margin they need to win the seat. Even though, at the moment, they're still technically behind the Conservatives by 14 votes: 8,810 to 8,796.

There are virtually no new results from either Kelowna Centre or Courtenay-Comox in this first update. But if the NDP did as well in Kelowna Centre as it did in Surrey-Guildford (or as it's doing in Surrey City Centre or Juan de Fuca - Malaht), they could take that seat too.

Here's a reminder of how election night votes compared to mail-in ballots in every general election since 2005.

Somewhat surprisingly, the NDP's gains so far in late-counted votes  are so substantial they might end up being larger than the pandemic election of 2020, which was seen as an outlier in terms of how many people voted by mail and how partisan the skew of mail-in voters was.

For example, in 2020 the NDP increased their margins over the BC Liberals by about 13 percentage points, from a 10-point lead in the election-night count (45%-35%) to a 23-points lead in the mail-in ballots (53%=30%).

Of the four close ridings shown above, the average NDP gain is more like 20 percentage points.

We may never know why the NDP did so well in late-counted votes in 2024. But it may give credence to two theories I floated earlier:
  • While 2020 was an unusual year for mail-in voting, it may have sold a lot of B.C. voters on the convenience of voting by mail. And because so many mail-in voters in 2020 were NDP voters, the cohort of mail-in voters may now have a partisan lean.
  • Because at least half of mail-in ballots were counted early, and included in the election night count, what's being counted now are the votes of procrastinators — precisely those mail-in voters who voted too late to be counted already. Maybe procrastinators (or those who are undecided until the very end) are more likely to be left-leaning.
It will be interesting to see if either or both of these trends continue in future elections. If they do, we might have to start expecting a little left-leaning shift in the election results once the final count is in.

Friday, October 25, 2024

Update: In preparation for this weekend's final count, Elections BC releases riding-specific numbers

My blog post earlier this week on whether it was likely B.C.'s election results could change after the final count got a fair bit of traction on Twitter and I did interviews about it this week with CKNW, Global TV and The Globe and Mail.

The analysis I did in that blog post was was based on a rough estimate that there were only about 500-700 votes left to count in each riding. This was based on Election BC's estimate of total uncounted votes (originally 49,000, then updated to 65,000).

But of course, some ridings were always going to have more uncounted votes than others — and if one of the closest ridings had a lot more uncounted votes than average, that would increase the chances of an upset.

Late Friday afternoon, Elections BC released data on how many uncounted votes there are estimated to be in each riding. And... it doesn't change things that much. That's because while there are some ridings that have a lot more uncounted votes than others, the closest ridings are all pretty close to the average of 700 votes, if not lower.

I've made a Google Spreadsheet detailing what's going on in the closest ridings. But here are the basics:


As you can see from the estimates in the final column, for the NDP to pick up any of those three Conservative seats, they'd have to win the uncounted votes by a hefty margin of at least 16 points. In Surrey-Guildford, that would be the equivalent of the NDP winning all the uncounted votes by a margin of 55% to 39%, in a riding where on election night both parties basically got 47%.  Not impossible, but pretty darn unlikely.

The 3.5% gap the Conservatives would need to snatch Juan de Fuca - Malahat is a lot less. But that would mean bucking a two decade trend in which the NDP did better in the late-counted votes and the right-of-centre party did worse. (Some folks have told me on Twitter there actually is some polling data suggesting mail-in voters might be more Conservative this time around, but I haven't had any luck tracking down an original source document for that.)

One other interesting thing, which I mentioned on Twitter but forgot to include in my last blog post: One of the really big unknowns about the final count this time is how procrastinators vote. In past elections, all mail-in ballots were held until the final count. But this time, any mail-in ballots that came in before the last day of advance voting were counted ahead of time and included in the election-night count. So the mail-in ballots left to count are, by definition, from those people who left voting until the last few days — either because they didn't get around to it, or they were undecided. It's not hard to imagine that those types of voters could be different than those mail-in voters who got their votes in early. 

If folks are curious, the riding with the most uncounted votes was Victoria-Beacon Hill (where Green Party leader Sonia Furstenau lost) where there are 1,869 votes remaining to be counted. There are the least uncounted votes in North Coast-Haida Gwaii (just 183).

I've exported the data from Elections BC's PDF to a tab on the Google Spreadsheet if anyone wants to take a closer look at the data.

Depending on what else I get up to on the weekend, I may update the Google Spreadsheet to pull in live recount data for the closest ridings, as I did back in 2017. But no promises.

UPDATE, 9pm: Since Juan de Fuca - Malahat (JFM) is the closest riding by far, people are understandably curious about how the late counted ballots compared to election-night votes in that specific riding in past elections. That's tricky, because Juan de Fuca - Malahat is a new riding for 2024, but we can look at the three ridings that each had part of their boundaries used to create JFM.

If we look at all ballots counted late, the NDP increased their share in all ridings except Langford - Juan de Fuca in 2017, and the Liberal vote share went down each time.



(Click on a chart to see it bigger.)

Things look a bit worse for the NDP if you just look at the mail-in ballots (which is the majority of the late-counted votes this time):


If you're a Conservative supporter, you might take comfort from the fact that in 2017, the Liberal share of the vote went up in all three ridings and the NDP went down in two of the three.

But I think it's important to look at the actual number of mail-in ballots in 2017. In Langford-Juan de Fuca the NDP got 53 and the Liberals got 30. In Cowichan Valley, the NDP got 28 votes and the Liberals got 29. These are very small numbers. Even a handful more votes for the NDP would have produced very different vote shares. If the NDP got just 6 (6!) more mail-in votes in Cowichan Valley in 2017, their vote share would have gone up compared to their election-night results. When you get down to the riding level results, there just isn't much the data can tell us. There were too many mail-in ballots in 2020 and too few in 2017 to say anything meaningful about what might happen this time.

P.S. The news sites I've been tracking seem to be a bit wobbly on whether the lead for the NDP in Juan de Fuca - Malahat is 20 votes or 23 votes. And some other results seem to change by one or two votes either way, sometimes on the same site. For all the ridings, including Juan de Fuca-Malahat, the number I'm using are what Election BC's preliminary results page said at the time I pressed publish on this blog post. For Juan de Fuca-Malahat, that's 23 votes.



Tuesday, October 22, 2024

By the Numbers: What are the chances B.C.'s election results could change after the final count?

If you don't know me, I was a journalist at The Vancouver Sun for 17 years, including many years as a data journalist. I now teach journalism and data visualization at KPU. I've got a lot of experience number crunching election data. But one thing I don't have any more is an editor. So if you notice a mistake in what I've written here, or something isn't clear, please reach out at cskeltondata@gmail.com

As folks in B.C. woke up on Sunday morning, with all the election-night votes counted, the BC NDP had 46 seats, the Conservatives had 45 and the Greens had 2.



A party needs 47 seats to have a majority and, in practice, 48 since the governing party usually needs to appoint the Speaker. So as the results sit right now, the BC NDP could only govern if they had the support of the Greens. The Greens seem unlikely to support the Conservatives and, even if they did, that would only give those two parties a combined 47 seats — not enough to govern if they also needed to appoint a speaker.

But these are only the preliminary results. The final count doesn't take place until this coming weekend. And as Elections BC notes, there are about 49,000 votes still left to count. That's about 500 votes on average in each riding, which is a lot more than the margin of victory in some of the closest races.

(UPDATE: On Oct. 24, Elections BC provided an updated estimate that 65,000 votes remain to be counted. That works out to more like 700 votes on average in each riding rather than 500. Elections BC said the actual number of uncounted votes in each riding will be released on Friday, Oct. 25.)

In particular, the NDP's margin of victory in Juan de Fuca-Malahat is just 20 votes and in Surrey Centre it's just 95 votes. Similarly, the Conservatives are leading in Surey-Guildford by only 103 votes and in Kelowna Centre by just 149 votes. (Note: Some of these results have shifted a little since election night. The chart below is from CBC News)



(Pro-tip: To make any chart or image in this post larger, just click on it.)

Given how close the results are, even one or two seats changing hands could have a huge impact on who governs B.C. — of if we head into another election.

If the NDP picked up just two of the Conservative's seats, they wouldn't need the support of the Greens to govern. And if the Conservatives picked up two of the NDP's, they'd have a majority (though they may not be able to govern since they'd have to appoint a speaker).

If this all sounds familiar, it's because we were in a very similar situation seven years ago. In 2017, no party had a majority on election night: the BC Liberals had 43 seats, the BC NDP had 41 and the Greens had 3. But the NDP held one of those ridings, Courtenay-Comox, by just 9 votes. If the Liberals were able to flip that seats in the final count, they would have (just barely) held onto their majority.

As it happened, though, when the final count was completed, the NDP's lead actually grew to 189 votes.

And it grew for a simple reason: The NDP did better in the ballots that were counted late than those counted on election night.


(I've uploaded all the charts I created in Tableau here, where you can also download the workbook and play around with the data yourself if you know how to use Tableau Public. All data for this post comes from this great data file of election results going back to 2005.)

The Greens also did better on ballots counted later. The Conservatives, then a pretty marginal force, saw their vote share go down from 7.6% to 6.8%.

As it turns out, the NDP's performance in the final count shouldn't have come as that much of a surprise. Pretty much in every election going back to 2005, the NDP did better in the ballots counted late — absentee ballots and mail-in ballots — than those counted on election night. The Greens have also usually done better, while the BC Liberals, the main right-of-centre party in B.C. until this year, have done worse.



(I'd take the 2020 numbers — where the NDP did a lot better in the final count — with a grain of salt. More than 30% of people voted by mail in 2020 due to the pandemic and how people felt about the risk of voting in person may well have correlated to which party they voted for. More on this later in the post.)

The NDP bump in the final count is also pretty consistent. In 2017, the NDP did better in votes counted late than those on election night count in 73 of 87 ridings — sometimes by just a bit, sometimes by as much as 10 percentage points. In only 14 ridings was their share of the vote lower in the final count than on election night. And things were even worse for the BC Liberals. There were only four ridings — North Coast, Peace River South, Powell River-Sunshine Coast and West Vancouver-Sea To Sky — where the Liberals' vote share was higher in the final count than on election night. And those Liberal gains were marginal. In all other ridings, the BC Liberals did worse in the final count.  (Yes, that means there were some ridings where both the NDP and the Liberals did worse in the final count than on election night. That's usually because some third party, like the Greens, did better.)

Why does the NDP so consistently improve on its vote share in the final count? I've heard a few possible explanations. One is that a fair number of absentee voters — those voting in a district other than their own — are university students. Unionized workers with irregular schedules, like nurses, might also be more likely to vote outside of their district. And those who like to travel could be more likely to ask for a mail-in ballot. It's not hard to imagine how some of these groups might be more left-leaning and so be more likely to vote NDP.

If you're sitting in NDP HQ, you might be looking at these numbers and feel optimistic that, when the final count is in, the NDP could pick off a couple more seats in places like Surrey-Guildford and Kelowna Centre, where the Conservative lead is less than 150 votes. After all, in 2017 the NDP gained 180 extra votes in the final count in Courtenay-Comox. How hard could it be to pull that off again?

Pretty hard, actually.

The main reason for that is there are a lot fewer votes left to count this time than there were in previous elections. Even putting 2020's crazy pandemic numbers aside, in both 2013 and 2017, there were more than 170,000 votes left to be counted during the final count. In contrast, this time there are only about 49,000.




As Elections BC spokesman Andrew Watson has explained, in previous elections, about 10% of all votes weren't counted until the final count. In 2024, it's only about 2%.

This is mainly due to the new technology that Elections BC adopted in this year's election. In previous elections, if someone voted absentee in a district other than their own, their vote couldn't be counted until Elections BC manually checked that the person hadn't voted in their home district. This meant their vote wasn't counted until the final count. But this year, Elections BC was able to check the master list of voters online from most polling stations, allowing them to count almost all absentee votes on election night.

In a brief phone chat, Andrew Watson also told me that, in the past, all mail-in ballots were held until the final count. But this year all mail-in ballots that arrived before the last day of advance voting were included in the election-night results.

With so few votes left to count, overcoming even a small gap in the election-night count would require a big win in those few remaining votes.

Let's take Surrey-Guildford as an example — perhaps the NDP's best shot at grabbing another seat, given the deficit there is just 103 votes. Each party won about 47% of the vote in that riding on election night.


If there are 500 votes left to count in Surrey-Guildford (it could be more, it could be less), that means the NDP would need to get about 57% of the remaining votes and the Conservatives only 37% for the NDP to pick up 104 more votes (287 vs. 183).  That's a tall order: It would require the NDP to do 10 percentage points better in the final count, and the Conservatives 10 percentage points worse than they did on an election night. That's a lot bigger gap than the NDP's usual advantage in the final count. There have been some ridings where the swing in the final count is that big, but they're pretty rare.

(UPDATE: Now that Elections BC says there are more like 65,000 votes remaining to be counted, about 700 per riding, the math changes a bit. In Surrey-Guildford, that would mean the NDP would only need about 54% of the remaining votes to the Conservatives 40% to pick up another 104 votes (381 vs. 277). That's 7 percentage points better for the NDP and 7 points worse for the Conservatives. Or, put another way, just a 14-point gap rather than a 20-point one. That's still significantly higher than the average shift we've seen in final count. But it gets more in the realm of the possible.)

The Conservatives have a smaller hurdle to clear to pick up an extra seat: Just 20 votes in Juan de Fuca - Malahat. But given that the right-of-centre BC Liberals consistently underperformed in the final vote count in past elections, it's reasonable to expect the Conservatives will, too.

I think the most likely outcome is that the NDP will narrow the gap in some of these close ridings but that none will change hands after the final count is complete.

But there is one (small) glimmer of hope for the NDP.

Given the new technology Elections BC used in 2024, there are likely going to be very few absentee ballots in the final vote count. Indeed, Elections BC says the only ones will basically be from what it calls "non-technology voting places": voting places so remote they weren't able to check the master list of voters online on election night.

That means almost all of those 49,000 uncounted ballots are mail-in ballots that arrived in the last few days — after the advance voting closed but before 8 p.m. on Oct. 19. 

Interestingly, that suggests that while there are a lot fewer mail-in ballots in 2024 than in the 2020 pandemic election, there are considerably more mail-in ballots than there were in 2013 or 2017, when there were only about 6,000. Indeed, in an email, Election BC's Andrew Watson told me the agency received roughly 112,000 requests for mail ballots in 2024.




And that 49,000 figure doesn't even include those mail-in ballots that came in before the last day of advance voting and so were included in the election-night count.

Why such a huge increase in mail-in ballots this year? It's hard to say. But I suspect at least some voters who voted by mail during the 2020 pandemic election found it more convenient than they expected and so decided to vote the same way this time. I know at least one relative who fits that description.

If that's the case, that could be good news for the NDP. Here's a comparison of election night vs. mail-in ballots over the past few elections:




The NDP did a lot better in mail-in ballots in 2020 than any previous election — 53%, compared to just 45% of votes on election night. In contrast, the BC Liberals only won 30% of the mail-in ballots compared to 35% of those counted on election night. As I mentioned above, this is probably because whether people were willing to vote in-person or not in 2020 may have also correlated with which party they were likely to support.

Those particular pandemic circumstances no longer exist in 2024, obviously.

But it is possible that the 2020 election might have made some voters more comfortable with voting by mail — behaviour they then carried over to how they decided to vote in the 2024 election. And there were significantly more NDP voters who had that mail-in voting experience in 2020 than supporters of other parties.

Could that mean mail-in voters in 2024 are more likely to look like the heavily NDP mail-in voters of 2020 than those in 2017 or 2013? It's possible. Would there be enough more of them to close the gap in places like Surrey-Guildford and Kelowna Centre? I'm doubtful. But if you're an NDP supporter, it's the one place you might look for hope of an upset.


P.S. One thing this post doesn't address is the recounts that will take place in at least a couple of ridings. One reason for that is I that I have trouble believing a recount could change the result. Recounts are usually done on the assumption that there was some sort of error in the original count — and a slower, more careful recount might catch that mistake. But the counts this year were done by machine. The machines might not be perfect but I have to imagine that Elections BC did a lot of testing on them (or reviewed the testing of others) before adopting them. My gut says those machines are probably more accurate than pretty much any hand count. Now, weirdly, the recounts by law have to be hand counts, not just a do-over of the machine count. This makes me think if the results do change, it's actually more likely it will because the recount was less accurate than the election-night machine count. How that would all play out is an open question. But my bottom line assumption here is that the hand recounts will come up with basically the same result in ridings as the election-night machine counts.



Sunday, May 21, 2023

Using ChatGPT for data analysis and visualization



I've been a bit obsessed with ChatGPT ever since it launched in late 2022.

I got even more excited when my friend Ben Jones posted a video of how ChatGPT's "Code Interpreter" plugin could do data analysis and visualization.

I signed up for ChatGPT's paid Plus version in the hopes of getting access to the Code Interpreter plugin myself. That hasn't happened yet. But then Noteable launched their own plugin, which every ChatGPT Plus user has access to, and it seemed to have much of the same functionality as the Code Interpreter.

I've been playing with the Noteable plugin pretty non-stop ever since. Most of my musings have been over on Twitter/X and Threads (I'm increasingly annoyed at Twitter's new leadership, and hope to leave it eventually, but for now I'm posting in both places). But I've also started making some YouTube videos walking through how the tool works.

For those who have abandoned Twitter or missed my tweets, I thought I'd collect my various ChatGPT/Noteable videos and threads here. I've embedded the first tweet in each thread. You can click on "Read the full conversation on Twitter" to have the complete thread for each open in a separate window.

As I do more Twitter threads and videos on ChatGPT and Noteable, I'll add them here.

VIDEOS:












TWITTER THREADS:











Tuesday, December 3, 2019

Tableau Training in Vancouver this February



My next two-day public Tableau training workshop will be held on Tuesday, Feb. 18th and Wednesday, Feb. 19th at SFU Harbour Centre. You can buy tickets here or by clicking the button below:



Here are some testimonials from people who've attended my earlier training sessions.

If you can't make this workshop but would like to be alerted when the next one is scheduled, just add your name here.

If you have several people at your organization who need training in Tableau, I'm also available for onsite training.

Friday, November 29, 2019

Video: "How to Teach Data Viz to Skeptics" by Chad Skelton

I had the pleasure of speaking at VisInPractice, part of the IEEE VIS 2019 conference in Vancouver this fall on the topic of how to teach data visualization to students who aren't that interested in data visualization.

The video of my talk is below. You can check out all the great VisInPractice talks here.


VIS in Practice 2019: How to Teach Data Viz to Skeptics from VGTCommunity on Vimeo.