Привет, Хабр!


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



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


С другой стороны, жителям Восточного Побережья США важнее знать траекторию очередного урагана с красивым женским именем, а фермерам из Дакоты — следить за распространением града по полям, на которых растет кукуруза. Такую информацию гораздо проще узнавать из карты, чем из множества таблиц. Так и получилось, что погодные сервисы в России — это скорее таблицы, а на Западе — скорее карты. Однако, и в России существуют паттерны потребления погоды, когда пользователю нужно знать где именно будет погода, которая ему нужна: это люди, выбирающие место для пикника в выходные, спортсмены, особенно с приставкой "винд" и "кайт" и, наконец, дачники. Именно для этих категорий пользователей мы и сделали свой продукт. А теперь я расскажу о том, что у него под капотом.


Расчет прогноза: персональный и глобальный


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


Краткое содержание предыдущих серий. Как помнит внимательный читатель, в первой реализации Метеума мы рассчитывали прогноз погоды по мере необходимости. Как только пользователь попадал к нам на сайт, мы собирали для его координат список факторов и передавали в обученную модель Матрикснета. За сбор факторов отвечал микросервис, который мы называли vector-api. Микросервис был хорош всем, кроме одного: при добавлении новых факторов и/или при расширении географии покрытия, мы приближались к лимиту памяти физических машин, на которых микросервис работал. Кроме того, само по себе формирование ответа итогового погодного API содержало дорогую по времени и по нагрузке на процессор операцию с применением модели Матрикснета. Оба фактора сильно препятствовали построению глобального прогноза. Плюс к тому, в нашем бэклоге образовалась целая очередь из факторов, которые увеличивали точность прогноза в экспериментах, но не могли поехать в продакшен в связи с ограничениями, описанными выше.


Также мы столкнулись с недостатками выбранной архитектуры для карты осадков, горячо полюбившейся многим пользователям. Для хранения и обработки данных, необходимых для построения информации об осадках, использовалась СУБД PostgreSQL с расширением PostGIS. Во время летних гроз количество запросов в тяжелые ручки в секунду молниеносно превращалось из сотен в десятки тысяч, что влекло за собой высокое потребление процессоров и сетевых каналов серверов баз данных. Эти обстоятельства послужили дополнительным стимулом задуматься о будущем сервиса и применить иной подход в обработке и хранении погодных данных.


Альтернативой расчету погоды в рантайме был предварительный расчет прогнозов для большого набора координат по мере обновления факторов. Мы остановились на глобальной сетке, покрывающей сушу с разрешением 2x2 км, а воду – с разрешением 10x10 км. Сетка разбита на квадратики 3 на 3 градуса – эти квадратики позволяют нам параллельно готовить факторы для модели и обрабатывать результаты. Вот как это выглядит на карте.



Разбиение областей глобальной регулярной сетки


Процесс подготовки погодных факторов начинается с кластера Meteo. В соответствии с названием, на этом кластере происходит «классическая метеорология». Здесь мы скачиваем данные наблюдений и прогнозы моделей GFS (США), ECMWF (Англия), JMA (Япония), CMC (Канада), EUMETSAT (Франция), Earth Networks (США) и многих других поставщиков. Здесь же происходит расчет погодной модели WRF для наиболее интересных для нас регионов. Метеорологические данные, полученные от партнеров или в результате расчетов, обычно запакованы в форматы GRIB или NetCDF с разными уровнями сжатия. В зависимости от поставщика или способа расчета, эти данные могут покрывать Московскую область или весь мир и весить от 200Мб до 7Гб.


Из метеокластера файлы с прогнозами погоды попадают сначала в MDS (Media Storage, хранилище для больших кусков бинарной информации), а потом в YT — нашу Яндексовую Map-Reduce систему. Работа в YT делится на два этапа, условно названные "подвоз" и "применение". Подвоз — это подготовка факторов для последующего применения обученной модели. Факторы надо корректно переинтерполировать на итоговую сетку, привести к единым единицам измерения и разрезать на квадратики 3 на 3 градуса для параллельной обработки и применения. Сложность процедуры здесь состоит в больших объемах данных и в необходимости проделывать упражнение каждый раз, когда пришли новые данные о прогнозе для какой-либо области.


