Яндекс использовал нейросеть и научился прогнозировать осадки с точностью до минут
Под катом я расскажу о том, что такое наукастинг и как мы над ним работали.
Текущая погода влияет на огромное количество наших ежедневных решений. Если за окном сильный снегопад, мы раздумываем, как нам поехать на работу — на машине или на общественном транспорте. Глядя в окно, решаем, брать ли с собой зонт и нужна ли непромокаемая куртка. Даже стоя на выходе из метро в проливной дождь, мы гадаем, когда он кончится. Если через пять минут — то можно подождать и прийти на встречу в сухом костюме, а если через полчаса — то придётся либо промокнуть, либо опоздать. Для всех этих небольших, но важных решений нам нужна максимально точная информация о том, какая погода сейчас и как она будет меняться в ближайшей перспективе. Вы наверняка сталкивались с ситуацией, когда в одном районе города светит солнце, а в другом льёт проливной дождь с грозой.
Как это делалось раньше
Поскольку текущая погода важна нашим пользователям, именно об этом параметре сервиса люди чаще всего пишут в отзывах, включая негативные. Казалось бы, нужно всего лишь посмотреть за окно и показать на сервисе правильную погоду. Но описать ситуацию за окном в любой точке страны или мира — задача не из простых.
Во-первых, метеостанции расположены далеко друг от друга и измеряют параметры в строго определённые промежутки времени. Казань, например, является огромным городом, а метеостанций там всего две: в центре и в аэропорту. Температура и другие показатели в этих точках и в соседних с ними районах могут кардинально различаться.
Во-вторых, из-за ошибок в начальных условиях прогнозные модели тоже не могут служить надёжным источником информации о фактической обстановке на улице.
Да и требования к сиюминутному прогнозу значительно выше: всегда можно выглянуть за дверь и проверить, правы ли метеорологи.
Ещё раз напомню, что в Яндекс.Погоде используется технология Метеум, основанная на метеорологических моделях и машинном обучении. Построенная на базе Матрикснета и обученная на больших массивах данных, наша формула оптимальным образом комбинирует подаваемые на вход факторы. В итоге прогноз получается заметно более точным.
А чтобы показать на сервисе нынешнюю погоду, мы (помимо прогнозов из математических моделей) подмешиваем в формулу измерения, недавно полученные на ближайших метеостанциях. Такой подход существенно лучше других вариантов решения поставленной задачи. Точность определения погоды в ближайшие часы сильно возрастает, и это неудивительно, поскольку мы учитываем наиболее оперативную и точную информацию. Наши метрики существенно возросли по сравнению с нашими же собственными прогнозами, построенными до того, как мы начали подмешивать свежие данные с метеостанций. В мае этого года, сразу после их добавления, мы расширили зону действия Метеума на всю Россию, а в ноябре-декабре — на Украину, Беларусь и Казахстан.
Но даже комбинированный подход из моделей и данных, склеенных при помощи Матрикснета, не даёт желаемой точности. Особенно это касается осадков — одного из самых важных для пользователя параметров. Основная причина такого несовершенства — недостаток данных. Метеостанции, как уже было сказано, расположены далеко друг от друга. Используя взятые со станций данные, вы не можете сообщить пользователю, что ему стоит подождать 10 минут в подземном переходе и проливной дождь на улице сменится переменной облачностью. Где можно достать ещё какие-нибудь данные о состоянии атмосферы?
Нужно больше данных
Самым последним достижением науки и техники в области мониторинга осадков является метеорологический радиолокатор. Примерно раз в 10 минут он строит трёхмерный снимок атмосферы в радиусе 200 километров от своего местоположения по горизонтали и до 10 километров по вертикали. По принципу действия радиолокатор очень похож на авиационный радар, только на снимке видны не самолёты, а области атмосферы, где есть капли воды размером более 50 микрометров. Если такие капли и правда есть, то, скорее всего, из облака, в котором они находятся, выпадают осадки. Вот как выглядит сам радар и результаты его работы:
В России уже сейчас существует сеть метеорологических радаров достаточно высокого качества. Они установлены в наиболее населённых и интересных с метеорологической точки зрения регионах. Область покрытия радаров показана на карте:
Кстати, в незакрашенной области проживает более 40 процентов населения России. Данные радара имеют пространственное разрешение 2 на 2 километра на пиксель, что позволяет описывать текущую погоду с точностью до небольшого микрорайона.
В этом году Яндекс получил официальный доступ к измерениям, которые проводятся на сети радиолокаторов Росгидромета. С тех пор мы интенсивно работали над добавлением этих данных в наши продукты.
Сегодня мы готовы представить технологию наукастинга — краткосрочного гиперлокального прогноза осадков. Наукастинг — слово, пришедшее к нам из английского языка, сложенное из двух слов: now и forecasting, то есть дословно «прогноз на сейчас». А на самом деле через продукты Яндекса теперь можно узнать о распределении осадков во временном промежутке от двух часов назад до двух часов вперёд.
Наш новый продукт основан на свёрточных нейронных сетях. С точки зрения математики задача формулируется следующим образом: необходимо по последовательности радарных снимков и релевантной метеорологической информации предсказать будущие карты осадков с временным разрешением в 10 минут на 2 часа вперёд.
Для решения этой задачи мы выбрали свёрточную сеть определённой архитектуры. Каждый свёрточный слой сети представляет собой последовательный набор фильтров, автоматически выделяющих признаки из набора данных, подаваемых на вход. Совокупность таких слоёв позволяет выделить большое количество признаков, по которым можно судить о том, что будет происходить с осадками в выделенной области. Начнутся они или, наоборот, закончатся? Или же просто повысится их интенсивность? Всё это можно определить.
Чтобы настроить фильтры свёрточной сети и веса между ними, мы формируем обучающую выборку достаточно большого объёма — сейчас она состоит более чем из 800 000 кадров с каждого радара, прошедших предварительную обработку. Обучение нейронной сети происходит на кластере из GPU.
Вот как выглядит эта сеть:
Архитектура сети
В целом, движение осадков можно разделить на две компоненты: перенос области с осадками по направлению ветра и изменение формы области. За каждую из компонент отвечают отдельные ветви нейросети, что позволяет гибко подбирать параметры оптимизации.
Что касается data flow — вот как его упрощённо описывает автор, nes8bit:
Данные радаров и наукастинга, которые передаются на бэкенд погоды, сначала интерполируются с азимутальной проекции, центром которой является радар, на регулярную широтно-долготную. Затем на полученной сетке строятся контуры, описывающие области осадков в зависимости от интенсивности и типа. Контуры хранятся в виде полигонов в PostgreSQL. Часть данных, например с описанием облачности, хранится в растровом виде в том же PostgreSQL: это позволяет быстро отвечать о значениях определённых переменных в конкретной координате, одновременно сохраняя консистетность с векторизированным представлением в виде полигонов.
Метрики
Мы оцениваем точность продукта и настраиваем наш нейросетевой прогноз погоды по нескольким типам метрик.
Во-первых, нам важно, насколько правильно мы предсказали каждый следующий кадр нашего прогноза. Мы используем покадровую метрику f-score, которую можно определить как «точность предсказания текущего снимка».
Во-вторых, нам интересны метрики для тех точек пространства, где в ближайшее время произойдёт изменение погодного состояния. С помощью них мы узнаём самое главное: насколько точно определено время начала или окончания дождя и, соответственно, насколько хорошо срабатывает сценарий, при котором пользователь ждёт окончания осадков. Мы находим нужные точки и фиксируем соответствия и несоответствия между прогнозом и реальностью в каждый момент времени.
Вот как выглядит f-мера для первой метрики в зависимости от горизонта:
Надо сказать, что если рассчитать такие же строгие метрики для регулярного прогноза любого провайдера, значения будут не больше 0,1, а чаще — очень близки к нулю. Это связано как с различиями в самой методике прогнозирования, так и с отсутствием большого и важного источника данных.
Мы выбрали типы метрик, ориентируясь на то, как новые данные будут представлены в продукте. На главной странице Яндекс.Погоды теперь есть сообщение об осадках в ближайшие два часа. Из этого блока можно узнать, что осадки закончатся с минуты на минуту или начнутся в течение получаса. Нажав на сообщение, вы увидите, как области с осадками распределены в вашем районе. На этой же карте отмечены и все остальные области в зонах действия радаров.
Вместо послесловия
Скажу ещё пару слов о том, о чём говорил в самом начале. Технология, которую мы представили сегодня, разработана специально для того, чтобы сделать жизнь наших пользователей чуть более комфортной. Гиперлокальный краткосрочный прогноз осадков поможет людям принимать решения, основываясь на информации из принципиально нового источника — сети метеорологических радаров. Данные об интенсивном снегопаде с детализацией до районов вашего города помогут узнать о количестве снега на дорогах, а предупреждение о проливном дожде позволит не простудиться весной.
Сейчас это может показаться невероятным, но скоро наступит лето и все мы будем кататься на велосипедах, роликовых коньках, гулять в парках, отдыхать на природе. И с сегодняшнего дня можно строить планы на ближайшее время, глядя не на низкий или высокий полёт ласточек, а на страницу и приложения Яндекс.Погоды. Один всем вам знакомый персонаж уже так и делает.