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

Что такое данные временных рядов?

Данные этого типа представляют собой последовательно упорядоченные данные во времени, и эти наблюдения обычно собираются через регулярные интервалы, например:

  • Каждую секунду / минуту / час
  • Ежедневно
  • Ежемесячно
  • Ежеквартально / ежегодно

Вот некоторые примеры из реальной жизни:

  • Ежемесячные данные о продажах
  • Цены на фондовом рынке
  • Почасовые данные о погоде / скорость ветра
  • IoT (Интернет вещей) Датчики в промышленности и интеллектуальные устройства
  • Энергетическое прогнозирование

Свойства данных временных рядов

  • Тенденции показывают общую тенденцию данных к увеличению или уменьшению в течение длительного периода времени. Как правило, тренд - это плавная, общая, долгосрочная, средняя тенденция.
  • Сезонность: периодические колебания. Например, потребление электроэнергии высокое днем ​​и низкое ночью, аналогично онлайн-продажи растут во время Рождества, а затем снова падают.
  • Стационарность - ключевая характеристика временного ряда. Временной ряд называется стационарным, если его статистические свойства не меняются с течением времени. Другими словами, он имеет постоянное среднее значение и дисперсию, а ковариация не зависит от времени. То есть цена акции не является стационарным рядом, поскольку мы можем видеть растущую или убывающую тенденцию, а ее волатильность со временем может увеличиваться (что означает, что дисперсия меняется).

В идеале мы хотим иметь стационарный временной ряд для моделирования. В реальных сценариях не все из них являются стационарными, но мы можем выполнить различные преобразования, чтобы сделать их стационарными.

Сценарий использования

Я буду использовать запись Daily Delhi Climate за период с 2013 по 2017 год. В наборе данных есть 4 функции, но для этого урока я собираюсь специально использовать только столбец влажности.

Индексирование

Визуализация с помощью слайдера

Как мы видим, данные на графике выше выглядят стационарно, и есть несколько способов проверить это! давай посмотрим на них

Методы проверки стационарности

Тест ADF - это наиболее часто используемый тест стационарности ряда, где нулевая гипотеза заключается в том, что временной ряд имеет единичный корень и является нестационарным. Поэтому, если значение p в тесте ADH меньше уровня значимости (0,05), мы отклоняем нулевую гипотезу.

  • Нулевая гипотеза: у ряда есть единичный корень (значение a = 1)
  • Альтернативная гипотеза: у ряда нет единичного корня.

KPSS ( (Kwiatkowski-Phillips-Schmidt-Shin) тест - еще один тест для проверки стационарности временного ряда.

Однако нулевая и альтернативная гипотезы для теста KPSS противоположны гипотезе теста ADF, что часто создает путаницу. (Вы могли видеть в приведенном ниже коде условия противоположные)

  • Нулевая гипотеза: Это тренд канцелярских товаров.
  • Альтернативная гипотеза. У ряда есть единичный корень (ряд не является стационарным).

Всегда лучше применять оба теста, чтобы мы были уверены, что ряд действительно стационарный.

Автокорреляция

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

Когда есть сильная сезонная картина, мы можем видеть на графике ACF обычно определенные повторяющиеся всплески, кратные сезонному окну. Например, в большинстве «ежемесячных временных рядов продаж» вы должны увидеть всплески примерно на 12, 24, 36… строках, объясняющих рост продаж с наступлением рождественских праздников.

Разложение

Любой временной ряд можно разбить на следующие компоненты:

  • Базовый уровень
  • Тенденция
  • Сезонность
  • Ошибка

Однако не обязательно, чтобы все временные ряды имели тенденцию и / или сезонность. Временные ряды могут не иметь четкой тенденции, но иметь сезонность. Может быть и обратное. [1]

В зависимости от характера тренда и сезонности временной ряд может быть смоделирован как аддитивный или мультипликативный, при этом каждое наблюдение в ряду может быть выражено либо как сумма, либо как произведение компонентов:

Извлечение компонентов

# Actual Values = Addition of (Seasonality + Trend + Residual)

Передискретизация

Функция df.resample () позволяет нам пересчитать наши временные ряды до желаемых частот: дается ряд псевдонимов строк для использования общих частот временных рядов, они называются псевдонимами смещения . Давайте посмотрим на несколько повторных попыток с использованием этих псевдонимов смещения.

- df.diff ()

Вычисляет алегбрическую разницу между одним элементом Dataframe и другим элементом, значение по умолчанию означает, что он «отличает» элемент от элемента prevoius. Вот пример с нашим столбцом влажности

Как показано выше df [: 5]. diff (2) принимает разницу между первым и третьим элементом столбца, следовательно, вторым и четвертым элементом и так далее.

- df.pct_change ()

Рассчитайте процентное изменение между текущим и предыдущим элементом.

По умолчанию вычисляет процентное изменение от непосредственно предыдущей строки. Это полезно для сравнения процента изменения во временном ряду элементов.

- df.groupby ()

Теперь попробуем вычислить среднее значение по всем месяцам, годам и дням недели. Мы применим pct_change, чтобы увидеть, как шаблон изменился по сравнению с предыдущим.

Влажность означает все месяцы, годы и дни недели.

Примечание: в среднем значении влажности 2017 («год») имеется аномалия! В данных за 2017 год всего одна запись! следовательно это аномалия.

fig, (ax1, ax2,ax3) = plt.subplots(3,figsize=(30,30))
ax1.plot(week_mean_df.Percentage_increase,marker='o', linestyle='--', linewidth=5,markersize=30, color='g')
ax1.set_title('Weekly Pct_change');
ax2.plot(month_mean_df.Percentage_increase,marker='o', linestyle='--', linewidth=5,markersize=30, color='r')
ax2.set_title('Monthly Pct_change ');
ax3.plot(year_mean_df.Percentage_increase,marker='o', linestyle='--', linewidth=5,markersize=30, color='b')
ax3.set_title('Yearly Pct_change');

- df.s hift ()

Функция сдвига сдвигает данные до или после указанного периода времени.

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

если, например, мы хотим сдвинуть данные на 365 дней, мы могли бы сделать:

df[:5]shift(365)

-df.rolling ()

Обеспечение расчетов скользящего окна или, например, расчетов скользящего среднего

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

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

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

-df.ewm ()

Это обеспечивает экспоненциально взвешенные (EW) функции, которые больше взвешивают текущие значения, а не исторические значения.

Заключение

В этом посте я попытался объяснить большинство полезных функций панд и статистического тестирования для анализа временных рядов. Если бы вы могли запустить весь приведенный выше код, у вас были бы некоторые знания о том, как выполнять анализ варианта использования временного ряда. Чтобы овладеть всеми этими функциями, потребуется много практики! Если вы уже знаете эти функции, я рад освежить вашу память и навыки.

Спасибо, что дошли до этого места, если вы хотите узнать больше о моделировании, анализе и многом другом о временных рядах, я настоятельно рекомендую канал Youtube: плейлист AI Engineering (by Srivatsan Srinivasan) на Time Series, последний содержит много качественной информации, проверьте :)

Больше чтения:









Чем« TF-IDF Sklearn отличается от стандартного TF-IDF ?
Давайте посмотрим на различия и шаг за шагом проанализируем применяемый подход. для вычисления TF-IDF Sklearn в сторонуdatascience.com »



Использованная литература:

[1] ML +. 2020. Анализ временных рядов в Python - подробное руководство с примерами - ML +. [онлайн] Доступно по адресу: https://www.machinelearningplus.com/time-series/time-series-analysis-python/.