Предсказывать погоду — дело неблагодарное. Рано или поздно каждый из нас сталкивается с ошибками в прогнозе, избежать которых трудно из-за постоянного недостатка информации и ограничений метеорологического оборудования. Но там, где не справляется техника, способен помочь человек.  Сегодня мы начинаем раскатывать новую версию прогнозирования осадков в Яндекс.Погоде. Ключевое изменение — внедрение технологии 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 позволяет каждому из нас внести вклад в прогноз погоды и сделать его ещё чуть-чуть точнее и полезнее для всех. Возможно, в будущем сообщения обычных пользователей станут во всём мире таким же стандартным источником метеоданных, как и данные с метеостанций. Хочется верить, что сегодня мы приблизили это будущее.  Спасибо за помощь! Руководитель группы Метеопрогнозирования