Вопрос точности прогнозирования осадков — один из ключевых вызовов в метеорологии. Мы все сталкиваемся с ситуациями, когда дождь буквально появляется «из ниоткуда», несмотря на оптимистичный прогноз. Особенно остро эта проблема проявляется летом, когда проливные кратковременные дожди сложно поймать заблаговременно. Об этой проблеме знает и наша команда Яндекс Погоды и ищет способы решить её.

Если бы меня попросили назвать слово, которое лучше всего подходит для прогноза осадков, я бы с уверенностью выбрал «сложность». В осадках она подстерегает нас всюду: от способов прогнозирования до оценки качества полученного прогноза. Потому в научных статьях про нейросетевой прогноз погоды (GraphCast, Pangu Weather, Aurora и т. д.) осадки или совсем не участвуют, или прогнозируются раз в 6 часов без упоминания о метриках. Либо же создаётся локальная модель под регион (например, MetNet для США).

В Яндекс Погоде мы используем множество ML‑моделей в рамках наших технологий прогноза Метеум и OmniCast, постоянно их улучшаем и постепенно заменяем на более продвинутые, повышая качество прогноза для наших пользователей. Недавно мы научились прогнозировать грозы, а до этого — улучшили прогноз температуры за счёт использования пользовательских метеостанций. А сегодня я и моя команда хотим представить новые модели для прогноза осадков и рассказать, почему мы на них перешли и как этот переход повлиял на качество.

В процессе нашей работы над осадочными моделями, мы пришли к разделению прогноза на три части:

  • Наукаст: на первые два часа с шагом 10 минут.

  • Прогноз на три дня: от 2 до 72 часов с шагом 1 час.

  • Прогноз на десять дней: от 72 до 240 часов с шагом 3 часа.

Для каждого из трёх прогнозов мы используем отдельную модель. Так для наукаста мы используем нейросетевую модель на основе исторических данных об осадках. Подробнее про основы наукаста можно почитать в одной из наших прошлых статей. С того времени он был значительно улучшен, в частности добавлены пользовательские репорты и грозы.

Для оставшихся двух прогнозов мы применяли две различные модели CatBoost. И сейчас модель прогноза на трое суток мы решили заменить нейросетью, а точнее даже двумя: на 2–12 и 12–72 часа. Ниже я расскажу про мотивацию такого перехода, архитектуру новой модели и, конечно же, про прирост метрик.

Что может быть лучше CatBoost?

Обычно прогноз погоды считается при помощи глобальных (на весь мир) численных моделей прогноза погоды (numerical weather prediction или NWP), которые решают систему уравнений гидрогазодинамики в частных производных и запускаются на суперкомпьютерах. Если же рассматривать нейросетевой прогноз погоды (не только осадков), то его можно условно разделить на два направления:

  1. Замена глобальных численных моделей (например Aurora от Microsoft).

  2. Корректировка прогноза глобальных моделей (и иногда локальных, и не обязательно численных).

Первый подход предполагает создание модели прогноза всех основных параметров на поверхности Земли и на нескольких уровнях давления (таким образом, в моделях описываются различные высоты), часто в сумме получается более сотни переменных на выходе.

Во втором подходе прогнозируется только интересующая нас переменная. При этом на вход подаются прогнозы глобальных моделей и другие фичи (наблюдения, топография, климат и т. п.). В отличие от первого варианта, такой подход менее требователен к ресурсам и позволяет быстрее получить результат, готовый к внедрению в прод.

В итоге мы решили пойти по второму пути и создать модель, использующую на входе прогнозы численных моделей и радарные наблюдения и сформулировали к ней следующие требования:

  • прогноз на первые 72 часа с шагом один час;

  • использование выпавших осадков за час (в мм жидкой воды) в качестве таргета;

  • прогноз на весь мир по ячейкам 0,05 × 0,05 градуса (по широте и долготе, что соответствует примерно 5 км в районе экватора).

