Français

How ERstat predicts wait times

The full methodology, in plain language

TL;DR: For hospitals that don't publish their wait times, we estimate what the wait is likely to be right now based on patterns from the hospitals that do publish. We show a range because the actual wait genuinely varies — the range is real, not hedging. Every estimate updates every 15 minutes.

Two kinds of hospitals

Live-data hospitals. Some provincial health authorities publish wait times: Alberta Health Services, Nova Scotia Health, Quebec's Index Santé, BC's ED Wait Times, and others. This covers 238 of the 731 emergency departments we track. On these pages you see two numbers. The headline is ours, an estimate of the wait you would face arriving now, built from the hospital's own published figure and how that figure has been moving. Directly beneath it is the number the hospital publishes right now, unaltered and with its timestamp, because it is the one figure you can check against their own site.

Silent hospitals. The other 493 emergency departments publish nothing at all. For these we estimate from patterns learned from the hospitals that do publish. Most of them carry an estimate. A minority do not, because the model has no comparable hospital to learn from, and for those we show the range that comparable emergency departments are running instead of inventing a number for this one. We would rather say we do not know than be confidently wrong.

The number answers "if I leave now"

A published wait time describes the people already in the room. You are not one of them yet. By the time you park and walk in, the queue has moved, and on a rising evening it has moved against you.

So on a hospital with a live feed, our headline answers the question you are actually asking: how long would you wait, arriving now. We take the hospital's current figure and apply the change our model expects over the next couple of hours, which is why the two numbers on the page differ and why ours is sometimes higher and sometimes lower than theirs.

On a silent hospital there is no current figure to start from, so the estimate is a nowcast instead: our best reading of the wait at this moment, from patterns rather than from that hospital's own data. It refreshes at least every 15 minutes.

What we mean by "wait time"

We use a single consistent definition: the time from arriving at the emergency department to being seen by a physician. Not the wait for triage, which is usually minutes. Not the total length of stay, which includes bloodwork and imaging after you have been taken through.

We chose it because it is the part of the visit you are deciding about in the car park, and because it is the quantity health authorities themselves measure, which means our figure can be checked against theirs rather than only asserted. Ontario, Quebec and Nova Scotia each publish it per hospital, and we calibrate against those measurements directly.

This matters because provinces do not measure the same thing as each other. Some publish time to a physician, some publish total visit length. A Quebec number and an Alberta number placed side by side are not comparable, and nothing on either province's own page says so.

The conversion, and why we publish one number instead of ten

New Brunswick and Quebec publish a whole visit duration. Most other provinces publish a time to first physician assessment. To show one comparable number across Canada we have to convert the first into the second, and the obvious objection is that any such conversion is invented.

It is measured, not invented. British Columbia's feed publishes both quantities for the same hospital at the same moment, which makes the ratio observable on live Canadian emergency departments rather than borrowed from an administrative report. Across 507,811 paired readings from 12 BC hospitals between 11 March and 7 September 2026, the median is 0.492. That is the figure applied to a New Brunswick or Quebec number.

It is not a constant, and we say so. Across the hours of the day the median moves between 0.405 and 0.591. Between hospitals it runs 0.258 to 0.649, with no clean relation to size. Because of that spread the single ratio is used only for the displayed figure; where the conversion feeds a bounding range rather than a point estimate, the low end of the band converts the bottom and the high end converts the top, widening the range instead of asserting a precision the measurement does not support.

The honest limitation: it is a British Columbia ratio applied to other provinces, because BC is the only feed that publishes both quantities. Whether it transfers is untested, and a province holding both numbers internally could measure its own without ever publishing the second one. The full workings, including the per-hospital and per-hour tables, are published so this can be checked rather than taken on trust.

Why not simply keep each province in its own units? That is the defensible alternative, and it is what a reader gets today from the provinces themselves. It is also what leaves someone comparing a 12-hour Quebec figure with a 3-hour Alberta figure believing one ER is four times worse, when the two are measuring different things. Refusing to convert is safer for the publisher and worse for the person in the car park. We convert, show our working, and mark every converted number as ours rather than the hospital's.

See the accuracy scorecard and the open datasets →

How the prediction works

The training data

Every 15 minutes, we record what the live-data hospitals are reporting. Over time, this becomes a large dataset linking observable features of a hospital (size, location, type, time of day, day of week) to actual wait times.

The model

We use a LightGBM quantile regression ensemble. In plain terms: it's a machine learning model trained to predict not just a single expected wait, but a range — a lower bound, a median, and an upper bound. It learns patterns like "small rural hospitals on Sunday mornings tend to have waits around X" from tens of thousands of real observations.

The features we feed it include:

Notably, we don't use any features about the current state of the hospital — we can't, because by definition these are silent hospitals that don't tell us their current state. This is the fundamental limit of predictions for silent hospitals, and it's why the intervals are as wide as they are.

How we handle uncertainty honestly

The raw model gives us a prediction range, but machine learning models tend to be overconfident about their ranges. So we add a second step called conformal prediction.

We hold out data from the live-data hospitals and check: when the model says "between 2 and 5 hours," does the actual wait fall in that range 80% of the time? If not, we widen the range until it does. We do this separately for different hospital types (by region and rurality) so the widening reflects the actual error pattern for similar hospitals.

For hospitals in regions where we don't yet have enough nearby informant hospitals to calibrate predictions specifically, the system falls back to a national-average interval. This produces wider but still honest estimates rather than falsely confident narrow ones.

The result: when we say our interval covers 80% of cases, we mean the actual wait should fall in that range 80 times out of 100. That's a mathematically defensible claim, verified on held-out real data, not a gut feel.

