Прогнозирование разреженных временных рядов высокой частоты на Python.

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

У меня есть набор данных о нескольких станциях зарядки электромобилей (с частотой 10 минут) в течение 1 года. Эти данные содержат много нулей, поскольку нет непрерывного потока автомобилей для зарядки, а есть только периодические события зарядки в виде пиков (например, с 7 до 9 утра, когда люди приезжают на работу, кажется частым временным интервалом для зарядки). Я также объединил данные о погоде и рабочем дне/празднике в качестве характеристик.

enter image description here

Теперь я хочу предсказать спрос на электроэнергию на 6 часов вперед. Пока что я пытался использовать SARIMA, но получил ужасные результаты, так как алгоритм, кажется, запутался из-за редких данных.

Я пробовал разные преобразования (Box Cox, нормализация, стандартизация), дифференцирование, auto-arima для оптимальных параметров, но пока безуспешно.

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

Вот что вы можете попробовать сделать:

  1. Понять форму ваших данных.
    Разделите временной ряд по дням. Сравните временные ряды за разные дни.
    Постройте график с временем на оси X и целевой переменной (для прогноза) на оси Y. Выглядят ли формы похожими или разными? Можете ли вы на глаз определить N-различных форм, которые принимает кривая?

  2. Выясните “среднее значение за день” для целевой переменной, чтобы прогнозировать. Постройте график среднего значения в течение года. Видите ли вы тренд или сезонность? Можете ли вы использовать SARIMA или другие связанные методы для моделирования меняющегося среднего? Если да, то это само по себе может быть достижением. Повторите ту же задачу для “дневной дисперсии”. Прогнозирование дневного среднего/дневной дисперсии “может” быть более простой задачей, чем прогнозирование всего временного ряда.

  3. Нормализуйте свои дневные данные. Вычтите из дневной серии “среднее значение за день” и разделите на “стандартное отклонение за день”. Запустите алгоритм кластеризации (возможно, K-Means) на своих дневных временных рядах. Используйте метод локтя для определения наилучшего количества кластеров.

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

  5. Используйте номер кластера для маркировки каждого дневного временного ряда. Затем используйте модель классификации для прогнозирования правильного кластера. Характеристиками для модели классификации могут быть “день недели”, “выходной день”, “ожидаемая средняя температура в течение дня” и т.д.

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

  7. Прогнозируемая кривая из предыдущего шага, вероятно, нормализована из-за этапа подготовки данных (Шаг 3) нормализовал данные. Теперь у вас есть задача преобразовать ее обратно в исходные данные. Если на Шаге 2 вам удалось создать модель, которая хорошо предсказывает “среднее” и “дисперсию” для целевого дня, то вы можете сделать что-то такое простое, как:
    Окончательная_Кривая = Нормализованная_Кривая * sqrt(Прогнозируемая_Дисперсия) + Прогнозируемое_Среднее

Дайте знать, если это сработало для вас.

Это не стандартная задача временного ряда. То, что вы ищете – это Пуассоновская регрессия. https://en.m.wikipedia.org/wiki/Poisson_regression

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

Теория

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

Классические методы временных рядов, такие как ARIMA и SARIMA, могут не подойти, поскольку они предполагают определенную периодичность и регулярность, которые могут не подходить ситуации с разреженными данными. В таких случаях может быть более целесообразно использовать методы машинного обучения, статистические модели, такие как регрессия Пуассона, или гибридные подходы, которые могут учитывать разреженность и нерегулярность событий.

Пример

Рассмотрим пример с зарядными станциями для электромобилей. У нас есть данные с частотой 10 минут за один год, включающие количество зарядных сессий, данные о погоде и календарной информации (день недели, праздники и т.д.). Наблюдаются всплески спроса, например, с 7 до 9 утра, когда люди приезжают на работу.

Применение

Вам может помочь следующий подход:

  1. Исследование данных: Начните с визуализации вашего временного ряда. Поделите данные на дневные сегменты и сравните их между собой. Это поможет выявить повторяющиеся паттерны. Если вы видите, что данные имеют видимые шаблоны или формы, это поможет вам в дальнейшем.

  2. Анализ трендов и сезонности: Рассчитайте среднее значение и дисперсию для каждого дня. Постройте графики для среднего и дисперсии в течение года. Если SARIMA или другие подходы не работают для полной серии, они могут помочь моделировать изменения в среднем или дисперсии, что облегчит предсказание на их основе.

  3. Нормализация данных: Для последовательностей каждого дня вычтите среднее и разделите на стандартное отклонение. Это уравняет данные и подготовит их для дальнейшей кластеризации.

  4. Кластеризация: Используйте алгоритм кластеризации, например K-Means, для определения кластеров в вашем нормализованном временном ряде. Для определения оптимального числа кластеров можно использовать метод "локоть".

  5. Анализ кластеров: Постройте центроиды кластеров. Это позволит вам увидеть, есть ли характерные формы, которые принимает ваш временной ряд. Эти формы могут помочь в прогнозировании.

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

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

  8. Денормализация предсказанной серии: Используя предсказанные средние и дисперсии, вы можете пересчитать нормализованную серию в исходные данные: ( \text{Итоговая кривая} = \text{Нормализованная кривая} \times \sqrt{\text{Прогнозируемая дисперсия}} + \text{Прогнозируемое среднее} ).

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

Заключение

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

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

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