Как я уже упоминал, прогноз осадков — штука крайне непростая даже для численных моделей. Особенно если речь идёт о задаче регрессии, то есть о количественном прогнозе выпавших осадков в мм. И вот только некоторые из сложностей, с которыми придётся столкнуться при создании осадочной ML‑модели:

  • Распределение мм/ч содержит много нулей и вытянутый хвост: оно сильно зависит от времени и локации.

  • У осадков вероятностная природа и детерминированные модели, которые всегда отдают один и тот же прогноз для фиксированных входных данных, склонны их размывать. В итоге поля осадков имеют более гладкую форму с меньшим числом деталей, и снижается максимальная амплитуда прогнозируемых значений. Во многих статьях предлагают использовать GAN или диффузионные модели для выучивания исходного вероятностного распределения осадков и далее сэмплировать из него отдельные прогнозы.

  • Для обучения моделей часового разрешения мало качественных данных. В основном мы можем использовать только радары, которые покрывают относительно небольшую часть Земли. Помимо них существуют станции, но они обычно расположены разрежённо и чаще имеют период измерения более часа (в России обычно 12 часов).

  • Качество прогноза осадков сложно оценивать из‑за большой изменчивости распределения по времени и пространству (где‑то осадки в 1 мм/ч считаются редкими и сильными, а где‑то, наоборот, частыми и слабыми), поэтому некоторые метрики зависят от климатических параметров в точке оценки (например SEEPS). Так, например, штраф за пропуск дождя в засушливом регионе будет больше, чем в тропиках, где бывают целые сезоны дождей.

CatBoost выдавал хорошее качество, но при попытке улучшить прогноз мы упирались в ряд ограничений:

  • сложно добиться корректного воспроизведения пространственно‑временной структуры полей осадков при поточечном (когда на выходе модели мы получаем прогноз только в одной ячейке) обучении и применении;

  • сложный ручной фичеинжениринг;

  • сложно внедрять подходящие функции потерь.

Нас это не устраивало: такие сложности тормозили развитие модели, поэтому мы взялись думать, какие есть варианты.

Исходное распределение осадков (слева) и нормальное распределение, которое мы хотим получить в итоге (справа)
Исходное распределение осадков (слева) и нормальное распределение, которое мы хотим получить в итоге (справа)

Модели прогноза осадков (на самом деле не только осадков) можно разделить на детерминированные и вероятностные. Детерминированная модель выдаёт в прогнозе для каждой точки пространства и времени одно значение. К примеру, сколько мм осадков выпадет за определённый час на заданной территории. Вероятностная модель позволяет просчитать несколько вариантов развития событий в прогнозе и в случае осадков, как результат, позволяет оценить, в скольких случаях из 100 выпадут те или иные объёмы осадков.

На первом этапе мы решили создавать детерминированную модель, оставив пока в стороне идею с вероятностным прогнозом. Во‑первых, многие подходы для создания вероятностных моделей всё равно предполагают наличие детерминированной модели в качестве основы, так как она лучше прогнозирует общую форму и движение осадков. Во‑вторых, мы хотим получить хороший бейзлайн в виде детерминированной модели и после улучшить его с помощью вероятностных подходов.

В ходе предварительных экспериментов мы решили разделить нашу модель на две. Далее рассмотрим эти модели подробнее и поговорим о причинах такого разделения.

Как мы прогнозируем осадки

Модель для прогноза на первые 12 часов

В качестве основы мы взяли архитектуру Temporal Attention Unit (TAU), используемую в нашем наукасте и прогнозе гроз. TAU обрабатывает всю необходимую последовательность кадров (в нашем случае осадочных полей) целиком, используя отдельно статическое и динамическое внимание (attention). В результате весь прогноз генерируется за один шаг.

