Почему имеет значение стационарность в анализе временных рядов?

Изучите основное правило анализа временных рядов

Стационарность - важная концепция в области анализа временных рядов, оказывающая огромное влияние на то, как данные воспринимаются и прогнозируются. При прогнозировании или прогнозировании будущего большинство моделей временных рядов предполагают, что каждая точка не зависит друг от друга. Лучшее свидетельство этого - когда набор данных прошлых экземпляров является стационарным. Чтобы данные были стационарными, статистические свойства системы не меняются со временем. Это не означает, что значения для каждой точки данных должны быть одинаковыми, но общее поведение данных должно оставаться постоянным. С чисто визуальной оценки графики времени, которые не показывают трендов или сезонности, можно считать стационарными. Дополнительные числовые факторы в поддержку стационарности включают постоянное среднее значение и постоянную дисперсию.

Тенденция = при долгосрочном увеличении или уменьшении данных.

Сезонность = повторение модели с фиксированной и известной частотой в зависимости от времени года, недели или дня.

Что делать, если данные нестационарны?

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

Поскольку данные нестационарны, вы можете выполнить преобразование для преобразования в стационарный набор данных. Наиболее распространенные преобразования - это разностное и логарифмическое преобразование.

Преобразование разницы

Дифференциация - это преобразование, которое помогает стабилизировать среднее значение временного ряда, удаляя изменения уровня временного ряда, что устраняет тенденцию и сезонность. Преобразование разности первого порядка состоит из взятия точки данных в текущий момент времени и вычитания ее из точки до этого. Результатом является набор данных о различиях между точками в момент времени t. Если разность первого порядка стационарна и случайна, то она называется моделью «случайного блуждания».

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

Логарифмическое преобразование

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

Как вы можете видеть выше, среднее значение и дисперсия выравниваются и становятся постоянными. Нет никаких признаков трендов или сильной сезонности.

Расширенный тест Дики-Фуллера (ADF)

Хотя визуальный тест - это быстрый и грязный метод обнаружения стационарного состояния, в большинстве случаев это не так просто, как описанный выше. Статистические тесты позволяют нам подтвердить нашу гипотезу путем проверки на стационарность. Тест ADF, также известный как «тест единичного корня», представляет собой статистический тест, позволяющий определить степень, в которой нулевая гипотеза может быть отклонена или не может быть отклонена. Значение p ниже порога (1% или 5%) предполагает, что мы отвергаем нулевую гипотезу.

Нулевая гипотеза H0 = Если не удалось отклонить, она предполагает, что временной ряд имеет единичный корень, что означает, что он нестационарен.

Альтернативная гипотеза H1 = нулевая гипотеза отклоняется и предполагает, что временной ряд не имеет единичного корня, что означает, что он является стационарным.

Самый простой способ внедрить этот тест в свой код - использовать функцию adfuller () в библиотеке statsmodels.

from statsmodels.tsa.stattools import adfuller
def ADF_Cal(x):
    result = adfuller(x)
    ADF_stat = result[0]
    p = result[1]
    print("ADF Statistic: %f" % ADF_stat)
    print("p-value: %f" % p)
    print("Critical Values")
    levels = [.01, .05, .1]
    i = 0
    for key,value in result[4].items():
        print('\t%s: %.3f' % (key,value))
        hyp = p < levels[i]
        if ADF_stat < value:
            cert = (1-levels[i])*100
            print("{}% certain this is staionary".format(cert))
            print('Reject H0: {}'.format(hyp))
            break
        i = i+1
        if i >= 3:
            print("Less than 90% certain that data is stationary")
            print('Reject H0: {}'.format(hyp))
print("Calculating ADF test for X...")
ADF_Cal(X)

Заключение

В целом понимание стационарности жизненно важно для того, чтобы знать, как обращаться с данными. Если данные нестационарны, то определенные преобразования могут помочь превратить их в стационарные данные. Разностные или логарифмические преобразования - распространенные методы для обеспечения стационарности данных. Один метод не лучше другого. Пользователь должен изучить все методы и увидеть каждый результат, прежде чем делать обоснованное суждение. Использование количественных инструментов, таких как тест ADF, может дать нам правильное представление о свойствах наших данных.