- Как (не) использовать машинное обучение для прогнозирования временных рядов: как избежать ошибок
- Модели машинного обучения для прогнозирования временных рядов
- Как реализовать модели с использованием программных библиотек с открытым исходным кодом
- Пример случая: прогнозирование данных временного ряда
- Это просто НЕПРАВИЛЬНО .
- Прогнозы с задержкой и автокорреляции
- Метрики точности могут вводить в заблуждение при неправильном использовании
- Стационарность и разность данных временных рядов
- Модель прогнозирования для разностных данных
- Ваш временной ряд — случайная прогулка?
- Резюме
- Другие статьи:
- Полное руководство по анализу и прогнозированию временных рядов
- автокорреляция
- Сезонность
- стационарность
- Как проверить, если процесс является стационарным
- Моделирование временных рядов
- Скользящая средняя
- Экспоненциальное сглаживание
- Двойное экспоненциальное сглаживание
- Трип экспоненциальное сглаживание
- Сезонная авторегрессионная интегрированная модель скользящего среднего (SARIMA)
- Проект 1 — Прогнозирование цены акций
- Импортировать данные
- Очистить данные
- Исследовательский анализ данных (EDA)
- Скользящая средняя
- Экспоненциальное сглаживание
- Двойное экспоненциальное сглаживание
- моделирование
- Sarima
- Сравните прогнозируемую цену с фактическими данными
- Проект 2 — Предсказать качество воздуха с Пророком
- Импортировать данные
- Очистка данных и разработка функций
- моделирование
Как (не) использовать машинное обучение для прогнозирования временных рядов: как избежать ошибок
Дата публикации Jun 7, 2018
В других моих постах я освещал такие темы, как:Как совместить машинное обучение и физику, и какмашинное обучение может быть использовано для оптимизации производства,управление цепочками поставоктак же какобнаружение аномалий и мониторинг состояния, Но в этом посте я расскажу о некоторых распространенных ошибках машинного обучения для прогнозирования временных рядов.
Прогнозирование временных рядов является важной областью машинного обучения. Это важно, потому что существует так много проблем прогнозирования, которые включают временную составляющую. Однако, хотя компонент времени добавляет дополнительную информацию, он также усложняет решение временных рядов по сравнению со многими другими задачами прогнозирования.
Этот пост будет проходить через задачупрогнозирование временных рядовиспользуя машинное обучение, и как избежать некоторых распространенных ошибок. На конкретном примере я покажу, как можно создать хорошую модель, и решу запустить ее в производство, в то время как на самом деле модель может не иметь никакой предсказательной силы. Более конкретно, я сосредоточусь на том, как оценить точность вашей модели. и покажите, как полагаться просто на общие показатели ошибок, такие каксредняя процентная ошибка,Оценка R2и т. д. может вводить в заблуждение, если они применяются без осторожности.
Модели машинного обучения для прогнозирования временных рядов
Существует несколько типов моделей, которые можно использовать для прогнозирования временных рядов. В этом конкретном примере я использовал Длинную сеть кратковременной памяти, или вкратцеСеть LSTMЭто особый вид нейронной сети, которая делает прогнозы по данным предыдущего времени. Он популярен для распознавания языков, анализа временных рядов и многого другого. Тем не менее, по моему опыту, более простые типы моделей фактически обеспечивают точно такие же точные прогнозы во многих случаях. Использование таких моделей, как, например,случайный лес,регрессор повышения градиентаа такжезадержка нейронных сетейвременная информация может быть включена через набор задержек, которые добавляются к входу, так что данные представляются в разные моменты времени. Из-за их последовательного характера TDNN реализуются какпрямая нейронная сетьвместорецидивирующая нейронная сеть,
Как реализовать модели с использованием программных библиотек с открытым исходным кодом
Я обычно определяю свой тип нейронной сети, используяKerasЭто высокоуровневый API нейронных сетей, написанный на Python и способный работать поверхTensorFlow,CNTK, илиTheano, Для других типов моделей я обычно используюScikit-Learn, которая является свободно распространяемой библиотекой машинного обучения,классификация,регрессияа такжекластеризацияалгоритмы в том числеопорные векторные машины,случайные леса,повышение градиента,К-средстваа такжеDBSCANи предназначен для взаимодействия с числовыми и научными библиотеками PythonNumPyа такжеSciPy,
Однако основная тема этой статьи не в том, как реализовать модель прогнозирования временных рядов, а в том, как оценить предсказания модели. В связи с этим я не буду вдаваться в детали построения моделей и т. Д., Так как есть множество других постов в блогах и статей, посвященных этим темам.
Пример случая: прогнозирование данных временного ряда
Пример данных, использованных в этом случае, показан на рисунке ниже. Я вернусь к данным более подробно позже, но сейчас давайте предположим, что эти данные представляют, например, ежегодная эволюция фондового индекса. Данные разбиты на набор обучения и тестирования, где первые 250 дней используются в качестве данных обучения для модели, а затем мы пытаемся предсказать индекс запаса в течение последней части набора данных.
Поскольку в этой статье я не остановлюсь на реализации модели, давайте перейдем непосредственно к процессу оценки точности модели. Простые визуальные проверки приведенного выше рисунка позволяют предположить, что предсказания модели точно соответствуют реальному индексу, что свидетельствует о хорошей точности. Однако, чтобы быть немного более точным, мы можем оценить точность модели, построив график реальных и прогнозируемых значений на диаграмме рассеяния, как показано ниже, а также рассчитать метрику общей ошибки.Оценка R2,
Исходя из предсказаний модели, мы получаем оценку R2 0,89 и, по-видимому, хорошее соответствие между реальными и прогнозируемыми значениями. Однако, как я сейчас расскажу более подробно, эта оценка метрики и модели может быть очень обманчивой.
Это просто НЕПРАВИЛЬНО .
Исходя из приведенных выше цифр и рассчитанных метрик ошибок, модель, по-видимому, дает точные прогнозы. Однако это совсем не так, а просто пример того, как выбор неправильной метрики точности может быть очень обманчивым при оценке производительности модели. В этом примере, для иллюстрации, данные были явно выбраны для представления данных, которые на самом деле не могут быть предсказаны Более конкретно, данные, которые я назвал «фондовым индексом», на самом деле моделировались с использованиемпроцесс случайного блуждания, Как видно из названия, случайная прогулка является полностьюслучайный процесс, В связи с этим идея использования исторических данных в качестве учебного набора для изучения поведения и прогнозирования будущих результатов просто невозможна. Учитывая это, как могло случиться, что модель, по-видимому, дает нам такие точные прогнозы? Как я вернусь более подробно, все сводится к (неправильному) выбору метрики точности.
Прогнозы с задержкой и автокорреляции
Данные временного ряда, как следует из названия, отличаются от других типов данных в том смысле, что важен временной аспект. Положительным моментом является то, что это дает нам дополнительную информацию, которую можно использовать при построении нашей модели машинного обучения, что не только входные функции содержат полезную информацию, но также и изменения во времени ввода-вывода. Однако, хотя компонент времени добавляет дополнительную информацию, он также усложняет решение временных рядов по сравнению со многими другими задачами прогнозирования.
В этом конкретном примере я использовалСеть LSTMкоторые делают прогнозы в соответствии с данными в предыдущие времена. Однако, немного увеличив прогнозирование модели, как показано на рисунке ниже, мы начинаем видеть, что на самом деле делает модель.
Данные временного ряда имеют тенденцию коррелировать во времени и демонстрируют значительныйавтокорреляция, В этом случае это означает, что индекс во времяT+1 «вполне вероятно, близко к индексу в то время»T». Как показано на приведенном выше рисунке справа, модель фактически делает то, что при прогнозировании значения во времени «T+1 », он просто использует значение во время«TКак его предсказание (часто упоминается какмодель постоянства). Построение сросс-корреляциямежду прогнозируемым и реальным значением (ниже рисунка) мы видим четкий пик с задержкой в 1 день, что указывает на то, что модель просто использует предыдущее значение в качестве прогноза на будущее
Метрики точности могут вводить в заблуждение при неправильном использовании
Это означает, что при оценке модели с точки зрения ее способности предсказать значение, общие метрики ошибок, такие каксредняя процентная ошибкаа такжеОценка R2оба указывают на высокую точность прогнозирования. Однако, поскольку данные примера генерируются с помощью процесса случайного обхода, модель не может предсказать будущие результаты. Это подчеркивает тот важный факт, что простая оценка прогностической способности моделей с помощью прямого вычисления общих метрик ошибок может быть очень обманчивой, и можно легко обмануть себя из-за чрезмерной уверенности в точности модели.
Стационарность и разность данных временных рядов
стационарные временные рядыэто тот, чьи статистические свойства, такие какозначать,дисперсия,автокорреляцияи т. д. все постоянны во времени. Большинство статистических методов прогнозирования основаны на предположении, что временные ряды могут быть представлены приблизительно стационарно (то есть «стационарно») с помощью математических преобразований. Одним из таких основных преобразований являетсяразница во времени данных, как показано на рисунке ниже.
Что делает это преобразование, так это то, что вместо непосредственного рассмотрения индекса мы вычисляемразницамежду последовательными временными шагами.
Определение модели для прогнозированияразницав значениях между временными шагами, а не само значение, является гораздо более сильной проверкой предсказательных способностей моделей. В этом случае он не может просто использовать, чтобы данные имели сильную автокорреляцию, и использовать значение во времени ».T«Как прогноз для»т +1” . Благодаря этому он обеспечивает лучшую проверку модели, а также узнал ли она что-нибудь полезное на этапе обучения и может ли анализ исторических данных реально помочь модели предсказать будущие изменения.
Модель прогнозирования для разностных данных
Поскольку возможность прогнозировать данные с разницей во времени, а не непосредственно данные, является гораздо более сильным показателем предсказательной силы модели, давайте попробуем это сделать с нашей моделью. Результаты этого теста проиллюстрированы на рисунке ниже, демонстрируя точечную диаграмму реальных и прогнозируемых значений.
Эта цифра указывает на то, что модельневозможность прогнозировать будущие изменения на основе исторических событий, что в данном случае является ожидаемым результатом, поскольку данные генерируются с использованием полностью стохастическогопроцесс случайного блуждания, Возможность прогнозировать будущие результатыслучайный процесспо определению невозможно, и если кто-то заявляет, что делает это, нужно немного скептически отнестись…
Ваш временной ряд — случайная прогулка?
Ваш временной ряд может фактически быть случайной прогулкой, и некоторые способы проверить это следующие:
- Временной ряд показывает сильную временную зависимость (автокорреляцию), которая затухает линейно или по аналогичной схеме
- Временной ряд является нестационарным, и, делая его стационарным, в данных не видно явно изучаемой структуры.
- Модель постоянства (с использованием наблюдения на предыдущем временном шаге в качестве того, что произойдет на следующем временном шаге) обеспечивает лучший источник надежных прогнозов.
Этот последний пункт является ключевым для прогнозирования временных рядов. Базовые прогнозы смодель постоянствабыстро указать, можете ли вы сделать значительно лучше. Если вы не можете, вы, вероятно, имеете дело со случайной прогулкой (или близкой к ней). Человеческий разум запутан, чтобы искать шаблоны повсюду, и мы должны быть бдительными, чтобы не обманывать себя и не тратить время на разработку сложных моделей процессов случайного блуждания.
Резюме
Главное, что я хотел бы подчеркнуть в этой статье, это бытьочень осторожнопри оценке производительности вашей модели с точки зрения точности прогноза. Как показано в приведенном выше примере, даже для совершенно случайного процесса, где предсказание будущих результатов по определению невозможно, можно легко обмануть. Просто определяя модель, делая некоторые прогнозы и вычисляя общие метрики точности, можно, казалось бы, иметь хорошую модель и принять решение о ее запуске в производство. В то время как на самом деле модель может не иметь никакой предсказательной силы.
Если вы работаете с прогнозированием временных рядов и, возможно, считаете себя специалистом по данным, я призываю вас сделать упор наУченыйаспект, а также. Всегда скептически относитесь к тому, что вам говорят данные, задавайте критические вопросы и никогда не делайте поспешных выводов.научный методследует применять в науке о данных, как и в любой другой науке.
Я полагаю, что в будущем машинное обучение будет использоваться гораздо большим количеством способов, чем мы можем себе представить сегодня. Как вы думаете, какое влияние это окажет на различные отрасли? Я хотел бы услышать ваши мысли в комментариях ниже.
Другие статьи:
Если вы нашли эту статью интересной, вам могут понравиться и другие мои статьи:
Источник
Полное руководство по анализу и прогнозированию временных рядов
Дата публикации Aug 7, 2019
Желаем ли мы предсказать тенденцию на финансовых рынках или потребление электроэнергии, время является важным фактором, который теперь необходимо учитывать в наших моделях. Например, было бы интересно предсказать, в какое время в течение дня будет наблюдаться пиковое потребление электроэнергии, например, для корректировки цены или производства электроэнергии.
Войтивременная последовательность, Временной ряд — это просто ряд точек данных, упорядоченных во времени. Во временных рядах время часто является независимой переменной, и цель обычно состоит в том, чтобы сделать прогноз на будущее.
Однако при работе с временными рядами возникают другие аспекты.
Этостационарный?
Есть лисезонность?
Целевая переменнаяавтокоррелированные?
В этом посте я представлю различные характеристики временных рядов и то, как мы можем смоделировать их для получения точных (насколько это возможно) прогнозов.
Предсказывать будущее сложно.
автокорреляция
Неформально,автокорреляцияэто сходство между наблюдениями как функция временного интервала между ними.
Выше приведен пример автокорреляционного графика. При внимательном рассмотрении вы понимаете, что первое значение и 24-е значение имеют высокую автокорреляцию. Точно так же 12-е и 36-е наблюдения сильно коррелируют. Это означает, что мы будем находить очень похожие значения в каждые 24 единицы времени.
Обратите внимание, как график выглядит как синусоидальная функция. Это подсказка длясезонности,и вы можете найти его значение, найдя период на графике выше, который даст 24 часа.
Сезонность
Сезонностьотносится к периодическим колебаниям. Например, потребление электроэнергии высокое в течение дня и низкое в ночное время, или продажи в Интернете увеличиваются в течение Рождества, прежде чем снова замедляться.
Как вы можете видеть выше, существует четкая ежедневная сезонность. Каждый день вы видите пик к вечеру, а самые низкие точки — начало и конец каждого дня.
Помните, что сезонность также может быть получена из графика автокорреляции, если он имеет синусоидальную форму. Просто посмотрите на период, и он дает продолжительность сезона.
стационарность
стационарностьявляется важной характеристикой временных рядов. Временной ряд называется стационарным, если его статистические свойства не изменяются со временем. Другими словами, это имеетпостоянное среднее и дисперсияи ковариация не зависит от времени.
Глядя снова на тот же сюжет, мы видим, что процесс выше является стационарным. Среднее значение и дисперсия не меняются со временем.
Зачастую цены на акции не являются стационарным процессом, поскольку мы можем наблюдать растущую тенденцию или ее волатильность со временем может возрасти (это означает, что дисперсия меняется).
В идеале мы хотим иметь стационарные временные ряды для моделирования. Конечно, не все они являются стационарными, но мы можем сделать различные преобразования, чтобы сделать их стационарными.
Как проверить, если процесс является стационарным
Возможно, вы заметили в заголовке сюжета вышеДики-Фуллера.Это статистический тест, который мы проводим, чтобы определить, является ли временной ряд стационарным или нет.
Не вдаваясь в технические подробности теста Дики-Фуллера, он проверяет нулевую гипотезу о наличии единичного корня.
Если это так, тор>0, а процесс не стационарный.
Иначе,р =0, нулевая гипотеза отклоняется, и процесс считается стационарным.
Как пример, процесс ниже не является стационарным. Обратите внимание, что среднее значение не является постоянным во времени.
Моделирование временных рядов
Есть много способов смоделировать временной ряд, чтобы делать прогнозы. Здесь я представлю:
- скользящее среднее
- экспоненциальное сглаживание
- ARIMA
Скользящая средняя
Модель скользящего среднего — это, вероятно, самый наивный подход к моделированию временных рядов. Эта модель просто утверждает, что следующее наблюдение является средним значением всех прошлых наблюдений.
Несмотря на простоту, эта модель может быть на удивление хорошей и представляет собой хорошую отправную точку.
В противном случае скользящее среднее можно использовать для определения интересных тенденций в данных. Мы можем определитьокноприменить модель скользящего среднего кгладкий; плавныйВременные ряды и выделить различные тенденции.
На графике выше мы применили модель скользящего среднего к 24-часовому окну. Зеленая линиясглаженныйвременной ряд, и мы можем видеть, что есть 2 пика в 24-часовой период.
Конечно, чем длиннее окно, темгладкойтенденция будет. Ниже приведен пример скользящей средней в меньшем окне
Экспоненциальное сглаживание
Экспоненциальное сглаживание использует логику, аналогичную скользящей средней, но на этот разуменьшение весаприсваивается каждому наблюдению. Другими словами,меньшее значениедается наблюдениям по мере продвижения от настоящего.
Математически экспоненциальное сглаживание выражается как:
Вот,альфаэтокоэффициент сглаживаниякоторый принимает значения от 0 до 1. Он определяет, какбыстровес уменьшается для предыдущих наблюдений.
Из приведенного выше графика темно-синяя линия представляет экспоненциальное сглаживание временного ряда с использованием коэффициента сглаживания 0,3, в то время как оранжевая линия использует коэффициент сглаживания 0,05.
Как видите, чем меньше коэффициент сглаживания, тем более плавным будет временной ряд. Это имеет смысл, потому что когда коэффициент сглаживания приближается к 0, мы приближаемся к модели скользящего среднего.
Двойное экспоненциальное сглаживание
Двойное экспоненциальное сглаживание используется при наличии тенденции во временном ряду. В этом случае мы используем эту технику, которая является просто рекурсивным использованием экспоненциального сглаживания дважды.
Вот,бетаэтокоэффициент сглаживания трендаи принимает значения от 0 до 1.
Ниже вы можете увидеть, как разные значенияальфаа такжебетавлияет на форму временного ряда.
Трип экспоненциальное сглаживание
Этот метод расширяет двойное экспоненциальное сглаживание, добавляякоэффициент сезонного сглаживания, Конечно, это полезно, если вы заметили сезонность в своих временных рядах.
Математически тройное экспоненциальное сглаживание выражается как:
гдегаммаявляется фактором сезонного сглаживания иLэто длина сезона.
Сезонная авторегрессионная интегрированная модель скользящего среднего (SARIMA)
SARIMA на самом деле является комбинацией более простых моделей для создания сложной модели, которая может моделировать временные ряды, демонстрирующие нестационарные свойства и сезонность.
Во-первых, у нас естьМодель авторегрессии AR (p), Это в основном регрессия временного ряда на себя. Здесь мы предполагаем, что текущее значение зависит от предыдущих значений с некоторой задержкой. Принимает параметрпкоторый представляет собой максимальное отставание. Чтобы найти его, мы смотрим на график частичной автокорреляции и выявляем лаг, после которого большинство лагов не являются значимыми.
В приведенном ниже примерепбудет 4.
Затем мы добавляеммодель скользящего среднего MA (q), Это принимает параметрQкоторая представляет собой наибольшее отставание, после которого другие лаги не имеют существенного значения на графике автокорреляции.
Ниже,Qбудет 4.
После мы добавляемпорядок интеграцииМне бы), Параметрdпредставляет количество различий, необходимых для того, чтобы сделать серию стационарной.
Наконец, мы добавляем последний компонент:сезонность S (P, D, Q, s), гдеsпросто длина сезона. Кроме того, этот компонент требует параметровпа такжеQкоторые так же, какпа такжеQ, но для сезонной составляющей. В заключение,Dпорядок сезонной интеграции, представляющий количество различий, необходимых для удаления сезонности из ряда.
Объединяя все, мы получаемСАРИМА (p, d, q) (P, D, Q, s)модель.
Основной вывод: перед моделированием с помощью SARIMA мы должны применить преобразования к нашему временному ряду, чтобы устранить сезонность и любое нестационарное поведение.
Это было много теории, чтобы обернуть нашу голову вокруг! Давайте применим методы, обсужденные выше, в нашем первом проекте.
Мы попытаемся предсказать цену акций конкретной компании. Теперь прогнозировать цену акций практически невозможно. Тем не менее, это остается забавным упражнением, и это будет хороший способ практиковать то, что мы узнали.
Проект 1 — Прогнозирование цены акций
Мы будем использовать историческую цену акций Фонда Новой Германии (GF), чтобы попытаться предсказать цену закрытия в следующие пять торговых дней.
Вы можете взять набор данных и блокнотВот,
Как всегда, я настоятельно рекомендую вам написать код! Начни свой блокнот и пойдем!
Вы точно не разбогатеете, пытаясь предсказать фондовый рынок
Импортировать данные
Во-первых, мы импортируем некоторые библиотеки, которые будут полезны на протяжении всего нашего анализа. Также мы определяемсредняя средняя процентная ошибка (MAPE), так как это будет нашей метрикой ошибки.
Затем мы импортируем наш набор данных, и мы предшествуем первым десяти записям, и вы должны получить:
Как видите, у нас есть несколько записей, касающихся акций, отличных от фонда Новой Германии (GF). Кроме того, у нас есть запись, касающаяся внутридневной информации, но нам нужна только информация на конец дня (EOD).
Очистить данные
Сначала мы удаляем ненужные записи.
Затем мы удаляем ненужные столбцы, поскольку исключительно хотим сосредоточиться на цене закрытия акций.
Если вы просматриваете набор данных, вы должны увидеть:
Потрясающе! Мы готовы к поисковому анализу данных!
Исследовательский анализ данных (EDA)
Мы строим цену закрытия за весь период времени нашего набора данных.
Вы должны получить:
Очевидно, вы видите, что это нестационарныйпроцесс, и трудно сказать, есть ли какая-тосезонность,
Скользящая средняя
Давайте использоватьскользящее среднеемодель, чтобы сгладить наш временной ряд. Для этого мы будем использовать вспомогательную функцию, которая будет запускать модель скользящего среднего в заданном временном окне и строить график сглаженной кривой результата:
Используя временное окно 5 дней, мы получаем:
Как видите, мы едва можем увидеть тренд, потому что он слишком близок к реальной кривой. Давайте посмотрим на результат сглаживания за предыдущий месяц и за предыдущий квартал.
Тенденции легче определить сейчас. Обратите внимание, как 30-дневный и 90-дневный тренд показывают нисходящую кривую в конце. Это может означать, что акции могут понизиться в следующие дни.
Экспоненциальное сглаживание
Теперь давайте использоватьэкспоненциальное сглаживаниечтобы увидеть, может ли он поднять лучшую тенденцию.
Здесь мы используем 0,05 и 0,3 в качестве значений длякоэффициент сглаживания, Не стесняйтесь попробовать другие значения и посмотреть, каков результат.
Как вы можете видеть,альфазначение 0,05 сглаживало кривую, одновременно улавливая большинство восходящих и нисходящих трендов.
Теперь давайте использоватьдвойное экспоненциальное сглаживание.
Двойное экспоненциальное сглаживание
Опять же, экспериментируйте с разнымиальфаа такжебетакомбинации, чтобы получить лучше выглядящие кривые.
моделирование
Как было указано выше, мы должны превратить нашу серию в стационарный процесс, чтобы смоделировать ее. Поэтому давайте применим тест Дики-Фуллера, чтобы проверить, является ли это стационарным процессом:
Тебе следует увидеть:
По критерию Дики-Фуллера временной ряд, что неудивительно, нестационарен. Также, глядя на график автокорреляции, мы видим, что он очень высокий, и кажется, что нет явной сезонности.
Поэтому, чтобы избавиться от высокой автокорреляции и сделать процесс стационарным, давайте возьмем первое отличие (строка 23 в блоке кода). Мы просто вычитаем временной ряд из себя с задержкой в один день, и мы получаем:
Потрясающе! Наша серия теперь стационарная, и мы можем начать моделирование!
Sarima
Теперь для SARIMA мы сначала определим несколько параметров и диапазон значений для других параметров, чтобы сгенерировать список всех возможных комбинаций p, q, d, P, Q, D, s.
Теперь в приведенной выше ячейке кода у нас есть 625 различных комбинаций! Мы попробуем каждую комбинацию и обучим SARIMA каждой, чтобы найти лучшую модель. Это может занять некоторое время в зависимости от вычислительной мощности вашего компьютера.
Как только это будет сделано, мы распечатаем краткую информацию о лучшей модели, и вы должны увидеть:
Потрясающе! Наконец, мы прогнозируем цену закрытия следующих пяти торговых дней и оцениваем MAPE модели.
В этом случае у нас MAPE 0,79%, что очень хорошо!
Сравните прогнозируемую цену с фактическими данными
Теперь, чтобы сравнить наш прогноз с фактическими данными, мы берем финансовые данные изYahoo Financeи создайте фрейм данных.
Затем мы строим график, чтобы увидеть, насколько мы далеки от фактических цен закрытия:
Кажется, мы немного ошиблись в наших прогнозах. На самом деле, прогнозируемая цена по существу плоская, что означает, что наша модель, вероятно, не работает хорошо.
Опять же, это не из-за нашей процедуры, а из-за того, что прогнозировать цены на акции практически невозможно.
Из первого проекта мы изучили всю процедуру создания временного ряда, прежде чем использовать SARIMA для моделирования. Это долгий и утомительный процесс, с множеством ручных настроек.
Теперь давайте представим Пророка в Facebook. Это инструмент прогнозирования, доступный как на Python, так и на языке R. Этот инструмент позволяет как экспертам, так и не экспертам производить высококачественные прогнозы с минимальными усилиями.
Давайте посмотрим, как мы можем использовать его во втором проекте!
Проект 2 — Предсказать качество воздуха с Пророком
Название говорит само за себя: мы будем использовать Prophet, чтобы помочь нам предсказать качество воздуха!
Полный блокнот и набор данных можно найтиВот,
Давайте сделаем некоторые прогнозы!
Импортировать данные
Как всегда, мы начинаем с импорта некоторых полезных библиотек Затем мы печатаем первые пять строк:
Как видите, набор данных содержит информацию о концентрациях различных газов. Они были записаны в каждый час для каждого дня. Вы можете найти описание всех функцийВот,
Если вы исследуете набор данных немного подробнее, вы заметите, что существует множество экземпляров значения -200. Конечно, не имеет смысла иметь отрицательную концентрацию, поэтому нам нужно будет очистить данные перед моделированием.
Поэтому нам нужно очистить данные.
Очистка данных и разработка функций
Здесь мы начнем с анализа нашего столбца даты, чтобы превратить его в «даты».
Затем мы превращаем все измерения в поплавки.
После этого мы агрегируем данные по дням, беря среднее значение каждого измерения.
На данный момент у нас еще есть некоторыеNaNот которого мы должны избавиться. Поэтому мы удаляем столбцы, которые имеют более 8NaN, Таким образом, мы можем затем удалить строки, содержащиеNaNзначения без потери слишком большого количества данных.
Наконец, мы агрегируем данные по неделям, потому что это даст более плавную тенденцию для анализа.
Мы можем построить тенденции каждого химического вещества. Здесь мы показываем, что NOx.
Оксиды азота очень вредны, так как они реагируют на смог и кислотные дожди, а также отвечают за образование мелких частиц и озона на уровне земли. Они оказывают неблагоприятное воздействие на здоровье, поэтому концентрация NOx является ключевой характеристикой качества воздуха.
моделирование
Мы сосредоточимся исключительно на моделировании концентрации NOx. Поэтому мы удалим все остальные несоответствующие столбцы.
Затем мы импортируем Пророка.
Пророк требует, чтобы столбец даты был названД.С.и особенность столбца, который будет названYпоэтому мы вносим соответствующие изменения.
На данный момент наши данные выглядят так:
Затем мы определяем тренировочный набор. Для этого мы продержимся последние 30 записей для прогнозирования и проверки.
После этого мы просто инициализируем Prophet, подгоняем модель к данным и делаем прогнозы!
Вы должны увидеть следующее:
Вот,yhatпредставляет прогноз, в то время какyhat_lowerа такжеyhat_upperпредставляют нижнюю и верхнюю границу прогноза соответственно.
Пророк позволяет легко составить прогноз и мы получим:
Как вы можете видеть, Пророк просто использовал прямую нисходящую линию, чтобы предсказать концентрацию NOx в будущем.
Затем мы проверяем, есть ли у временного ряда какие-либо интересные особенности, такие как сезонность:
Здесь Пророк выявил только тенденцию к снижению без сезонности.
Оценивая производительность модели путем вычисления ее средней абсолютной процентной ошибки (MAPE) и средней абсолютной ошибки (MAE), мы видим, что MAPE составляет 13,86%, а MAE — 109,32, что не так уж и плохо! Помните, что мы не настроили модель вообще.
Наконец, мы просто строим прогноз с его верхней и нижней границами:
Поздравляю с завершением! Это была очень длинная, но информативная статья. Вы узнали, как надежно анализировать и моделировать временные ряды, и применили свои знания в двух разных проектах.
Я надеюсь, что вы нашли эту статью полезной, и я надеюсь, что вы вернетесь к ней.
Ссылка: Большое спасибо за этостатьяза удивительное введение в анализ временных рядов!
Источник