Почему мы просто не взяли модель наукаста и не увеличили горизонт прогноза, тем более что в основе лежит та же архитектура? В теории такой подход возможен, но добавляет множество новых сложностей. В первую очередь за счёт разного пространственного и временного разрешения, а также жёстких требований к скорости расчёта наукастовой модели из‑за 10-минутного разрешения и частого обновления фичей. Мы решили, что сложностей нам уже хватает, и принялись создавать отдельную модель.

Архитектура модели Temporal Attention Unit. Источник
Архитектура модели Temporal Attention Unit. Источник
Алгоритм получения прогноза на 12 часов
Алгоритм получения прогноза на 12 часов

Рассмотрим архитектуру нашей модели. У неё есть два выхода: один прогнозирует накопленные за час миллиметры, второй выдаёт маски для осадков разной силы (слабые, умеренные, сильные), а именно, прогнозирует, есть ли осадки с интенсивностью выше некоторого порога (мм/ч). Первая из этих масок (т. е. для слабых осадков) показывает наличие осадков в целом в каждой из точек. Для получения финального прогноза мы берём эту маску и выставляем значения мм/ч из первого выхода, т.е регрессионного. Такой прогноз внутри маски позволяет исключить нули из распределения в таргете при обучении регрессии: мы считаем функцию потерь только в точках, где накопленные за час осадки превысили минимальный порог. Это позволяет преобразовать распределение в более нормальный вид, облегчая тем самым работу модели.

Может возникнуть вопрос: раз мы используем только первую маску, то зачем модель выдаёт остальные? Причина в том, что прогноз масок для разных порогов улучшает качество финального прогноза регрессии мм/ч. Это один из тех случаев в машинном обучении, когда решение дополнительной задачи улучшает качество основной.

Из основных фичей на вход подаются радарные данные за прошлые 6 часов в тех областях, где они есть, и выбранные переменные из прогноза нескольких NWP‑моделей, такие как выпавшие осадки, давление и температура. Модель изначально обучалась только к таргетам от радарных данных.

Такой подход даёт относительно неплохой результат, особенно в области радаров, где модель усваивает факт осадков из прошлого в процессе прогноза. Однако мы выявили ряд проблем:

  1. Занижение интенсивности. Модель предпочитает не прогнозировать сильный дождь.

  2. Систематическое снижение объёма и площади осадков по мере увеличения дальности прогноза.

  3. Не очень хорошая согласованность прогноза по пространству и времени. К примеру, слишком большая разница в прогнозе между последовательными часами.

  4. И самое главное: качество хуже, чем у текущей модели.

Для решения возникших проблем мы решили использовать регуляризацию и привязать прогноз нашей модели к численному прогнозу, чтобы модель не могла слишком сильно от него отклоняться. Для каждой головы мы создали второй таргет на основе прогноза численной модели.

Ключевой момент здесь — веса между каждой парой лоссов, где один лосс сравнивает прогноз с радарами, а второй — с численным прогнозом. Такие веса в нашей модели не являются статическими, а зависят от прогнозов численных моделей в конкретной точке и номера часа нашего прогноза. То есть мы пытаемся помочь модели определиться, на какой таргет лучше смотреть в каждой точке: например, в зависимости от того, насколько согласованы между собой численные прогнозы в окрестности этой точки и насколько далеко по времени мы от входных радарных данных.

В итоге с помощью такого трюка нам удалось победить возникшие проблемы: модель стала не бояться немного промахнуться, выходное распределение отрастило правильный «хвост», объём осадков перестал падать, сам прогноз стал радовать глаз, и мы наконец‑то смогли победить продовую модель по выбранным метрикам.

Но об оценке качества чуть позже, а пока взглянем внимательнее на нашу вторую модель для прогноза с 12-го по 72-й час, и поймём, зачем она вообще нужна.

Модель для прогноза с 12 по 72 час

Проведя первые эксперименты, мы убедились, что с увеличением дальности прогноза обучаться к часовым данным становится сложнее даже с использованием трюка с привязкой к прогнозу глобальной численной модели. Основная причина в том, что качество прогноза самих глобальных моделей со временем падает и попасть в часовые данные становится всё сложнее.