После того как первая ступень отработала, начинается применение заранее обученных моделей машинного обучения. В первой реализации Метеума мы могли прогнозировать только два основных погодных параметра с помощью машинного обучения: это температура и наличие осадков. Теперь, когда мы перешли на новую схему расчетов, мы можем использовать тот же подход для вычисления остальных параметров погоды. Применение машинного обучения дает ощутимый прирост в точности для новых параметров: давления, скорости ветра и влажности. Ошибка прогнозирования этих параметров на 24 часа вперед падает на величину до 40%. Помимо того, что для многих пользователей важны максимально точные показатели ветра и давления, это улушение позволяет нам более точно рассчитывать еще один популярный параметр — температуру по ощущениям. Он складывается из обычной температуры, скорости ветра и влажности. Еще одним заметным новшеством стал новый способ расчета погодных явлений. Теперь в его основе лежит мультиклассификационная формула — она определяет не только наличие или отсутствие осадков, но также их тип (дождь, снег, град), а еще наличие и балльность облачности.


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


Сложность при применении обученных моделей состоит в том, что для каждого прогноза надо выполнить порядка 14 миллиардов операций. Факторов, необходимых для каждого расчёта — сотни, и список этих факторов весьма подвижен: мы постоянно с ними экспериментируем, пробуем новые, добавляем целые группы, выкидываем слабые. Далеко не все факторы берутся напрямую от поставщиков. Мы экспериментируем с факторами-функциями нескольких параметров. Правила формирования такого количества фичей очень сложно поддерживать в виде кода на Python: громоздко, трудно делать ленивые вычисления, трудно анализировать и диагностировать, какие фичи (или исходные данные для фичей) уже не нужны. Поэтому мы изобрели свой аналог LISP. Строго говоря, это не LISP, а уже готовое AST, которое очень похоже на диалект LISP, в котором учтена специфика наших данных. Процессор этого LISP-а мы сделали таким, как нам надо: ленивым и кэширующим. Поэтому мы, во-первых, не вычисляем факторы, которые стали уже не нужны, во-вторых, не вычисляем дважды, то, что нужно дважды. Эти механизмы автоматически распространяются на все расчёты. А благодаря тому, что это формальное AST мы можем: легко анализировать что нужно, а что не нужно; сериализовать и хранить отдельно части логики, писать бизнес-части в логи, формировать большие части логики автоматически (минуя представление в виде кода), версионировать их для проведения экспериментов и так далее. Оверхед же получился совершенно незначительный, так как все операции выполняются сразу над матрицами.



Общая схема поставки данных в API


После расчета прогнозов мы записываем их в специальный формат – ForecastContainer и загружаем эти контейнеры в микросервис отдачи данных из памяти. Дело в том, что на весь мир с нашей сеткой в 0.02 градуса получается около 1 166 400 000 значений с плавающей точкой, а это 34Гб данных только на один параметр. Таких параметров у нас больше 50 – поэтому держать эти данные полностью в памяти одной физической машины не представлялось возможным. Мы начали искать формат, поддерживающий быстрое чтение сжатых данных. Первым кандидатом стал HDF5 – у которого есть функциональность чанкования данных и поддержки буфера распакованных чанков. Вторым кандидатом стал наш --самописный-- проприетарный формат – матрицы float'ов сжатые LZ4 и записанные в Flatbuffer. Результаты тестов показали, что открытие файла с данными для работы занимает в два раза меньше времении у Flatbuffers, чем у HDF5, как и чтение произвольной точки из кеша. В итоге сейчас данные для 50 переменных занимают 52.1Гб.


Так как требования к потреблению памяти и времени ответа были очень высоки еще с постановки задачи, старый микросервис написанный на Python мы решили переписать на C++. И это дало свои результаты: Время ответа сервиса в 99 квантиле упало со 100мс до 10мс.


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


Итого, новая архитектура позволила нам уменьшить тайминги ответов, держать бОльшие нагрузки и избавиться от рассинхрона данных, отдаваемых разным партнерам. Данные Яндекс.Погоды представлены в большом количестве сервисов Яндекса и не только: главная страница Яндекса, плагин погоды в Яндекс.Браузере, погода на Рамблере и так далее. В результате все они получили возможность отдавать именно те значения, которые в этот момент видят пользователи основной страницы Яндекс.Погоды.


