Как да използваме анализ на времеви редове и прогнозиране за справяне с изменението на климата

Това е част 4 от поредицата Времеви серии за изменението на климата. Списък на статиите:

Досега изследвахме колко важно е прогнозирането за интегрирането на чисти енергийни източници в електрическата мрежа.

Прогнозирането също играе ключова роля по отношение на потреблението на енергийните системи.

Балансиране на търсенето и предлагането на енергия

Енергийните системи трябва да гарантират баланса между търсенето и предлагането на енергия по всяко време. Този баланс е критичен за надеждността на електрическата мрежа. Ако търсенето е по-голямо от предлагането, това води до прекъсване на захранването. Когато предлагането надвишава търсенето, има излишък от енергия, който често се губи.

Енергийните системи използват модели за прогнозиране, за да им помогнат да предвидят търсенето на енергия. Точните прогнози за търсенето допринасят за по-ефективно производство и използване на енергия. Това има пряко въздействие върху климата поради намаляването на отпадъците.

Анализирането на потреблението на енергия също е ценно в домакинствата. Например, хората могат да проверят кои уреди консумират повече енергия и да използват тази информация, за да избегнат по-високи разходи по време на пиковите часове. Малко любопитни факти: Изчислено е, че около 8% от търсенето на електроенергия в жилищните сгради идва от консумация на енергия в режим на готовност [4].

Прогнозиране на търсенето на енергия

Прогнозирането на търсенето на енергия е труден проблем.

Консумацията на енергия зависи от няколко фактора, някои от които може да не са лесно достъпни за моделиране. Примерите включват климатични и икономически условия, които влияят върху използването на електронни устройства за отопление или охлаждане. Времето се характеризира със силно променливи модели. Това затруднява прогнозирането на мащаба на влиянието на времето върху търсенето на енергия.

Данните за търсенето на енергия показват сезонни модели в различни времеви мащаби, включително дневни, месечни или годишни мащаби. През зимата, например, търсенето на енергия за отопление се увеличава.

Улавянето на всички сезонни ефекти е важно за изграждането на точни модели за прогнозиране на търсенето на енергия.

Как можеш да правиш това?

Практически: Прогнозиране на търсенето на енергия

В останалата част от тази статия ще разработим модел за прогнозиране на търсенето на енергия. Ще научите как да:

  • анализира множество сезонни ефекти с помощта на автокорелация и визуализация на данни;
  • направете извличане на функции от информацията за дата и час, за да се справите с множество сезонни ефекти.

Пълният код, използван в този урок, е достъпен в Github:

Набор от данни

Ще използваме набор от данни, който представлява почасова консумация на енергия в мегавати в Кентъки, САЩ [1]. Данните са събрани от 2013 г. до 2018 г., което води до общо 45 344 наблюдения.

Ето как изглеждат данните:

Визуализация на сезонността

Графикът по-горе показва, че те са редовни годишни модели в серията.

Друг начин за визуализиране на сезонността е с графика, наречена сезонен график:

Сезонният график улеснява виждането на месечните модели от година на година. Например потреблението на енергия се увеличава през зимните и летните месеци и намалява през пролетта и есента. Това вероятно е свързано с отопление (зимата) или охлаждане (лятото).

Графикът на сезонните подсерии по-долу също е полезен за анализиране на динамиката на данните в рамките на и между месеците:

Анализиране на сезонността с помощта на ACF

Можете също така да използвате автокорелация, за да анализирате сезонността. Сезонните времеви редове ще показват по-висока автокорелация при всяко сезонно забавяне.

Фигурата по-горе показва диаграмата на автокорелацията до 48 закъснения. Автокорелацията показва модел на колебание, който е причинен от дневната сезонност.

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

Авторегресия

Като отправна точка ще разработим авторегресивен модел за прогнозиране на консумацията на енергия. „Можете да проверите предишна публикация за подробности относно този тип моделиране.“

from sklearn.model_selection import train_test_split

from src.tde import time_delay_embedding

# Train / test split
train, test = train_test_split(series, test_size=0.2, shuffle=False)

# using past 12 observations as explanatory variables
N_LAGS = 12
# using the next 12 hours as the forecasting horizon
HORIZON = 12

# transforming time series into a tabular format for supervised learning
X_train, Y_train = time_delay_embedding(train, n_lags=N_LAGS, horizon=HORIZON, return_Xy=True)
X_test, Y_test = time_delay_embedding(test, n_lags=N_LAGS, horizon=HORIZON, return_Xy=True)

Справяне с множество сезонни ефекти

Повечето методи за декомпозиция на времеви редове или прогнозиране са предназначени да обработват един сезонен период.

Тъй като събирането на данни стана евтино, това даде възможност за събиране на времеви редове с висока честота на вземане на проби, като ежедневна или почасова. Високочестотните времеви серии предоставят по-голямо количество данни, „което е важен фактор при обучението на модели за машинно обучение“. И все пак те също съдържат сложни сезонни модели, които могат да бъдат трудни за моделиране.

