AI-Powered Flood Risk Underwriting
FloodProof points at a real book of NFIP flood claims and proves a composite of real building attributes ranks losses better than the FEMA flood zone, audits every priced variable for disparate impact against real census demographics, and assembles the examiner-ready DOI filing package. When a variable fails the 80% rule, a deterministic policy gate refuses to mark the filing ready and routes the worst offender to human actuarial justification.
1.69x
Out-of-sample lift over the FEMA zone in top-decile loss capture
40,615 held-out real NFIP claims, Gini 0.31 vs 0.08
$3.1B
Real building-claim dollars paid outside FEMA high-risk zones (45.9%)
This Harris County, TX book, unmodeled
NOT FILING-READY
The gate blocked its own filing when 5 priced variables failed the 80% rule
Composite score itself passes at AIR 0.938
Every figure recomputes live from real public data on each run. Attribute them to this Harris County book and this held-out split, not as an open-world guarantee.
Flood pricing that anchors to Zone AE vs Zone X is a property-level question answered with a map.
Anchoring a flood rate to the FEMA flood zone overcharges the elevated house inside the zone and undercharges the slab-on-grade house outside it. The carrier's real exposure is a property-level question the zone map cannot answer. In this real Harris County book, $3.1B (45.9%) of building-claim dollars were paid on properties FEMA rated outside its high-risk Special Flood Hazard Area zones. That is straight from the data, with no model involved.
The market answer has been to buy a better model. But a smarter rating factor is only half the job. Any AI-augmented rate now has to survive a Department of Insurance fairness review, because a factor that ranks loss well can also carry demographic signal and fail the EEOC 80% rule, shipping a discriminatory rate the examiner will reject. New York DFS Circular Letter 2024-7 requires proxy-discrimination testing, Colorado requires per-variable justification for AI-driven insurance rates, and the NAIC AI Model Bulletin has been adopted by 24 or more states. A better model that self-grades is not evidence, and a better model that carries demographic signal is a filing that gets sent back.
The durable engineering is the infrastructure around the model: a non-circular backtest, a fairness audit on every priced variable, and a gate that either produces the examiner's filing package or refuses to. That is what we built and what the demo proves on real public data.
Nine measured stages, from real OpenFEMA claims to a deterministic filing verdict. Nothing is hardcoded.
A ridge composite of real OpenFEMA building attributes (building age, number of floors, elevated indicator, post-FIRM code, occupancy, obstruction) is fit on a 70% train split and scored on the held-out 30% test split. Insured coverage is deliberately excluded from the score because payment is mechanically bounded by it, which would make the backtest circular. The baseline is the real ratedFloodZone and the label is the real amountPaidOnBuildingClaim, both independent of the model.
The held-out claims are ranked by composite and by FEMA zone, and the engine reports top-decile loss-dollar capture and Gini for each, alongside an exact linear-Shapley attribution of what drives the score. A fixed seed (SEED=9) makes the split reproducible, so the same run yields the same numbers.
The disparate-impact screen runs over every priced variable, the composite score itself, insured building coverage, and each building attribute, against real tract-level minority share from CDC/ATSDR SVI. For each variable it computes the adverse-impact ratio and whether it sits inside the EEOC 80% rule band [0.80, 1.25].
The filing is marked ready only if the held-out sample is large enough, the composite lift over the FEMA zone clears the required minimum (1.10x or higher), and the adverse-impact ratio sits inside the band, plus a per-state filing checklist. If any variable fails, the gate emits NOT FILING-READY, names the worst offender, and routes it to human actuarial justification. Deny by default: filing_ready if and only if zero blocking findings.
A Pydantic-AI crew of a factor-explainer, a fairness justifier paired with an adversarial challenger, and a filing-memo drafter can advise, but the gate decides. No API key is required. The agents abstain when none is present and the deterministic demo is unaffected. Every trust-critical number lives in plain numpy outside the agent framework.
Harris County, TX. Real OpenFEMA NFIP claims. Every number below is computed live.
On the 40,615 held-out real claims, the composite captures 1.69x the FEMA-zone baseline's top-decile loss dollars, with Gini 0.31 against the zone's 0.08. Because the score is fit on train and read on the held-out split, and the baseline and label are both independent of the model, this is a genuine out-of-sample result rather than a self-graded one.
The lift stays robust in roughly the 1.69x to 1.85x range across random seeds, so it is not a lucky split. The scope is one county book and one held-out 30% split, and we say so.
The audit does not pretend the AI is the problem. The composite score itself passes the 80% rule at AIR 0.938, screened against real CDC/ATSDR SVI tracts. But the screen runs on every priced variable, and 5 fail: the worst is number of floors at AIR 0.363, followed by insured value at 0.526, and, strikingly, FEMA's own zone tier at 1.467.
Catching a compliance risk in the data before the examiner does is the value. The gate then refuses to mark the filing ready and routes the worst offender, floors, to human actuarial justification.
This is a demo of the mechanism, not a deployed pipeline. Here is exactly what is real and what is a stub.
| Component | In this demo | Status |
|---|---|---|
| Claims, demographics, geography | OpenFEMA FimaNfipClaims (170,803 records, 135,381 scored), CDC/ATSDR SVI 2022, Census Gazetteer 2023 | Real, public, no API key |
| Scoring, backtest, fairness audit, gate | Ridge composite, out-of-sample lift and Gini, disparate-impact screen, deterministic policy gate | Real, plain numpy and Python |
| Vendor signal feeds (ZestyAI Z-FLOOD, ICEYE SAR-depth) | Adapters behind a real schema, disclosed on screen as stubs | Stub, documented production swap |
| Guidewire / Duck Creek connector | Warm cached lookup at /api/score returning in under 50 ms | Stub, not a live integration |
| Pydantic-AI crew (factor-explainer, fairness justifier, memo drafter) | Advisory narrative only; abstains with no API key | Optional, advisory, never decides |
No. FloodProof is not another flood model competing with ZestyAI or ICEYE. It is the integration and proof layer that sits around whatever model you use: a non-circular out-of-sample backtest against the real FEMA-zone baseline, a disparate-impact audit on every priced variable, and a deterministic gate that produces the examiner-ready DOI filing package or blocks it. That value holds at any model quality, because a better model that self-grades is not evidence and a better model that carries demographic signal is a filing your examiner rejects.
The backtest is non-circular by construction. The composite is fit on a 70% train split and scored on the held-out 30% it never saw, the baseline is the real FEMA rated zone, and the label is the real claim dollars paid. Both the baseline and the label are independent of the model, and insured coverage is deliberately excluded so the score cannot cheat off the payment bound. On 40,615 held-out real NFIP claims the composite captures 1.69x the FEMA-zone baseline's top-decile loss dollars (Gini 0.31 vs 0.08), and the result stays in roughly the 1.69x to 1.85x range across random seeds.
It refuses to mark the filing ready. The policy gate is deterministic Python with one invariant: filing_ready if and only if there are zero blocking findings. On this Harris County book the composite score itself passes the 80% rule at AIR 0.938, but the audit flags 5 priced variables that fail, worst being number of floors at AIR 0.363. The gate emits NOT FILING-READY, names the worst offender, and routes it to human actuarial justification instead of shipping a discriminatory rate. Agents advise, code decides.
Real. The demo runs on 170,803 raw OpenFEMA NFIP claim records for Harris County, Texas, of which 135,381 with a paid building claim are scored, plus real CDC/ATSDR SVI 2022 tract demographics and the 2023 Census Gazetteer. It is public data with no API key, cached on first run. One honest caveat the demo discloses on screen: FEMA censors claim geocoordinates to roughly the tract centroid, so the backtest runs at the resolution public data allows.
No, and the demo says so on screen. The ZestyAI Z-FLOOD and ICEYE SAR-depth feeds and the Guidewire Integration Data Manager connector are stubs behind a real schema. The connector endpoint is a warm cached lookup that returns in under 50 ms to make the inline quote-bind integration concrete. The production path is the documented config swap, not a rewrite, and the honest claim is a stub, not a live integration.
No. The DOI filing package is an evidence artifact, an actuarial memorandum, the out-of-sample backtest, feature attribution, and a per-state checklist, not a certification or legal advice. 'Examiner can approve' is the design goal, not a guarantee any examiner has approved anything. No insurer has used this in production, and there are no deployments, customers, or case studies. As 24 or more states adopt the NAIC AI Model Bulletin, the point is that the gate produces the proof an examiner asks for and fails honestly when the data does not support a filing.
The research behind this demo — the architecture, the verification design, and the enterprise blueprint.
The FEMA zone leaves billions outside its lines, and the fairness review is now part of the filing.
If your team is working out how to put an AI rating factor in front of a DOI examiner without shipping a variable that fails the 80% rule, we would genuinely like to hear how you are thinking about it. The problem is industry-wide and the answers will be too.