AI-based climate risk modeling system
Climate risks are divided into physical (floods, heat, wind) and transitional (regulatory changes, carbon taxes). Financial regulators (TCFD, CSRD, the Bank of Russia) require their disclosure in corporate reporting. ML enables the transition from qualitative to quantitative assessments—linked to specific assets, horizons, and emissions scenarios.
Physical climate risks
Classification by horizon:
- Short-term (< 5 years): extreme precipitation, heat waves, floods
- Medium-term (5-30 years): changes in the frequency of hurricanes, droughts, rising sea levels
- Long-term (> 30 years): structural changes in climatic zones, desertification
IPCC Scenarios:
| Scenario | Warming by 2100 | Application |
|---|---|---|
| SSP1-2.6 | +1.5-2.0°C | optimistic (Net Zero) |
| SSP2-4.5 | +2.5-3.0°C | current policy |
| SSP3-7.0 | +3.5-4.0°C | high emissions |
| SSP5-8.5 | +4.5°C+ | worst case |
For each scenario, a set of climate projections (CMIP6 models) are used as a basis for regional downscaling.
Physical Risk System Architecture
Шаг 1: Asset Geocoding и Location Intelligence
# Привязка активов к координатам
assets = {
'asset_id': 'plant_001',
'lat': 55.7522, 'lon': 37.6156,
'asset_type': 'manufacturing',
'replacement_value': 50_000_000, # USD
'operational_lifespan': 30 # лет
}
# Геопространственный joining с климатическими слоями
# GADM административные границы, OpenStreetMap elevation
Step 2: Hazard Modeling
Flood risk:
# FATHOM, JBA Risk, CatRisk — глобальные flood models
# AQUEDUCT (WRI): публичные данные flood exposure по RP10/50/100/500
# Для конкретной точки: flood depth × probability distribution
def flood_risk_score(lat, lon, scenario='SSP2-4.5', year=2050):
flood_depths = aqueduct_api.get_flood_depth(lat, lon, scenario, year)
# flood_depths: dict {RP10: 0.3m, RP50: 1.2m, RP100: 2.1m}
return flood_depths
Heat stress:
def compute_heat_hazard(lat, lon, scenario, year):
# WBGT (Wet Bulb Globe Temperature) — интегральный показатель теплового стресса
# NOAA CMORPH osadki + ERA5 temperature + humidity projections
baseline_hdd = get_hot_days_above_35(lat, lon, '1990-2020')
projected_hdd = climate_model.project(lat, lon, scenario, year, '35c_exceedance_days')
delta_hot_days = projected_hdd - baseline_hdd
return delta_hot_days
Wildfire: Fire Weather Index (FWI) based on CMIP6 projections of climate variables. Changes in FFMC, DMC, and DC with warming → an increase in the number of high-fire-danger days.
Шаг 3: Vulnerability Assessment
Physical vulnerability is a function of flood depth → damage (%):
# Damage function (Huizinga 2017 curves — EU flood damage)
depth_damage_curve = {
0.0: 0.00,
0.5: 0.15,
1.0: 0.30,
2.0: 0.55,
3.0: 0.75,
5.0: 0.95
}
def physical_damage(flood_depth, asset_value):
damage_fraction = interpolate(depth_damage_curve, flood_depth)
return asset_value * damage_fraction
Шаг 4: Expected Annual Loss (EAL)
def expected_annual_loss(damage_by_return_period):
"""
Integration по вероятностям
EAL = Σ P(RP) × Damage(RP)
"""
return_periods = [10, 50, 100, 250, 500]
probs = [1/rp for rp in return_periods]
damages = [damage_by_return_period[rp] for rp in return_periods]
return np.trapz(damages, probs) # площадь под кривой
Transition risks
Carbon cost: Companies with high Scope 1+2 emissions are at risk from rising carbon prices:
def carbon_cost_impact(scope12_emissions_tCO2, carbon_price_scenarios):
"""
Сценарии цены CO₂: 2030 = $50-150/tCO2 (NGFS Central/Net Zero)
"""
return {
scenario: emissions * price
for scenario, price in carbon_price_scenarios.items()
}
Stranded Assets: Oil, gas, and coal assets risk depreciation under stricter climate regulations. Discounted Cash Flow under different carbon price scenarios.
Policy risk: NLP analysis of climate legislation (GDPR Carbon Border Adjustment Mechanism, EU ETS Phase 4, Russian ECOlevy) → assessment of the likelihood and timing of introducing restrictions for specific industries.
Portfolio risk analysis
Climate Value-at-Risk (ClimateVaR):
# Методология MSCI ClimateVaR / BlackRock Climate Risk framework
def portfolio_climate_var(portfolio, scenarios, horizon=2050):
asset_impacts = {}
for asset in portfolio:
physical_impact = physical_risk_model.predict(asset, scenarios, horizon)
transition_impact = transition_risk_model.predict(asset, scenarios, horizon)
asset_impacts[asset.id] = physical_impact + transition_impact
# Агрегация с учётом корреляций (climate risks коррелированы географически)
portfolio_var = aggregate_with_correlations(asset_impacts)
return portfolio_var
TCFD Reporting: The results are in the standardized format of the Task Force on Climate-related Financial Disclosures:
- Governance
- Strategy (materiality of risks)
- Risk Management (process)
- Metrics and Targets (quantitative indicators)
Data and tools
Climate data:
- CMIP6 models (available through the Copernicus Climate Data Store)
- ERA5 reanalysis (historical data)
- CHELSA, WorldClim: downscaled climate data to 1 km
Tools:
- xarray, zarr: working with multidimensional climate data (NetCDF)
- GeoPandas, Rasterio: Geospatial Computing
- PyMC/stan: Bayesian uncertainty modeling
Platforms: Moody's ESG, MSCI ClimateVaR, and Jupiter Intelligence are commercial data providers. For custom solutions: integration of public climate models (CMIP6 + AQUEDUCT + NASA).
Timeframe: Basic physical assessment of flood/heat risks for a portfolio of assets – 6-8 weeks. Multi-scenario analysis (SSP1-8.5), transition risks, ClimateVaR, TCFD reporting module – 4-6 months.







