- 11 Классических методов прогнозирования временных рядов в Python (Шпаргалка)
- обзор
- Авторегрессия (AR)
- Код Python
- Дополнительная информация
- Скользящая средняя (мА)
- Код Python
- Дополнительная информация
- Авторегрессионная скользящая средняя (ARMA)
- Код Python
- Дополнительная информация
- Авторегрессионное интегрированное скользящее среднее (ARIMA)
- Код Python
- Дополнительная информация
- Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
- Код Python
- Дополнительная информация
- Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
- Код Python
- Дополнительная информация
- Векторная авторегрессия (VAR)
- Код Python
- Дополнительная информация
- Скользящее среднее векторной авторегрессии (VARMA)
- Код Python
- Дополнительная информация
- Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
- Код Python
- Дополнительная информация
- Простое экспоненциальное сглаживание (SES)
- Код Python
- Дополнительная информация
- Экспоненциальное сглаживание Холта Винтера (HWES)
- Код Python
- Дополнительная информация
- Дальнейшее чтение
- Резюме
- Глубокое погружение в функциональность Catboost для интерпретации модели
- Важность функции
- PredictionValuesChange
- LossFunctionChange
- Shap Values
- Как мы собираемся выбрать один?
- взаимодействие
- Блокнот
- Важность объекта
- Почему ты должен это знать?
- Учебник Catboost по важности объектов
- catboost / учебники
- Репозиторий учебников CatBoost. Внесите свой вклад в разработку catboost / tutorials, создав учетную запись на GitHub.
- github.com
- Графики анализа модели
- Числовой анализ характеристик
- Анализ закодированных функций One-Hot
11 Классических методов прогнозирования временных рядов в Python (Шпаргалка)
Дата публикации 2018-08-06
Методы машинного обучения могут использоваться для классификации и прогнозирования проблем временных рядов.
Прежде чем исследовать методы машинного обучения для временных рядов, рекомендуется убедиться, что вы исчерпали классические методы прогнозирования линейных временных рядов. Классические методы прогнозирования временных рядов могут быть ориентированы на линейные отношения, тем не менее, они являются сложными и хорошо справляются с широким спектром проблем, при условии, что ваши данные подготовлены надлежащим образом и метод хорошо настроен.
В этой статье вы познакомитесь с набором классических методов прогнозирования временных рядов, которые вы можете проверить на своей проблеме прогнозирования до изучения методов машинного обучения.
Пост структурирован как шпаргалка, чтобы дать вам достаточно информации о каждом методе, чтобы начать работу с примером работающего кода и где искать дополнительную информацию о методе.
Все примеры кода на языке Python и используют библиотеку Statsmodels. API для этой библиотеки могут быть сложными для начинающих (поверьте мне!), Поэтому использование примера рабочего кода в качестве отправной точки значительно ускорит ваш прогресс.
Это большой пост; Вы можете добавить в закладки.
обзор
Этот шпаргалка демонстрирует 11 различных классических методов прогнозирования временных рядов; они есть:
- Авторегрессия (AR)
- Скользящая средняя (мА)
- Авторегрессионная скользящая средняя (ARMA)
- Авторегрессионное интегрированное скользящее среднее (ARIMA)
- Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
- Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
- Векторная авторегрессия (VAR)
- Скользящее среднее векторной авторегрессии (VARMA)
- Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
- Простое экспоненциальное сглаживание (SES)
- Экспоненциальное сглаживание Холта Винтера (HWES)
Я пропустил ваш любимый классический метод прогнозирования временных рядов?
Позвольте мне знать в комментариях ниже.
Каждый метод представлен в согласованной манере.
- Описание, Краткое и точное описание техники.
- Код Python, Краткий рабочий пример подгонки модели и прогнозирования в Python.
- Дополнительная информация, Ссылки на API и алгоритм.
Каждый пример кода демонстрируется на основе простого надуманного набора данных, который может или не может быть подходящим для метода. Замените надуманный набор данных своими данными, чтобы протестировать метод.
Помните: каждый метод потребует настройки под вашу конкретную проблему. Во многих случаях у меня есть примеры того, как настроить и даже сеточные параметры поиска в блоге, попробуйте функцию поиска.
Если вы нашли этот шпаргалку полезным, пожалуйста, дайте мне знать в комментариях ниже.
Авторегрессия (AR)
Метод авторегрессии (AR) моделирует следующий шаг в последовательности как линейную функцию наблюдений на предыдущих временных шагах.
Обозначения для модели включают в себя указание порядка модели p в качестве параметра для функции AR, например, АР (р). Например, AR (1) является моделью авторегрессии первого порядка.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящая средняя (мА)
Метод скользящего среднего (MA) моделирует следующий шаг в последовательности как линейную функцию от остаточных ошибок из среднего процесса на предыдущих временных шагах.
Модель скользящего среднего отличается от вычисления скользящего среднего временного ряда.
Обозначение для модели включает в себя указание порядка модели q в качестве параметра функции MA, например, М. А. (д). Например, MA (1) является моделью скользящего среднего первого порядка.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Мы можем использовать класс ARMA для создания модели MA и установки модели AR нулевого порядка. Мы должны указать порядок модели MA в аргументе order.
Дополнительная информация
Авторегрессионная скользящая средняя (ARMA)
Метод авторегрессионного скользящего среднего (ARMA) моделирует следующий шаг в последовательности как линейную функцию наблюдений и случайных ошибок на предыдущих временных шагах.
Он объединяет модели авторегрессии (AR) и скользящей средней (MA).
Обозначение модели включает в себя указание порядка для моделей AR (p) и MA (q) в качестве параметров функции ARMA, например, ARMA (p, q). Модель ARIMA может использоваться для разработки моделей AR или MA.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Авторегрессионное интегрированное скользящее среднее (ARIMA)
Метод авторегрессионного интегрированного скользящего среднего (ARIMA) моделирует следующий шаг в последовательности как линейную функцию разностных наблюдений и остаточных ошибок на предыдущих временных шагах.
Он объединяет модели авторегрессии (AR) и скользящего среднего (MA), а также этап предварительной обработки разностной последовательности, чтобы сделать последовательность стационарной, называемой интеграцией (I).
Обозначения для модели включают указание порядка для моделей AR (p), I (d) и MA (q) в качестве параметров функции ARIMA, например, АРИМА (p, d, q). Модель ARIMA также может быть использована для разработки моделей AR, MA и ARMA.
Метод подходит для одномерных временных рядов с трендом и без сезонных компонентов.
Код Python
Дополнительная информация
Сезонные авторегрессионные интегрированные скользящие средние (SARIMA)
Метод сезонного авторегрессионного интегрированного скользящего среднего (SARIMA) моделирует следующий шаг в последовательности как линейную функцию разностных наблюдений, ошибок, разностных сезонных наблюдений и сезонных ошибок на предыдущих временных шагах.
Он сочетает в себе модель ARIMA с возможностью выполнения той же модели авторегрессии, дифференцирования и скользящего среднего на сезонном уровне.
Обозначения для модели включают указание порядка для моделей AR (p), I (d) и MA (q) в качестве параметров функции ARIMA и AR (P), I (D), MA (Q) и m. параметры на сезонном уровне, например SARIMA (p, d, q) (P, D, Q) m, где «m» — количество временных шагов в каждом сезоне (сезонный период). Модель SARIMA может использоваться для разработки моделей AR, MA, ARMA и ARIMA.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами.
Код Python
Дополнительная информация
Сезонные авторегрессионные интегрированные скользящие средние с экзогенными регрессорами (SARIMAX)
Сезонная авторегрессионная интегрированная скользящая средняя с экзогенными регрессорами (SARIMAX) является расширением модели SARIMA, которая также включает моделирование экзогенных переменных.
Экзогенные переменные также называются ковариатами, и их можно рассматривать как параллельные входные последовательности, наблюдения которых выполняются с теми же временными шагами, что и исходный ряд. Первичные серии могут быть названы эндогенными данными, чтобы отличать их от экзогенной последовательности (последовательностей). Наблюдения за экзогенными переменными включаются в модель непосредственно на каждом временном шаге и не моделируются так же, как первичная эндогенная последовательность (например, процесс AR, MA и т. Д.).
Метод SARIMAX также можно использовать для моделирования подгруппированных моделей с внешними переменными, такими как ARX, MAX, ARMAX и ARIMAX.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами и экзогенными переменными.
Код Python
Дополнительная информация
Векторная авторегрессия (VAR)
Метод векторной авторегрессии (VAR) моделирует следующий шаг в каждом временном ряду, используя модель AR. Это обобщение AR на несколько параллельных временных рядов, например, многомерный временной ряд.
Обозначение модели включает в себя указание порядка для модели AR (p) в качестве параметров функции VAR, например, ВДП (р).
Метод подходит для многомерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящее среднее векторной авторегрессии (VARMA)
Метод скользящей средней векторной авторегрессии (VARMA) моделирует следующий шаг в каждом временном ряду, используя модель ARMA. Это обобщение ARMA для нескольких параллельных временных рядов, например, многомерный временной ряд.
Обозначение модели включает в себя указание порядка для моделей AR (p) и MA (q) в качестве параметров функции VARMA, например, Варма (р, д). Модель VARMA также может быть использована для разработки моделей VAR или VMA.
Метод подходит для многомерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX)
Скользящее среднее векторной авторегрессии с экзогенными регрессорами (VARMAX) является расширением модели VARMA, которая также включает моделирование экзогенных переменных. Это многовариантная версия метода ARMAX.
Экзогенные переменные также называются ковариатами, и их можно рассматривать как параллельные входные последовательности, наблюдения которых выполняются с теми же временными шагами, что и исходный ряд. Первичный ряд (ы) называют эндогенными данными, чтобы отличать их от экзогенной последовательности (последовательностей). Наблюдения за экзогенными переменными включаются в модель непосредственно на каждом временном шаге и не моделируются так же, как первичная эндогенная последовательность (например, процесс AR, MA и т. Д.).
Метод VARMAX также можно использовать для моделирования подгруппированных моделей с внешними переменными, такими как VARX и VMAX.
Метод подходит для многомерных временных рядов без трендовых и сезонных компонентов и экзогенных переменных.
Код Python
Дополнительная информация
Простое экспоненциальное сглаживание (SES)
Метод простого экспоненциального сглаживания (SES) моделирует следующий временной шаг как экспоненциально взвешенную линейную функцию наблюдений на предыдущих временных шагах.
Метод подходит для одномерных временных рядов без трендовых и сезонных составляющих.
Код Python
Дополнительная информация
Экспоненциальное сглаживание Холта Винтера (HWES)
Экспоненциальное сглаживание Холта Винтера (HWES) также называется методом тройного экспоненциального сглаживания, моделирует следующий временной шаг как экспоненциально взвешенную линейную функцию наблюдений на предыдущих временных шагах с учетом тенденций и сезонности.
Метод подходит для одномерных временных рядов с трендовыми и / или сезонными компонентами.
Код Python
Дополнительная информация
Дальнейшее чтение
Этот раздел предоставляет больше ресурсов по теме, если вы хотите углубиться.
Резюме
В этой статье вы обнаружили набор классических методов прогнозирования временных рядов, которые вы можете протестировать и настроить в своем наборе данных временных рядов.
Я пропустил ваш любимый классический метод прогнозирования временных рядов?
Позвольте мне знать в комментариях ниже.
Вы пробовали любой из этих методов в своем наборе данных?
Дайте мне знать о ваших выводах в комментариях.
У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.
Источник
Глубокое погружение в функциональность Catboost для интерпретации модели
Дата публикации Jun 24, 2019
В моемпредыдущий блогМы увидели сравнительное исследование XGBoost, LightGBM и Catboost. С помощью этого анализа мы смогли сделать вывод, что catboost превзошел два других с точки зрения скорости и точности. В этой части мы углубимся в catboost, исследуя новые возможности, которые catboost обеспечивает для эффективного моделирования и понимания гиперпараметров.
Для новых читателей,catboostэто алгоритм повышения градиента с открытым исходным кодом, разработанныйЯндекскоманда в 2017 году. Это алгоритм машинного обучения, который позволяет пользователям быстро обрабатывать категориальные функции для большого набора данных, и это отличает его от XGBoost и LightGBM. Catboost может быть использован для решенияпроблемы регрессии, классификации и ранжирования,
Как Data Scientists, мы можем легко обучать модели и делать прогнозы, но мы часто не понимаем, что происходит внутри этих причудливых алгоритмов. Это одна из причин того, почему мы видим огромную разницу в производительности модели между автономной оценкой и окончательным производством. Давно пора перестать относиться к ОД как к«черный ящик»и придавать значение интерпретации модели при одновременном повышении точности модели. Это также поможет нам в выявлении ошибок данных. В этой части мы увидим, как catboost помогает нам анализировать модели и улучшать видимость с помощью следующих функций:
Важность функции
Почему ты должен это знать?
— Удалите ненужные функции, чтобы упростить модель и сократить время обучения / прогнозирования.
— Получить наиболее влиятельную функцию для вашей целевой ценности и манипулировать ими для получения прибыли (напр., медицинские работники хотят определить, какие факторы являются причиной риска возникновения какого-либо заболевания у каждого пациента, чтобы они могли напрямую решать эти факторы риска с помощью целевых лекарств)
Помимо выбора типа важности функции, мы также должны знать, какие данные мы хотим использовать для определения важности функции — обучаем или тестируем или полный набор данных. Есть плюсы и минусы выбора одного над другим, но, в конце концов, вам нужно решить, хотите ли вы знать, насколько модель полагается на каждую функцию для прогнозирования (использовать данные обучения) или насколько эта функция влияет на производительность модели на невидимых данных (использовать тестовые данные). Позже в этом блоге мы увидим, что только некоторые методы могут использоваться для определения важности функций для данных, не используемых для модели обучения.
Если вы заботитесь о втором и предполагаете, что у вас есть все время и ресурсы, самый грубый и надежный способ определить важность функций — это обучить несколько моделей, оставляющих по одной функции за раз, и сравнить производительность на тестовом наборе. Если производительность сильно меняется относительно базовой линии (производительность, когда мы используем все функции), это означает, что эта функция была важна,Но поскольку мы живем в практическом мире, где нам нужно оптимизировать как точность, так и время вычислений, этот метод не нужен. Вот несколько умных способов, с помощью которых catboost позволяет найти лучшую функцию для вашей модели:
PredictionValuesChange
Для каждого объекта PredictionValuesChange показывает, насколько в среднем изменяется прогноз при изменении значения объекта. Чем больше значение важности, тем больше в среднем изменение значения прогноза, если эта функция будет изменена.
Плюсы:Это дешево для вычисления, так как вам не нужно проходить многократное обучение или тестирование, и вы не будете хранить дополнительную информацию. Ты получишьнормализованные значениякак выход (все значения будут составлять до 100).
Минусы:Это может дать вводящие в заблуждение результаты для ранжирования целей, оно может поставить групповые функции в топ, даже если они мало влияют на итоговую величину потерь.
LossFunctionChange
Чтобы получить значение этой функции, catboost просто берет разницу между метрикой (функцией потерь), полученной с использованием модели в обычном сценарии (когда мы включаем функцию), и моделью без этой функции (модель строится приблизительно с использованием исходной модели с удаленной этой функцией из всех деревьев в ансамбле). Чем выше разница, тем важнее функция. В документах catboost четко не указано, как мы находим модель без функции.
За и против:Это хорошо работает для большинства типов проблем в отличие от predictionvalueschange где вы можете получить вводящие в заблуждение результаты для задач ранжирования, в то же время, это вычислительно тяжело.
Shap Values
SHAP Значение разбивает прогнозируемое значение на вклады от каждой функции. Он измеряет влияние элемента на одно значение прогноза по сравнению с базовым прогнозом (средним значением целевого значения для набора обучающих данных).
Два основных варианта использования значений Shap:
- Вклад функций на уровне объекта
2 Сводка для всего набора данных (общая важность функции)
Хотя мы можем получить точные значения функций с помощью Shap, они вычислительно дороже, чем важность встроенных функций Catboost. Для более подробной информации о значениях SHAP, пожалуйста, прочитайте этоядро,
бонус
Еще одна важная особенность, основанная на той же концепции, но разной реализации:Важность особенности на основе перестановок,Хотя catboost не использует это, это чистоМодель агностики легко рассчитать.
Как мы собираемся выбрать один?
Хотя оба PredictionValuesChange & LossFunctionChange можно использовать для всех типов метрик, рекомендуется использовать LossFunctionChange для ранжирования показателей. За исключением PredictionValuesChange все другие методы могут использовать данные испытаний для определения важности функций с помощью моделей, обученных на данных поездов.
Чтобы лучше понять различия, вот результаты для всех методов, которые мы обсуждали:
Из приведенных выше графиков видно, что большинство методов согласуются по основным характеристикам. это выглядит как LossFunctionChange ближе всего к shap (что является более надежным). Тем не менее, несправедливо сравнивать эти методы напрямую, потому что predictionvalueschange основано на данных поезда, тогда как все остальные основаны на данных испытаний.
Мы также должны увидеть время, необходимое для их запуска:
взаимодействие
С этим параметром Вы можете найти силу пары функций (важность двух функций вместе).
В выводе вы получите список для каждой пары функций. Список будет иметь 3 значения, первое значение — это индекс первого признака в паре, второе значение — это индекс второго признака в паре, а третье значение — показатель важности признака для этой пары. Для подробностей реализации, пожалуйста, проверьте встроенный блокнот.
Интересно отметить, что две верхние функции в важности одной функции не обязательно составляют самую сильную пару.
Блокнот
Важность объекта
Почему ты должен это знать?
- Удалите самые бесполезные учебные объекты из тренировочных данных.
- Расставьте приоритеты для серии новых объектов для маркировки, основываясь на том, какие из них должны быть наиболее «полезными», сродни активному обучению
С помощью этой функции вы можете рассчитать влияние каждого объекта на оптимизированный показатель для тестовых данных. Положительные значения отражают, что оптимизированная метрика увеличивается, а отрицательные значения отражают, что оптимизированная метрика уменьшается. Этот метод является реализацией подхода, описанного вЭта бумага, Детали этих алгоритмов выходят за рамки этого блога.
Учебник Catboost по важности объектов
catboost / учебники
Репозиторий учебников CatBoost. Внесите свой вклад в разработку catboost / tutorials, создав учетную запись на GitHub.
github.com
Есть три типа update_method доступно в cb.get_object_importance :
- SinglePoint: самый быстрый и наименее точный метод
- TopKLeaves: укажите количество листьев. Чем выше значение, тем точнее и медленнее расчет
- AllPoints: самый медленный и самый точный метод
Например, следующее значение устанавливает метод TopKLeaves и ограничивает количество листьев до 3:
Графики анализа модели
Catboost недавно запустил эту функцию в своем последнем обновлении,С помощью этой функции мы сможем визуализировать, как алгоритм разделяет данные для каждой функции, и посмотреть статистику по отдельным функциям. Более конкретно мы сможем увидеть:
- Среднее целевое значение для каждой ячейки (ячейка используется для непрерывной функции) или категории (в настоящее время поддерживаются только функции OHE)
- Среднее значение прогноза для каждой корзины / категории
- Количество объектов в каждой корзине
- Прогнозы для различных значений объектов: для каждого объекта значение объекта варьируется таким образом, что оно попадает в какой-то контейнер. Затем модель прогнозирует цель в соответствии с новыми значениями этой функции и принимает среднее значение прогнозов в ячейке (заданное красными точками).
Этот график даст нам информацию, например, насколько равномерно наше расщепление (мы не хотим, чтобы все объекты помещались в одну корзину), близки ли наши прогнозы к цели (синяя и оранжевая линия), красная линия скажет нам, насколько чувствительны наши прогнозы являются особенностью.
Числовой анализ характеристик
Анализ закодированных функций One-Hot
Спасибо за чтение этого. Надеюсь, в следующий раз вы сможете использовать эти инструменты, чтобы лучше понять ваши модели.
После положительного приема от сообщества машинного обучения к моему предыдущему блогу наCatBoost против Light GBM против XGBoostКоманда CatBoost обратилась, чтобы узнать, заинтересован ли я в освещении более глубоких тем в библиотеке. Спасибо команде CatBoost за помощь в ответе на мои вопросы к этому посту!
Обо мне:В настоящее время я работаю в качестве Data Scientist в команде Maps в Uber. Если вы заинтересованы в решении сложных проблем в Uber, пожалуйста, свяжитесь со мной по адресуLinkedIn, Вы можете прочитать мои другие блогиВот,
Источник