Предсказывать погоду — дело неблагодарное. Рано или поздно каждый из нас сталкивается с ошибками в прогнозе, избежать которых трудно из-за постоянного недостатка информации и ограничений метеорологического оборудования. Но там, где не справляется техника, способен помочь человек.
Сегодня мы начинаем раскатывать новую версию прогнозирования осадков в Яндекс.Погоде. Ключевое изменение — внедрение технологии 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 позволяет каждому из нас внести вклад в прогноз погоды и сделать его ещё чуть-чуть точнее и полезнее для всех. Возможно, в будущем сообщения обычных пользователей станут во всём мире таким же стандартным источником метеоданных, как и данные с метеостанций. Хочется верить, что сегодня мы приблизили это будущее.
Спасибо за помощь!
quaer
Если загрузить тележку мобильниками с данными от «людей», то можно будет и создавать погоду в нужном месте и в нужное время?
avgan Автор
Хороший вопрос. В этом месте у нас есть защита от фрода, которая должна аннигилировать тележку :)
quaer
А эта защита отличит людей на пикнике над которыми пошёл дождь от людей на пикнике, которые хотят, чтоб все думали, что над ними идёт дождь?
avgan Автор
В большинстве случаев случаев должна справляться.
Rahovski
Если не секрет, можете сказать, по каким признакам идет отсеивание вброса данных от группы реальных пользователей?
avgan Автор
Мы обязательно про это расскажем, но чуть-чуть попозже, когда обкатаем в боевых условиях
Rahovski
Обязательно ждем. Спасибо. :)
altervision
У Яндекс.Навигатора тоже есть защита от фрода. В результате на трассе в Нижний Новгород он на пятой камере говорит: «Вы их слишком часто добавляете» - а там ещё десяток на очереди заботливо расставлен вдоль дороги. Не ту тележку аннигилирует :(