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.

Version 0.9 · Public draft Updated 2026-04-30 Maintainer Tunç Meriç

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.

ReproducibilityThe Pulse engine is intentionally simple — anyone with the source dataset can replicate the score in a spreadsheet. We refuse opaque "AI scoring" because trust requires arithmetic, not vibes.

Last updated 30 April 2026 by Tunç Meriç Suggest an edit