Uses real climate projections from NOAA/NASA for 2050 using SSP2-4.5 and SSP5-8.5 scenarios:
Peril Type
Weight
Data Source
Projection
Flood Risk
40%
NOAA Sea Level Rise
% land area at risk of inundation
Wildfire Risk
30%
USFS Wildfire Hazard Potential
WHP index change 2020–2050
Heat Risk
20%
NASA NEX-GDDP
Days ≥95°F temperature change
Wind/Hurricane
10%
NOAA Climate Models
Category 3+ hurricane frequency
# Get climate projection deltas for 4 perils
deltas = get_all_projection_deltas(county_fips, scenario="SSP2-4.5")
# Convert each peril delta to 0-10 score
# delta range: [-1, +1] where +1 = large increase in risk
for peril, delta in deltas.items():
peril_score = max(0, min(10, 5 - (delta * 5)))
# Weighted average across all perils
A_proj = weighted_average(peril_scores, peril_weights)
Why 15% Historical / 85% Projected? Mortgages are 30-year commitments. Climate change is accelerating, making future projections more relevant than historical patterns.
Factor B: Relief Allocations per Capita 20% Weight
Measures how much federal disaster aid the area receives - proxy for underlying risk level.
# Get FEMA Public Assistance data (20 years)
pa_total = get_public_assistance_funding(county_fips, years_back=20)
# Calculate per capita assistance
per_capita = pa_total / 100000 # Assumes ~100K county population
# Scale to 0-10 (more aid = higher underlying risk = lower score)
B_score = min(per_capita / 1000, 10) # $1000 per capita = maximum score
Logic: Areas receiving more federal disaster aid typically face higher underlying risk or have weaker local resilience.
Factor C: Municipal Fiscal Stress 20% Weight
Measures local government's ability to respond to disasters using multiple data sources:
# Get NFIP data for the county
policies_per_unit = get_nfip_policies_per_housing_unit(county_fips)
avg_premium = get_nfip_average_premium(county_fips)
claim_frequency = get_nfip_claims_per_policy_year(county_fips)
# Scale each component
coverage_score = percentile_scale(policies_per_unit, invert=False) # Higher = better
premium_score = percentile_scale(avg_premium, invert=True) # Lower = better
claims_score = percentile_scale(claim_frequency, invert=True) # Lower = better
# Simple average of available metrics
E_score = (coverage_score + premium_score + claims_score) / 3
Metrics:
Coverage Rate: NFIP policies per housing unit (higher = better)
Affordability: Average premium (lower = better)
Claim Frequency: Claims per policy-year (lower = better)
Score Normalization & Scaling
All individual scores are normalized to 0-10 scale using percentile scaling:
def percentile_scale(value, invert=False, fallback_min=None, fallback_max=None):
"""
Scale any value to 0-10 range
Args:
value: Raw value to scale
invert: If True, return 10 - scaled_value (for risk metrics)
fallback_min/max: Baseline ranges for scaling
"""
# Use fallback ranges or determine from value magnitude
min_val, max_val = determine_scaling_range(value)
# Linear scaling to 0-10
scaled = max(0, min(10, (value - min_val) / (max_val - min_val) * 10))
# Invert if needed (for risk factors where higher = worse)
if invert:
scaled = 10 - scaled
return scaled
Inversion Logic: For risk factors (like disaster frequency), higher values = worse outcomes = lower scores. The system automatically inverts these scales.
Score Interpretation
Score Range
Grade
Risk Level
Description
9.0-10.0
A+
Minimal Risk
Excellent climate resilience
7.0-8.9
A
Low Risk
Low climate-linked mortgage risk
5.0-6.9
B
Moderate Risk
Standard underwriting appropriate
3.0-4.9
C
Elevated Risk
Consider pricing adjustments
0.0-2.9
D/F
High Risk
Very high risk - consider declining
Configuration & Weights
All weights and parameters are configurable in config.yaml:
About CLIMA: CLIMA (Climate-Linked Infrastructure & Mortgage Analytics) is an enterprise-grade climate risk scoring system for mortgage underwriting. Validated on 145,452 observations and 30,131 disaster county-years with 0.841 default prediction AUC and 0.904 disaster prediction AUC, both exceeding industry standard (0.80).
Documentation: Complete methodology, validation reports, and source code are publicly available for regulatory compliance and independent verification.