Zurich Counter Reconstruction
Open counter data · Stadt Zürich · 2009–2026

Checking Zurich's cycling claims against its own counters

The city publishes its bike-counter data openly. We use it to test the city's public statements about cycling, and to measure how well cycling at an unmeasured location can be rebuilt from the counters that exist.

Claim 2 · Stadt Zürich traffic index (VER100T1001) · reported by Pro Velo, Nov 2025
«In der Stadt Zürich hat sich der Veloverkehr von 2012 bis 2024 beinahe verdoppelt.»

Official cycling index: 2012 = 100, 2024 = 193.4, 2025 = 207.6. It averages daily traffic over all city counters active in each year, so the set of counters changes over time.

Plausible, not established
confidence that like-for-like growth ≥ ×1.8

Index, 2012 = 100

The official index against four reconstructions

The city-style median over all counters reproduces the official 2024 value almost exactly. Holding the counters fixed tells a slightly lower story. The dashed line marks 180, our cut-off for "nearly doubled", fixed before any estimate was computed. The same-8 line is fitted over 2012–2025, so it reads 187 in 2024, slightly below the ×1.90 headline fitted on 2012–2024.

Bootstrap · sites × week blocks · 2012→2024

How sure can we be?

Each row is one way of treating the data. Blue marks draws at or above ×1.8, grey below. The share of blue is the confidence.

Why the scenarios differ

One counter carries the margin

Andreasstrasse's daily traffic divided by the median counter's. In October 2019 a new device model went in after a 7-month outage, and the level jumped about ×1.5 relative to other counters. The direction split and daily profile did not change. The open data cannot tell a real local change from a measurement change.

Andreasstrasse ÷ median counter, quarterlyaverage level 2017–19 vs 2020–21dashed: device swaps
All detected level jumps and disruptions, grouped by cause

Anomalies and whether they change the verdict

Change is the effect on the same-8-counter 2012→2024 ratio (×1.90) when that anomaly is handled differently. Only group A moves the result across ×1.8.

Counter mix · plain average

Changing counters inflate a plain average

City-style median · leave one counter out

11 counters make a fragile median

Each dot is the 2012→2024 median ratio with one counter removed (orange dashes ×1.8, grey dots the official ×1.93). With only 11 counters in 2012, the median is a single counter. Removing one of the quieter 2012-only counters (Fischerweg, Kloster-Fahr-Weg) drops it furthest.

Same 8 counters · raw 2024 ÷ 2012

Growth is uneven

Leaving any one counter out gives ×1.79–×2.05. Without Andreasstrasse the estimate is ×1.79, just under the cut-off.

Open question for the Tiefbauamt

One answer would settle most of the range

Did the device change at Andreasstrasse in October 2019 (ECO → Y2H) alter what is counted, or did cycling routes around Oerlikon change in 2019–20? If it was a measurement change, the confidence falls to about 0.24 and "up about three-quarters" is the honest phrasing. If it was real, about 0.72 and "nearly doubled" holds.

Part 2

Reconstruction model

Rebuilding hourly passages at a held-out counter. Test year 2025, 24 city sites, 20 folds, with 29 cantonal stations as extra inputs.

What we established

Findings

All runs · pooled over 184,263 held-out site-hours

Model leaderboard

Bars show pooled hourly MAE (passages per hour, lower is better). All rows are scored on identical site-hours. Validation is 2024 on separate hidden sites. Model and blend weights were chosen there, never on the test.

with cantonal inputscity counters only
Same models, same folds, same validation sites

What the cantonal stations changed

Each line runs from the city-only blend run (grey) to the run with cantonal inputs (blue). The dashed line on the coverage panel marks the nominal 90%.

city only+ 29 cantonal

OpenStreetMap bicycle network · LV95 ·

The network underneath

Every model sees the counters through this network. The OSM ways where bicycles are allowed give cycling times at a flat 16 km/h. These are contracted into the model graph: counters plus 80 high-betweenness junctions. Each edge follows the roads of its least-cost route. Under the Velonetz-weighted cost, a minute on a Vorzugsroute counts as 0.8 and a minute off the planned network as 1.2. Click a city counter to hold it out and see which counters the model can still use.

bicycle-permitted way cycle lane / track model-graph edge, drawn along its route city counter cantonal station junction node (size = betweenness) scroll or pinch to zoom · drag to pan
Each point is one held-out city counter · blend model

Isolation does not explain the error

X: cycling time from a held-out counter to the nearest counter the model can still see. Its own hold-out group is removed. Y: the blend's hourly WAPE at that site. Grey is city only and blue is with cantonal inputs, joined by a line per site. Points above 140% are pinned to the top edge.

city only+ cantonal

Option 1 · Velonetz-weighted edge cost · city + cantonal

Does routing along the Velonetz help?

Each line runs from the travel-time cost (grey) to the Velonetz-weighted cost (blue). Same models, folds and validation sites. The rank factors were fixed before the run (0.8 / 0.9 / 1.0 / 1.2), not tuned.

travel timeVelonetz-weighted

Swiss LV95 · EPSG:2056

Where the errors are

Hourly MAE per held-out site

Per-site change

Sorted by change. Select a site to see its daily totals below.

Daily totals 2025 · days with 24 scored hours · blend model

Measured vs reconstructed

measuredblend + cantonalblend, city only
Blend model · hourly

Where it holds and where it slips

MAE by condition. Peak hours carry about three times the error of off-peak hours, roughly in proportion to volume.

7 stable city sites · weather- and calendar-adjusted

Long-run cycling index

Adjusted daily totals with 2017 = 1. Descriptive only, with no causal claim. 2020–21 includes pandemic effects.

Read before quoting numbers

Caveats