# DealLabs City Index, methodology (v1.1, July 2026)

The open-data index of the world's 100 great travel cities. Every input
is public, cited, and re-computable; the full dataset ships with the
ranking. No proprietary panels, no black boxes.

## Design principles

1. **Open data only.** Every signal comes from a public API or open
   dataset anyone can re-query. We publish the raw values.
2. **Uniform measurement.** Every city is measured the same way
   (same radius, same window, same languages). No hand adjustment.
3. **Honest gaps.** A missing signal is disclosed, never imputed
   silently. Small sample sizes are labeled.
4. **Versioned.** Weights and formulas are frozen per edition;
   changes are changelogged.

## Structure (Yanolja-familiar shape, different substance)

Score = weighted sum of 4 dimensions, each 1-10 (min-max *9+1,
log-transform where heavy-tailed, same normalization family used by
academic buzz indices).

| Dimension | Weight | Signals (source) |
|---|---|---|
| A. Global Attention | 30% | Wikipedia pageviews for the city article across the 14 top traveler languages, 12-month window (Wikimedia REST); English Wikivoyage pageviews (travel intent); Reddit travel-forum mention volume, past year |
| B. Traveler Sentiment | 20% | Positive share of Reddit travel-community posts about the city (LLM-classified, positive/neutral/negative), buzz-weighted like the Yanolja attractiveness leg; N per city disclosed |
| C. Experience Supply | 30% | OpenStreetMap POI counts within 10 km of the city center: culture (attraction/museum/gallery/viewpoint/historic), food (restaurant/cafe), nightlife (bar/pub/nightclub), green space (park/garden) |
| D. Access & Conditions | 20% | Visa openness of the destination country (share of world passports entering visa-free/VoA/eTA, passport-index open dataset); affordability (World Bank price level ratio, PPP/market rate); climate comfort days per year (Open-Meteo 2025 daily archive). Equal thirds. Air quality is a v1.1 candidate signal. |

Languages (mirrors the traveler-language set used by major social
studies): en, es, ar, fr, pt, ru, id, de, ja, tr, vi, ko, it, th.

- Attention uses log(x) before min-max (buzz is heavy-tailed).
- Sentiment = Laplace-smoothed positive share,
  (pos + 1) / (pos + neg + 2), so a tiny all-positive sample can't
  tie the maximum, weighted by min-max(city buzz / mean buzz) to
  avoid small-N cities being over-ranked on a handful of glowing
  posts (the same buzz correction the Yanolja index applies).
- Supply counts use log before min-max (POI counts heavy-tailed).
- D sub-signals: visa 1/3, affordability 1/3, climate 1/3. A missing
  sub-signal (no World Bank series for Taiwan/Cuba) re-weights across
  the available ones and is disclosed per city, never imputed.
- A sub-signals: Wikipedia pageviews .6, Wikivoyage .25, Reddit
  volume .15 (all log min-max).

## Windows

- Pageviews: 2025-07 .. 2026-06 (12 full months)
- Reddit: past 12 months at collection time
- Climate: calendar 2025 daily
- OSM / visa / price level: snapshot at collection (dated)

## Comfort-day definition

A day counts as comfortable when max temp is 8..29 C, precipitation
< 10 mm, and snowfall < 1 cm. (Simple, published, arguable, and the
same rule for every city.)

## City set

100 cities, editorially selected for global tourism relevance across
all regions (selection is the one editorial act in the index; the
list is published and stable across editions; additions are
changelogged). Every city is verified against Wikipedia/Wikidata for
canonical article + coordinates.

## Known limitations (v1.0, disclosed by design)

- **Sentiment sample size.** Dimension B reads the top ~12 posts per
  city from 3 large Reddit travel communities. It is a directional
  signal, weighted 20% accordingly, with N published per city. It
  skews toward English-speaking travelers. Editions accumulate.
- **OSM completeness bias.** OpenStreetMap density varies with local
  mapping-community activity; Europe tends to be mapped denser than
  parts of Asia, Africa and Latin America. Identical queries reduce
  but do not remove this bias.
- **Attention is not pure travel intent.** Wikipedia pageviews also
  rise on news events; the Wikivoyage signal adds travel intent but
  is smaller in volume.
- **Country-level signals on cities.** Visa openness and price level
  are national figures applied to each city in that country.
- **Single-snapshot edition.** v1.0 is one collection window; trend
  lines require future editions.

## What this index is NOT

- Not a buzz-volume contest bought from a social listening vendor.
- Not a quality-of-life or safety index.
- Google/Tripadvisor ratings are deliberately absent: their terms
  prohibit storing or aggregating ratings into derived indices.

## Changelog

### v1.1 (2026-07, Consumption Edition)

Weights below were frozen BEFORE any v1.1 score was computed
(pre-registered so no city, ours included, gets tuned upward).

- New dimension E, Consumption (20%): OSM shopping supply within
  10 km (mean of dept-store/mall, fashion, beauty, convenience/
  supermarket buckets, log min-max) 40%; stay supply (hotel/hostel/
  guesthouse/apartment counts) 20%; affordability (moved from D) 25%;
  tourist tax-refund scheme 15% (no consumption tax at all = 10,
  refund scheme = 7, none = 1, unverified = excluded and re-weighted;
  every entry carries a source URL).
- D becomes Access & Climate (15%): visa openness 1/2, climate 1/2.
- Climate signal recalibrated: v1.0 "comfort days" (max 8..29 C)
  structurally zeroed tropical and desert cities; v1.1 uses
  "non-extreme days" (max <= 35 C, precipitation < 10 mm, snowfall
  < 1 cm). Both series are published.
- Final weights: Attention 25 / Sentiment 15 / Experience 25 /
  Consumption 20 / Access & Climate 15.
- v1.0 rankings remain archived in the repo for comparison.
