Risk is not equally distributed. Neither is the money to address it.
An independent analysis of flood risk, social vulnerability, and FEMA mitigation funding across Vermont municipalities.
🔗 Live Dashboard
📖 Analysis Article
- Project Overview
- Features
- Tools & Technologies
- Usage
- Gallery
- Data & Methodology
- References
- License
- Acknowledgements
- Author
Floodlines is an index-based spatial analysis of flood risk, social vulnerability, and FEMA mitigation funding across Vermont's 250+ towns. The central question: does mitigation funding align with flood risk and community need?
Vermont has experienced repeated, severe flood events, most notably Hurricane Irene (2011) and the historic flooding of 2023. Yet federal mitigation funding has not flowed evenly. Some high-risk, high-vulnerability towns have received little to nothing. Others have received substantial investment. This project builds a reproducible, methodologically transparent framework to measure that gap. More broadly, Floodlines explores the geography of institutional memory. Federal mitigation programs are designed around real constraints: disaster declarations, competitive grant processes, local administrative capacity, and documented losses. The result is not necessarily a system that ignores future risk, but one that often sees future risk through the lens of past experience.
Floodlines combines federal hazard models, flood insurance records, Census demographics, and mitigation funding data into a single framework for comparing where risk exists, where money has gone, and where the two diverge.
The analysis combines:
- GIS preprocessing of flood zone, river corridor, and town boundary data
- ACS demographic data for town-level social vulnerability (poverty, age, vehicle access, and more)
- FEMA Hazard Mitigation Assistance (HMA) funding records, inflation-adjusted to 2025 dollars
- NFIP insurance claims and policy data
- FEMA National Risk Index (NRI) expected annual loss and composite risk scores
- Index construction using rank-based normalization across multiple model specifications, with sensitivity analysis
- An interactive web dashboard visualizing risk, vulnerability, need, gap, and quadrant assignment for every Vermont town
- More than half of Vermont municipalities received no FEMA Hazard Mitigation Assistance funding.
- Funding shows only weak alignment with forward-looking measures of flood risk and vulnerability.
- Funding is more strongly associated with past insured flood losses than with modeled future risk.
- The pattern persists across multiple risk models, normalization methods, and sensitivity tests.
Interactive Dashboard:
- Quadrant view classifying each town as underserved, aligned, historically invested, low priority, or no recorded investment
- Choropleth map of all Vermont towns, switchable across six metrics: flood risk, social vulnerability, need index, mitigation funding, funding gap, and NFIP claims
- River corridor, population, and funding context overlays
- Model switcher (EAL, EAL per capita, FEMA NRI)
- Relative-to-state-average toggle for contextualizing local values
- Town-level detail panel with key statistics and percentile rankings
- Scatter plot of need vs. funding, updating dynamically with the active model
- Rankings table showing each town's percentile position across all key metrics
- Responsive layout with mobile support
Analysis Pipeline:
- Reproducible ETL notebooks for all data sources (GIS, ACS, FEMA HMA, NFIP, NRI)
- Index construction and model evaluation across 20 model specifications and two normalization methods
- Sensitivity analysis (LOVO, weight perturbation, normalization comparison)
- Quadrant and exclusion analysis
- Spatial autocorrelation (Moran's I)
- Exportable web data with raw scores, percentile ranks, and relative-to-mean values
Frontend: JavaScript, Leaflet.js, D3.js, HTML/CSS
Backend: Python, Pandas, GeoPandas, NumPy, Jupyter Notebook
Spatial: GeoPandas, Shapely, libpysal, ESDA (Moran's I)
Statistics: scikit-learn, scipy, statsmodels
Data sources: U.S. Census / ACS, OpenFEMA, FEMA NFHL, Vermont ANR, FRED CPI
Hosting: GitHub Pages
Live dashboard:
🔗 https://johbry17.github.io/Floodlines/
Run the analysis locally:
- Clone the repository
- Install dependencies (Python 3.10+, standard geospatial stack):
pip install pandas geopandas numpy matplotlib seaborn scikit-learn scipy statsmodels esda libpysal jupyterlab
- Run notebooks in order:
01_etl_gis.ipynb— spatial preprocessing02_etl_acs.ipynbthrough05_etl_fema_nri.ipynb— source ETL09_etl_final_merge.ipynb— merge all sources10_eda_overview.ipynbthrough13_eda_hma_nfip.ipynb— exploratory analysis20_analysis_build_index.ipynb— index construction and model evaluation21_sensitivity_checks.ipynb— LOVO and weight sensitivity22_quadrant_and_exclusion_analysis.ipynb— quadrant assignment29_export_to_web.ipynb— generatetown_stats.csvandtown_boundaries.geojson

Data sources and analytical workflow used in this study. Federal hazard, insurance, demographic, and mitigation datasets are integrated at the municipal level and transformed into comparative measures of need, funding, and funding alignment. Illustration: AI-generated

Vermont towns classified as underserved, historically invested, aligned, low priority, or no recorded investment

Measuring Need: A rank-based composite of flood exposure and social vulnerability

Towns where need substantially exceeds FEMA HMA investment, highlighting the most underserved communities

Loose cloud confirming weak alignment between structural need and federal mitigation dollars, showing impact of different definitions of need

Per-town statistics, percentile rankings, and quadrant classification for a selected community

Reactive benchmark layer showing where insured losses occurred vs. where modeled risk is highest

A visual metaphor for the central question explored in Floodlines: when institutions measure risk through past disasters, future floods may arrive above the last high-water mark. Illustration: AI-generated.
Index construction:
The need index combines a flood risk component (FEMA EAL or river corridor exposure) and a social vulnerability component (poverty rate, percent elderly, percent households without a vehicle), normalized using percentile ranks across all Vermont towns. The gap index is defined as need minus scaled funding — positive values indicate towns that rank higher on modeled need than on funding received.
Model selection:
Three models were carried forward for the dashboard: core_EAL_model (primary — highest logit AUC at 0.70), eal_per_capita_model (robustness — most normalization-stable at Spearman 0.97), and fema_national_risk_index (benchmark — FEMA's own composite for external validity).
Claims-based models were excluded because their high need–funding correlation (~0.55) reflects a reactive rather than proactive pattern; their near-zero gap meaningfulness (~0.04) confirms the gap index adds no independent signal when claims drive the need score. Expanded vulnerability specifications (adding housing tenure, disability, mobile homes) were also excluded: increasing the variable count raised normalization sensitivity (mean rank difference 19–21 vs. 13–15 for core models) without improving logit AUC, violating the parsimony criterion. Similarly, rather than treating all land within a flood polygon as equally at risk, simple spatial exposure metrics — river corridor percentage and NFHL flood zone coverage — were replaced by FEMA Expected Annual Loss, which captures both hazard intensity and asset exposure.
Models were selected based on predictive performance, stability across normalization methods, interpretability, and comparability to established FEMA benchmarks.
Normalization:
Rank-based (percentile) normalization was chosen over z-scores for four reasons: robustness to extreme outliers in Vermont flood data, bounded [0,1] output interpretable to general audiences, comparability across variables with incompatible units and distributions, and confirmation from sensitivity analysis that the substantive findings are stable across both methods (need-index Spearman z vs. rank: 0.89–1.00).
Funding:
All FEMA HMA dollar amounts are inflation-adjusted to 2025 dollars using CPI-U (FRED). Only approved projects localizable to a specific town are included; county-wide, regional, and statewide projects (~37% of filtered HMA) are excluded, as are planning and administrative costs. Amounts reflect the federal share obligated (~75% of total project cost).
NFIP:
Claims reflect insured losses only. Fewer than 2% of Vermont housing units are covered by NFIP policies, so claims data systematically underrepresents flood exposure statewide.
-
U.S. Census Bureau, 2025 TIGER/Line Shapefiles: Vermont County Subdivisions
Used for Vermont town (county subdivision) boundaries and spatial joins. -
U.S. Census Bureau, 2025 TIGER/Line Shapefiles: Vermont Areawater (Chittenden County) Used for delineating water bodies (including Lake Champlain) in Chittenden County for spatial masking of flood zones.
-
National Flood Hazard Layer (NFHL) Database
Used for FEMA flood zone boundaries and risk mapping. -
State of Vermont Agency of Natural Resources: River Corridors Data
Used for delineating river corridors and flood-prone areas. -
U.S. Census: American Community Survey Data
Used for town-level demographic, housing, and socioeconomic variables. -
OpenFEMA Dataset: Hazard Mitigation Assistance Projects
Used for FEMA mitigation funding and project allocation by town. -
FEMA Mitigation eGrants Guide to Eligible Activities and Codes
Used to classify FEMA project types. -
Federal Reserve Economic Data (FRED): Consumer Price Index for All Urban Consumers (CPI-U), U.S. City Average
Used for inflation adjustment of funding and economic variables to constant dollars. Downloaded as CSV for annual CPI values. -
OpenFEMA Dataset: NFIP Redacted Claims
Used for town-level flood insurance claims analysis. -
OpenFEMA Dataset: NFIP Redacted Policies
Used for town-level flood insurance policy counts and penetration. -
UnitedStatesZipCodes.org ZIP Code Database
Used to assign Vermont towns to policies with missing community names via ZIP code crosswalk. -
FEMA National Risk Index (NRI) Data
Used for town-level expected annual loss, social vulnerability, and community resilience scores as risk and vulnerability benchmarks.
MIT License © 2026 Bryan Johns. See LICENSE for details.
Thanks to the Vermont Agency of Natural Resources, FEMA, and the U.S. Census Bureau for making the underlying data publicly available. Thanks to the open-source geospatial community — GeoPandas, libpysal, Leaflet, D3, and OpenStreetMap — for the tools that made this analysis possible.
Bryan Johns, June 2026
bryan.johns@informedwanderer.com | LinkedIn | GitHub | Portfolio
— Fluent in Data. Fluent in Human.