Ближе к людям: тайл-сервер и фронт


Для того, чтобы отрисовать прогнозы на наших новых картах, необходимо достаточно много дополнительной обработки. Сначала мы запускаем MapReduce операции на тех же данных, что отдаются микросервисом и API для формирования данных на весь мир на регулярной широтно-долготной сетке с разрешением в 0.02 градуса. На выходе для каждого параметра: температуры, давления, скорости и направления ветра, а также для каждого горизонта: времени прогноза в будущее или времени факта в прошлое мы получаем матрицы размером 9001*18000.


После этого мы строим проекцию Меркатора по этим данным и нарезаем их на тайлы в соответствии с требованиями API Яндекс.Карт. Здесь мы встречаемся с одной из самых больших сложностей в цепочке подготовки погодных карт: количеством тайлов, которые нужно оперативно обновлять при генерации каждого нового прогноза. Так каждый следующий уровень приближения карты (zoom) требует в 4 раза большего количества тайлов чем предыдущий. Несложно прикинуть, что для всех уровней приближения от 0 вплоть до 8 нужно подготовить 

$4^0 + 4^1 + \dots + 4^7 = 21845$


картинок. Всего для каждого из четырёх параметров мы показываем 25 горизонтов, из них прогнозов в будущее 12. Поэтому каждый час требуется обновить 1048560 картинок.

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


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



Так выглядят частицы анимации ветра на картах погоды


Для оптимизации потребления ресурсов клиентского устройства, анимация ветра выполнена с использованием WebGL. WebGL позволяет задействовать значительные ресурсы графического адаптера, разгружая процессорный поток выполнения кода, а также оптимизируя расход аккумулятора. Задачей процессора в этом случае становится установка аргументов выполнения шейдерных программ. Для перемещения частиц используется подход хранения положения частицы в 2х цветовых каналах текстуры для каждой оси (x/y). Таких текстур положения две: одна хранит текущее положение частиц, вторая предназначена для сохранения нового состояния.


Процесс отрисовки частиц описан несколькими WebGL программами. Для большей совместимости использована первая версия этого стандарта. В браузере использование WebGL выполняется через соответствующий контекст элемента canvas. Так как графический ускоритель способен выполнять в несколько раз больше параллельных операций через процессор, то перемещение частиц следует выполнять через программу WebGL. Выходной результат выполнения такой программы представляет набор точек в заданном пространстве. Это пространство по умолчанию является видимой областью своего canvas, то есть, экраном пользователя. Однако есть возможность указать целью отрисовки текстуру, используя фреймбуферы.


При старте слоя ветра процессор генерирует начальное положение частиц, создавая типизированный массив элементов в диапазоне 0...255, в количестве (частицы * компоненты) (RGBA). Из этого массива создаются две WebGL текстуры положения. Данные по скорости ветра также записываются в текстуру, чтобы видеокарта имела к ним доступ. Красный и зеленый канал этой текстуры содержат значение параллельной и меридиональной скоростей соответственно, причем значение 127 соответствует отсутствию ветра, значения меньше 127 задают скорость ветра в отрицательном направлении по оси, значения больше — в положительном. С помощью подготовленных текстур происходит отрисовка текущего положения частиц. После отрисовки, одна из текстур положения обновляется, используя вторую текстуру как источник данных по текущему состоянию. Следующие видимые кадры будут сформированы при помощи отрисовки предыдущего снимка положения частиц с увеличенной прозрачностью, поверх которого будет нанесено текущее положение частиц. Таким образом получаются частицы с затухающими хвостами.



Так выглядят частицы анимации ветра в процессе их создания


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


Заключение и планы


Вот примерно все, что я хотел рассказать вам об архитектуре Яндекс.Погоды. За этот год мы полностью переделали сервис изнутри (об этом рассказано выше) и снаружи (практически все платформы, на которых присутствует Я.Погода были существенно перерисованы). Финалом этих изменений стали интерактивные погодные карты, которые вы можете попробовать на нашем сервисе.


Однако, мы никогда не останавливаемся на достигнутом. В следующем году вас ждет много интересных продуктовых и технологических апдейтов: от сервиса, позволяющего исследовать климат в разных уголках Земли до ответа на вопрос "чем дышит человек". И это, разумеется, далеко не все. Оставайтесь с нами.


Всегда ваша,
Команда Яндекс.Погоды

Комментарии (86)


  1. d-sky
    30.11.2017 11:19

    Круто! Но что-то похожее я уже видел.


    1. mnbck
      30.11.2017 12:20

      Windity
      В копилку.


    1. konservs
      30.11.2017 12:20

      И ещё windy.com :-)


    1. drsheff
      30.11.2017 12:20

      Или вот


      1. Devgru
        30.11.2017 18:58

        Скорее всего это первая такая визуализация, ей 4 года недавно исполнилось, судя по гитхабу.


        1. dom1n1k
          01.12.2017 02:26

          Самое первое было это — hint.fm/wind
          Правда, там ещё без глобуса, но именно с такими ветряными потоками


  1. derwin
    30.11.2017 11:39

    Я вчера письмо в фидбек отправил. Похоже, что то сломали. Суть проблемы: яндекс-погода стал показывать температуру и осадки, совершенно оторванные от реальности. Яндекс показывает -20, по факту на улице -5 и на дорогах лужи. Это не единичный день, это тенденция. Барнаул.


    1. DROS
      30.11.2017 11:52

      -5 и лужи? Это Барнаул что-то сломал по моему.

      Прогноз Яндекса всегда нагло врал, меняя показания в день по нескольку раз, при чем весьма кардинально. Про прогноз на несколько дней вперед — вообще речи не идет. Там то солнечно и тепло, то на сл. день уже дубак с осадками. Еще день спустя — вообще что-то третье может легко всплыть. Хотя Вы похоже про текущее отображение погоды говорите.


      1. overtest
        30.11.2017 12:20

        Помнится, ещё в 2006 или 2007 прогноз Яндекса постоянно врал, причем очень сильно (на улице ливень, а у Яндекса солнечно и ясно). С тех пор пользовался Гисметео. Думал, что Яндекс уже давно исправился, а тут вот как.


    1. imalion Автор
      30.11.2017 12:41

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


      1. derwin
        02.12.2017 06:46

        яндекс, ты заболел.
        -14 с дождём.


    1. Evgenym
      30.11.2017 13:44

      Мне очень нравится погода на www.meteoblue.com
      На мой взгляд, показывает точнее всех. Иногда, конечно, есть несоответствия, но достаточно близко к реальности.


    1. SchmeL
      30.11.2017 13:46

      У меня так виджет один обновился погодный, вместо цельсия стал показывать по фаренгейту.
      Хочу узнать погоду, открываю смартфон — а там +30 пасмурно, в ноябре… в поволжье… ага :)


  1. webviktor
    30.11.2017 12:20

    Т.е. просто перешли на VentuSky?


  1. rt3879439
    30.11.2017 12:20

    Как мы сделали клон windy.com.


  1. imalion Автор
    30.11.2017 12:40

    Поскольку фидбек достаточно однотипный, отвечу всем в общей ветке.

    Действительно, анимация частицами ветра — хороший способ показать сразу несколько параметров на одной карте. Собственно, поэтому мы им и воспользовались, сделав самостоятельную реализацию на Яндекс.Картах.

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

    А кроме полей температуры и ветра, у нас есть наукастинг, которого ни у одного из наших конкурентов нет ;)


    1. ParaPilot
      30.11.2017 12:57

      Наш прогноз значительно более точный, чем сырые модельные данные, показанные на приведенных сервисах.

      Я бы не был так катигоричен с точностью. Ваши прогнозы ошибаются по силе ветра часто. И направление бывает не совсем точным. Тот же windity гораздо точнее и чаще попадает в реальную картину.


      1. imalion Автор
        30.11.2017 13:07

        Как я написал в тексте, только с сегодняшним релизом в продакшен поехали модели, которые используют ML для прогноза силы и направления ветра. Теперь точность прогнозов
        по этим параметрам заметно выросла. Раньше наш прогноз улучшался машинным обучением только в плане температуры и осадков.

        В любом случае, буду благодарен за ваш фидбек при дальнейшем использовании сервиса.


        1. rt3879439
          30.11.2017 15:17

          Если так, то кайтеры и сёрферы оценят.


        1. OLS
          30.11.2017 23:25

          Feedback: изучаю карту для текущих даты/времени, отметил на карте интересующую меня точку, прочитал сведения в открывшемся всплывающем меню, переместил ползунок на завтрашнее утро — упс, всё, окошка нет, точки нет и, как я понимаю, пользователю снова предлагается искать и «кликать» эту точку на карте.


      1. ehabi
        01.12.2017 10:10

        У где-где, а во Владивостоке прогноз ветра актуален, как нигде. Так вот, на планшете стоит Винди, на смартфоне Яндекс. Показатели ветра похожи, но Яндекс, мне кажется, точнее. Ребята проделали большую работу, спасибо.


  1. dom1n1k
    30.11.2017 13:04

    начинается применение заранее обученных моделей машинного обучения

    Самое важное и самое непонятно описанное. На основе каких данных модели обучались? Я просто не вполне понимаю, как можно обучить модель для условной деревни Малые Бугры, если у нас нет для неё достоверных данных для обучающей выборки? Просто проинтерполировать от соседних узлов сетки метеомоделей? Окей, часто так и делается, но при чем тут тогда обучение.


    1. erwins22
      30.11.2017 13:12

      А чем матмоделирование отличается от использования нейронных сетей?
      ничем…
      и там и там все сводится к конечноразностной схеме.


      1. dom1n1k
        30.11.2017 13:16

        Я имею в виду, что обучать нейросеть на основе интерполированных или ещё каких-либо «искусственных», а не реальных, данных — это заведомо попахивает отсебятиной. Как можно утверждать, что такой прогноз будет «значительно точнее»?


        1. erwins22
          30.11.2017 14:50

          А вы думаете конечно разностные схемы не врут особенно в граничных условиях?

          А вот что такое «значительно точнее»… вопрос метрики.


    1. imalion Автор
      30.11.2017 13:52

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

      Наши модели обучаются к показания метеостанций и другим надежным источникам метеорологических наблюдений. При этом вы совершенно правы, плотность таких измерений неравномерна. Однако, первым фактором, который влияет на точность, даже в самых удаленных регионах — это полнота данных, на которых мы обучаемся. Для того, чтобы модель спрогнозировала приход антициклона в деревню Малые Бугры, нужно показать модели много вариантов движения антициклона при определенных локальных особенностях — рельефа, подстилающей поверхности и так далее. При этом необязательно, чтобы примеры, которые видит модель при обучении, находились именно в Малых Буграх. Важно только чтобы пространство факторов было достаточно репрезентативно представлено в обучающей выборке. Так большие данные помогают моделям обобщать ситуацию, не полагаясь только на локальные измерения а-ля «циклон в Гадюкино всегда приходит с запада и уходит на восток».

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


  1. fediq
    30.11.2017 13:15

    А как вы измеряете качество своего прогноза и собираете эталоны для обучения? Проводите ли сравнение с другими метеослужбами?


    1. imalion Автор
      30.11.2017 13:55

      Я немного ответил выше про это. Эталоны для обучения в основном — данные с метеостанций или других настолько же надежных приборов. На них происходит обучение, кросс-валидация и валидация на отложенной выборке, все как в обычных data science процессах, с учетом некоторых особенностей. Например, при обучении и тестах важно не «залезть в будущее», чтобы данные о целевых значениях не просочились в факторы.

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


  1. Aspire89
    30.11.2017 13:51

    Когда снег уже на урале выпадет?


  1. arxont
    30.11.2017 14:16

    Доступ к API также приватный? И работать с яндексой.погодой всё так же парсингом для обычных людей?


    1. imalion Автор
      30.11.2017 14:20

      Условия доступа к API зависят от целей использования и всегда обсуждаются индивидуально. Напишите нам на api-weather@yandex-team.ru и мы сможем обсудить ваш кейс.

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


      1. erwins22
        30.11.2017 14:59

        Т.е. просмотр пользователем вашего сайта незаконен? так как браузер перед просмотром парсит ваш сайт.


        1. evnuh
          30.11.2017 18:16

          Ну детский сад, ей богу. Давайте не будем играть в юристов, у Яндекса их всё равно больше.


          1. 3dcryx
            01.12.2017 04:29

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


          1. balexa
            01.12.2017 10:43
            +1

            Тогда весьма странно слышать что «нашем EULA написано, что парсить данные с сайта — незаконно». Закон он на то и закон, чтобы его нормы не могли установить все подряд с помощью EULA. Думаю юристы яндекса должны это знать. Законно или нет парсить данные — это не яндексовской еулой определяется, к счастью.
            Если я не принимал соглашение с яндексом, либо там не прописана ответственность (а даже если прописана — я физическое лицо и нельзя прописать то, что противоречит закону) — то я могу парсить что хочу совершенно законно.


        1. Mirdin
          01.12.2017 10:10

          Ну там же прямо на странице внизу ссылка:

          2.2. Данные, используемые в Сервисе, предназначены исключительно для некоммерческого использования. При этом любое копирование информации и/или материалов, их воспроизведение, переработка, распространение, доведение до всеобщего сведения (опубликование) в сети Интернет, любое использование в средствах массовой информации и/или в коммерческих целях без предварительного письменного разрешения правообладателя запрещается, за исключением случаев, прямо предусмотренных настоящими Условиями, условиями использования других сервисов Яндекса или документами, указанными в п. 1.2. настоящих Условий.


          1. balexa
            01.12.2017 11:41

            Это как в объявление «проход в магазин с сумками запрещен». Он, как мы выяснили только для сотрудников. Вы можете просто забить на эти требования.


          1. arxont
            04.12.2017 09:58

            Смотрите — я исключительно для себя лично использую погодные данные. Чтобы выводить их на планшет в коридоре, чтобы знать, какая погода в данный момент + какая будет днём-вечером. Можно было бы сайт или приложение вывесить, но я использую около 10 разных источников и привожу к среднему. На самом деле парсить легче, так как не надо заморачиваться с токенами, доступом и прочим таким. Ну и под эти правила я никак не попадаю. Но всё равно доступ не дают :) Я бы даже был согласен на 4-5 запросов к API в сутки, но даже такого нет. Про коммерческое использование как раз всё легко и просто — платишь и пользуешься ))


            1. Mirdin
              04.12.2017 10:12

              Вопрос, конечно, лучше задать юристам яндекса, но вроде как Вы попадаете под ограничение:

              любое копирование информации и/или материалов, их воспроизведение, переработка


              А по поводу API, думаю яндексу просто лень заморачиваться ради 4-5 обращений в сутки. Возни с пользователями много, а прибыли нет.


      1. iiiBird
        01.12.2017 10:10

        image


  1. ViacheslavMezentsev
    30.11.2017 14:45

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


    1. imalion Автор
      30.11.2017 18:46

      Вы удивитесь, но эта информация достаточно ценная в смысле бизнеса, поэтому она много кому в отрасли интересна. Мы ведем такую статистику для себя и для своих партнеров. В США есть сайт www.forecastwatch.com, где можно найти примеры такой статистики (правда по их городам и провайдерам).


    1. lucius
      01.12.2017 04:29

      Некоторое время назад я проводил небольшое примитивное исследование прогноза Яндекс.погоды. Выводы не очень.
      По моему мнению, для прогнозов лучше подойдет использование моделей из гидродинамики, а не ML.


      1. ViacheslavMezentsev
        01.12.2017 08:07

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


        1. encyclopedist
          01.12.2017 13:19

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


  1. epyatyshev41
    30.11.2017 15:27

    Про паттерны потребления погоды в России стоит отметить, что карты погоды очень популярны у дальнобойщиков. При прокладке маршрута очень часто удается «объехать» ливень или снегопад.


  1. TimsTims
    30.11.2017 15:30

    А я всё жду, когда на pogoda.yandex.ru будет возможность посмотреть историю за последние дни и фактическую погоду.
    Чтобы можно было самому прикидывать, насколько сильно обычно изменяется погода за 30дн, 7дн, 3дня, 1день в конкретном регионе от прогнозируемого.
    Особенно это актуально для отпуска — когда планируешь на недельку куда-то слетать, тебе приходится за 1 месяц до этого начинать мониторить прогноз на месяц вперед и факт, и как-то из памяти соотносить эти данные, помнить что обещали вчера, неделю, месяц назад, и что в итоге сегодня. Спасибо


    1. imalion Автор
      30.11.2017 18:47
      +1

      Мы часто получаем такие запросы и уже работаем над продуктом, который бы их удовлетворил. Оставайтесь с нами :)


      1. TimsTims
        30.11.2017 19:32

        о, рад это слышать читать :)


  1. KirillFormado
    30.11.2017 16:13

    А точная карта облачности планируется? Очень полезная вещь для любительской астрономии.


    1. rt3879439
      30.11.2017 16:22

      Судя по осадкам, точности нет.


    1. Rumlin
      30.11.2017 16:54

      Пользуйтесь weather.com — точность погоды в большинстве случаев до 30 минут. Если ошибается, то в каком-то редком погодном явлении. Данные со спутников и метеостанций.И большой опыт в предсказании и моделировании. Если в поисковой строке Google ввести "погода", то будет прогноз этой компании.


    1. imalion Автор
      30.11.2017 18:47

      Да, для такой карты много хороших применений, работаем над этим.


  1. peacemakerv
    30.11.2017 17:58

    А вот такая идея: отслеживание погоды в выбранной точке. И предупреждение на email\SMS\push о резком изменении, например, направления ветра на 45 градусов, давления на 7 мм.рт.ст и др.
    Рыболовы оценили бы… или скалолазы…


  1. saddy
    30.11.2017 18:08

    А что за серая хрень на половине полной карты осадков, не меняющая свои очертания при выборе любого времени внизу страницы? Это дождь? А почему на миникарте осадков (на главной странице) дождь выглядит иначе и сразу понятно что это дождь?
    Или это просто глюк моего браузера (Яндекс.Браузера если что)?
    Скриншот «хрени»: screenshot.ru/01e41651c6f4eed986b9770f2a071bb2


    1. imalion Автор
      30.11.2017 18:54

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


      1. saddy
        30.11.2017 19:20

        А можете это как-то подписать что-ли? Непонятно же…


  1. mitrym
    30.11.2017 18:43
    -1

    Зашибись конечно, вещь крутая, но… в Питере завтра — осадки, послезавтра осадки… и потом тоже осадки. Зачем портить себе настроение.


  1. almazsr
    30.11.2017 18:43

    Что за фигня с давлением? Для сравнения:
    Яндекс.Погода: joxi.ru/MAj16bES4q7zV2
    Windy: joxi.ru/Rmzq7bEC0kZ6Wr
    Я так понимаю учитывается высота, в которой указано значение. Только зачем? Влияние высоты на давление достаточно велико. Карта распределения давления теряет смысл.


    1. imalion Автор
      30.11.2017 18:56

      Для давления мы добавим величину, приведенную к уровню моря, чтобы было удобнее отслеживать циклоны и все такое.


  1. Evgeny42
    30.11.2017 19:47

    На фаерфоксе (57) очень сильно тормозит. На хроме лучше, но тоже не идеально. При этом аналоги которые кидали выше, практически не тормозят.

    Железо почти топовое.


    1. imalion Автор
      01.12.2017 12:49

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


  1. SlavikF
    30.11.2017 20:37

    Я в Сиэттле (это штат Вашингтон).
    Зашёл на карту, меня сервис определил как «Вашингтон».
    Но на карте показал на Востоке! Я долго соображал, пока понял, что мне показывается Washington, DC вместо Washington state

    image


    1. justboris
      30.11.2017 20:55

      У меня аналогично. Я сейчас нахожусь в Берлине, а точка на карте показывает куда-то в середине Германии. И в заголовке страницы пишется прекрасное: "Погода undefined undefined"



      1. imalion Автор
        01.12.2017 12:17

        Пришлите, пожалуйста, ссылку на страницу, на которой такое получается.


        1. justboris
          01.12.2017 13:36

          1. Открываю страницу https://yandex.ru/pogoda/berlin/maps/temperature. Точка указывает на Берлин, все верно.
          2. Жму на кнопку "определелить мое местоположение": вот эту
          3. Маркер перемещается в какое-то странное место, а в заголовке появляется undefined.

          Воспроизводится каждый раз, как я это делаю.


          1. imalion Автор
            01.12.2017 13:42

            Скопируйте ещё, пожалуйста, ссылку, которая после уточнения местоположения получилась — там будут координаты, на которые произошло перемещение.


  1. Hixon10
    30.11.2017 20:40

    Удивительно, но интересен бизнес вопрос. А какая миссия/цель проекта Яндекс.Погода? Заработок? Или вы делаете этот проект для полноты, чтобы «и погода у нас была, и телевизионная программа»?


    1. 4knowledge
      01.12.2017 11:08

      В интервью на TJ — говорили, что хотят внедрить погоду в свою рекламную сеть, тк от погоды зависит конверсия


    1. imalion Автор
      01.12.2017 12:57

      Мы обычно не делаем проекты из соображений «чтобы было». Погода важна как пользовательский сервис, у нас большая и стабильная аудитория, которая регулярно возвращается. Мы поняли, что, чтобы принести им пользу, погодные данные должны быть максимально точными. Так начался проект Метеум — применение ML к погоде, в широком смысле этого слова. После многочисленных тестов мы поняли, что данные получились и правда качественные, поэтому их можно предлагать погодозависимым бизнесам. Мы начали с рекламы, однако спектр применений точных погодных прогнозов в сегменте b2b чрезвычайно широк.


  1. AndrewSu
    30.11.2017 23:11
    +1

    Интересная статья.
    А почему вторым кандидатом стал свой формат хранения данных Flatbuffers?
    Тот же tiff умеет и чанкование, и сжатие, и пирамиды, и float, и кэшировать удобно. Мы в своих задачах (со сходными объёмами данных) его используем. Скорость работы ограниченна только системой хранения.


  1. bearenok
    30.11.2017 23:11

    Планируете ли заняться прогнозами волн (направление, период, скорость, высота) ?)


    1. imalion Автор
      01.12.2017 12:58

      Планируем получить эти данные на сервисе так или иначе, да.


  1. deniskin
    30.11.2017 23:14

    Мой второй по частоте использования сервис Яндекса после карт. Вы большие молодцы, карта движения осадков летом очень часто спасала от мокрой одежды и обуви.


  1. KiloLeo
    01.12.2017 00:04

    Любопытно, какова мощность оборудования, которое всё это обрабатывает? Можно дать какие-то количественные параметры?


  1. encyclopedist
    01.12.2017 03:42

    Интересно, используете ли данные сетей краудсосинга, вроде Blitzortung или других каких-то? И планируете ли?


    1. imalion Автор
      01.12.2017 13:01
      +1

      Конкретно для молний мы берем данные из другого источника. Вообще тема краудсорсинга в погоде богатая. Если говорить коротко, то некоторые из этих данных крайне полезны, но далеко не все.


  1. kelvinist
    01.12.2017 10:11

    Вторым кандидатом стал наш --самописный-- проприетарный формат – матрицы float'ов сжатые LZ4 и записанные в Flatbuffer

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


  1. teakettle
    01.12.2017 10:11

    [offtop]
    А куда делся пульт управления погодой, который мог выкинуть три «дождя» и сказать «Поздравляю, вы испортили погоду!»?
    [/offtop]


    1. imalion Автор
      01.12.2017 13:03

      Он никуда не пропал, он находится в самом сердце погоды :) в некоторых случаях мы даже показываем его людям.


  1. KiloLeo
    01.12.2017 11:45

    Что-то с ветром не очень понятно. Прямо сейчас визуально показывает мощный южный поток в районе Николаева и разряжённый жиденький в районе Донузлава, Крым. При этом наводишь курсор — там и там 8м/с


    1. imalion Автор
      01.12.2017 13:04

      А можете скриншот приложить пожалуйста?


  1. VJean
    01.12.2017 12:57

    Данные предоставляются поставщиками на платной основе? Есть данные ли в свободном доступе для собственного академического ковыряния и изучения? Если есть, то с какой точностью и ограничениями?


    1. imalion Автор
      01.12.2017 13:02

      Это зависит от поставщиков. Данные GFS, например, доступны бессплатно в той самой точностью, которую используем мы.


  1. bearenok
    01.12.2017 13:45

    А как у вас с метеоданными от поставщиков в Индонезии? Стоит ли полагаться на точность в масштабе пары километров (в частности на о. Бали)? Учитывается ли рельеф Индонезийских островов?


  1. lzhl
    01.12.2017 17:12

    А какие данные берутся из OpenStreetMap? Любопытно, как участнику проекта.