- Как бороться с временными рядами, которые изменяют сезонность или другие закономерности?
- Задний план
- Вопрос
- Пример 1
- Пример 2
- Возможные направления
- Дальнейшие заметки
- Как удалить тренды и сезонность с помощью разностного преобразования в Python
- Обзор учебника
- стационарность
- Стационарный временной ряд
- Нестационарный временной ряд
- Создание серийных данных
- Разница Преобразование
- Лаг Разница
- Разница заказа
- Расчет дифференцирования
- Различие для удаления трендов
- Разница для удаления сезонности
- Дальнейшее чтение
- Резюме
- Как идентифицировать и удалить сезонность из данных временных рядов с помощью Python
- Сезонность во временных рядах
- Преимущества машинного обучения
- Типы сезонности
- Снятие сезонности
- Набор данных минимальных суточных температур
- Загрузить набор данных о минимальной суточной температуре
- Сезонная корректировка с дифференцированием
- Сезонная корректировка с моделированием
- Резюме
Как бороться с временными рядами, которые изменяют сезонность или другие закономерности?
Задний план
Я работаю над набором данных временных рядов показаний счетчиков энергии. Длина ряда варьируется в зависимости от метра — у некоторых у меня есть несколько лет, у других — всего несколько месяцев и т. Д. Многие демонстрируют значительную сезонность, а часто и несколько слоев — в течение дня, недели или года.
Одна из вещей, над которыми я работал, — это кластеризация этих временных рядов. На данный момент моя работа носит академический характер, и, хотя я занимаюсь и другим анализом данных, у меня есть конкретная цель провести некоторую кластеризацию.
Я выполнил некоторую начальную работу, где вычислял различные функции (процентное соотношение, используемое в выходные дни, по сравнению с днем недели, процентное соотношение, используемое в разных временных блоках и т. Д.). Затем я перешел к рассмотрению использования динамической деформации времени (DTW) для получения расстояния между различными рядами и кластеризации на основе значений разностей, и я нашел несколько статей, связанных с этим.
Вопрос
Приведет ли сезонность к изменению конкретной серии к неправильной кластеризации? И если да, то как мне с этим бороться?
Меня беспокоит то, что расстояния, полученные DTW, могут вводить в заблуждение в тех случаях, когда картина во временных рядах изменилась. Это может привести к неправильной кластеризации.
В случае, если вышеизложенное неясно, рассмотрите эти примеры:
Пример 1
Измеритель имеет низкие показания с полуночи до 8:00, затем значения резко возрастают в течение следующего часа и остаются высокими с 9:00 до 17:00, затем резко уменьшаются в течение следующего часа и затем остаются низкими с 6:00 до полуночи. Измеритель продолжает эту схему последовательно каждый день в течение нескольких месяцев, но затем меняется на схему, где показания просто остаются на постоянном уровне в течение дня.
Пример 2
Метр показывает примерно одинаковое количество энергии, потребляемой каждый месяц. Через несколько лет он меняется на схему, в которой потребление энергии выше в течение летних месяцев, а затем возвращается к обычному количеству.
Возможные направления
- Я задавался вопросом, могу ли я продолжать сравнивать целые временные ряды, но разделить их и рассматривать их как отдельные серии, если картина существенно меняется. Однако, чтобы сделать это, мне нужно было бы обнаружить такие изменения. Кроме того, я просто не знаю, является ли это подходящим способом или работа с данными.
- Я также подумал о разделении данных и рассмотрении их как множества отдельных временных рядов. Например, я мог бы рассматривать каждую комбинацию день / метр как отдельную серию. Однако тогда мне нужно было бы поступить аналогичным образом, если бы я хотел учесть недельные / ежемесячные / годовые модели. Я думаю, что это сработало бы, но это потенциально довольно обременительно, и я бы не хотел идти по этому пути, если есть лучший способ, по которому я скучаю.
Дальнейшие заметки
Это то, что появилось в комментариях, или то, о чем я подумал из-за комментариев, которые могут иметь отношение к делу. Я помещаю их сюда, чтобы людям не приходилось читать все, чтобы получить соответствующую информацию.
Источник
Как удалить тренды и сезонность с помощью разностного преобразования в Python
Дата публикации 2017-07-10
Наборы данных временных рядов могут содержать тренды и сезонность, которые, возможно, потребуется удалить до моделирования.
Тенденции могут приводить к изменению среднего значения во времени, тогда как сезонность может приводить к изменению дисперсии во времени, которые определяют временной ряд как нестационарный. К стационарным наборам данных относятся стабильные средние и дисперсионные данные, которые, в свою очередь, гораздо проще моделировать.
Дифференцирование является популярным и широко используемым преобразованием данных для обеспечения стационарности данных временных рядов.
В этом руководстве вы узнаете, как применить разностную операцию к данным временных рядов с помощью Python.
После завершения этого урока вы узнаете:
- Контраст между стационарным и нестационарным временным рядом и тем, как сделать ряд стационарным с разностным преобразованием.
- Как применить разностное преобразование для удаления линейного тренда из серии.
- Как применить разностное преобразование для удаления сезонного сигнала из серии.
Обзор учебника
Этот урок разделен на 4 части; они есть:
- стационарность
- Разница Преобразование
- Различие для удаления трендов
- Разница для удаления сезонности
стационарность
Временные ряды отличаются от более традиционных задач классификации и прогнозного регрессионного моделирования.
Временная структура добавляет порядок наблюдениям. Этот навязанный порядок означает, что важные допущения в отношении согласованности этих наблюдений должны рассматриваться конкретно.
Например, при моделировании существуют предположения о том, что сводная статистика наблюдений согласована. В терминологии временных рядов мы называем это ожидание временным рядом.
Эти предположения могут быть легко нарушены во временных рядах путем добавления тренда, сезонности и других зависящих от времени структур.
Стационарный временной ряд
Наблюдения в стационарном временном ряду не зависят от времени.
Временные ряды являются стационарными, если они не имеют трендовых или сезонных эффектов. Суммарные статистические данные, рассчитанные по временным рядам, согласованы во времени, например, среднее значение или дисперсия наблюдений.
Когда временной ряд является стационарным, его легче моделировать. Методы статистического моделирования предполагают или требуют, чтобы временной ряд был стационарным.
Нестационарный временной ряд
Наблюдения из нестационарного временного ряда показывают сезонные эффекты, тренды и другие структуры, которые зависят от временного индекса.
Сводные статистические данные, такие как среднее значение и дисперсия, меняются с течением времени, предоставляя дрейф в концепциях, которые модель может попытаться отразить.
Классические методы анализа и прогнозирования временных рядов направлены на то, чтобы сделать данные нестационарных временных рядов стационарными путем выявления и устранения тенденций и устранения стационарных эффектов.
Создание серийных данных
Вы можете проверить, является ли ваш временной ряд стационарным, посмотрев на линейный график ряда с течением времени.
Признаком явных тенденций, сезонности или других систематических структур в ряду являются показатели нестационарного ряда.
Более точным методом было бы использование статистического теста, такого как тест Дики-Фуллера.
Должны ли вы сделать свой временной ряд стационарным?
Если у вас есть четкая тенденция и сезонность в ваших временных рядах, то смоделируйте эти компоненты, удалите их из наблюдений, а затем обучите модели на невязках.
Если мы подгоняем данные к стационарной модели, мы предполагаем, что наши данные являются реализацией стационарного процесса. Таким образом, наш первый шаг в анализе должен состоять в том, чтобы проверить, есть ли какие-либо признаки тенденции или сезонные эффекты и, если есть, удалить их.
Методы статистических временных рядов и даже современные методы машинного обучения получат выгоду от более четкого сигнала в данных.
Разница Преобразование
Дифференцирование — это метод преобразования набора данных временного ряда.
Его можно использовать для устранения зависимости ряда от времени, так называемой временной зависимости. Это включает в себя такие структуры, как тенденции и сезонность.
Дифференцирование может помочь стабилизировать среднее значение временного ряда, удаляя изменения уровня временного ряда и, таким образом, устраняя (или уменьшая) тенденцию и сезонность.
Дифференцирование выполняется путем вычитания предыдущего наблюдения из текущего наблюдения.
Инвертирование процесса требуется, когда прогноз должен быть преобразован обратно в исходный масштаб.
Этот процесс можно повернуть вспять, добавив наблюдение на предыдущем временном шаге к значению разницы.
Таким образом, ряд различий и инвертированные различия могут быть рассчитаны.
Лаг Разница
Взятие разницы между последовательными наблюдениями называется разницей лаг-1.
Разница в запаздывании может быть скорректирована в соответствии с конкретной временной структурой
Для временных рядов с сезонным компонентом можно ожидать, что отставание будет периодом (шириной) сезонности.
Разница заказа
Некоторая временная структура все еще может существовать после выполнения разностной операции, например, в случае нелинейного тренда.
Таким образом, процесс дифференцирования может повторяться более одного раза, пока вся временная зависимость не будет удалена.
Количество раз, когда выполняется различие, называется порядком разностей.
Расчет дифференцирования
Мы можем изменить набор данных вручную.
Это включает в себя разработку новой функции, которая создает дифференцированный набор данных. Функция будет циклически проходить по предоставленному ряду и вычислять разностные значения с заданным интервалом или задержкой.
Функция ниже названного разности () реализует эту процедуру.
Мы можем видеть, что функция осторожно запускает набор разностных данных после указанного интервала, чтобы обеспечить возможность вычисления разностных значений. Задан интервал по умолчанию или значение задержки 1. Это разумное значение по умолчанию.
Еще одним улучшением может быть также возможность указать порядок или количество раз для выполнения операции дифференцирования.
Функция под именем inverse_difference () инвертирует разностную операцию для одного прогноза. Требуется также предоставить реальное значение наблюдения для предыдущего временного шага.
Различие для удаления трендов
В этом разделе мы рассмотрим использование разностного преобразования для удаления тренда.
Тенденция делает временной ряд нестационарным за счет увеличения уровня. Это приводит к изменению среднего значения временного ряда во времени.
В приведенном ниже примере функция разности () применяется к искусственному набору данных с линейно возрастающим трендом.
Выполнение примера сначала печатает придуманную последовательность с линейным трендом. Затем распечатывается набор разностных данных, показывающий увеличение на одну единицу каждый шаг по времени. Длина этой последовательности равна 19 вместо 20, так как разность для первого значения в последовательности не может быть рассчитана, так как нет предыдущего значения.
Наконец, разностная последовательность инвертируется с использованием предыдущих значений из исходной последовательности в качестве праймера для каждого преобразования.
Разница для удаления сезонности
В этом разделе мы рассмотрим использование разностного преобразования для устранения сезонности.
Сезонные колебания или сезонность — это циклы, которые регулярно повторяются с течением времени.
Повторяющиеся схемы в каждом году известны как сезонные колебания, хотя термин применяется в более общем смысле для повторяющихся моделей в течение любого фиксированного периода.
Есть много видов сезонности. Некоторые очевидные примеры включают в себя; время суток, ежедневно, еженедельно, ежемесячно, ежегодно и т. д. Таким образом, определение наличия сезонности в проблеме временных рядов является субъективным.
Самый простой подход к определению того, есть ли аспект сезонности, состоит в том, чтобы построить и просмотреть ваши данные, возможно, в разных масштабах и с добавлением линий тренда.
В приведенном ниже примере применяется функция diff () к надуманному сезонному набору данных. Набор данных включает в себя два цикла по 360 единиц каждый.
При запуске примера сначала создается и выводится на график набор данных из двух циклов серии временных шагов 360.
Затем применяется разностное преобразование и выводится результат. На графике показаны 360 нулевых значений со всем удаленным сигналом сезонности.
В приведенном выше примере снятия тренда разность применялась с запаздыванием 1, что означает, что первое значение было принесено в жертву. Здесь для разницы используется весь цикл, то есть 360 временных шагов. В результате весь первый цикл приносится в жертву, чтобы отличить второй цикл.
Наконец, преобразование инвертируется, показывая второй цикл с восстановленной сезонностью.
Дальнейшее чтение
Резюме
В этом руководстве вы узнали о различии между стационарными и нестационарными временными рядами и о том, как использовать преобразование разностей для удаления трендов и сезонности в Python.
В частности, вы узнали:
- Контраст между стационарным и нестационарным временным рядом и тем, как сделать ряд стационарным с разностным преобразованием.
- Как применить разностное преобразование для удаления линейного тренда из серии.
- Как применить разностное преобразование для удаления сезонного сигнала из серии.
У вас есть вопросы о том, чтобы сделать временные ряды стационарными?
Задайте свои вопросы в комментариях, и я сделаю все возможное, чтобы ответить.
Источник
Как идентифицировать и удалить сезонность из данных временных рядов с помощью Python
Дата публикации 2016-12-23
Наборы данных временных рядов могут содержать сезонный компонент.
Это цикл, который повторяется с течением времени, например, ежемесячно или ежегодно. Этот повторяющийся цикл может скрыть сигнал, который мы хотим моделировать при прогнозировании, и, в свою очередь, может дать сильный сигнал нашим прогнозным моделям.
В этом руководстве вы узнаете, как идентифицировать и скорректировать сезонность в данных временных рядов с помощью Python.
После завершения этого урока вы узнаете:
- Определение сезонности во временных рядах и возможности, которые оно предоставляет для прогнозирования с помощью методов машинного обучения.
- Как использовать разностный метод для создания сезонно скорректированных временных рядов суточных данных о температуре.
- Как моделировать сезонный компонент напрямую и вычесть его из наблюдений.
Сезонность во временных рядах
Данные временного ряда могут содержать сезонные колебания.
Сезонные колебания или сезонность — это циклы, которые регулярно повторяются с течением времени.
Повторяющиеся схемы в каждом году известны как сезонные колебания, хотя термин применяется более широко для повторяющихся моделей в течение любого фиксированного периода.
Структура цикла во временном ряду может быть или не быть сезонной. Если он постоянно повторяется с той же частотой, он является сезонным, в противном случае он не является сезонным и называется циклом.
Преимущества машинного обучения
Понимание сезонной составляющей во временных рядах может улучшить производительность моделирования с помощью машинного обучения.
Это может произойти двумя основными способами:
- Более четкий сигнал: Определение и удаление сезонного компонента из временного ряда может привести к более четкой взаимосвязи между входными и выходными переменными.
- Дополнительная информация: Дополнительная информация о сезонной составляющей временного ряда может предоставить новую информацию для улучшения характеристик модели.
Оба подхода могут быть полезны для проекта. Моделирование сезонности и удаление ее из временного ряда может происходить во время очистки и подготовки данных.
Извлечение сезонной информации и предоставление ее в качестве входных объектов, либо напрямую, либо в сводной форме, может происходить во время операций по извлечению объектов и проектированию объектов.
Типы сезонности
Есть много типов сезонности; например:
Таким образом, определение наличия сезонности в проблеме временных рядов является субъективным.
Самый простой подход к определению того, есть ли аспект сезонности, состоит в том, чтобы построить и просмотреть ваши данные, возможно, в разных масштабах и с добавлением линий тренда.
Снятие сезонности
Как только сезонность определена, ее можно смоделировать.
Модель сезонности может быть удалена из временного ряда. Этот процесс называетсяСезонная корректировкаили Десезонное.
Временной ряд, в котором был удален сезонный компонент, называется сезонным стационарным. Временной ряд с четкой сезонной составляющей называется нестационарным.
Существуют сложные методы изучения и извлечения сезонности из временных рядов в области анализа временных рядов. Поскольку нас в первую очередь интересует прогнозное моделирование и прогнозирование временных рядов, мы ограничены методами, которые могут быть разработаны на исторических данных и доступны при прогнозировании новых данных.
В этом уроке мы рассмотрим два метода внесения сезонных корректировок в классическую задачу о суточных температурах метеорологического типа с сильной аддитивной сезонной составляющей. Далее, давайте взглянем на набор данных, который мы будем использовать в этом уроке.
Набор данных минимальных суточных температур
Этот набор данных описывает минимальные дневные температуры за 10 лет (1981-1990) в городе Мельбурн, Австралия.
Единицы измерения — градусы Цельсия, 3650 наблюдений. Источник данных зачисляется в Австралийское бюро метеорологии.
Ниже приведен пример первых 5 строк данных, включая строку заголовка.
Ниже приведен график всего набора данных, взятого изРынок данныхгде вы можете скачать набор данных и узнать о нем больше.
Набор данных показывает сильную сезонную составляющую и имеет приятные мелкозернистые детали для работы.
Загрузить набор данных о минимальной суточной температуре
Загрузите набор данных Minimum Daily Temperatures и поместите его в текущий рабочий каталог с именем файла «ежедневно минимальной temperatures.csv«.
Заметка: Загруженный файл содержит несколько знаков вопроса («?»), Которые необходимо удалить, прежде чем вы сможете использовать набор данных. Откройте файл в текстовом редакторе и удалите символы «?». Также удалите любую информацию нижнего колонтитула в файле.
Приведенный ниже код загрузит и отобразит набор данных.
Выполнение примера создает следующий график набора данных
Сезонная корректировка с дифференцированием
Простой способ исправить сезонную составляющую — это использовать дифференцирование.
Если есть сезонный компонент на уровне одной недели, то мы можем убрать его из наблюдения сегодня, вычтя значение из прошлой недели.
В случае набора данных о минимальных дневных температурах, похоже, что у нас есть сезонная составляющая каждый год, показывающая колебания от лета к зиме.
Мы можем вычесть дневную минимальную температуру из того же дня в прошлом году, чтобы скорректировать сезонность. Это потребует специальной обработки 29 февраля ввисокосные годыи будет означать, что данные за первый год не будут доступны для моделирования.
Ниже приведен пример использования разностного метода для ежедневных данных в Python.
Выполнение этого примера создает новый сезонно скорректированный набор данных и отображает результат.
В нашем наборе данных есть два високосных года (1984 и 1988). Они не обрабатываются явно; это означает, что наблюдения в марте 1984 г. и далее о смещении ошибочны на один день, а после марта 1988 г. смещения ошибочны на два дня.
Один из вариантов — обновить пример кода, чтобы быть в курсе високосного дня.
Другой вариант состоит в том, чтобы считать, что температура в любой данный период года, вероятно, стабильна. Возможно, в течение нескольких недель. Мы можем сократить эту идею и считать все температуры в течение календарного месяца стабильными.
Улучшенная модель может состоять в том, чтобы вычесть среднюю температуру из того же календарного месяца предыдущего года, а не в тот же день.
Мы можем начать с пересчета набора данных до среднемесячной минимальной температуры.
Выполнение этого примера печатает первые 13 месяцев среднемесячных минимальных температур.
Он также отображает ежемесячные данные, четко показывая сезонность набора данных.
Мы можем проверить тот же метод различий на месячных данных и подтвердить, что сезонно скорректированный набор данных действительно удаляет годовые циклы.
Выполнение примера создает новый набор данных о минимальной температуре с учетом сезонных колебаний, пропуская данные за первый год, чтобы создать корректировку. Скорректированный набор данных затем наносится на график.
Далее, мы можем использовать среднемесячные минимальные температуры за тот же месяц предыдущего года, чтобы скорректировать дневной набор данных о минимальной температуре.
Опять же, мы просто пропускаем данные за первый год, но коррекция с использованием месячных, а не дневных данных может быть более устойчивым подходом.
Повторное выполнение примера создает сезонно скорректированный набор данных и выводит результаты на график.
Этот пример устойчив к дневным колебаниям за предыдущий год и позволяет компенсировать ошибки, возникающие из-за 29 дней високосных лет.
Граница календарных месяцев обеспечивает жесткую границу, которая может не иметь смысла для данных о температуре.
Более гибкие подходы, которые берут среднее значение за одну неделю по обе стороны от одной и той же даты в предыдущем году, могут снова стать лучшим подходом.
Кроме того, существует вероятность сезонности в данных о температуре в нескольких масштабах, которые можно исправить прямо или косвенно, например:
- Дневной уровень.
- Уровень нескольких дней, например, неделя или недели.
- Уровень нескольких недель, например, месяц.
- Уровень нескольких месяцев, например, квартал или сезон.
Сезонная корректировка с моделированием
Мы можем моделировать сезонный компонент напрямую, а затем вычесть его из наблюдений.
Сезонная составляющая в данном временном ряду, вероятно, представляет собой синусоидальную волну в течение обычно фиксированного периода и амплитуды. Это можно легко аппроксимировать с помощью метода подбора кривой.
Набор данных может быть построен с указателем времени синусоидальной волны в качестве входного сигнала, или оси X, и наблюдением в качестве выходного сигнала, или оси Y.
После подгонки модель может быть использована для расчета сезонного компонента для любого временного индекса.
В случае данных о температуре указателем времени будет день года. Затем мы можем оценить сезонную составляющую для дня года для любых исторических наблюдений или любых новых наблюдений в будущем.
Кривая может затем использоваться в качестве нового входа для моделирования с контролируемыми алгоритмами обучения или вычитаться из наблюдений для создания сезонно скорректированных рядов.
Давайте начнем с подгонки кривой к набору данных «Минимальные суточные температуры». Библиотека NumPy обеспечиваетpolyfit ()функция, которая может использоваться для подгонки полинома выбранного порядка к набору данных.
Во-первых, мы можем создать набор данных временного индекса (в данном случае день) для наблюдения. Мы могли бы взять один год данных или все годы. В идеале мы попробуем оба варианта и посмотрим, какая модель лучше подходит. Мы также могли бы сгладить наблюдения, используя скользящее среднее с центром в каждом значении. Это также может привести к модели с лучшей подгонкой.
Как только набор данных подготовлен, мы можем создать подгонку, вызвав функцию polyfit (), передавая значения оси x (целое число года), значения оси y (наблюдения температуры) и порядок многочлена Порядок определяет количество слагаемых и, в свою очередь, сложность кривой, используемой для подгонки данных.
В идеале нам нужна простейшая кривая, описывающая сезонность набора данных. Для согласованной синусоидальной сезонности будет достаточно полинома 4-го или 5-го порядка.
В этом случае я выбрал порядок 4 методом проб и ошибок. Полученная модель принимает вид:
кудаYэто подходящее значение,Иксиндекс времени (день года), иb1вb5являются коэффициентами, найденными алгоритмом оптимизации подбора кривой.
После подбора у нас будет набор коэффициентов, которые представляют нашу модель. Затем мы можем использовать эту модель для расчета кривой для одного наблюдения, одного года наблюдений или всего набора данных.
Полный пример приведен ниже.
Выполнение примера создает набор данных, соответствует кривой, прогнозирует значение для каждого дня в наборе данных и затем отображает результирующую сезонную модель (красный цвет) поверх исходного набора данных (синий цвет).
Одним из ограничений этой модели является то, что она не учитывает високосные дни, добавляя небольшой шум смещения, который можно легко исправить с помощью обновления подхода.
Например, мы могли бы просто удалить два наблюдения 29 февраля из набора данных при создании сезонной модели.
Кривая, как представляется, хорошо подходит для сезонной структуры в наборе данных.
Теперь мы можем использовать эту модель для создания сезонно скорректированной версии набора данных.
Полный пример приведен ниже.
Выполнение примера вычитает значения, предсказанные сезонной моделью, из исходных наблюдений.
Затем устанавливается сезонно скорректированный набор данных.
Резюме
В этом уроке вы узнали, как создавать сезонно скорректированные наборы данных временных рядов в Python.
В частности, вы узнали:
- Важность сезонности во временных рядах и возможности для подготовки данных и разработки функций, которые она предоставляет.
- Как использовать разностный метод для создания сезонно скорректированных временных рядов.
- Как моделировать сезонный компонент напрямую и вычесть его из наблюдений.
Есть ли у вас какие-либо вопросы о десезонализации временных рядов или об этом посте?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.
Источник