Чей прогноз погоды точнее? +32


Многие время от времени задумываются — насколько точны прогнозы погоды? Чей прогноз погоды точнее? В какую сторону чаще всего ошибаются прогнозы для моего города?

Время математических приключений!


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

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

И тут я задумался: а кто-нибудь вообще считает точность прогнозов?

Огненное королевство


Быстрое гугление выдало проект ForecastAdvisor, однако там оценивались прогнозы исключительно по городам США, и, естественно, отсутствовали русскоязычные провайдеры (Яндекс, Гидромет и т.д.).

В рунете некоторое время существовал проект MyCli.me, ныне закрытый. Однако у него были постоянные проблемы со сбором данных и рейтинговая система (выбор наилучшего прогноза) не была основана на научном методе.

Кроме того, я нашел много начинаний, например, от OLS и lucius, но все они были ограничены или по времени, или по городу, или по провайдеру. Например, один из самых удивительных проектов от slimyhorror анализирует сбываемость прогнозов уже больше 5000 дней подряд! Но оцениваются только прогнозы от BBC и только для городов Великобритании.

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

Банановая стража


В 2009 году Гидрометцентр России выпустил «Наставления по краткосрочным прогнозам». Согласно этому руководству, прогноз считается сбывшимся, если он отличается от фактический наблюдаемой температуры не больше, чем на 3 °С в любую сторону. Если прогноз отличается от фактической погоды больше, чем на 3°, то такой прогноз считается несбывшимся (пункт 7.3.1.4 наставления).

Подробнее про градацию.
Теоретически провайдер мог бы каждый день прогнозировать погоду от -60 до +60 и таким образом получить стопроцентную сбываемость. Однако корректной градацией прогноза считается отклонение не больше 1 градуса, например, «Температура днем от 2° до 4°». Таким образом, допускается отклонение на 2 градуса от интервала или 3 градуса от значения.

Прогнозы погоды должны оцениваться раздельно для дня и ночи (7.2.3). Оправдываемость суточного прогноза определяется как среднее из значений оправдываемости прогнозов на ночь и на день. Оценка успешности прогнозов погоды за календарный период (месяц, сезон, год и т.д.) заключается в вычислении их средней оправдываемости за соответствующий период (9.1.1).

Окей, вроде не сложно — берем прогноз на завтра (на послезавтра и т.д.), собираем данные о фактической погоде, сравниваем отдельно для дня и ночи. Если

Math.abs(predict - actual) > 3

то прогноз не сбылся (Pt=0%), если <= 3 то Pt=100%. Считаем среднюю оправдываемость за соответствующий период и получаем нужные данные.

Темное облако


От парсинга сайтов с погодой сразу отказался, т.к. парсинг HTML не отличается стабильностью и это неизбежно увеличило бы количество ошибок в итоговой статистике. К счастью, многие провайдеры предоставляют API для доступа к своим прогнозам. На первом этапе я добавил прогнозы от accuweather.com, darksky.net, openweathermap.org и wunderground.com. Все они предоставляют JSON-API. На втором этапе были добавлены норвежский yr.no с XML-API, российский Гидрометцентр (пришлось парсить RSS) и Яндекс.Погода.

На сегодняшний день есть договоренность с foreca.com и ведутся переговоры с gismeteo.ru, intellicast.com и английским metoffice. Если у вас есть знакомые в этих проектах, готовые помочь с API, — пишите!

Повышенная странность


В теории со сбором фактической погоды не должно было возникнуть никаких проблем. В каждом крупном городе есть станция наблюдения за погодой, обычно в центре города, например в Москве это ВДНХ. Национальные гидрометеорологические службы передают данные с этих станций во Всемирную службу погоды, где она обрабатывается и хранится. Наблюдения передаются в виде SYNOP-кода каждые 3 или 6 часов.

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

Сырые SYNOP и METAR данные можно найти на сайте NOAA; обработанные данные на сайте ogimet.com. Сами станции удобно искать на weatherobs.com.

Однако тут есть несколько проблем. Во-первых, качество передаваемых данных — в сводках нередко бывают опечатки (например, буква O вместо цифры 0). Во-вторых, стабильность данных. В 2017 году Авиаметтелеком на целый месяц прекратил передачу в международный обмен метеосводок с более чем пятидесяти аэродромов России. В-третьих, есть города, в которых мне просто не удалось найти работающую станцию. Например, в Ростове-на-Дону нет данных ни по станции 34730 (URRR), ни по станции 34731.

В подобных ситуациях для сбора фактической погоды я использую информацию от частной сети станций The Weather Company (ныне принадлежит IBM).

Наука рулит


В итоге получился сайт Meteotrust.com
На данный момент данные собираются для 10 городов России от 7 провайдеров. В ближайшее время планирую добавить больше городов, больше провайдеров и больше периодов (долгосрочные прогнозы от hydrometcenter и accuweather, прогнозы на 10 дней). Кроме того, готовится сбор статистики по осадкам. Оценивать точность прогнозов по осадкам немного сложнее, чем по температуре. Об этом будет отдельный пост.

Какие выводы?


Openweathermap — дно.
Accuweather, yr.no, darksky — крепкие середнячки.
У Яндекса и Wunderground — превосходные прогнозы.
Гидрометцентр часто борется с Яндексом за первое место по качеству краткосрочных прогнозов. Однако есть предположение, что с увеличением количества городов, особенно зарубежных, общая успешность прогнозов Гидрометцентра будет падать.




К сожалению, не доступен сервер mySQL