Research
How the risk estimates on this dashboard were produced, what they can and cannot support, and how the underlying research program fits together. Everything currently shown comes from a completed analysis of ten years of Pennsylvania crash records; the machine learning components described below are in development.
Project overview
WalkSafe-AI is a research program on older-adult pedestrian safety, funded through the National Institute on Aging. Adults aged 65 and over are killed as pedestrians at substantially higher rates than younger adults, and the built-environment features that drive that gap — crossing distances, signal timing, sight lines, refuge islands — are measurable and modifiable.
The program has two halves. A city-wide half estimates risk everywhere, so limited capital money can be aimed at the right places. A site-level half, the PedAudit benchmark, works out what specifically to change at a given corner and verifies the proposal in microsimulation before anyone pours concrete.
Risk scores on this dashboard are crash-based estimates, not the Senior Pedestrian Mobility Index. They measure where severe pedestrian injuries have concentrated and where the road environment predicts more of them. The SPMI, which adds walkability and accessibility from street imagery, is still being built and will replace these scores when it is ready.
Study aims
Senior Pedestrian Mobility Index
In progressA graph neural network over the street network produces three sub-scores — safety, walkability, and accessibility — at street points sampled with 360-degree imagery, then aggregated to segments and intersections. Outputs carry both feature attributions and model uncertainty, so a score can be interrogated rather than merely trusted.
Participatory weighting
PlannedThe three sub-scores have to be combined, and the weights are a value judgment rather than a statistical one. Older residents, caregivers, advocates, and city staff set those weights through structured elicitation, so the composite reflects community priorities instead of analyst defaults.
Multi-objective optimization
PlannedGiven a budget and a set of candidate treatments, a multi-agent search identifies portfolios of investments that trade off injury reduction, mobility gain, and equitable distribution — surfacing a frontier of defensible options rather than a single ranked list.
Co-designed public platform
In progressThis dashboard. Built with the community advisory board rather than delivered to it, with separate views for residents, advocates, city engineers, and researchers. The prototype you are using now exists to give that board something concrete to react to early.
Phase 0 methodology
The current risk layers rank every controlled intersection in Philadelphia by expected pedestrian killed-or-seriously-injured (KSI) crashes, and every street segment on the walkable network by expected mid-block KSI per mile. Together they account for the whole crash record rather than the intersection half of it. The pipeline runs as fourteen ordered Python scripts, each writing its own quality-control log.
Reconciling these with the map. Every geocoded pedestrian KSI crash is now accounted for, in exactly one of the two map layers. Of 1,494 geocoded crashes 2015–2024:
- 767 are coded at an intersection — 756 within 25 m of a street node and ranked, 11 too far from any node to place.
- 727 are coded mid-block — 724 assigned to a street segment (657 on the walkable network, 67 on expressways, ramps and private roads) and 3 with no segment within 25 m.
The intersection layer reports 728 KSI at 609 intersections rather than the 932 it once did. 269 mid-block-coded crashes that happened to fall within 25 m of a node used to be counted there; they are mid-block events and now sit in the segment layer instead. The two layers sum to the citywide burden and must never be added together as risk.
Pipeline
- 1Assemble crashes
Ten years of PennDOT CRASH and PERSON records for Philadelphia County. A pedestrian KSI crash is one with at least one pedestrian killed or suspected seriously injured. Crash-level counters flagged 1,496 such crashes and the person-level derivation flagged 1,455; every person-level case fell inside the crash-level set, so the union was kept.
- 2Assign crashes to intersections
Crash points were snapped to the nearest node within 25 metres. The city street-node layer captured 98.6 percent of intersection-coded pedestrian KSI, against 65.8 percent for the state-route layer named in the original protocol, so the city layer became primary and the deviation was documented. Of 469 unassigned crashes, 458 were coded mid-block — the misses are genuine mid-block events, not snapping failures.
- 3Define the analysis universe
All 16,984 intersections in the city traffic-control inventory: 3,388 signalized, 3,841 all-way stop, 9,755 conventional. Including zero-crash sites is what makes the empirical Bayes step possible. 932 assigned KSI crashes fall at 783 distinct intersections.
- 4Attach exposure and context
Vehicle volume from PennDOT traffic segments within 30 metres (measured for 99.8 percent of sites), population within 800 metres, schools and parks within 200 metres, control type, and proximity to the 2020 High Injury Network. Roughly a fifth of intersections sit on the HIN and they carry 68.6 percent of assigned pedestrian KSI.
- 5Estimate risk three ways
Raw counts, a rate per million entering vehicles, and an empirical Bayes estimate from a negative binomial safety performance function. The three disagree substantially, which is the point — see below.
- 6Verify
Cross-checked against federal fatality records, tested for sensitivity to the snapping radius, and re-run against the alternative node layer.
Data sources
| Source | Provider | Vintage | Role |
|---|---|---|---|
| Crash records (CRASH, PERSON) | PennDOT | 2015–2024 | Outcome |
| Street nodes | City of Philadelphia | Current | Intersection snapping |
| Intersection controls | City of Philadelphia | Current | Analysis universe |
| Traffic volumes (AADT) | PennDOT / DVRPC | 2024 | Vehicle exposure |
| PLACES tract centroids | CDC | Current | Population proxy |
| High Injury Network | City of Philadelphia | 2020 | Context flag |
| Schools | City of Philadelphia | 2016 | Trip generators |
| Parks and playgrounds | Philadelphia Parks & Rec | Current | Trip generators |
| FARS | NHTSA | 2018–2023 | Validation only |
| Decennial Census DHC | US Census Bureau | 2020 | Equity analysis |
A third map layer, Corridors, rolls up the intersection and segment layers to the street-code scale Vision Zero works at: each corridor’s KSI is mid-block crashes from the segment layer plus crashes at the corridor’s ranked intersections, and an intersection is attributed to every corridor it meets, so corridor totals cannot be added across corridors.
Risk model
Raw crash counts are a poor ranking device at this scale. Most intersections have zero or one pedestrian KSI in ten years, so the ordering among them is mostly noise, and a site with three crashes may simply have been unlucky. Empirical Bayes corrects for this by shrinking each observed count toward what the road environment predicts.
Safety performance function
A negative binomial regression fit across all 16,984 intersections:
| Vehicle volume (AADT) elasticity | 0.39 | p < 0.001 |
| Population within 800 m | 0.20 | p < 0.001 |
| High Injury Network | +1.09 | p < 0.001 |
| Signalized vs all-way stop | +0.87 | p < 0.001 |
| Conventional stop | −0.53 | p < 0.001 |
| Schools / parks nearby | null | conditional on the rest |
Overdispersion alpha = 0.97, McFadden pseudo R-squared = 0.22. The signalized coefficient is not evidence that signals cause harm; signals sit on the crossing arterials where pedestrians and traffic conflict most.
Empirical Bayes combination
Because the ten-year expected count at any single intersection is small, the model-based weight is high — a median of 0.99. In practice the estimate separates genuine multi-crash sites from sites whose traffic volume, road class, and network position already predicted high counts. The field eb_ksi in the data downloads is this quantity, expressed as expected KSI crashes per year.
Risk tiers
Why the three measures disagree
Ranking by crash rate per million entering vehicles shares zero sites with the empirical Bayes top 50, because it rewards low-volume intersections that happened to record one or two crashes. Raw counts and empirical Bayes overlap at 31 of 50. The dashboard ranks on empirical Bayes; the rate measure is best treated as a screening view, not a priority list.
Validation
Against federal records
Pedestrian fatality counts were compared with NHTSA Fatality Analysis Reporting System data year by year.
| Year | FARS | PennDOT |
|---|---|---|
| 2018 | 41 | 42 |
| 2019 | 29 | 29 |
| 2020 | 48 | 49 |
| 2021 | 43 | 45 |
| 2022 | 60 | 64 |
| 2023 | 56 | 59 |
Gaps of one to four per year are consistent with the FARS 30-day death window and its trafficway rules. No material discrepancy.
Snapping radius
Of the top 20 sites by raw count, 17 are identical between a 15-metre and 25-metre buffer, and 18 between 25 and 30 metres. The ranking is not an artefact of the radius.
Face validity
All 50 of the top-ranked intersections lie on the city 2020 High Injury Network, and all 50 are signalized arterial crossings — an independent line of evidence arriving at the same places.
Equity analysis
Demographic composition was measured for each candidate site from 2020 Decennial Census block groups within 100 metres, with a 400-metre walkshed as sensitivity. The two approaches agree closely on minority share.
- Under 1820.3%
- 65 and over14.3%
- Hispanic14.9%
- Non-Hispanic Black38.3%
- Non-Hispanic white34.3%
Among the fifteen sites with rising pedestrian KSI and no automated speed enforcement, thirteen exceed the citywide share of children and teenagers, and eleven are at least 90 percent minority. The burden of rising, unenforced pedestrian injury falls overwhelmingly on minority neighbourhoods with above-average child populations.
Block-group demographics describe residents, not necessarily the people crossing at commercial intersections.
PedAudit
PedAudit turns the question around. Rather than scoring how well an automated system follows traffic rules, it scores how well a system can audit a real corner for pedestrian risk, propose specific design changes, and have those changes hold up in simulation.
How it works
Site geometry and trajectory data are converted into logical facts at a single, explicit boundary between the learned and the symbolic parts of the system. Everything upstream produces measurements; everything downstream is deterministic and auditable. Baselines are then clean ablations of that one interface.
An answer-set solver checks the scene against two rulebooks. The pedestrian-centred one flags speeds above 20 mph at conflict points, unrefuged crossings longer than 24 feet, and average pedestrian delay over 30 seconds. A vehicle-centred rulebook encodes conventional warrants, so trade-offs between the two are made explicit rather than hidden. The same solver then searches for the lowest-cost set of modifications — closing a slip lane, adding a refuge island, extending a curb, daylighting a corner — that brings the site into compliance.
Proposals are tested in microsimulation under two different pedestrian behaviour models, and results are never averaged across them. Disagreement between the models is treated as a finding about the largest threat to validity, not as noise to be smoothed away. Sites are split temporally, so no system sees the scoring window before proposing.
The end-to-end pipeline runs on a synthetic site with a mock simulator: it checks both rulebooks, solves for a compliant design, applies it, simulates, and writes a report. Field data collection, the real simulation backend, and the perception front end are not yet built. Injury-risk coefficients and several rule thresholds are placeholders pending epidemiological review. Eight Philadelphia sites drawn from the ranking above are registered as instrumentation candidates.
Limitations
These constraints are structural, not incidental, and they bound what the map can legitimately be used for.
- There is no pedestrian volume denominator
No dataset counts how many people walk through each intersection. Vehicle traffic and nearby residential population stand in for exposure, which means places with heavy foot traffic but modest vehicle volume are probably under-ranked. This is the single largest caveat.
- Mid-block and intersection risk are measured separately and are not comparable
Roughly half of pedestrian KSI is mid-block, and it now has its own layer rather than being excluded. But the two measures have different denominators (per intersection versus per mile), disjoint crash sets, and different covariates — the segment model omits the High Injury Network. They cannot be ranked against each other or summed. A low-risk intersection still does not imply a safe street; now you can check the street.
- The segment estimate is almost entirely model, not data
Pedestrian KSI averages 0.018 per segment over ten years, so empirical Bayes shrinks each estimate onto the model prediction. Across the segments that actually carry crashes, observed data supplies about 17 percent of the estimate; at the corridor scale it reaches 56 percent. Rank corridors, and read a segment colour as what the model expects of a street of that type, not as what happened there.
- Segment traffic volume is mostly imputed
PennDOT assigns a nominal 300 vehicles per day to local roads. Only 33 percent of segments carry a genuine count — 98 percent of arterials but 9 percent of minor local streets. The model therefore estimates a volume effect only where the count is real and leans on road class elsewhere. The intersection layer hid this problem by taking the maximum volume within 30 metres, so any node near an arterial inherited a real number.
- The centerline carries no lane count, width, median or speed limit
Several of the strongest known segment-level pedestrian risk factors are simply absent from the city street file. This bounds what the segment model can claim regardless of how it is fitted.
- The High Injury Network is endogenous
The 2020 HIN was itself derived from crash data over a period overlapping this outcome window, so conditioning on it approaches conditioning on the outcome. It carries the largest coefficient in the intersection model and is deliberately excluded from the segment model — one reason the two are not comparable.
- Traffic volumes are current, applied retrospectively
2024 AADT estimates are used across all ten crash years.
- Traffic controls are current, not historical
A signal installed midway through the period is treated as though it were always there.
- Injury severity coding has drifted
Suspected-serious-injury classification has trended upward statewide over the decade, inflating later years — though it should affect intersections roughly proportionally.
- Divided arterials are split across nodes
Roosevelt Boulevard and similar roads appear as multiple nodes, dividing one functional intersection between carriageways. These sites are likely under-ranked. The segment layer is less exposed to this: both carriageways share a street code, so corridor-level estimates treat the boulevard as one facility even though the individual blocks stay separate.
- Context layers are incomplete
The schools layer dates from 2016, and no transit stop layer was available, so a major class of pedestrian trip generator is missing.
- Imagery-derived features are descriptive, not predictive
The Philadelphia imagery measurement-validation study found that imagery-derived features did not predict pedestrian crashes once pedestrian and traffic exposure were accounted for (correlation +0.23 unadjusted, +0.006 adjusted); the imagery feature index on the map is descriptive only.
Data and code
Reproducibility
Fourteen ordered Python scripts, no notebook state, each emitting a quality-control log recording every row dropped and why. No stochastic steps, so no random seeds are required — the overdispersion parameter is estimated by likelihood profiling over a fixed grid. The pipeline now lives in this repository under pipeline/ with a pinned requirements.txt; every path resolves relative to the repository or through an environment variable, so it runs from a clean clone. Raw crash and GIS data stay outside it. Built with Python 3.10, geopandas and statsmodels.
Availability
The full ranked table of all 16,984 intersections, the candidate shortlists, and GIS layers in both projected and geographic coordinate systems are available from the data page. Crash microdata remain subject to PennDOT terms; the derived intersection-level table carries no personal information.
Go to data downloadsSuggested citation
Quistberg DA, et al. Ranking Philadelphia pedestrian killed-or-seriously-injured intersections using empirical Bayes estimation, 2015–2024. WalkSafe-AI, Urban Health Collaborative, Drexel University; 2026.
Peer-reviewed publications from this work are in preparation and will be listed here as they appear.