В последних двух статьях мы много обсуждали, как прогнозировать временные ряды - многомерные или одномерные (ссылки ниже !!). Но ждать! А как насчет предварительной обработки?
Прежде чем приступить к прогнозированию, мы должны понять, насколько важна предварительная обработка временных рядов. Это может сделать или опровергнуть ваши прогнозы. Итак, давайте рассмотрим некоторые важные шаги предварительной обработки временных рядов -
- Прежде всего преобразуйте столбец Date в тип данных date и установите его в качестве индекса. Возможно, вам могут быть предоставлены разные форматы даты, например, 25.03.1997, 1997.03.25 или 25.03.1997. Как интерпретировать все эти форматы?
Попробуйте strptime (x, format) из библиотеки DateTime. Здесь «x» - это ваш образец, который нужно преобразовать, а «format» - это желаемый формат.
Пример -
если 25.03.1997, формат = ’% d /% m /% Y’
если 1997/03/25, формат = ’% Y /% m /% d’ и т. д.
- Не забудьте отсортировать данные по столбцу / индексу даты.
- Самый важный шаг - проверить, является ли временной ряд стационарным.
Почему? проверьте здесь
Нам нужно иметь постоянное среднее значение и стандартное отклонение, которые можно проверить с помощью построения графика среднего и стандартного отклонения для скользящего окна, как вы можете видеть ниже.
Он показывает, что, хотя стандартное отклонение довольно постоянное, скользящее среднее - нет. Если бы это тоже было постоянным, мы можем перейти к следующему шагу. Однако для скользящего среднего нам нужно остановиться и применить некоторые преобразования, чтобы сделать это постоянным. Я бы использовал три метода для этого -
- Самостоятельное различие - его можно рассматривать как разницу между текущей серией и отставленной версией серии. Сдвиг может иметь порядок 1, 2, 3, 4 и т. Д. Для элементов, для которых у нас нет элементов с задержанной версией, принимайте их как NULL.
Пример. Пусть ваш фрейм данных будет «Время», а столбец со значениями будет «Температура», проиндексированный по дате. Таким образом, самодифференцирование может быть выполнено так:
Время [‘Temperature_Diff’] = Время [‘Temperature’] - Время [‘Temperature’]. Shift (1), если используется версия с задержкой, равняется 1
Время [‘Temperature_Diff’] = Время [‘Temperature’] - Время [‘Temperature’]. Shift (2), если используется версия с задержкой, - 2
- Самодиагностика журнала - Его можно рассматривать как разницу между текущей серией и отставленной версией серии. Но вы можете просто применить преобразование журнала к фактической серии.
И лучший способ следить за этим - использовать:
from statsmodels.tsa.seasonal import seasonal_decompose
Используйте Seasonal_decompose , и он предоставит вам три компонента: тренд, сезонность и остатки. Возьмите эти остатки, и это будет наш стационарный временной ряд для прогнозирования.
Если вы не обнаружите отклонений от нормы на скользящих графиках, сделайте последнюю проверку с помощью теста ADFuller.
Если вы не знакомы с проверкой гипотез, проверьте здесь.
Теперь, переходя к математике теста AD Fuller Test, давайте разберемся с результатами и тем, как они помогут нам в нашей задаче.
Для интуитивного понимания теста AD Fuller щелкните здесь.
Используя и ADfuller (), получаем 5 выходов. Мы сконцентрируемся на тестовой статистике и словаре, который мы получим как 5-й результат. В зависимости от уровня значимости теста мы будем сравнивать его с предоставленной статистикой (с критическим значением), и если статистика теста ниже этого, серия будет стационарной, в противном случае - нет.
Как и на приведенной выше иллюстрации, тестовая статистика e больше для даже уровня значимости 10%, следовательно, не является стационарной. Некоторые основные характеристики теста AD Fuller:
- Временной ряд имеет единичный корень - это нулевая гипотеза
- auto lag = ’AIC’ - это критерий для выбора из максимально запаздывающих версий серии для использования в тесте. Автоматический журнал может принимать «AIC», «BIC» или, если он не установлен, принимает максимальные флаги, установленные пользователем.
На данный момент у нас есть стационарный временной ряд !!!
Наконец, мы приступаем к прогнозированию.
Я бы пошел с ARIMA и как настроить его параметры. Очень важным моментом является то, что нам нужно настроить 3 параметра, как описано в моих предыдущих статьях (проверьте ниже).
- P = Использование графика автокорреляции для AR
- D = для интегрированного термина в AR- I- MA
- Q = Использование графика частичной автокорреляции для скользящей средней
Информацию о невыполненных вами условиях см. В статьях ниже.
И вот суть -
Что вы должны отметить на картинке выше:
- Пунктирные линии представляют доверительный интервал (95%).
- Для 95% доверительного интервала z-оценка составляет + 1,96, -1,96.
- Постройте эти интервалы, используя коды, использованные выше. Он был разделен на корень из общего числа выборок. Это было сделано потому, что, когда известно количество выборок, мы всегда вычисляем t-оценку, а не z-оценку (нет такого правила, что если меньше 30 выборок, то только t-оценка, иначе z-оценка). .
- После построения ACF и pacf посмотрите в первый раз, когда синяя линия пересекает пунктирную (доверительный интервал). Как для графика acf, так и для графика pacf это значение примерно равно 1 или 2. Следовательно, P = 1,2 (удар и испытание) Q = 1,2.
Для D нам нужно посмотреть, какая разностная версия с задержкой сделала серию стационарной. Если X - X.shift (1) делает вашу серию X стационарной, D = 1.
И наш прогноз сбылся!
Завершив прогнозирование, не забудьте отследить все преобразования, которые вы сделали в исходный ряд (наиболее распространенная ошибка). Кроме того, в той же обратной последовательности (следовать LIFO, сначала отменяется последнее примененное преобразование). Создайте копию своей серии. Это поможет вам вернуть вещи обратно. Например, если вы сначала применили log (), а затем разность, сначала добавьте то, что было вычтено (используя резервную копию, которую я просил вас сохранить), а затем exp () поверх этого.
Не пропустите другие мои статьи из временных рядов.
- Основные термины временных рядов
- Почему временные ряды должны быть стационарными?
- Модели AR и MA для прогнозирования временных рядов
- Холт-Винтерс и экспоненциальное сглаживание для прогнозирования временных рядов
- Многомерное прогнозирование временных рядов
- Интуитивное объяснение ADFuller Test
- Трансформеры в НЛП (4 части)
- Основы обучения с подкреплением (5 частей)
- Как получить своего первого стажера в области науки о данных
- Tensorflow для начинающих (концепции + примеры) (4 части)
- Предварительная обработка временных рядов (с кодами)
- Аналитика данных для начинающих
- Статистика для новичков (4 части)