AI-система предсказания природных катастроф
Предсказание природных катастроф — мультидисциплинарная задача, соединяющая геофизику, гидрологию, атмосферную науку и ML. Горизонты прогноза варьируются от минут (торнадо) до месяцев (сезонная активность ураганов). Ценность AI — в улучшении пространственного и временного разрешения прогнозов, а не в создании новой физики.
Классификация задач по горизонту прогноза
| Катастрофа | Горизонт | Текущая точность | Роль ML |
|---|---|---|---|
| Торнадо | минуты-часы | Warning ~70% | улучшение детекции |
| Flash flood | 1-6 часов | умеренная | nowcasting |
| Тайфун/Ураган | 3-7 дней | высокая (NWP) | track refinement |
| Наводнение (речное) | 24-72 часа | высокая | ML correction |
| Землетрясение | дни (спорно) | низкая | aftershock forecasting |
| Лесной пожар | 24-72 часа | умеренная | spread modeling |
| Лавина | часы-дни | умеренная | NWP + snow model |
| Цунами | минуты | детекция | early warning |
Предсказание ураганов и тайфунов
Численное моделирование погоды (NWP) — основа: ECMWF IFS, GFS, Hurricane WRF — физические модели, решающие уравнения гидродинамики атмосферы. AI применяется как post-processing.
GraphCast (DeepMind, 2023):
# GraphCast превзошёл ECMWF по среднеглобальному прогнозу за 10 дней
# Архитектура: Graph Neural Network на сетке ERA5
# Входные данные: два временных шага ERA5 (37 уровней атмосферы)
# Выходные: прогноз на 6-часовые шаги
# Для тайфунов: ML-коррекция трека NWP
# NWP track + ensemble spread → вероятностный конус неопределённости
Rapid Intensification Prediction: Внезапное усиление урагана (RI: рост ветра > 30 кт за 24 часа) — опасная ситуация. Признаки RI:
ri_features = {
# Океанические
'sea_surface_temp': sst,
'ocean_heat_content': ohc_26c, # тепло до изотермы 26°C
'cold_wake_presence': cold_upwelling_flag,
# Атмосферные
'wind_shear_200_850hpa': vertical_wind_shear,
'relative_humidity_500hpa': rh_mid_troposphere,
'outflow_channel_quality': upper_outflow_structure,
# Структура шторма
'warm_core_depth': radar_warm_core,
'symmetry_index': vortex_symmetry,
'current_intensification_rate_kt24h': current_di
}
ri_probability = lgbm_ri_model.predict_proba([ri_features])[0][1]
Предсказание наводнений
Ensemble rainfall-runoff:
from neuralhydrology.modelzoo import LSTM as HydroLSTM
# NeuralHydrology: LSTM для гидрологического моделирования
# Обучение на данных CAMELS (Catchment Attributes and Meteorology)
# Входные: осадки, температура, снег, почвенная влага, атрибуты бассейна
# Выходные: расход воды (Q) на горизонт 24-72 часа
hydro_lstm = HydroLSTM(
input_size=len(forcing_features),
hidden_size=256,
output_size=1,
initial_forget_bias=3 # важно для гидрологии
)
Flash Flood Guidance (FFG) ML-коррекция: Почвенная влага + антецедентные осадки → скорректированный FFG threshold. При P > FFG → flood imminent.
Пространственная модель — Graph Neural Network:
# Речная сеть как граф: узлы = гидропосты, рёбра = гидрологические связи
# DCRNN или Graph WaveNet для распространения паводковой волны
# Входные данные: уровень воды на всех постах вверх по течению
# Прогноз: уровень через 6/12/24 часа на целевых постах
from torch_geometric.nn import GCNConv
import torch
class FloodPropagationGNN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.conv1 = GCNConv(input_dim, hidden_dim)
self.lstm = nn.LSTM(hidden_dim, hidden_dim, batch_first=True)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x, edge_index):
# x: (nodes, time_steps, features)
gcn_out = torch.relu(self.conv1(x, edge_index))
lstm_out, _ = self.lstm(gcn_out)
return self.fc(lstm_out[:, -1, :])
Предсказание землетрясений
Aftershock Forecasting (ETAS модель): Краткосрочный прогноз: Epidemic Type Aftershock Sequence (ETAS) — статистическая модель последовательности афтершоков после главного толчка.
# ETAS параметры: μ (фон), K, c, α (число афтершоков), p (decay exponent)
# DeepShake (Google): DNN превзошла ETAS по прогнозу интенсивности афтершоков
def etas_aftershock_rate(t, t_main, K=0.01, c=0.001, alpha=1.0, p=1.1):
"""
Ставка афтершоков в момент t после главного события
Omori-Utsu law
"""
return K * np.exp(alpha * magnitude_main) / (t - t_main + c)**p
Early Warning (P-wave detection):
- Первичная P-волна движется быстрее S-волны и вызывает меньший ущерб
- После детекции P-волны на сейсмографе → 5-60 секунд до прихода S-волны
- Japan JMA, USGS ShakeAlert: ML на потоке сейсмических данных → alert
Предсказание лесных пожаров
Fire Spread Modeling:
def cellular_automaton_fire_spread(ignition_cells, fuel_map, wind_speed,
wind_direction, terrain_slope, humidity):
"""
CA-модель распространения огня: клетки 30m × 30m
Вероятность перехода огня на соседнюю клетку зависит от:
- запаса горючего (NDVI, тип растительности)
- влажности топлива (FWI, FFMC)
- ветра (скорость + направление)
- рельефа (огонь быстрее на склоне вверх)
"""
spread_probability = (
fuel_factor(fuel_map) *
wind_factor(wind_speed, wind_direction) *
moisture_factor(humidity) *
slope_factor(terrain_slope)
)
return spread_probability
Phoenix/FARSITE: физические модели распространения огня. ML-дополнение: уточнение параметров по спутниковым данным в реальном времени.
Цунами — раннее предупреждение
Детекция по сейсмическим данным:
# Pacific Tsunami Warning Center: DART-буи + сейсмографы
# Алгоритм: M > 7.5 + epicenter underwater → tsunami potential
# ML: быстрая оценка tsunami potential (<5 мин) по P-wave magnitude
def rapid_tsunami_potential(seismic_data, magnitude, depth_km, mechanism):
"""
Tsunamigenic probability: быстрая оценка
"""
if magnitude < 7.0:
return 0.0
if depth_km > 70:
return 0.05 # глубокие события реже вызывают цунами
# ML-классификатор на CMT (Centroid Moment Tensor) solution
cmt_features = extract_cmt_features(seismic_data)
tsunami_prob = tsunami_clf.predict_proba([cmt_features])[0][1]
return tsunami_prob
Инфраструктура предупреждения
Multi-hazard Early Warning System:
class MultiHazardWarningSystem:
def __init__(self, models, notification_channels):
self.models = models
self.channels = notification_channels
def process_incoming_data(self, data_stream):
alerts = []
for hazard_type, model in self.models.items():
risk = model.assess(data_stream)
if risk.probability > risk.threshold:
alert = Alert(
hazard=hazard_type,
severity=risk.to_severity(),
affected_zones=risk.impact_zones,
eta=risk.time_to_impact
)
alerts.append(alert)
self.dispatch_alert(alert)
return alerts
def dispatch_alert(self, alert):
for channel in self.channels:
channel.send(alert)
# Каналы: SMS (Cell Broadcast), сирены, push-notifications,
# РСЧС/МЧС API, Emergency Alert System
Интеграция с ГИС:
- Зоны поражения → GeoJSON → публикация через GeoServer
- Реальное время: WebSocket обновления для карты
- Населённые пункты в зоне риска → список эвакуации с численностью населения
Данные:
- Copernicus Emergency Management Service: спутниковые данные по активным катастрофам
- NASA FIRMS: hotspots пожаров в реальном времени
- GDACS: Global Disaster Alert and Coordination System
Сроки: интеграция с NWP-данными, базовые пороговые предупреждения (flood, fire), дашборд + SMS алерты — 6-8 недель. Полная мультирисковая система (ML flood, fire spread, RI hurricanes, aftershocks), GNN, GIS-зонирование, РСЧС API — 5-7 месяцев.







