Работа с временными рядами, содержащими несколько наблюдений для одной и той же временной метки.

Вопрос или проблема

У меня есть данные временных рядов на Python 3, как показано ниже:

Дата                `Еженедельные_продажи`
2010-05-02              3400
2010-05-02              5600
2010-05-02              4590
2010-05-02              5800
2010-05-12              2380
2010-05-12              6700
2010-05-12              3700

Временной ряд не является непрерывным, так как есть несколько наблюдений одной и той же даты. Я пытаюсь спрогнозировать продажи на Python, используя ARIMA, но мой график ACF и PACF показывает, что нет корреляции между лагами. Также, если я запускаю тест Дики-Фуллера, чтобы проверить стационарность, моя система зависает.

Как я могу это исправить?

Похоже, вы потеряли немного информации в этом наборе данных. У вас не должно быть 4 измерений для одной временной отметки для одной переменной – как вы узнаете, какую из первых четырех строк использовать для 2010-05-02?

Я бы предложил проверить источник ваших данных, или же придумать способ объяснить значение четырех значений… они как-то отличаются (используя другую информацию)?

Как вы вообще создаете лаги по этому индексу даты? Брать среднее за каждый день?
В зависимости от пакета, который вы используете для теста Дики-Фуллера (и других методов), он может быть не предназначен для работы с одинаковыми временными отметками в качестве входных данных… что может объяснять, почему сессия зависает.

Один из вариантов – использовать байесовский подход и моделировать данные как распределение возможных значений, которые меняются со временем. Каждая неделя будет частью модели состояния. Самое распространенное название / структура – Байесовская структурная модель временных рядов (BSTS).

Ответ или решение

Обработка временных рядов с несколькими наблюдениями для одного временного штампа

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

1. Понимание проблемы

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

2. Агрегация данных

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

  • Среднее значение: Рассчитайте среднее значение для каждой даты. Это позволит вам сгладить данные и устранить шум:

    import pandas as pd
    
    data = {'Date': ['2010-05-02', '2010-05-02', '2010-05-02', '2010-05-02', 
                     '2010-05-12', '2010-05-12', '2010-05-12'],
            'Weekly_Sales': [3400, 5600, 4590, 5800, 2380, 6700, 3700]}
    df = pd.DataFrame(data)
    
    # Преобразуем в datetime
    df['Date'] = pd.to_datetime(df['Date'])
    
    # Агрегация
    aggregated_df = df.groupby('Date')['Weekly_Sales'].mean().reset_index()
  • Суммирование: Если дублирующие значения представляют собой продажи из разных источников, можно использовать суммирование:

    aggregated_df = df.groupby('Date')['Weekly_Sales'].sum().reset_index()
  • Другие статистики: Вы также можете использовать медиану, максимальные или минимальные значения, в зависимости от контекста задачи.

3. Проверка стационарности

После агрегации данных вам следует повторно провести тесты на стационарность, такие как тест Дики-Фуллера. Это можно сделать следующим образом:

from statsmodels.tsa.stattools import adfuller

result = adfuller(aggregated_df['Weekly_Sales'])
print('ADF Statistic:', result[0])
print('p-value:', result[1])

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

4. Построение модели

После того, как вы убедитесь, что данные стационарные, вы можете приступить к построению модели. Если модель ARIMA не работает должным образом, рассмотрите использование других подходов, таких как:

  • SARIMA: Если у вас есть сезонные данные, можно рассмотреть использование сезонного ARIMA.
  • Байесовская структура временных рядов: Это продвинутый метод, который учитывает неопределенности и может быть полезен, если у вас много данных и вы хотите учесть вероятность:
    # Установка библиотеки для BSTS
    # !pip install bsts
    # Пример использования BSTS можно найти в документации

5. Заключение

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

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

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

Оцените материал
Добавить комментарий

Капча загружается...