Предсказывать погоду — дело неблагодарное. Рано или поздно каждый из нас сталкивается с ошибками в прогнозе, избежать которых трудно из-за постоянного недостатка информации и ограничений метеорологического оборудования. Но там, где не справляется техника, способен помочь человек.

Сегодня мы начинаем раскатывать новую версию прогнозирования осадков в Яндекс.Погоде. Ключевое изменение — внедрение технологии Meteum 2.0, которая впервые в истории метеопрогноза полагается не только на данные технических средств, но и на сообщения пользователей. В это сложно поверить, но сигналы пользователей оказались не менее полезны для качества прогнозов, чем данные радаров и спутников. Благодаря этому краткосрочный прогноз осадков стал точнее на 20%, а значит, люди будут реже попадать под дождь.

Присаживайтесь поудобнее: сейчас расскажу обо всём по порядку. 

Про метеостанции, радары и спутники

Шесть лет назад первая версия технологии Meteum позволила нам начать строить собственный прогноз погоды, объединив опыт Яндекса в машинном обучении, прогнозы нескольких независимых поставщиков и данные метеостанций. Мы пошли на такой шаг, потому что все модели и источники прогнозов были не идеальны, основаны на эмпирически подобранных формулах и время от времени ошибались. Но эти ошибки не случайны. Между ними можно искать закономерности.

Вот как это работает. У нас есть пять источников прогноза (на старте было три) из национальных центров США, Канады, Японии и ЕС, а также наш собственный прогноз, рассчитываемый на основе модели с открытым исходным кодом WRF.

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

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

Такой подход имеет очевидное ограничение: Meteum хорошо изучит локальные особенности там, где много станций, и хуже там, где станций мало. Посмотрите на карту расположения метеостанций: из-за неравномерного покрытия точность прогноза погоды в Центральном федеральном округе будет лучше, чем на севере Сибири, где станций практически нет.

Для прогноза осадков это ограничение становится большой проблемой, так как, кроме пространственной разнородности, важна ещё и частота измерений. В отличие от температуры, которая меняется равномерно как при удалении от метеостанции, так и со временем, осадки — это условно дискретная величина. Либо они есть, либо их нет, прямо как в стихотворении Винни-Пуха про мёд. Кроме того, метеостанции фиксируют осадки не постоянно, а с определенной периодичностью. Это может происходить либо с помощью метеоролога, который раз в 3 часа описывает состояние погоды, либо с помощью специального ведра, которое накапливает влагу в течение 12 часов. В результате дождь может просто «проскочить» между соседними метеостанциями или между сроками измерения на них.

Качественного локального прогноза осадков на данных с метеостанций не построить. Поэтому в Яндекс.Погоде мы не используем эти данные для прогноза осадков на ближайшие часы, а полагаемся на другие инструменты: метеорологические радары и геостационарные спутники. Они покрывают большие области и чаще обновляют данные (каждые 10–15 минут). Получается, что мы даже выигрываем в покрытии, частоте и, как следствие, в качестве прогноза, используя не прямые измерения, а косвенные.

Хотя и тут без ограничений не обходится. К примеру, радары измеряют отражённые от мельчайших капелек воды радиоволны. Но всё, что окажется на пути луча (от насекомых и птиц до самолётов, зданий и даже Wi-Fi-роутеров, работающих на той же частоте), может исказить измерение. Со спутниками всё ещё сложнее: на фотографиях из космоса нужно суметь найти осадки, так как далеко не из каждой тучи идёт дождь. Кстати, более подробно о нашей работе с радарами и спутниками мы уже рассказывали на Хабре.

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

Казалось бы, нам оставалось только смириться с этими ограничениями. Но к нам на помощь пришли люди.

Про людей

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

Если раньше мы только спрашивали, копили статистику и использовали сообщения в качестве народного контроля — то теперь готовы прогнозировать погоду с помощью ваших ответов.

Мы полностью меняем саму постановку задачи: теперь сообщения пользователей о погоде становятся в один ряд с профессиональными измерительными приборами. И если вернуться к изначальной задаче, то мы можем обучать наш Meteum предсказывать не только погоду на метеостанции, но и сообщения о дожде от пользователей. Если описать это на языке, понятном ML-специалистам, то мы берём в качестве фич прогнозы погоды, спутниковые измерения, радары, другие влияющие на погоду фичи, например высоту гор и расстояние до ближайшего радара, а в качестве таргетов — сообщения о дожде от пользователей, после чего обучаем CatBoost на таком датасете, а затем применяем обученную модель на сетке 0,02° ? 0,02°, чтобы получить карту мест, где идёт дождь.

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

Сегодня мы начинаем раскатывать нашу новую технологию Meteum 2.0, которая включает в себя два ключевых изменения.

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

Во-вторых (и это самое главное!) — теперь мы обучаем модель предсказывать не показания метеостанций, а сообщения пользователей о погоде. Это логично, ведь наши пользователи — это люди, а не станции. Такой прогноз уже работает для дождя и напрямую влияет на карту осадков. Кроме того, мы используем сообщения с высоким кредитом доверия для корректировки ошибочной карты осадков в реальном времени, что позволяет улучшить точность карты до 20% в случае внезапного дождя. Человеку, который уже оказался под дождём, это мало поможет, но это полезно для жителей соседних районов.

К примеру, вот реальный случай, который произошёл 2 июля в Екатеринбурге. На кадре слева — результат работы модели без учёта сообщений пользователей. По центру — уже с учётом. Как вы можете заметить, грозную дождливую тучу удалось поймать только с помощью наших пользователей.

Сейчас мы получаем более миллиона сообщений об осадках в день (в особо дождливые дни — более 2,5 миллионов). Для сравнения: метеостанции присылают около 8 тысяч наблюдений в день.

На гифке ниже мы визуализировали сообщения за 28 июня, когда в Европейской части страны начались долгожданные дожди.   

Если оставить только сообщения об осадках, то хорошо заметно, как перемещался фронт дождя.

Заключение

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

Meteum 2.0 позволяет каждому из нас внести вклад в прогноз погоды и сделать его ещё чуть-чуть точнее и полезнее для всех. Возможно, в будущем сообщения обычных пользователей станут во всём мире таким же стандартным источником метеоданных, как и данные с метеостанций. Хочется верить, что сегодня мы приблизили это будущее.

Спасибо за помощь!