Pulse Engine
The Pulse Engine is the small piece of code that turns 33+ raw indicators per city into a single 0–100 score. It is deterministic, auditable, and re-runnable.
Step 1 · Indicator harvest #
For each city we collect ~33 normalised indicators across the 7 QoL pillars. Source priority: official open data > Eurostat > UN Habitat > cited research. Each indicator is timestamped with its publication vintage.
Step 2 · Pillar normalisation #
Each indicator is normalised to a 0–100 scale using min-max scaling against the full city corpus. Outliers (top & bottom 2.5%) are winsorised to avoid a single anomalous city distorting peer scores.
indicator_norm = clamp(0, 100, (raw - p2.5) / (p97.5 - p2.5) * 100)
Step 3 · Pillar score #
Indicators within a pillar are averaged with hand-tuned sub-weights. The sub-weights are documented per pillar in the source dataset (global-cities.js).
Step 4 · Pulse composition #
Pulse_raw = (transport×0.18) + (environment×0.20) + (economy×0.16)
+ (education×0.16) + (tourism×0.10) + (living×0.14)
+ (confidence×0.06)
Pulse = round(Pulse_raw × confidence_factor)
where confidence_factor = clamp(0.75, 1.0, mean_data_age_score)
Step 5 · Re-run cadence #
The engine re-runs quarterly. New Pulse values are stamped with the run date and the previous value is archived for trend computation. We never silently overwrite — historical scores are immutable.