Methodology
How The Northern Vibe Project works: plain English first, technical depth below.
What Northern Vibe does
Northern Vibe projects the seat outcome of a Canadian federal election as of today. It combines national and regional polling averages with riding-level demographic baselines and economic indicator trends, then runs 10,000 simulated elections to produce a probability distribution over seat counts rather than a single point estimate. (The daily pre-computed run uses 10,000 simulations; live scenario runs on the map use 2,000.) The result is a range of plausible outcomes and a probability for each scenario (majority, minority, or opposition win), not a prediction that any one outcome will definitely happen.
Inputs
Polling aggregate. National and regional vote-intention polls going back to 2004, with a 21-day rolling window and exponential recency decay (14-day half-life). Each poll is house-effect-corrected before entering the average (see below).
Economic indicators. Real GDP growth, unemployment rate, and CPI from Statistics Canada. A Bayesian trajectory model (PyMC) translates these, alongside a media sentiment covariate (see Accountability below), into a medium-term support prior that grounds the short-term poll average.
2025 riding baselines. Certified GE45 results at the riding level provide the starting point for the simulation. Demographic covariates from the 2021 Statistics Canada Census (income, age, housing tenure, immigration share) shift the swing away from the national average in each riding.
Historical baseline
Every riding starts with its historical voting pattern (how people voted in 2021 and 2025), adjusted for who actually lives there. A riding full of renters in their twenties and thirties behaves differently than a rural riding with a large retiree population.
Polling & vote transfer
Polling data provides the national and regional mood. If the Liberals drop three points nationally, the model distributes that drop across ridings using empirically calibrated vote-transfer matrices: votes leaving one party flow to other parties in the proportions observed between the 2021 and 2025 election transitions, rather than being distributed uniformly. The simulation also applies structural regional corrections that national swing alone can't capture.
Why vote share doesn't predict seats
National vote share can move in the opposite direction from seat count. A party can lose two points of national support and still gain seats, or gain a point and lose seats. This isn't a quirk of the model. It reflects a structural feature of Canadian federal elections under first-past-the-post, and it is one of the most common sources of confusion when comparing two forecast scenarios.
Vote share is national; seats are local. A party can lose support concentrated in regions where it already wins every seat (or already loses every seat), with no effect on the seat count. Recent forecasts have shown the Liberals losing close to two points of national support while still gaining a small number of seats, because most of the drop occurred in Alberta and rural Saskatchewan, where the LPC seat count is near zero anyway.
Three-way races are sensitive to second-place support. When the NDP gains a point of support, those voters don't come uniformly from the Liberals. The vote-transfer matrix estimates that NDP gains pull disproportionately from CPC-leaning urban and suburban voters in Ontario. That cross-pressure can tighten LPC versus CPC marginals even when LPC's own vote share is falling.
Regional adjustments matter. The simulation applies calibrated regional intercepts on top of national swing: an Alberta CPC floor of 45%, a BC NDP baseline intercept, and an Atlantic uncertainty multiplier. These encode patterns visible in past elections that pure uniform swing misses.
The practical implication is that you cannot infer seat changes from vote share changes alone, and a forecast that does so will mislead. The seat projection on this site is computed riding by riding using local fundamentals, demographic transitions, and the vote-transfer matrix, then aggregated to the national total.
Monte Carlo simulation
To turn all of that into seat counts, the model runs 2,000 simulated elections per live scenario (the daily pre-computed run uses 10,000). Each simulation adds correlated randomness (ridings in the same province move together to reflect the province-level swings that happen on election night), then counts who wins each riding. The result is a probability distribution: not just "LPC wins 170 seats" but "LPC wins between 155 and 185 seats 80% of the time."
Scenario Builder
The Scenario Builder lets you apply your own assumptions on top of all of this. Shift the NDP up five points or collapse Liberal support nationwide. The simulation reruns immediately and the map updates. Click any riding to see its full probability breakdown, previous election results, and riding profile.
The results table reports five statistics for each party. Mean is the average seat count across all 2,000 simulated elections. p10 and p90 are the 10th and 90th percentiles: 80% of simulations produced a result within that range. Majority % is the share of simulations in which that party won 172 or more seats. Minority % is the share in which they won the most seats but fell short of a majority.
Volatility tiers
Volatility tiers appear in two places and mean slightly different things. On individual riding pages, the tier is based on the certified April 2025 election margin between first- and second-place finishers: TOSSUP (<5 pp), SWING (5–10 pp), LEAN (10–20 pp), SAFE (≥20 pp). On the map riding drawer, the tier reflects the current simulation: it is derived from the leading party's win probability across 2,000 simulated elections under the active scenario. This means the drawer tier updates as you move scenario sliders, giving a live read on how competitive each riding is under your assumptions rather than how it finished on election night.
Polling aggregator
The aggregate is a rolling 21-day weighted average: polls conducted closer to today receive more weight than older ones, following an exponential decay curve with a 14-day half-life that prioritises recency while still incorporating the signal in earlier surveys. The aggregator also applies a house effect correction: each polling firm's historical tendency to over- or under-estimate each party's support is estimated from past elections and subtracted before combining results. The 95% confidence interval shown in the polls table is derived from the spread of polls within the window. The aggregate refreshes automatically as new polls are published.
British Columbia runs on shorter numbers. BC is polled far less often than the country, and a fixed election date means the campaign lasts about a month. So the provincial average reacts faster than the federal one: a poll loses half its weight after seven days rather than fourteen, and we look back 28 days instead of 21 so there is still enough to average.
Quelques règles empêchent un seul sondeur d’orienter la moyenne. Chaque firme compte une seule fois, par son sondage le plus récent, et les sondages plus gros et plus frais pèsent davantage. Certaines firmes présentent OneBC et CentreBC à part, d’autres les rangent dans les « Autres » : nous faisons donc la moyenne des trois ensemble, puis nous les répartissons à l’aide des sondages qui les distinguent. Quand les sondages se font rares et que moins de trois firmes ont publié au cours des quatre dernières semaines, nous remontons assez loin pour en inclure trois. Nous corrigeons aussi le bilan de chaque firme aux élections de 2017, 2020 et 2024, en faisant moins confiance à cette correction quand elle repose sur moins d’élections. Pour les conservateurs, nous n’utilisons que 2024 : en 2020, c’était un parti à 1,9 %, pas l’opposition officielle.
De combien les sondages pourraient-ils se tromper? Nous supposons que le chiffre provincial de chaque parti peut s’écarter d’environ 3,5 points dans un sens ou dans l’autre (un écart-type). Les sondages ont en fait fait mieux lors des trois dernières élections en C.-B., avec un écart d’environ 1,7 point pour le NPD et 0,9 pour l’opposition officielle, mais trois élections, c’est peu, alors nous gardons délibérément une marge. Les erreurs du NPD et des conservateurs varient indépendamment, ce qui laisse environ cinq points d’incertitude sur l’écart entre eux. L’ampleur des variations d’un parti dans une circonscription dépend aussi de sa taille sur place : un parti sans appuis quelque part ne peut pas y récolter de votes fantômes, et les petits partis connaissent de petites variations. Surrey, Delta et Langley bougent ensemble comme une région à part, plutôt qu’avec le reste du Grand Vancouver, qui regrouperait sinon près de la moitié des sièges en un seul bloc.
Deux choix de départ à préciser. Les indépendants de 2024, dont plusieurs anciens députés de BC United, sont laissés de côté, et leurs votes sont répartis entre les partis selon le vote de chaque circonscription. Et là où les verts n’avaient pas de candidat en 2024 mais en ont un cette fois-ci, nous partons de leur part habituelle dans la région plutôt que de zéro.
Toutes les projections pour la Nouvelle-Écosse sont « si des élections avaient lieu aujourd'hui ». La prochaine élection peut avoir lieu aussi tard qu'en décembre 2029 : ce ne sont donc pas des prévisions de ce scrutin, mais la traduction en sièges des sondages d'aujourd'hui.
La Nouvelle-Écosse fonctionne sur des délais plus longs. Elle est sondée environ une fois par mois entre les élections et n'a pas de date d'élection fixe. Sa moyenne réagit donc plus lentement que la moyenne fédérale : un sondage perd la moitié de son poids après 30 jours plutôt que 14, et nous remontons 90 jours en arrière pour avoir assez de firmes. Dès qu'une campagne commence, elle passe aux réglages de campagne de la Colombie-Britannique.
Chaque firme compte une fois, par son sondage le plus récent, et les sondages plus récents et plus grands comptent davantage. Nous corrigeons selon le bilan de chaque firme en 2017, 2021 et 2024, en faisant moins confiance à la correction quand elle repose sur moins d'élections. Les firmes divergent beaucoup en Nouvelle-Écosse, d'où la correction : certaines placent le NPD nettement en tête le même mois où d'autres placent les progressistes-conservateurs en tête.
Entre les élections, les firmes sont corrigées les unes par rapport aux autres. Le biais mesuré de chaque firme a deux parties : ce qu'elle partage avec toutes les autres, et ce qui l'en distingue. Toutes les firmes ont sous-estimé les progressistes-conservateurs en dernière semaine en 2017, 2021 et 2024, mais cette erreur commune est un effet de veille d'élection, et l'appliquer deux ou trois ans d'avance déplacerait toute la moyenne sur la foi de trois dernières semaines. Jusqu'au début d'une campagne, seul l'écart de chaque firme par rapport aux autres est donc appliqué; la partie commune revient au déclenchement des élections.
De combien les sondages pourraient-ils se tromper? Nous supposons que le chiffre provincial de chaque parti pourrait s'écarter d'environ 3,5 points dans un sens ou dans l'autre (un écart-type), le même plancher qu'en Colombie-Britannique. Les erreurs mesurées en Nouvelle-Écosse sont inférieures, mais elles ont penché du même côté trois élections de suite, sous-estimant les progressistes-conservateurs de 2,6 à 4,3 points en dernière semaine, et trois élections, c'est peu.
Le point de départ est le résultat certifié de 2024. Deux circonscriptions n'existaient pas alors : Inverness a été scindée en 2026 et Chéticamp-Margarees-Pleasant Bay créée à partir de son nord. Pour ces deux-là, les chiffres de 2024 et 2021 sont des estimations, tirées des bureaux de vote de l'ancienne circonscription qui se trouvent dans chacune, et présentés comme tels. L'élection partielle de juin 2026 dans la nouvelle circonscription est affichée, mais elle n'est pas le point de départ : une élection partielle est un vote restreint et inhabituel. Un parti manquait sur un bulletin de 2024 : le NPD n'avait aucun candidat à Eastern Passage, où sa candidate de 2021 s'est présentée comme indépendante. Plutôt que de faire partir le NPD de zéro, nous partons de sa part de 2021 dans la circonscription, ajustée de son évolution provinciale depuis.
Une députée indépendante élue comme indépendante conserve son vote, si elle se représente. En Colombie-Britannique, les indépendants sont exclus du point de départ, car personne ne sait qui se représentera. La députée de Cumberland North a été élue comme indépendante en 2021 et en 2024; son vote de 2024 lui reste acquis dans les simulations où elle se représente. Quand un député de parti prend sa retraite, le vote du parti reste sur le bulletin; quand une indépendante le fait, le vote part avec elle. Elle se représente donc dans trois simulations sur quatre : des 55 députés élus en Nouvelle-Écosse en 2021, 41 se sont représentés en 2024.
Toutes les projections pour l'Île-du-Prince-Édouard sont « si des élections avaient lieu aujourd'hui ». Aucune élection n'est déclenchée. La prochaine doit avoir lieu au plus tard le 4 octobre 2027 et peut être déclenchée plus tôt, comme trois des quatre dernières. Ce ne sont donc pas des prévisions de ce scrutin, mais la traduction en sièges des sondages d'aujourd'hui.
La moyenne de l'Île-du-Prince-Édouard suit les règles de VoteLab. L'Île n'a qu'une firme de sondage régulière, Narrative Research, et à l'occasion un sondage payé par un parti : ne garder que le dernier sondage de chaque firme, comme en Nouvelle-Écosse, ferait reposer la moyenne sur un seul sondage. Tous les sondages des 180 derniers jours comptent donc, pondérés selon leur échantillon de répondants décidés et leur fraîcheur, et perdent la moitié de leur poids tous les 90 jours. Un sondage commandé par un parti compte pour moitié. VoteLab alimentera ses propres modèles de l'Î.-P.-É. à partir de cette moyenne, et des règles communes évitent que les deux sites se contredisent.
Aucun effet maison, et les « autres » fixés. Avec une seule firme régulière, il n'y a rien à quoi comparer le biais d'une firme; aucune correction n'est donc appliquée. Les sondages récents ne proposent pas le Parti de l'Île par son nom, si bien qu'un chiffre « autres » ne veut pas dire la même chose d'un sondage à l'autre : les autres sont plutôt fixés à leur part de 2023.
De combien les sondages pourraient-ils se tromper? Nous le mesurons à partir des sondages de dernière semaine de 2019 et de 2023 (2015 n'en a aucun), avec le plancher de 3,5 points utilisé en Colombie-Britannique et en Nouvelle-Écosse. Les deux fois, les sondages ont sous-estimé les progressistes-conservateurs, de 5,1 et 7,2 points, et surestimé les verts; les chiffres des progressistes-conservateurs et des verts sont donc plus larges, environ 6,3 et 4,9 points. Le modèle traite ce biais comme du bruit plutôt que de déplacer la moyenne, car deux élections ne suffisent pas à distinguer une tendance du hasard.
Le point de départ est le résultat certifié de 2023. Les élections de 2019 et de 2023 se sont déroulées sur la carte de 2017 : aucune circonscription n'a besoin d'être estimée. Cinq élections partielles ont eu lieu depuis; elles sont affichées sur les pages des circonscriptions, mais ne servent pas de point de départ, car une élection partielle est un vote restreint et inhabituel. Là où un grand parti n'avait aucun candidat en 2023 (les libéraux et les verts en ont chacun laissé deux sans candidat), il part de sa part de 2019 dans la circonscription, ajustée de son évolution provinciale depuis.
Un plancher sous chaque parti. Aucun parti n'est projeté sous le quart de sa propre part de 2023 dans une circonscription. Les sondages placent les progressistes-conservateurs bien en deçà de leur part de 2023, et un glissement uniforme de cette ampleur les ramènerait à zéro dans des circonscriptions où ils se présenteront encore, alors qu'en pratique le vote d'un parti recule le moins, en points, là où il était le plus faible. La règle est celle de VoteLab, choisie d'après son test rétrospectif de 2019 à 2023 sur cette carte.
Un siège sans affiliation. Evangeline-Miscouche a élu Gilles Arsenault sous la bannière progressiste-conservatrice en 2023; le siège est aujourd'hui occupé sans affiliation de parti. Dans chaque simulation, son ou sa titulaire conserve une part de ce vote de 2023, tirée autour de 42 % comme pour les indépendants de la Colombie-Britannique, et se représente dans trois simulations sur quatre, le chiffre de la Nouvelle-Écosse.
D'où viennent les données. Les résultats de 2019 et de 2023 proviennent de l'extraction faite par VoteLab des rapports officiels d'Élections Î.-P.-É., avec ses corrections, et la carte des circonscriptions est celle de la province. Les données du recensement sont établies à partir des aires de diffusion de 2021 situées dans chaque circonscription, chacune répartie selon le lieu de résidence des électeurs inscrits, puisque Statistique Canada ne publie aucun profil selon les circonscriptions provinciales de l'Î.-P.-É.
Accountability
The Accountability page tracks how Canadian media assigns political blame and credit in real time. Every day the platform fetches political news headlines, classifies each article for relevance and framing, and scores whether coverage attributes economic conditions to government decisions or to forces beyond its control. Those scores are aggregated into a 28-day exponentially weighted signal (the attribution modifier) that feeds the forecast model as an additional directional input.
Each article's framing score subtracts an empirically calibrated 0.10 baseline from the government-responsibility signal to neutralize the classifier's structural tendency to register a small responsibility signal whenever government action is described, regardless of the article's actual attribution direction. The resulting signal is centred at zero, so positive readings indicate genuine Ottawa-side framing and negative readings indicate external-blame framing.
Source coverage. The national trajectory is computed from national-circulation outlets only: CBC, the Globe and Mail, National Post, iPolitics, National Observer, CTV News, The Conversation, plus a MediaCloud backfill restricted (by URL domain) to national outlets. The 35 provincial outlets added to the RSS pool in May 2026, and the regional outlets that appear in the MediaCloud corpus (Toronto Star, Hamilton Spectator, Winnipeg Free Press, BC and AB local papers, etc.), are tagged at the row level and routed to per-province readings rather than the national chart. As of 2026-10-10, the chart draws on 3,562 national articles published between 2024-04-02 and today: 2,141 from the MediaCloud political-news index and 1,421 from the daily RSS pipeline.
Smoothing. The daily attribution signal is smoothed in two stages. First, articles are aggregated into a 28-day exponentially weighted moving average (half-life 14 days) at the data layer. Second, the chart bins those daily values into ISO weeks and applies a 9-week sliding average, so each plotted point reflects roughly two months of underlying coverage. The combined smoothing damps day-to-day news-cycle noise while preserving multi-month political arcs.
Date provenance. Each article's publication date carries a date_provenance field recording how it was determined. Sources, in order of authority: rss_publish_date (RSS feed's declared <pubDate>), html_meta (the publisher's article:published_time meta tag or JSON-LD datePublished), url_path (parsed from /YYYY/MM/DD/ slugs in the URL), mediacloud_api (the MediaCloud index's own publish_date), or wayback (Internet Archive's first snapshot, accurate within 1–3 days). Current breakdown of the national pool: HTML metadata 33%, RSS pubDate 9%, MediaCloud API 20%, URL path 3%, Wayback 0%. A further 4% are MediaCloud rows from before May 2026 whose real publish date could not be recovered; these are flagged fetch_window_estimated and remain pinned to the start of their original 30-day backfill window. The remaining 31% are older rows ingested before the provenance field existed, and carry no provenance flag. The window-start fallback was the result of a MediaCloud client-library bug that silently misdated articles; the bug is fixed prospectively (#619) and new MediaCloud ingests use the API's real publish_date.
Economic forecast
The Forecast page projects where the parties are likely to stand 1, 3, and 6 months from now, with calibrated uncertainty bands that widen with each horizon. A Bayesian trajectory model (PyMC) is trained on economic time series (inflation, unemployment, housing starts, governing-party tenure) with a media sentiment covariate (valence signal, γ ≈ 0.05) that nudges the fundamental level up or down based on the tone of political news coverage. The model output is blended with current polling to produce forward-looking support estimates.
The sentiment covariate enters the Bayesian model directly as a fitted parameter (γ_valence); it is not a post-hoc adjustment. Its posterior mean is positive and its 94% credible interval is mostly above zero, meaning favourable media coverage is associated with modestly higher governing-party support in the model. Economic fundamentals dominate over the medium term; the sentiment effect is intentionally modest.
By-election open-seat adjustments
When a sitting MP does not contest a by-election, the model applies two literature-calibrated corrections. First, the personal-vote incumbency bonus (3.2 pp, derived from Blais et al. 2003) is removed, since that bonus is tied to the individual MP, not the party. Second, a retirement adjustment is applied: long-serving MPs accumulate an additional personal vote of roughly 0.5–1 pp per electoral cycle (Cain, Ferejohn & Fiorina 1987; Kendall & Rekkas 2012), which also disappears on retirement. For ridings where the departing MP's personal positioning attracted voters who would not otherwise support the party, a BQ recovery adjustment is also applied where appropriate. All parameters carry citation comments in the source code.
Members who change parties
Seven MLAs elected as Conservatives in 2024 now sit somewhere else: three as independents, two with OneBC, one with CentreBC and one with the NDP. Some of their personal support will follow them, and the model tries to account for that.
How depends on where they went. When a member joins a party that already had voters in the district, as Penticton-Summerland's MLA did by moving to the NDP, we add a standard incumbency boost of a few points. When the new party had no voters there at all, as with OneBC, CentreBC or sitting as an independent, a flat boost would make no sense. Instead the member takes a share of their own 2024 vote with them, 42% on average, and the Conservatives lose the same amount in that district. Six of the seven seats work this way.
Cela déplace des votes. Cela n’en invente pas. Les sondages comptent déjà les partisans de ces députés sous leur nouveau parti; nous veillons donc à ce que les conservateurs ne perdent pas ces électeurs deux fois. Après avoir placé l’appui de chaque député dans sa propre circonscription, le modèle ajuste les chiffres provinciaux pour que chaque parti corresponde toujours aux sondages. Le député garde son appui local. Les conservateurs récupèrent ce qui aurait autrement été compté deux fois, réparti sur le reste de la province. Et OneBC et CentreBC se retrouvent avec l’essentiel de leur vote dans les sièges de leurs députés, là où on s’y attendrait. Les indépendants comptent dans les « Autres » des sondages, puisque c’est là que les sondeurs les inscrivent.
La transfuge de la Nouvelle-Écosse. La députée de Lunenburg West a été élue progressiste-conservatrice en 2024 et siège maintenant comme libérale. Les libéraux avaient déjà des électeurs dans cette circonscription; elle apporte donc à son nouveau parti l'avantage habituel du sortant, quelques points, selon la règle appliquée en Colombie-Britannique à un député qui rejoint un parti établi. Ce chiffre vient de la littérature et de la Colombie-Britannique, pas de la Nouvelle-Écosse, et n'est pas encore étalonné ici.
Les gains en élection partielle de l'Île-du-Prince-Édouard. Trois sièges ont changé de parti lors d'élections partielles : les verts ont remporté Borden-Kinkora et Cornwall-Meadowbank, et les libéraux Charlottetown-Hillsborough Park. Chaque nouvelle personne élue apporte à son parti l'avantage habituel du sortant, quelques points, selon la règle appliquée en Colombie-Britannique à un député qui rejoint un parti établi.
Where does 42% come from? The 2024 election. When BC United collapsed mid-campaign, six of its MLAs ran without a party and kept between 36% and 52% of their previous vote, with a median of 42%.
We use the same rate whatever party a member joins. The seven MLAs who switched to the Conservatives in 2024 actually gained votes, a median of 129% of their old share, but moving to OneBC or CentreBC today looks more like those independents than like joining a party on the rise.
We don't pretend to know it exactly. Six MLAs in one election is thin evidence for a number that can decide seven seats, so every simulation picks its own rate, centred on 42% and usually somewhere between 19% and 67%. That is much wider than the six 2024 results, which landed within a few points of each other. They agreed with each other, but that says little about how a different set of MLAs, in different parties, will do.
What the model can't know yet is who will actually run. A member who doesn't stand again hands their support back to the party they left. Two of the three independents have said they're running. And outside these MLAs' own seats, the model can't tell where OneBC or CentreBC might be strong. Neither ran in 2024, so we spread their support in line with Conservative strength, which is where their voters came from but may not be where they are now.
How uncertainty is modelled
Every simulated election draws a national vote share from a multivariate normal distribution centred on the current poll average. The variance has two components added in quadrature: the estimation variance from the polling window itself, and a systematic polling error calibrated from past elections.
Systematic polling error (RMSE) is estimated from the gap between the final 7-day poll average and the certified result across all six federal elections from 2008 to 2025:
| Party | Polling RMSE (pp) |
|---|---|
| LPC | 1.8pp |
| CPC | 2.9pp |
| NDP | 2.0pp |
| BQ | 0.5pp |
| GPC | 1.0pp |
| PPC | 1.2pp |
Calibrated across 6 federal elections (2008–2025). Regenerated against certified results after each election.
A province-level correlation structure is also applied so that ridings within the same province move together, reflecting shared regional events rather than independent noise.
Pollster house effects
Every polling firm has a characteristic "house effect": a tendency to over- or under-estimate each party's support relative to the final certified result. This can arise from differences in methodology (phone vs. online), sample weighting, and how undecided voters are handled. If uncorrected, combining polls from multiple firms can amplify a systematic bias in one direction.
We estimate house effects from each firm's final-week polls before GE44 (2021) and GE45 (2025) and apply James-Stein shrinkage: when the sample of past elections is small, the correction is pulled toward zero, so that sparse data produces a modest adjustment rather than an overfit one. The table below shows the current computed adjustments:
| Pollster | LPC | CPC | NDP | BQ | GPC | PPC |
|---|---|---|---|---|---|---|
| Abacus Data | -0.5 | -0.9 | +1.0 | -0.2 | +0.1 | +0.3 |
| Angus Reid | -0.4 | -0.6 | +0.3 | — | +0.1 | — |
| Ekos Research | -0.2 | -1.2 | +0.5 | -0.4 | +0.4 | +0.7 |
| Forum Research | -0.6 | -0.5 | -0.0 | -0.2 | +0.2 | +0.8 |
| Ipsos | -0.6 | -0.8 | +0.8 | -0.1 | +0.2 | -0.1 |
| Liaison Strategies | -0.2 | -0.4 | +0.2 | -0.1 | +0.0 | +0.1 |
| Léger | -0.3 | -0.5 | +0.4 | -0.1 | +0.1 | +0.3 |
| Mainstreet Research | -0.4 | -0.5 | +0.2 | -0.3 | +0.1 | +0.7 |
| Nanos Research | -0.4 | -0.9 | +0.6 | -0.2 | +0.5 | +0.3 |
pp = percentage points. Positive = firm historically over-predicts this party; the aggregator subtracts this before computing the rolling average. "—" = insufficient data to estimate a correction for this firm/party combination.
What the model does not do
Northern Vibe does not incorporate real-time news sentiment during live campaigns. The accountability tracker reads daily Canadian political headlines to produce a directional modifier, but this is an attribution index based on media framing, not a real-time waveform of campaign events. During an active campaign, the poll aggregate is the dominant input.
The model does not use internal party data, private polling, constituency canvass returns, or any non-public information. All inputs are from publicly available sources listed in the data sources section below.
Track record
The honest test of a forecast is out-of-sample: does it work when it has never seen the answer? We validated the model on GE45 (April 28, 2025) by giving it only what a forecaster would have had beforehand — each riding's 2021 result as a baseline plus the final pre-election national poll average — and asking it to project a winner in every riding. It called 88.0% of ridings correctly (301 of 342), beating a naive “2021 winner holds” baseline of 83.3%, with a national vote-share error of 0.87pp. No 2025 result touched any prediction; the certified outcome was used only to score the calls.
Full results and the regional breakdown are on the Model Accuracy page. The backtest is a single auditable script, simulation/backtest_ge45_oos.py.
British Columbia, tested the same way. We ran the provincial model forward from the 2020 result, using only polls published before the 2024 vote, with pollster corrections worked out from 2017 and 2020 alone so the answer couldn't leak in. It called 86.0% of districts correctly (80 of 93), against 79.6% if you simply assumed every 2020 winner held on. It missed the average party's vote by 1.23 points, and every seat total landed inside its range: 49.1 against 47 actual for the NDP, 42.6 against 44 for the Conservatives. The script is simulation/bc/backtest_2024.py. Some fair caveats. 2024 was close to a two-party race, so this doesn't test OneBC, CentreBC or MLAs switching parties. The model was also too sure of itself at the top end: of the 80 districts it called with 90% or more confidence, it got 72 right. And we chose the uncertainty settings with this test in front of us, so read it as evidence the machinery works, not as an independent audit.
La Nouvelle-Écosse, testée de la même façon. Lancé à partir du résultat de 2021 avec les sondages publiés avant le vote de 2024 et des corrections de firmes tirées de 2017 et 2021 seulement, le modèle a bien prédit 54 des 56 circonscriptions (96,4 %), contre 69,6 % si chaque gagnant de 2021 avait conservé son siège. Il s'est trompé de 1,67 point en moyenne sur le vote de chaque parti. Il a raté Sackville-Cobequid, ainsi qu'Halifax Atlantic, dont le député libéral de 2021 était passé aux progressistes-conservateurs avant le vote, ce qu'un point de départ de 2021 ne peut pas savoir. Le script est simulation/ns/backtest_2024.py.
L'Île-du-Prince-Édouard, testée de la même façon. Lancé à partir du résultat de 2019 avec les sondages publiés avant le vote de 2023 et une erreur de sondage mesurée sur 2015 et 2019 seulement, le modèle a bien prédit 21 des 26 circonscriptions (80,8 %), contre 65,4 % si chaque gagnant de 2019 avait conservé son siège. Il s'est trompé de 2,01 points en moyenne sur le vote de chaque parti, et le total de sièges de chaque parti est tombé à un siège près du résultat. La circonscription 9 est exclue : son vote de 2019 a eu lieu en juillet après le décès d'un candidat, ce qui en fait une autre élection que les 26 autres. Le script est simulation/pe/backtest_2023.py.
Honest limitations
Riding-level accuracy is validated on one general election (GE45). One election is not enough to make strong statistical claims about interval calibration. Whether the 80% bands really contain the true outcome 80% of the time requires many more observations. The current results are encouraging but not conclusive evidence of correct calibration.
National polls carry a ±2–3% margin of error that compounds at the riding level. The model faithfully reproduces the uncertainty in the polls; it does not add or reduce it. If the polls are wrong, the model will be wrong in the same direction.
Demographic data is from the 2021 Census. Fast-growing ridings and those that have seen significant demographic change since 2021 may carry larger errors than the aggregate suggests.
By-election open-seat effects use literature-calibrated retirement adjustments. Candidate quality, local profile, and campaign spending beyond incumbency are not modelled.
Model decision log
Changes to model parameters are documented publicly in docs/model_decisions.md. We do not adjust parameters retroactively to improve past accuracy figures.
How to verify the numbers
The scoring/ directory in the GitHub repository contains a self-contained Python script that reproduces every metric on the accuracy page (MAE, riding call accuracy, 80% band coverage, and the missed-riding list) from a frozen fixture file and the Elections Canada certified results CSV. No simulation imports required:
python scoring/evaluate.py
Data sources
| Source | What it feeds |
|---|---|
| Elections Canada | Riding boundaries, 2021 & 2025 candidate results, EDA campaign finance (2025) |
| Statistics Canada (2021 Census) | Demographics per riding: income, age, housing tenure, immigration, education, commuting, industry; rent baseline scaled to CMHC 2025 CMA prices |
| Statistics Canada (Web Data Service) | Economic indicators: real GDP growth, unemployment rate, CPI |
| Statistics Canada (Crime Severity Index) | CMA-level crime severity, rescaled to national average = 100 |
| CRA (Individual Tax Statistics by FSA) | Tax filer median income, government transfer dependency, EI & benefits recipients, RRSP contributors |
| CMHC | New housing construction starts by metro area (CMA-level) |
| IRCC | Annual permanent residents admitted per CMA, distributed to ridings by population |
| CRTC (National Broadband Data) | % of households without 50/10 Mbps broadband service, by riding |
| NRCan (National Fire Database) | Wildfire exposure index per riding (2015–2024), indexed to national average = 100 |
| NRCan (Flood Susceptibility Mapping) | Mean flood susceptibility index per riding (2000–2023 raster) |
| NRCan (Atlas of Canada 1:1,000,000) | Coastlines, lakes and islands on the share-card maps. Contains information licensed under the Open Government Licence – Canada |
| Pollster Audit API + Polling Canada | National & regional vote-intention polls (2004–present) |
| Nanos Research, Angus Reid, Environics | Issue salience polling: cost of living, housing, healthcare, Canada–US relations |
| OurCommons.ca | MP Hill office contact information (phone & email) |
| Government of Canada (Proactive Disclosure) | Federal grants & contributions by riding, all fiscal years available |
| MediaCloud | Canadian political news headlines: vibe score & party attribution classifier |