About me

  • Miguel Ureña Pliego

  • MEng Civil Engineering at UPM (Spain)

  • Visiting Student @ City Science (September 25 to March 2026)

  • No drivers licence
    (but licence to build roads)

  • I like cats

What is accessibility?

  • Good KPI for coverage

  • Points of Interest (PoIs)

  • Distance / Time

  • Very related to the 15-min-city

  • CS-Gipuzkoa's 30-min-region

But not every PoI is equally attractive...

  • Transit stop:
    Subway vs bus

  • Groceries:
    Large chain vs small shop

Accessibility=PoI quality×Distance\text{Accessibility} = \text{PoI quality} \times \text{Distance}

Accessibility to public transport

Accessibility=PoI quality×Distance\text{Accessibility} = \text{PoI quality} \times \text{Distance}

Accessibility to public transport

  • PoIs - Stops

Accessibility=PoI qualityPublic Transport quality×Distance\text{Accessibility} = \overbrace{ \text{PoI quality} }^{\text{Public Transport quality}} \times \text{Distance}

Accessibility to public transport

  • PoIs - Stops

  • Stop quality

Accessibility=headwayspeedmodePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \text{headway} \cdot \text{speed}\cdot \text{mode} }^{\text{Public Transport quality}} \times \text{Distance}

Accessibility to public transport

  • PoIs - Stops

  • Stop quality

  • Normalization [0,1][0,1]

Accessibility[0,1]=headway[0,1]speed[0,1]mode[0,1]public transport quality×distance[0,1]\underbrace{\text{Accessibility}}_{[0, 1]} = \overbrace{ \underbrace{\text{headway}}_{[0, 1]} \cdot \underbrace{\text{speed}}_{[0, 1]} \cdot \underbrace{\text{mode}}_{[0, 1]} }^{\text{public transport quality}} \times \underbrace{\text{distance}}_{[0, 1]}

Quality functions

Distance[0,1]\text{Distance} \to [0,1]

Exponential decay function - Elasticity:

e=% change in Demand ( Quality)% change in Distancee = \frac{\%\text{ change in Demand } (\approx \text{ Quality})}{\%\text{ change in Distance}}

Accessibility to public transport

  • PoIs - Stops
  • Stop quality
  • Timetables

Accessibility=headway    speed    modePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \color{red}{\fbox{$\text{headway} \;\cdot\; \text{speed} \;\cdot\; \text{mode}$}} }^{\text{Public Transport quality}} \times \text{Distance}

Public transport timetables: GTFS

Global standard

We all use it

Public transport timetables: GTFS

GTFS \to stop location (grouping - parent_station)

GTFS \to headway, speed, mode

Not that easy...

✅ GTFS → stop location



☹️ GTFS → headway, speed, mode
GTFS file structure

Stop quality

Accessibility=headway    speed    modePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \color{red}{\fbox{$\text{headway}$}} \color{white}{\;\cdot\; \text{speed} \;\cdot\; \text{mode} }}^{\text{Public Transport quality}} \times \text{Distance}

Headway

Contribution of multiple routes?

Headway

Harmonic mean
HM=1/[mean(1headwayi)]\text{HM} = 1/\left[\text{mean}\left(\frac{1}{\text{headway}_i}\right)\right]

Headway: Trips and routes

The problem with the 'route' concept. Better use trips.

Headway

Elasticity:

Theoretical value:
0.5 (Mohring's Law)

Empirical:
< 30 min: e = 0.3 to 0.5
> 60 min: e = 0.6 to 1

Stop quality

Accessibility=headway    speed    modePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \text{headway} \;\cdot\; \color{red}{\fbox{\text{speed}}} \color{white}{\;\cdot\; \text{mode} }}^{\text{Public Transport quality}} \times \text{Distance}

Speed

  • Per trip and stop

  • Measured ±15 minutes around each stop

  • Elasticity: e=0.10.4e = 0.1 - 0.4 (smaller than headway)

Speed

  • Per trip and stop

  • Measured ±15 minutes around each stop

  • Elasticity: e=0.10.4e = 0.1 - 0.4 (smaller than headway)

Stop quality

Accessibility=headway    speed    modePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \text{headway} \;\cdot\; \text{speed} \;\cdot\; \color{red}{\fbox{\text{mode}}} }^{\text{Public Transport quality}} \times \text{Distance}

Mode

Values

  • Bus: 0.50.90.5 - 0.9
  • LRT/BRT (tram): 0.750.950.75 - 0.95
  • Subway/Train (rail): 11

User comfort and capacity

route_type column in GTFS

No specific ID for BRT services

Accessibility

Accessibility=headway    speed    modePublic Transport quality×Distance\text{Accessibility} = \overbrace{ \text{headway} \;\cdot\; \text{speed} \;\cdot\; \text{mode} }^{\text{Public Transport quality}} \times \color{red}{\fbox{\text{Distance}}}

Distance/Time: Isochrones

  • The area reachable in X minutes
    with a specific transport mode
    (public transport, walk, bike, car, etc.)

  • Transport system graph

  • For accessibility to public transport:
    walk isochrones

  • Elasticity: e=0.10.4e = 0.1 - 0.4
    (smaller than headway)

Isochrone

A bit of graph theory

  • Transport system graph
    (source: OpenStreetMap streets)

  • Geo-multi-source Dijkstra
    (adds exact nodes at breakpoints)

  • Discrete distances

  • Discrete stop qualities

Isochrone

Discretization

  1. Choose discrete accessibility grades
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
  1. Stop quality and distance are discretized automatically

Lets see everything working

Population/Census

  • Global source: WorldPop

  • Census data: Individual countries

Equity

Most influencial factors for Massachussets

  • Population density

  • Car ownership

  • Race

  • But not income

This idea is flexible!

  • Park quality by its area

Python packages

PyGTFSHandler

  • Tutorial Download GTFS and compute speed and headway

UrbanAccessAnalyzer

  • Schools Basic example and download of PoIs from OpenStreetMap

  • Parks Simple tutorial introducing PoI quality

  • Public Transport Complete example of our accessibility to public transport indicator including isochrone computation and GTFS processing

Questions?

Thank you!

Miguel Ureña Pliego
Contact: miguelup@mit.edu
miguel.urena.pliego@gmail.com

Github: MiguelUrenaPliego
LinkedIn: miguel-urena-pliego

Left box

Arrow

Right formula

Left text

Right formula

Left text

Right formula

Left text

Right formula

Left text

Right formula

Left column: formulas

Right column: iframe graph

Left column: bullets with arrow

First two bullets

Vertical arrow

Last bullet

Right column: accessibility formula

LEft column

Right column

LEft column

Right column

LEft column

First step

Second step

Right column

Row with two images side by side

Left image

Right image

Row with two images side by side

Left image

Right image

Row with two images side by side

Left image

Right image

Subtitle below both images

Left column: Text with top gap

Right column: Image aligned to top

Left side: bullet points

Right side: map

Left side: bullet points

Right side: map

Left side

Right side

Left side: bullet points

Right side: figure

Left side: bullet points

Right side: figure

added

Left side: map

Right side: bullet points

Left column: Text with top gap

Right column: Image aligned to top

Left side: bullet points

Right side: map

Left column

Right column