Мы подобрали точку во времени для разделения и создали две модели: до 12 часов мы обучаем модель к часовым радарным данным, а далее — к накопленным осадкам за несколько часов, из которых выводим часовые осадки отдельной процедурой.

Таргетом для модели является количество осадков, выпавших за 12 часов. Одной из причин для выбора такого периода была идея использовать в обучении станции, период накопления которых часто составляет 1, 3, 6 или 12 часов. Это позволяет нам создавать дополнительные 12-часовые таргеты по всему миру, а не только в радарной зоне.

Для наглядности ниже приведён график метрики IoU (Intersection over Union). Она рассчитана относительно радаров в зависимости от периода накопления осадков в часах для нескольких популярных численных моделей.

Зависимость метрики IoU факта осадков для различных численных моделей в зависимости от периода накопления осадков в часах (больше — лучше)
Зависимость метрики IoU факта осадков для различных численных моделей в зависимости от периода накопления осадков в часах (больше — лучше)

Видно, что значение IoU растёт нелинейно по мере увеличения периода накопления (сначала быстро, потом замедляется) и при 12-часовом периоде оно заметно выше, чем при часовом. Это связано с тем, что мы начинаем прощать модели промахи по времени и пространству, связанные, например, с запаздыванием или опережением прохождения поля осадков. При этом мы не теряем информацию о самом факте осадков.

Таким образом, второй модели становится проще спрогнозировать 12-часовые интервалы вместо часовых. В совокупности с такой же привязкой к глобальному численному прогнозу с помощью дополнительных лоссов мы смогли выбить качество выше, чем у текущей продовой модели. Однако для первых 12 часов такой подход оказался хуже по качеству, и мы окончательно остановились на варианте двух моделей.

Но как же нам удаётся получать часовые осадки из 12-часовых? Тут нам понадобится немного математики. Рассмотрим прогнозы для одной точки: пусть у нас есть прогнозы 12-часовых осадков с шагом в один час за периоды [t; t+12], [t+1; t+13], … [t+12; t+24]. Количество таких прогнозов зависит от горизонта прогноза, в нашем случае 72 часа, а значит внутри поместится 60 12-часовых отрезков.

Составим систему линейных алгебраических уравнений (СЛАУ), в которых запишем суммы часовых осадков. В каждой строке будет уравнение для одного из прогнозов модели. Обозначим прогноз накопленных за час i осадков за f_i, а 12-часовой прогноз модели с часа i за F_i = f_i + f_{i+1} + … + f_{i+11}, где i от 0 до максимальной длительности прогноза минус 12, целиком система записывается в виде:

\begin{cases}f_0\phantom{0} + f_1\phantom{0} + \cdots + f_{11} = F_0\phantom{0} \\f_1\phantom{0} + f_2\phantom{0} + \cdots + f_{12} = F_1\phantom{0} \\\vdots \\f_{60} + f_{61} + \cdots + f_{71} = F_{60}\end{cases}

Видно, что система неполная: число неизвестных больше числа уравнений. Тем не менее можно восстановить значения часовых накопленных осадков с определённой точностью, подобрав параметры регуляризации алгоритма решения.

Вернёмся к модели прогноза. Интересно, что в качестве модели для прогноза 12-часовых осадков лучше всего себя показал простой U‑Net с небольшими модификациями, одним регрессионным выходом и парой MAE‑лоссов (к радарам со станциями и к глобальному численному прогнозу). Веса для такой пары лоссов вычисляются примерно таким же алгоритмом, как и в модели на первые 12 часов.

Архитектура U-Net. Источник
Архитектура U‑Net. Источник

А что по метрикам?

