company_banner

Как мы делали краткосрочный прогноз осадков. Лекция в Яндексе

    В начале зимы Яндекс.Погода научилась показывать, будут ли осадки в ближайшие два часа. Спустя пару месяцев тема метеопрогнозирования стала центральной на одном из мероприятий Data & Science. Среди докладчиков в тот день был Алексей Преображенский — разработчик из команды Яндекс.Погоды. Алексей рассказал о нашем алгоритме наукастинга и сверточной нейросети, лежащей в основе этого алгоритма.


    Под катом — расшифровка лекции и слайды.



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

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

    Что такое наукастинг, наверное, знают все, кто смотрел фильм «Назад в будущее 2». Когда док Браун выходит из машины и говорит, что дождь закончится через 5 секунд, это наукастинг. Но это наукастинг в фильмах. Наукастинг в реальной жизни — по крайней мере, в головах менеджеров — выглядит либо как уведомление человеку в виде текста или пуш-нотификации, либо как карта осадков, которая движется со временем. Задача была именно в том, чтобы разработать продукт, который бы совмещал в себе и уведомления, и карту осадков. Требовался прогноз осадков на будущей карте, плывущие облачка.

    Полтора года назад, когда мы начинали, у нас не было ничего, кроме данных. В отличие от участников на Kaggle, у нас не было никакой фиксированной метрики, никаких baseline-решений. Единственное, что было, — постоянная гонка технологий, в которой мы хотели обогнать сами себя.

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

    Что нужно для прогноза осадков? Нужны данные, радарные снимки. Нужно понимать, как в атмосфере движутся частицы, какие ветра дуют и как применять это движение к частицам. Расскажу про все три составляющих прогноза.

    Первое — радарные снимки. Они бывают очень разных форматов и поступают от очень разных поставщиков. Это и просто отдельные картинки в PNG, с договоренностью, что цветом с таким-то кодом обозначается такая-то интенсивность отраженного сигнала. Это бывает GeoTIFF — картинка в формате TIFF с геоинформацией внутри самой себя, где указано, к каким координатам она относится. Либо — научный формат NetCDF.

    Радары сильно отличаются по частоте обновления. Бывают радары, которые обновляются раз в 10 минут, раз в 15 минут. Самое ужасное, что данные с радаров — в отличие от относительно чистых данных для соревнований — содержат артефакты. Радары работают на физических принципах, на отражении волны, так что у них бывают слепые зоны. Причем когда маленькие фрагменты зоны видимости радиально закрыты зданиями — это еще далеко не самый тяжелый случай.

    Некоторые радары закрыты примерно на 50% круга. Бывают и сделанные людьми артефакты. Например, в период бета-тестирования мы столкнулись с человеком, который купил себе Wi-Fi-точку, неправильно настроил на ней частоту и номер канала, после чего выставил ее в окно. В результате у нас над Иваново висел огромный лазерный меч в виде облака. Мы видели его на карте и ничего не могли с ним поделать, пока не вызвали Частотнадзор. Пожалуйста, если покупаете Wi-Fi-точки где-то в Китае, настраивайте их на российские частоты.

    Кроме радарных данных, надо еще откуда-то взять векторное поле. Принципиально его можно взять всего из двух мест: либо проанализировав предыдущие радарные снимки и применив, скажем, алгоритмы оптического потока, либо из каких-то других источников. Например, можно воспользоваться метеомоделированием и результатом работы того же ОРФ или Метеума. Берем поле ветров и с его помощью переносим картинки, которые возвращает радар.

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

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

    Третий компонент наукастинга — алгоритм применения векторного поля. Здесь наука умеет довольно многое. Мы взяли за основу thin plate spline transform — преобразование картинки, которое представляет ее в виде тонкой резиновой пластины и растягивает некоторые места. Мы параметризуем это преобразование всего несколькими опорными векторами, а все остальные вектора движения внутри картинки восстанавливаем сплайновой интерполяцией. Такая технология используется, например, в восстановлении движения по последнему кадру из видео. Известная научная работа.

    Вооружившись полученными знаниями, мы начали пытаться строить прогноз. Первое решение, которое пришло в голову, — просто обучить несколько нейросетей так, чтобы первая нейросеть предсказывала ситуацию на радаре через 10 минут, вторая — через 20 минут, третья — через 30. Требование было следующим: предсказывать радарные данные где-то на два часа вперед.

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

    Во время следующей итерации мы решили считать только векторное поле и умножать опорные вектора на 2 и 3, чтобы получить перенос не на 10, а на 20 минут и 30 минут соответственно.

    На ближних горизонтах результаты выглядели довольно прилично, но чем дальше, тем чаще с краю появлялись артефакты. Оказалось, что в векторном поле слишком большие вектора разрывают thin plate spline, и у нас появляется второе зеркальное отражение нашей картинки. Потом отражения сливаются. На ближних горизонтах артефакт не был заметен, но на дальних проявлялся очень сильно. Из ниоткуда возникало облако.

    Третьим решением стало последовательное применение одного и того же преобразования thin plate spline к одной картинке. С одной стороны, оно способствовало накоплению ошибок. Это было первое реально работающее решение, которое мы показывали при внутреннем бета-тесте. Нейросеть получала на вход шесть радарных снимков за последний час, несколькими свертками приводила их к тензору из 16 векторов 4 x 4. Cплайновое преобразование восстанавливалось по векторам и последовательно применялось к картинке для получения каждого следующего горизонта прогноза.

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

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

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

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

    Тензор состояния имеет довольно маленькую размерность, всего 32 x 32 на 30 каналов, но сверткой к инволюции мы получаем из него векторное поле, опорные вектора для преобразования thin plate spline. И, наоборот, сверткой к деконволюции мы получаем места, где выпадают осадки. Такая архитектура нейросети учитывает, что в каких-то местах осадки выпадают традиционно. Например, туча, налетевшая на город, прольется с большей вероятностью, чем над лесом, потому что над городом другая атмосфера, микроклимат. Там, например, попросту теплее.

    От горизонта к горизонту, от блока к блоку мы передаем состояние, о котором идет речь, и попутно немного меняем его с помощью residual network. Residual — это когда мы сам тензор меняем совсем немного, прибавляя к нему измерения. Обученная часть — дельта от обучаемой части, изменение тензора.

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

    Но они довольно хорошие с точки зрения метрик data science, ROC AUC и F1-меры, а бизнесу интересны не абстрактные циферки и кривые, которые мы рисуем. Бизнесу интересна точность этих предсказаний, точность текста о том, что дождь закончится через 10 минут 20 секунд. Перед нами сейчас стоит другая задача. Сейчас нейросеть обучается с какой-то функцией потерь. Она максимизирует вероятность правильной классификации с помощью бинарной энтропии. А на самом деле надо улучшать другие, бизнесовые метрики — не правильность классификации, а правильность определения времени начала и прекращения осадков. Исследования о том, как из бизнесовых метрик получить loss-функции для обучения нейросетей, — очень важны и интересны. Мы продолжаем развиваться в нужном направлении.

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

    Можно подмешивать векторные поля из метеомоделирования. Там есть ветра, а можно добавлять и еще что-то — например, температуру.

    У нас есть рельеф, высо́ты, география land use, тип подстилающей поверхности. В городах осадки ведут себя по-другому, чем над огромным Балтийским морем. Они над ним пролетают и выпадают уже в Питере.

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

    Это всё. Обо всех отличиях и сходствах между решениями соревнований на Kaggle и задач бизнеса я рассказал. Наша текущая архитектура — сверточная нейросеть. Она предсказывает не только движение, но и выпадение осадков. Спасибо.
    Яндекс 600,57
    Как мы делаем Яндекс
    Поделиться публикацией
    Комментарии 12
    • 0
      Нейросетевая архитектура — интересное обыгрывание seq2seq с использованием конволюций.
      Может быть кстати идеи из seq2seq (типа attention) как раз помогут ещё улучшить точность прогноза.

      По поводу лосса: а нельзя сделать вычислить карту прогноза выпадения осадков, собрать реальные данные и минимизировать разницу между предсказаниями и фактами, давая приоритет например городу, а не лесу.
      • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          Ливень — это обычно что-то локальное. Если вы конечно не в Амазонии. Локальные ливни предугадать сложно и лично для меня загадка (я тоже такое наблюдал), как кто-то может их долгосрочно детектить. Думаю, дело в иных источниках данных.

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

          С долгосрочными Яндекс вроде не тупит, но это опять-таки как читать прогноз. Можно формально, а можно смотреть например только на изменения направления ветра, он подскажет остальное.
        • +2
          Ребята, похоже, нейросеть, следящая за погодой в Петербурге, уехала на майские вместе со всеми кушать шашлыки: то, что за окном и то, что пишет о том, что за окном Яндекс.Погода для Ведроида — прямо противоположные вещи уже второй день.

          А вообще, крутая штука получилась, в большинстве (даже в подавляющем большинстве) случаев она оказывается права, спасибо!
          • +3
            ждем второй статьи из цикла: «и почему они (краткосрочные прогнозы) у нас не работают».
            • 0

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

              • +1

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

                • +3
                  Я правильно понимаю, что частотнадзор пришел к человеку домой и помог настроить точку доступа? =)
                  • 0
                    Без умных моделей эти числодробилки — игра и раздувание щек. А так как придумывать тяжело, то давай сюда нейросеть — она, даст бог, сама разберётся.
                    Закавыка в том, что появление людей, которые могли бы придумывать метеомодели убито отсутствием финансового стимулирования. Вот придумает кто-то хорошую, рабочую модель и что? Нынешний копирайт приведет к тому, что разработка будет отобрана у автора жирными котами. Ладно со стимулированием автора и, прости господи, со справедливостью. Так ведь разработка остановится!

                    Конечно, хорошо, что хоть можно посмотреть причесанные данные с метеорадаров. На пару часов линейная интерполяция, естественно, работает.
                    • 0
                      Скажите, а вы не думали делать прогнозы «чуть более планетарного» масштаба?

                      Наверное, в некоторых случаях это могло бы спасти человеческие жизни: например, в округе Японии 6 июля за полдня выпали месячные осадки, в результате произошло наводнение и погибли как минимум 15 человек.
                      • 0
                        Говоря про зоопарк форматов данных метеорадаров, следовало бы упомянуть доморощенный BUFR от ИРАМа. Который сам по себе зоопарк в зоопарке. Почему не попробовали STEPS? Хотя, нейронная сеть интересное решение для этой задачи. Как получаете радарные данные, договор с ЦАО?
                        P.S. не ОРФ а ВОРФ (WRF в оригинале, произносится как ВОРФ, уж не знаю почему) поправьте пожалуйста.
                        • 0
                          Очень интересный поход к решению задач: Попробуем, что то написать на основе тех блоков которые есть. Если не будет работать, поменяем блок. Очень интересно, сколько трудочасов на это все ушло?
                          Знание Теории автоматического управления очень бы помогло разработчикам прогноза, во всяком случае, более точно поставить задачу и определиться с показателями качества для каждого блока системы и системы в целом.
                          Я бы почитал для начала: Теорему Котельникова (Частота Найквиста) понял с какой частотой нужно получать данные от метеостанций, что бы теоретически можно было получить заданную точность.
                          Затем в модель добавил бы контуры по первой может быть еще по второй и третьей производной, это бы убрало скачки по положению. Дальше, данные должны приходить в каждый отсчет, если их нет берем прогнозируемые. Не стабильная частота очень сильно влияет на ошибку. После того как определились с моделью и критериями качества можно переходить к моделированию в Matlab. Можно в самом Матлабе делать или в его компоненте Simulink. В Матлабе даже есть блок реального времени.
                          После того как добились на модели приемлемых результатов, можно пробовать писать это на языке более низкого уровня.
                          Но реальность такова, что у нас есть только программисты, из всех остальных областей люди переучиваются на программистов для веба…. :(

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое