Утром, когда завтракаю, почти ежедневно просматриваю Яндекс.Погоду и у меня переодически возникает чувство дежавю, но только наоборот. Глядишь — одна температура на выходные указана, а на другой день смотришь — уже совем другие показатели температуры обещаны. Потихоньку начинаешь сомневаться в своей памяти (30 лет — это же уже четвёртый десяток начался). Но чтобы окончательно не пасть духом — я решил проверить, насколько прогноз соотносится с реальной температурой.


Голубая линия — это реальная температура. Оранжевая область — это диапазон предсказаний.


image
Источник картинки.


Немного технических деталей


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


curl https://yandex.ru/pogoda/novosibirsk > test/`date +%Y-%m-%d-%H-%M`

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


function parseFile($day) {

    global $mega, $csv, $realT;
    $predicts = [];

    $html = file_get_html(__DIR__ . '/test/' . $day);
    foreach($html->find('.forecast-brief_cols_10') as $element) {
        foreach ($element->find('.forecast-brief__item-temp-day') as $s) {
            $predicts[] = str_replace('?', '-', $s->plaintext);
        }
    }

    $dayDate = date_create_from_format("Y-m-d-H-i", $day);
    $dayDateString = date_format($dayDate, 'Y-m-d H:i:s');
    $dayArr = explode('-', $day);

    if ($dayArr[3] == 14) {
        foreach($html->find('.current-weather__thermometer_type_now') as $s) {
            $realT[] = [
                intval(date_format($dayDate, 'U') . '000'),
                intval(str_replace('?', '-', $s->plaintext))
            ];
        }
    }

    for ($i = 1; $i < count($predicts); $i++) {

        $nextDay = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($dayDateString)));
        $nextDayArr = explode('-', $nextDay);

        $line = [
            'Y' => $dayArr[0],
            'm' => $dayArr[1],
            'd' => $dayArr[2],
            'H' => $dayArr[3],
            'i' => $dayArr[4],
            '_m' => $nextDayArr[1],
            '_d' => $nextDayArr[2],
            '_C' => $predicts[$i]
        ];

        $mega[] = $line;
        $csv .= join(';', array_values($line)) . "\n";
    }
}

Для внесения ясности


  • Прогнозом я считал дневные температуры дня, показанные не на текущий день (на картинке нижний длинный выделенный прямоугольник);
  • Реальную температуру я брал из верхнего выделенного прямоугольника в 14:25

image


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


Примеры графиков предсказаний температуры для конкретного дня:


image
image


Вывод


Память моя в порядке, можно не волноваться.

Поделиться с друзьями
-->

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


  1. FireWind
    23.12.2016 06:54
    +5

    Кстати, гораздо интереснее будет, если вместо одного оранжевого цвета предсказаний будет несколько цветов — по дням. Например за 5,3,2,1 день. Очевидно, что чем дальше от актуальной даты предсказание, тем больше будет отклонение от действительной температуры. А возможно, все совсем не так очевидно.


    1. sizeg
      23.12.2016 09:21
      +1

      У меня коллега был отучившийся на метролога, он говорил, что только 3 дня точных. Остальное «предсказание».


      1. Dreamastiy
        23.12.2016 10:01
        +10

        Действительно ли это был метролог?

        или кто-то другой

  1. mwaso
    23.12.2016 07:42
    +2

    А можно Вас попросить подобные последним двум графикам составить для GisMeteo.ru, AccuWeather.com, Weather.com, Meteoinfo.ru?


    1. Ktulkhu_Triediniy
      23.12.2016 09:03
      +1

      Я бы ещё в этот заявочный список попросил добавить Foreca и Weather Underground, а также было бы неплохо сравнить у всех них соотношение реальной температуры от какого-нибудь электронного градусника и показываемой, как температура на текущий момент времени.


      1. sergarcada
        23.12.2016 09:28

        Вопрос еще в том, какому «градуснику» верить. Электронный термометр у меня расходится с ртутным на 2 градуса при температуре за бортом около -20 по Цельсию. И чем ниже температура, тем больше расхождение. И всегда интересовал вопрос, кому же больше верить — китайскому электронному чуду или безымянному ртутному (а может и спиртовому, хз).


        1. Rumlin
          23.12.2016 09:40

          Наука говорит, что нужны два термометра:

          В качестве температурных датчиков используют обычные термометры – ртутные (для измерения высоких температур) или спиртовые (для низких температур).

          image


          1. sergarcada
            23.12.2016 13:33

            Ну и каким измерял автор? Я имею в виду, что можно ли доверять измерениям автора статьи. Добавьте 1 градус на погрешность прибора и график на первой картинке таки влезет в указанный коридор.


            1. Rumlin
              23.12.2016 13:51

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

              Вчера как раз «разглядывал» температуры на Народный Мониторинг. Разброс значений в 5 градусов между некоторыми.


              1. saege5b
                23.12.2016 17:50
                +1

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

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


                1. Rumlin
                  23.12.2016 18:45

                  Народные по моему просто «показывают», т.к. явно некоторые показывают температуру в комнате — +20С


            1. artoym
              23.12.2016 14:04
              +3

              Автор брал данные яндекса с температурой на данный момент, если вы про это. В статье было описано что температура на 14.25 каждого дня


        1. SilverHorse
          23.12.2016 18:20

          А вот мне интересно, откуда на разных сайтах берутся данные по давлению. Недавно обратил внимание, что на погодных сайтах давление у меня в Челябинске различается аж на 20 миллиметров. Прямо сейчас:

          Foreca: 1020 hpa (765 mmHg)
          OpenWeatherMap: 1020 hpa (765 mmHg)
          Гисметео: 746 mmHg
          Яндекс: 746 мм рт.ст.
          Weather.com: 30.12 in (765 mmHg)
          Meteoinfo.ru (Гидрометцентр): 747 мм рт.ст.
          Chelpogoda.ru (Челябгидромет): 747 мм рт.ст.

          Ощущение, что источник для зарубежных сайтов почему-то приводит давление примерно к уровню моря (Челябинск находится на высоте 200-220 метров над уровнем моря и нормальное давление тут 738 миллиметров). Почему — мне неведомо.


          1. PahanMenski
            24.12.2016 04:46
            +1

            Могу предположить, что данные сервисы получают метеосводки в виде отчетов METAR, которые как-раз таки содержат давление, приведенное к уровню моря (QNH). Далее его можно пересчитать в давление на конкретной высоте по простым формулам, если знать эту высоту. Почему они не выполняют этот пересчет, учитывая что данные по высотам найти не проблема, уже другой вопрос.


      1. nik_vr
        23.12.2016 09:36

        Яндекс же берёт данные у Foreca как раз.


        1. Gozdi
          23.12.2016 10:14

          Янд похвастался информацией с метео-радаров, но реалии сильно отличаются от анимации осадков…


          1. nik_vr
            23.12.2016 10:22

            Ну вот прямо сейчас у меня совпадает картинка на «Карте погоды» и за окном :) По прогнозу снегопад прекратится в течение получаса — посмотрим :)


            1. Gozdi
              23.12.2016 10:28
              +1

              проверил на днях эту софтинку, показывала снегопад в 25 км за перевалами, в это время меня засыпало, стоящего на подъеме с лопатой в руках. Такие вот радары, как GPS у Кремля ))


          1. kAIST
            23.12.2016 11:06

            Метеорадары есть не во всех городах, поэтому где то скорее всего просто «прогноз». А так, у нас в Казани все совпадает, с точностью до района. Впрочем, как и совпадало раньше, когда была доступна публично картинка с метеорадара.


        1. Neyury
          23.12.2016 10:39

          Он кажется берет данные из нескольких источников и обрабатывает их


        1. Ktulkhu_Triediniy
          23.12.2016 18:13

          Если честно, для меня это новость. Я всегда считал, что у Яндекса свои прогнозы.


          1. nik_vr
            23.12.2016 18:59

            В подвале страницы с прогнозом:

            Исходные данные: ООО «Яндекс.Пробки», Foreca


            1. Ktulkhu_Triediniy
              26.12.2016 15:13

              Значит Форека такой неточный прогноз… Раньше был сильно точнее, однако.


    1. OLS
      23.12.2016 11:27

      > А можно Вас попросить подобные последним двум графикам составить для GisMeteo.ru, AccuWeather.com, Weather.com, Meteoinfo.ru

      https://geektimes.ru/post/112958/


    1. sigvart
      23.12.2016 16:43

      Вот здесь есть анализ прогноза от Gismeteo, Foreca и гидрометцентра


  1. Rumlin
    23.12.2016 08:21
    +2

    Смотрю погоду на Weather.com — они часто попадают точно с ошибкой +30 минут.
    Эти же прогнозы показывает Google по запросу «погода».
    image


  1. lzb_j77
    23.12.2016 08:33

    Дабы понимать, «насколько прогноз соотносится с реальной температурой», нужно понимать:
    1) физику атмосферы;
    2) количество метеостанций, выживших в России и зачем они нужны;
    3) математические модели погоды, используемые в прогнозах;
    4) вычислительные мощности счётных бюро, ведущие расчёт прогнозов.


    1. MAXInator
      23.12.2016 09:21
      +2

      Не нужно. Все вами перечисленное нужно для понимания причины «точности» прогнозов, а для соотношения прогноза и реальности достаточно иметь эти самые прогноз и реальность.


      1. lzb_j77
        23.12.2016 09:32

        А зачем соотносить прогноз и реальность? :) Прогноз — вещь сильно недетерминируемая.


        1. solariserj
          23.12.2016 09:37

          Зато на бытовом уровне можно определить доверять или нет.


          1. Kain_Haart
            23.12.2016 10:22

            afaik точность прогноза ОЧЕНЬ сильно зависит от срока, поэтому не стоит на бытовом уровне грести под одну гребенку доверие к яндекс прогнозу на завтра и на две недели


            1. manfromearth
              23.12.2016 13:35

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


            1. solariserj
              23.12.2016 14:41

              Так вот надо было сделать несколько графиков:

              • исполнение прогноза на завтра
              • исполнение прогноза через 2 дня
              • исполнение прогноза через неделю
              • исполнение прогноза через 2 недели


              Вот тогда было бы видно на какой дистанции можно доверять, а на какой нет, а может даже на 2 недели он берет от балды, на просто сравнить.

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


  1. sim-dev
    23.12.2016 08:34
    +6

    При ширине диапазона предсказаний минимум в 10, а максимум в 20 (согласно первому графику) градусов просто удивительно, что еще бывают случаи «не угадывания». Надо расширить диапазон, и тогда проблем с неугадыванием у Яндекса не будет: «завтра температура будет. точка.»


    1. Sgho
      23.12.2016 16:09

      Зашел написать именно этот комментарий.


  1. shadovv76
    23.12.2016 09:05

    постоянная температура -5 чаще попадет в прогноз чем фактическая :)


  1. kx13
    23.12.2016 09:12
    +1

    На сайте rp5.ru можно скачать архив погоды за любой период с 2005 года сразу в xls или csv.


  1. griin
    23.12.2016 09:22
    +1

    Всем заинтересованным в погоде рекомендую заглянуть на www.windguru.cz
    Да он корректируется с течением времени, но на сутки вперед показывает достаточно точно, на работе мониторим осадки и в соответствии с ними планируем монтажные работы.
    Если зарегистрироваться, можно создать свои локали для показаний прогноза, можно привязать свою погодную станцию, при наличии.


    1. aryanatha
      23.12.2016 16:09

      у меня многие знакомые парапланеристы используют этот сервис. им как раз нужен максимально точный прогноз и этот сайт они считают самым правильным


  1. vlivyur
    23.12.2016 10:19

    Я так и не смог понять графики: что голубым обозначено, а что коричневым, зачем дата со временем в заголовке?


    1. prostofilya
      23.12.2016 10:36
      +1

      Голубым — реальная температура в конкретный день («дата со временем в заголовке»).
      Коричневым — прогноз для этого дня, взятый за несколько дней до этого самого конкретного дня (точный день можно увидеть внизу).


      1. sergarcada
        23.12.2016 13:37

        То есть целую неделю температура у автора за окном вообще никак не менялась? Опять же, на оси абцисс явно указаны дни и месяцы. А в заголовке графиков — дата и время.


        1. vlivyur
          23.12.2016 14:02
          +1

          Нет, график зависимости прогноза от дальности этого прогноза. 24го ноября на 3 декабря, 25 ноября на 3 декабря и т.д. А вот зачем фактическую температуру растянули на все эти дни — загадка.


          1. artoym
            23.12.2016 14:06
            +1

            Графики у автора прекрасные. Температура на все дни растянута чтобы было проще читать график.


  1. kAIST
    23.12.2016 11:04

    Яндекс недавно сделал очень полезную вещь — прогноз осадков. Не для всех городов это работает конечно, но нашему городу (Казань) — повезло.
    Это даже не «классический» прогноз погоды, а реальные данные с метео радаров. Два года назад, картинка с радара была доступна всем. Открываешь и видишь, где идут осадки, в какую сторону движутся и с какой скоростью. По работе очень нужно было все это дело прогнозировать. Клиенты удивлялись, когда говорил «ничего не отменяем, через час дождя не будет и на пару часов». Потом данные внезапно закрыли (стали выкладывать с задержкой в сутки).
    https://yandex.ru/pogoda/kazan/nowcast


    1. talovd
      23.12.2016 11:59

      Радар от Gismeteo тоже немного поменяли.
      https://www.gismeteo.ru/maps/


      1. kAIST
        23.12.2016 17:18

        У гисметео, насколько я понял, данные со спутника. А тут с метео радара. Разрешение гораздо выше — вплоть до района города. И плюс в реальном времени скорость и направление ветра, что позволяет очень точно спрогнозировать: идет дождевая тучка, через час она накроет район.


    1. OLS
      23.12.2016 12:33

      В СПб до сих пор доступен один радар


    1. argz
      23.12.2016 13:12

      Да, теперь вот так — http://www.meteorad.ru/maps (Карта метеоявлений ДМРЛ за последние 3 часа. Данные с задержкой 24 часа). И эта задержка очень удобна, потому что позволяет им на все претензии отвечать, что, мол, данные выкладываются, но с временной задержкой.
      А раньше были нормальные карты:

      Карты


  1. inferrna
    23.12.2016 11:46

    Есть мобильные приложения, которые делают то же самое. Можно поискать по запросам «погода спутник», «погода радар» и подобным.


  1. Gozdi
    23.12.2016 13:42

    непонятно, как реализован заявленный И.И.

    В виде пользователя, нажимающего на иконку реального состояния погоды на местности?


  1. fantast8
    23.12.2016 14:26
    +3

    В исследовании допущено множество ошибок и само исследование абсолютно бесполезно, так как не показывает никаких конечных значений, а именно оправдываемости в % и отклонения фактической температуры от прогнозируемой в градусах на разные сутки. Это во-первых.
    Во-вторых, главная ошибка заключалась в том, что Яндекс показывает не реальную температуру, а расчётную, опять же используя данные своего суперпупер крутого Метеума. Поэтому эти виртуальные температуры нельзя использовать для проверки прогноза. Для верификации прогнозов всегда используются данные местной метеостанции. В данном случае, если речь идёт про Новосибирск, то это учебная станция 29637 или станция в аэропорту UNNT.
    В третьих. Точность прогноза определяется попаданием фактического значения в прогнозируемый интервал. В соответствии с наставлением Гидрометцентра об оправдываемости краткосрочных прогнозов, допустимой погрешностью считается 3 градуса. Например, по прогнозу на завтра днём максимальная температура составит +20 градусов, тогда допустимый интервал +17...+23 градуса. Если фактическое значение попадает в этот диапазон, значит прогнозу ставится 100%, если нет — 0%. Схема простая. В качестве дополнения всегда обязательно считается отклонение факта от прогноза в градусах, на разные сутки. Например, похожим образом я определял точность прогнозов сайта Gismeteo для Кургана. Выборка 60 дней. На первые сутки точность составила 92%, на 5-е сутки — 77%, а на 13-е — 50%. В качестве инструмента оценки прогнозов использована программа Weather_FMX Version 2.10
    image


    1. QDeathNick
      23.12.2016 15:37

      Если фактическое значение попадает в этот диапазон, значит прогнозу ставится 100%, если нет — 0%.

      А как тогда у вас получается, что на 13-е сутки 50%? Что значит 50%?


      1. fantast8
        23.12.2016 17:15

        Что из 100 прогнозов, только 50 оправдывается. На первые сутки из 100 прогнозов оправдывается 93


  1. barker
    23.12.2016 15:31

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


  1. basilbasilbasil
    23.12.2016 18:58

    Есть ещё данные с аэропортов. Мобильное приложение точно есть.


  1. imalion
    24.12.2016 15:23
    +1

    Павел, спасибо за статью. Мне нравится ваш метод сравнения гораздо больше методички Росгидромета, но в реализации есть неточности.

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

    Главная неточность в том, что вы принимаете значение из поля фактической температуры за ground truth. На самом деле это тоже немного прогноз, просто более точный, чем тот, который сделан за 24 часа. Чтобы сравнение было более правильным, нужно сравниваться в точке, которая поближе к метеостанции (сейчас вы савниваете прогнозы и факты на точку, близкую к геометрическому центру Новосибирска).

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


    1. fantast8
      24.12.2016 20:56

      Вот опять Вы обманываете людей. О каких долгосрочных прогнозах идёт речь? На сайте Яндекса нет долгосрочных прогнозов. Вы заявляете это как прогноз на месяц, но это лишь усредненные данные за последние 7 лет, к будущему состоянию атмосферы они не имеют никакого отношения. Поэтому у Вас и появляется такая разница между 2 и 3 января.
      image


      1. imalion
        25.12.2016 11:27

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

        Вот вы, как метеоролог-любитель, наверняка знаете какая погода будет, например, во Владивостоке 25 января. Расскажите — сильно она будет отличаться от климатической нормы? Покажите, как говорится, свою точность.


        1. fantast8
          25.12.2016 14:40

          Я специализируюсь на своей области, мне нет никакого дела до Владивостока. Если хотите делать долгосрочные прогнозы, расшаривайте GRIB данные модели CFS.


  1. a-rus
    24.12.2016 15:23
    +2

    Делал подобное, но с глубиной прогноза по прошедшим дням. С выводом согласен — близкие к реальным данные можно получить только на 2-3 дня.
    image


  1. severgun
    26.12.2016 11:25

    21 декабря. -5 -25 градусов. Браво! Отличная точность.
    Что по одежде при таком прогнозе?


  1. ganzmavag
    28.12.2016 08:00
    +1

    Благодаря этому посту наконец-то узнал, почему у меня виджет Яндекс.Погоды стал в текущей погоде на 3-4 градуса по утрам ошибаться. Что-то они перекрутили с алгоритмами, раньше использовал, чтобы точнее знать, во что одеваться, а теперь оденешься на минус, а там за окном на самом деле почти плюс уже. Снес, поставил MSN, теперь снова соответствует температура на виджете температуре на улице.