How to read a prediction

When you land on a silent hospital's page, the prediction is shown as three lines. Each one does different work.

The lead range is the planning interval — where the actual wait is expected to land about 80% of the time. We lead with this because it's what you should plan for. Arriving prepared for the upper bound means you won't be caught off guard if the wait runs long.

"Most likely" is the median of the prediction distribution — the single number the model considers most probable. It sits inside the lead range and gives you something to anchor on, but it's not a promise. Measured honestly, by holding a hospital out of training entirely and then predicting it, our typical error on a silent hospital is a little over an hour. That is why the range beside it is wide, and why we would rather you plan for the upper end.

"Typically X to Y at this hospital" is the range of medians we've predicted for this specific hospital over the past seven days. It contextualizes today's number — whether it's normal for this hospital or unusual. A hospital whose typical range is 1h–2h is steady; one whose typical range is 1h–5h varies a lot, and any given prediction could land anywhere in that band.

We display all three rather than a single number because waits are genuinely uncertain. A confident-looking estimate that's wrong half the time leaves people feeling misled when they wait longer than expected. Three numbers — a range to plan for, a most-likely anchor, and per-hospital context — let you make a real decision instead of accepting a single false promise.

Confidence labels

Every prediction comes with a confidence label, based on how wide the resulting interval is:

High confidence
Interval under 3 hours wide. The model is on familiar ground and the range is tight enough to guide decisions.
Moderate confidence
Interval between 3 and 6 hours wide. Usable, but the actual wait could reasonably land anywhere in the range.
Low confidence
Interval over 6 hours wide. The hospital's wait is too variable or unlike our training data to give a useful point estimate. We show qualitative language ("Wait is unpredictable right now") instead of a specific number.

When we refuse to predict

Some hospitals are too different from anything in our training set to predict reliably. A small remote hospital might have no close analogs among the live-data hospitals. A brand-new facility with a structure unlike any informant.

For these, a separate classifier flags them as "abstain" and we show historical monthly averages from NACRS instead. Abstaining is the honest answer where the model has no comparable hospital to learn from. Showing historical averages isn't as good as a live estimate, but it's better than pretending we know something we don't.

Why the intervals are wide

If you're looking at a silent hospital and the prediction says "often 2–5h, sometimes longer," that's frustrating. Understandably. Here's why it happens:

We have limited information. A silent hospital by definition isn't telling us anything about its current state. We know it's a 150-bed community hospital in southwestern Ontario on a Tuesday afternoon, but we don't know if it just had an ambulance rollover, or if a shift change is happening, or if the waiting room is empty.

Wait times are genuinely variable. Even for a single hospital, the wait at 2pm on any given Tuesday might be 45 minutes or might be 4 hours depending on acuity mix, staffing, and dozens of factors no model can see.

Honesty beats precision. We could display a confident-looking single number by simply hiding the uncertainty. Other services do this. We chose not to, because a confident-looking number that's wrong half the time is worse than an honest range.

The width of the interval is a feature, not a bug. It tells you how much the prediction should be trusted.

How hospitals can make their predictions more accurate

Silent hospitals can replace our prediction with their own wait time by reporting directly through ERstat's hospital portal. A single update from hospital staff — a charge nurse tapping a number on a phone — replaces the prediction with a measured value. Updates stay live for a configurable window, then the prediction takes over again if no new update arrives.

Learn about the hospital portal →

What we don't do

We don't predict for hospitals that publish live data. If you're looking at a hospital whose province publishes wait times, you're seeing their actual number — not our prediction. We stay out of the way.

We don't average predictions across hospitals. Each silent hospital gets its own prediction based on its own features. We don't blend nearby hospitals together for the displayed number.

We don't share individual wait observations. Hospital data is used in aggregate to train the model. We don't republish identifying information.

We don't claim to replace clinical judgment. If you or someone you know is having a medical emergency, go to the nearest emergency department or call 911. Wait time is not a proxy for severity of need. Life-threatening conditions are triaged immediately on arrival regardless of reported wait.

The technical layer

For readers who want the engineering-level detail.

Base model
LightGBM quantile regression ensemble, trained to predict multiple quantiles (p10, p50, p90) simultaneously
Target transform
log1p (predictions made in log-minutes, inverted for display)
Features
Structural, geographic, peer-group, and temporal features, with target encoding for high-cardinality categoricals
Training
Leave-hospitals-out cross-validation on informant hospitals to generate honest calibration data; final model then fit on all available data
Conformal method
Mondrian (stratified) split conformal prediction with (province-group × rurality) cells. Cells with fewer than 5 distinct calibration hospitals fall back to the global widening, ensuring stable interval estimates even where informant coverage is thin. Target 80% marginal coverage.
Abstention
Covariate-shift classifier trained to distinguish silent-hospital feature distributions from informant-hospital feature distributions; hospitals scoring above the decision threshold are abstained
Refresh cadence
15-minute prediction cycles, daily full retrain
Horizon
0 minutes (nowcast — estimate reflects current wait, not a future forecast)
Confidence thresholds
Interval width < 180 min = high; 180–360 min = moderate; > 360 min = low
Achieved coverage on held-out informants
~83% (target 80%)
Abstention rate on silent hospitals
~17%
Current model version
v1.5

Questions?

The methodology behind ERstat is intentionally transparent because wait-time prediction for healthcare is too consequential to treat as a black box. If you're a researcher, clinician, or hospital administrator and want to go deeper, get in touch — we'll answer what we can.

Explore ERstat

Browse all hospitals · Provincial transparency grades · For hospitals