Разговор про осадочные метрики требует отдельной статьи, так что тут, пожалуй, остановлюсь на основных понятиях. Есть различные инициативы по созданию осадочных метрик, такие как Inter‑Comparison Project (ICP), в рамках которых авторы предлагают варианты разной сложности. Например, есть варианты по использованию результатов решения задачи оптимального транспорта.

Описать качество осадков одним числом крайне сложно, поэтому мы смотрим на группу метрик по радарам и станциям отдельно по климатическим зонам, странам и сезонам. Также отдельно были проработаны специальные тесты для проверки внутренних свойств получаемых моделей и процедура визуальной оценки карты прогнозов.

Чтобы не закапываться в сложности, я сначала покажу, как усвоение радаров улучшает качество прогноза новой модели на первых шагах. А затем немного поговорим о том, как можно оценить качество модели более глобально по метеостанциям.

Intersection over Union (IoU)

Выше я уже упоминал эту метрику, тут остановлюсь на ней подробнее. С помощью нее можно продемонстрировать влияние исторических радарных данных на входе. Для её расчёта метрики нужно бинаризовать прогноз и факт по некоторому порогу в мм, получить две маски наличия осадков и далее посчитать отношение пересечения масок к объединению:

Используя разные пороги, мы можем оценить, насколько хорошо наша модель прогнозирует осадки разной интенсивности. Есть более продвинутые варианты подобных бинарных метрик, такие как FSS (Fractions Skill Score), но для наглядности и интерпретации результатов IoU кажется наиболее простой.

Возьмём порог 0,1 мм/ч, который часто используется в качестве критерия наличия осадков, и посмотрим, как метрика IoU меняется на первых часах прогноза новых моделей. Для сравнения я добавил на график значения для одной из наиболее известных и стабильных по качеству глобальных численных моделей:

IoU по часам прогноза. Чем больше значение, тем лучше. Красная линия — наша новая модель, зелёная — предыдущая, синяя — глобальная модель

Может показаться, что IoU в районе 0,3–0,4 — это очень плохо. Но, как я уже упоминал ранее, осадки плохо поддаются прогнозу, и для них это вполне хорошие значения. За счёт усвоения радарных данных качество в первые часы стало заметно выше, далее преимущество постепенно спадает, выходя на плато, но оставаясь выше, чем у предыдущей модели. На 15-м часе мы достигаем качества, с которого начинает предыдущая модель.

SEEPS

Для общей оценки качества мы воспользуемся метрикой SEEPS (Stable Equitable Error in Probability Space). Её разработали в Европейском центре среднесрочных прогнозов погоды (ECMWF) для оценки прогноза 24-часовых накопленных осадков по станциям. Она учитывает климатическое распределение в точке прогноза и распределение на выходе модели (подробнее можно почитать в оригинальной статье).

Мы взяли за основу данный подход и адаптировали его для оценки 12-часовых накопленных осадков. Как можно видеть по картинке ниже, вероятность осадков по миру сильно меняется, так же как и распределение выпавших мм, соответственно, поэтому в разных местах стоит оценивать модели по‑разному.

Поле вероятности выпадения осадков внутри 12-часового интервала в июле на основе данных за последние 30 лет
Поле вероятности выпадения осадков внутри 12-часового интервала в июле на основе данных за последние 30 лет

Если пренебречь оценкой прогноза экстремальных осадков (что является отдельной задачей по прогнозированию опасных явлений), SEEPS часто рассматривают как единственную метрику оценки качества осадочных моделей. Она используется Всемирной метеорологической организацией WMO и является основной метрикой для оценки осадков детерминированных нейросетевых моделей в популярном бенчмарке WeatherBench от Google. Прогноз считается хорошим при значении SEEPS < 0,4.

Ниже для примера приведён график SEEPS полного прогноза двух моделей по месяцам для европейского региона WMO в сравнении с прогнозом нашей предыдущей модели:

SEEPS по месяцам. Чем меньше, тем лучше. Красная линия — новая модель, зелёная — предыдущая, синяя — численная модель
SEEPS по месяцам. Чем меньше, тем лучше. Красная линия — новая модель, зелёная — предыдущая, синяя — численная модель