И така, как се справяте с множеството сезонни ефекти?

Ще приложим два процеса за извличане на функции, за да направим това:

  • извличане на функции въз основа на данни за дата и час;
  • използвайки тригонометрично представяне, базирано на термини на Фурие.

Извличане на функции въз основа на дата и час

Лесен начин за моделиране на множество сезонни модели е да се обобщи информацията за дата и час на всяка времева стъпка. Можете да извлечете съответните периоди, като час или ден от годината, и да ги използвате като обяснителни променливи.

Библиотеката sktime предоставя удобен клас за това:

from sktime.transformations.series.date import DateTimeFeatures

hourly_feats = DateTimeFeatures(ts_freq='H',
                                keep_original_columns=False,
                                feature_scope='efficient')

dtime_train = hourly_feats.fit_transform(X_train)

Ето извадка от резултата:

Тези характеристики могат да бъдат ефективен подход за много времеви редове със сложна сезонност. Но те могат да пропуснат непрекъснатостта на времето. Да предположим например, че кодирате месечната информация в цели числа от 1 (януари) до 12 (декември):

В такъв случай моделът не разбира, че декември предхожда януари. Преобразуването на месечна информация с еднократно кодиране също води до този проблем.

Термини на Фурие

Членовете на Фурие са периодични и детерминистични серии, базирани на синусовидни и косинусови вълни. Плавността на тези условия позволява моделирането на времевата непрекъснатост.

Ето съвместим с sklearn клас за извличане на редове на Фурие:

from datetime import datetime

import numpy as np
import pandas as pd


class FourierTerms:

    def __init__(self, period: float, n_terms: int, prefix=''):
        self.period = period
        self.n_terms = n_terms
        self.prefix = prefix

    def transform(self, index: pd.DatetimeIndex, use_as_index: bool = True):
        t = np.array(
            (index - datetime(1970, 1, 1)).total_seconds().astype(float)
        ) / (3600 * 24.)

        fourier_x = np.column_stack([
            fun((2.0 * (i + 1) * np.pi * t / self.period))
            for i in range(self.n_terms)
            for fun in (np.sin, np.cos)
        ])

        col_names = [
            f'{self.prefix}{fun.__name__[0].upper()}{i}'
            for i in range(self.n_terms)
            for fun in (np.sin, np.cos)
        ]

        fourier_df = pd.DataFrame(fourier_x, columns=col_names)

        if use_as_index:
            fourier_df.index = index

        return fourier_df

Основният вход е сезонният период (напр. 12 за месечни времеви редове), информацията за дата-час и броя на термините. Броят на термините влияе върху гладкостта на представянето. Оптималният брой зависи от входните данни.

Няколко популярни метода използват термините на Фурие за моделиране на сложна сезонност. Те включват „пророк“, „TBATS“, „greykite“ или „променлива във времето регресия“.

Термините на Фурие са включени като обяснителни характеристики, както следва:

fourier_daily = FourierTerms(n_terms=2, period=24, prefix='D_')
fourier_monthly = FourierTerms(n_terms=2, period=24 * 30.5, prefix='M_')
fourier_yearly = FourierTerms(n_terms=2, period=24 * 365, prefix='Y_')

dfourier_train = fourier_daily.transform(X_train.index)
mfourier_train = fourier_monthly.transform(X_train.index)
yfourier_train = fourier_yearly.transform(X_train.index)

feats_train = pd.concat([X_train, dtime_train, dfourier_train,
                         mfourier_train, yfourier_train],
                        axis=1)

model = RandomForestRegressor()
model.fit(feats_train, Y_train)

И така, автоматичната регресия е съчетана с функции, които обобщават данните за датата и часа. Оценките за важност на характеристиките по-долу показват, че те предоставят подходяща информация за модела:

Както в случая с прогнозирането на производството на енергия, моделът на търсенето на енергия става по-малко точен за по-дълги хоризонти:

Ключови изводи

  • Прогнозите за търсене на енергия са от значение за изменението на климата. Те позволяват на енергийните системи да вземат информирани решения и да интегрират чисти енергийни източници в мрежата;
  • Времевите редове на търсенето се влияят от множество фактори и имат сложна сезонност;
  • Можете да се справите с множество сезонни модели, като обобщите информация за дата и час. Термините на Фурие са общ подход за това;
  • Търсенето на енергия е трудно да се предвиди в дългосрочен план, т.е. повече от няколко часа. Подобряването на дългосрочните прогнози е важно за ефективността на енергийните системи.

Благодарим ви, че прочетохте и ще се видим в следващата история!

Препратки

[1] Почасова консумация на енергия от PJM в мегавати (Лиценз: CC0: обществено достояние)

[2] Ролник, Дейвид и др. „Справяне с изменението на климата с машинно обучение.“ ACM Computing Surveys (CSUR) 55.2 (2022): 1–96.

[3] Маккей, Дейвид. Устойчива енергия - без горещ въздух. UIT Кеймбридж, 2008 г.