Помимо нашей предыдущей модели, мы сравнивались и с другими глобальными моделями по различным метрикам. В среднем наша модель показывает наилучшие результаты, особенно на первых 6 часах в радарной зоне.

Конечно, речь идёт о средних метриках. На деле бывают случаи, когда прогноз может ошибаться по времени и месту из‑за сложности процессов в атмосфере. Дело в том, что порой процессы в атмосфере меняются настолько быстро, что модели просто не успевают на это отреагировать.


Прогноз осадков по‑прежнему остаётся одной из самых сложных и актуальных задач для метеорологических сервисов: радарное покрытие ограничено, у спутниковых данных часто недостаточное разрешение и задержки, а метеостанции не всегда дают своевременную и подробную информацию. Особенно это заметно летом, когда внезапные и локальные дожди сбивают с толку даже самые продвинутые модели прогноза.

В Яндекс Погоде мы смогли не только повысить точность почасового прогноза осадков на трое суток, но и значительно улучшить распознавание и детектирование летних, кратковременных дождей благодаря использованию новой нейросетевой архитектуры. Мы преодолели ряд ограничений предыдущих моделей и, по ряду ключевых метрик, добились улучшения результатов.

Однако, как и вся задача погодного прогноза, эта история не про полное решение, а про постоянное развитие. Мы продолжаем работать над снижением ошибок в прогнозах на малых масштабах и работаем над согласованностью на стыке наших моделей, чтобы достоверно и с необходимой заблаговременностью предупреждать о различных осадочных событиях наших пользователей.

Поэтому пользуйтесь новой системой прогноза осадков и делитесь впечатлениями и обратной связью — мнение пользователей напрямую влияет на наши последующие решения. Давайте вместе сделаем прогноз более точным и полезным!

Комментарии (5)


  1. Fizikoleg
    06.08.2025 10:02

    Почему в последние года в Яндекс.Погода заметно ухудшилось качество предсказания дождя?


  1. dimastarkoff
    06.08.2025 10:02

    А когда планируется внедрение данной модели в прод? Можно ли будет посмотреть количество выпавших осадков в миллиметрах?


  1. bakhirev
    06.08.2025 10:02

    делитесь впечатлениями и обратной связью

    Делюсь: работает 50/50. Часто выходя из дома попадал под дождь, хотя прогноза на ближайшие 4 часа был норм. Последний раз на прошлой недели (попал под ливень).


    1. dstefeev Автор
      06.08.2025 10:02

      Спасибо за фидбек, напишите пожалуйста локацию и примерное время, поисследуем этот случай.


  1. nv13
    06.08.2025 10:02

    В Яндекс Погоде мы смогли не только повысить точность почасового прогноза осадков на трое суток, но и значительно улучшить распознавание и детектирование летних, кратковременных дождей благодаря использованию новой нейросетевой архитектуры. Мы преодолели ряд ограничений предыдущих моделей и, по ряду ключевых метрик, добились улучшения результатов.

    Уже три недели в деревне на Волге - точность прогноза ужасает. К примеру выехали в 4 на рыбалку, ничего не предвещало, так сказать, но через 1,5 часа попали в грозу и ливень, промокнув до трусов. Сегодня прогноз давал небольшой дождь до обеда, а потом сухо, по факту с 4 утра было сухо, а ливень прошёл с час назад. Мне кажется вы дожди рисуете по кнопке на телефоне, а потом просто добавляете погрешности по направлению ветра))

    Чтобы предсказывать погоду необходима сеть наблюдения - доплеровские метеорадары, которых у нас практически нет, спутники, сети и вычислительные мощности. Почему Яндекс сразу за погоду то взялся со своими нейронками, начал бы с биржевых торгов, там точно проще вся эта нелинейщина и цифры уже в интернете))