Долгосрочное прогнозирование ежедневных цен на электроэнергию (пример)

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: == Постановка задачи == У нас есть временной ряд из матрицы <tex>X</tex> признаков и вектора <tex>Y</tex> ответов. ...)
 
(9 промежуточных версий не показаны.)
Строка 1: Строка 1:
 +
Решается задача долгосрочного прогнозирования цен на электроэнергию. Долгосрочное прогнозирование цен является основой для планирования и инвестирования. Для решения задачи рассматривается метод авторегрессии. При построении модели также производится отбор признаков при помощи
 +
[[Метод наименьших углов (пример)|метода наименьших углов]]
 +
{{tip|Полный текст этой работы, [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/Group774/Dzhamtyrova2010Forecasting/doc/Dzhamtyrova10forecasting.pdf PDF]}}
 +
== Постановка задачи ==
== Постановка задачи ==
-
У нас есть временной ряд из матрицы <tex>X</tex> признаков и вектора <tex>Y</tex> ответов. Нам необходимо восстановить вектор ответов <tex>\hat{Y}</tex> по матрице признаков <tex>\hat{X}</tex>. Известно, что временной ряд, который необходимо восстановить идет непосредственно после временного ряда, ответы для которого нам известны.
+
Дан временной ряд <tex>\mathbf{s}_1=[x_1,\ldots,x_{T-1}]^T</tex>, <tex>x\in\mathbb{R}^1</tex> и матрица признаков, столбцами которой являются <tex> \mathbf{s}_2, \mathbf{s}_3 \ldots \mathbf{s}_m</tex>. Необходимо спрогнозировать следующую величину <tex>x_{T}</tex>.
-
Предлагается использовать функционал качества MAPE:
+
Предполагается, что
-
+
-
: <tex>{ Q(\hat{Y}) = \sum_{i=1}^n \frac{|y_i-\hat{y}_i|}{|y_i|}</tex>,
+
-
+
-
где <tex>\hat{Y} = (\hat{y}_1, \hat{y}_2, \dots, \hat{y}_n )</tex> -- восстановленные ответы, а <tex>Y = (y_1, y_2, \dots , y_n)</tex> -- правильные ответы.
+
-
== Описание данных ==
+
1) отсчёты сделаны через равные промежутки времени,
-
У нас есть данные с 01/01/2003 до сегодняшнего дня. Данные для прогнозирования состоят из временного ряда, различных погодных параметров (температура, скорость ветра, относительная влажность, ...) и средних цен на электричество.
+
2) ряд имеет периодическую составляющую,
-
В нашей задаче мы используем следующие данные - матрицу переменных '''xRegression''' и вектор откликов '''yRegression'''. Мы будем обозначать их '''X''' и '''Y''' соответственно. Размер '''X'''
+
3) ряд не имеет пропущенных значений,
-
-- <tex>n\times m</tex>, где <tex>n</tex> -- количество объектов (временной ряд дней), а <tex>m</tex> -- количество переменных. Размер '''Y'''
+
-
-- <tex>n\times 1</tex>.
+
-
Первый столбец <tex>X</tex> и <tex>Y</tex> -- временной ряд. Второй столбец <tex>Y</tex> -- вектор откликов. Они нормализованы на среднегодичное значение. Количество переменных в <tex>X</tex> -- 26. Они представлены в таблице ниже.
+
4) длина ряда кратна периоду <tex>k</tex>.
-
{| class="wikitable" style="text-align: center;"
 
-
|- bgcolor="#cccccc"
 
-
! width=30 % |#
 
-
! width=160 % | Описание
 
-
|-
 
-
| '''1''' || временной ряд
 
-
|-
 
-
| '''2-6''' || день недели
 
-
|-
 
-
| '''7-18''' || месяц
 
-
|-
 
-
| '''19''' || средняя температура
 
-
|-
 
-
| '''20''' || индекс HDD
 
-
|-
 
-
| '''21''' || индексCDD
 
-
|-
 
-
| '''22''' || максимальная температура
 
-
|-
 
-
| '''23''' || минимальная температура
 
-
|-
 
-
| '''24''' || относительная влажность
 
-
|-
 
-
| '''25''' || осадки
 
-
|-
 
-
| '''26''' || скорость ветра
 
-
|-
 
-
|}
 
-
=== Предположения о характере данных ===
 
-
* Предполагается, что отсчеты времени сделаны через равные промежутки.
+
Составляется <tex> (m \times k)</tex>&nbsp;&#151; матрица значений временного ряда:
-
* Предполагается, что ряд имеет периодическую составляющую.
+
<tex>
-
 
+
A =
-
* Предполагается, что ряд имеет пропущенные значения.
+
\left(
-
 
+
\begin{array}{llll}
-
* Предполагается, что длина ряда кратна периоду. Это условие можно достичь, присоединив к началу ряда необходимое число пропущенных значений.
+
x_T & x_{T-1} & \ldots & x_{T-k+1} \\
-
 
+
x_{(m-1)k} & x_{(m-1)k-1} & \ldots & x_{(m-2)k+1} \\
-
В нашем случае, данные имеют ярко выраженную годовую периодическую составляющyю. Это можно проследить на примере данных о средней температуре за день.
+
\ldots & \ldots & \ldots & \ldots \\
-
[[Изображение:Data-mean_temp.png|800px]]Data-mean_temp.png
+
x_{nk} & x_{nk-1} & \ldots & x_{n(k-1)+1} \\
-
 
+
\ldots & \ldots & \ldots & \ldots \\
-
 
+
x_k & x_{k-1} & \ldots & x_1 \\
-
 
+
\end{array}
-
==Пути решения задачи==
+
\right),
-
 
+
</tex>
-
 
+
в которой длина ряда <tex> T= mk </tex>.
-
* Данные имеют годовую периодику. Будем выполнять прогноз с горизонтом прогноза, равным длине периода, при помощи авторегрессии.
+
-
 
+
-
* Параметры модели, с помощью которых выполняется прогноз вектора Y, находятся с помощью алгоритма [[Метод наименьших углов (пример)|LARS]].
+
-
 
+
-
===Авторегрессия===
+
-
 
+
-
Построение авторегрессионной матрицы. Дан временной ряд <tex>
+
-
x=\begin{Vmatrix}
+
-
x_1 \\
+
-
x_2 \\
+
-
\vdots \\
+
-
x_T
+
-
\end{Vmatrix}
+
-
</tex>.
+
-
 
+
-
Составляется <tex> (m {X} k) </tex> -матрица значений временного ряда:
+
<tex>
<tex>
-
X=\begin{Vmatrix}
+
A =
-
x_T & x_T-1 \cdots & x_T-k+1 \\
+
\left(
-
x_(m-1)k & x_(m-1)k-1 \cdots & x_(m-2)k+1 \\
+
\begin{array}{l|lll}
-
\vdots
+
x_T & x_{T-1} & \ldots & x_{T-k+1} \\
-
\\
+
\hline\\
-
x_k & x_k-1 \cdots & x_1\\
+
x_{(m-1)k} & x_{(m-1)k-1} & \ldots & x_{(m-2)k+1} \\
-
\end{Vmatrix}
+
\ldots & \ldots & \ldots & \ldots \\
-
</tex>, в которой длина ряда <tex> T= mk </tex>.
+
x_{nk} & x_{nk-1} & \ldots & x_{n(k-1)+1} \\
-
 
+
\ldots & \ldots & \ldots & \ldots \\
-
Обозначим столбцы матрицы <tex> x_k, \cdots x_1\\ </tex>. Для каждого столбца <tex> i </tex> матрицы <tex> X </tex> построим набор моделей-предикатов. Для это зафиксируем столбец <tex> x_i </tex> , считая, что прогнозируеем значение ряда в момент времени <tex> i+k </tex>.
+
x_k & x_{k-1} & \ldots & x_1 \\
-
 
+
\end{array}
-
Для каждого из прочих столбцов <tex> x_j, j= 1 \cdots ,k\\ </tex> решим задачу линейной регрессии <tex> |x_i-\mathbf{G_jw}\|^2\longrightarrow\min </tex>, где матрица
+
\right).
 +
</tex>
 +
Введём обозначения
<tex>
<tex>
-
X=\begin{Vmatrix}
+
A=
-
g_1(x_mj) & g_2(x_mj) \cdots & g_r(x_mj) \\
+
\left(
-
g_1(x_(m-1)j & g_2(x_(m-1)j) \cdots & g_r(x_(m-1)j \\
+
\begin{array}{l|l}
-
\vdots
+
x_T & \mathbf{x}^T\\
-
\\
+
\hline \\
-
g_1(x_j) & g_2(x_j) \cdots & g_r(x_j)\\
+
\mathbf{y} & X \\
-
\end{Vmatrix}
+
\end{array}
 +
\right).
</tex>
</tex>
-
Функции <tex> g_1, \cdots , g_r </tex> заданы или определены, исходя из дополнительных условий.
 
-
Выбирается заданное число <tex> p </tex> векторов <tex> G_jw </tex> , доставляющих наибольшее значение функционалу качества. Обозначим <tex> P </tex> - множество выбранных индексов <tex> {j} </tex>. Строится корректор над множеством моделей-предикатов- линейная регрессия <tex> |x_i-\mathbf{H_pb}\|^2\longrightarrow\min </tex> с ограничением на неотрицательность векторов <tex> b </tex>. Матрица <tex> H_p </tex> - присоединённые векторы <tex> G_jw </tex>. Прогнозируемое значение ряда <tex> x </tex> в момент времени <tex> k+i </tex> равно значению первого элемента вектора <tex> H_pb </tex>.
+
В случае, когда учитываются временные ряды <tex> \mathbf{s}_1, \mathbf{s}_2 \cdots \mathbf{s}_m</tex>, для каждого <tex>j</tex>-го временного ряда строится матрица <tex>S_j</tex> и присоединяется справа. Полученная матрица <tex> A= \begin{bmatrix} S_1 & S_2 & \cdots & S_m \end{bmatrix} .</tex>
 +
Пусть задан набор функций <tex>G=\{g_1,\ldots,g_r\}</tex>, например,
 +
<tex>g_1=1, g_2=\sqrt{x}, g_3=x, g_4=x\sqrt{x}</tex>. Матрица порождённых признаков
-
==Вычислительный эксперимент==
+
<tex>
 +
A =
 +
\left(
 +
\begin{array}{l|lllllll}
 +
x_T & g_1\circ x_{T-1} & \ldots & g_r\circ x_{T-1} & \ldots & g_1\circ x_{T-k+1} & \ldots & g_r\circ x_{T-k+1}\\
 +
\hline\\
 +
x_{(m-1)k} & g_1\circ x_{(m-1)k-1}& \ldots & g_r\circ x_{(m-1)k-1} & \ldots & g_1\circ x_{(m-2)k+1} & \ldots & g_r\circ x_{(m-2)k+1} \\
 +
\ldots & \ldots & \ldots & \ldots & \ldots & \ldots & \ldots & \ldots\\
 +
x_{nk} & g_1\circ x_{nk-1} & \ldots & g_r\circ x_{nk-1} & \ldots & g_1\circ x_{n(k-1)+1} & \ldots & g_r\circ x_{n(k-1)+1}\\
 +
\ldots & \ldots & \ldots & \ldots & \ldots & \ldots & \ldots & \ldots\\
 +
x_k & g_1\circ x_{k-1} & \ldots & g_r\circ x_{k-1} & \ldots & g_1\circ x_1 & \ldots & g_r\circ x_1\\
 +
\end{array}
 +
\right).
 +
</tex>
-
===Авторегрессия===
+
==Пути решения задачи==
 +
Требуется решить задачу линейной регресии <tex>|X\mathbf{w}-\mathbf{y}\|^2\longrightarrow\min. </tex>
 +
Требуется найти такие параметры <tex>\mathbf{w}</tex>, которые доставляют минимум норме вектора невязок <tex>X\mathbf{w}-\mathbf{y}</tex>.
-
Выборка разбивается на обучающую и тестовую. Тестовой выборкой являются данные за последний год. Прогнозирование выполняется с помощью построения авторегрессионной матрицы. На примере нескольких временных рядом посмотрим, как реальные данные соотносятся с прогнозируемыми.
+
<tex> \mathbf{w}=(X^TX)^{-1}(X^T\mathbf{y}).</tex>
-
====Cредняя температура====
+
В терминах линейной регрессии
-
[[Изображение:Mean temp.png#filelinks|800px]]
+
<tex>\mathbf{y}= X\mathbf{w}</tex>
-
====Минимальная температура====
+
<tex>y_T= <\mathbf{x}^{T}, \mathbf{w}></tex>
-
[[Изображение:Low temp.png#filelinks|800px]]
+
Возможны два подхода к нахождению значения <tex>x_T</tex>. Первый заключается в последовательном построении прогнозируемых значений. В качестве вектора <tex>\mathbf{x}^{T}</tex> выбираюся <tex>K-1</tex> предыдущих значений временного ряда, и для каждого следующего значения <tex>x_{T+1}, x_{T+2}, ..., x_{T+l}</tex> необходимо заново строить авторегрессионную матрицу <tex>X</tex>. Второй подход заключается в прогнозировании периода ряда по предыдущему. В качестве вектора <tex>\mathbf{x}^{T}</tex> выбираются <tex>K-1</tex> значений ряда предшествующего периода. При данном подходе перестраивать авторегрессионную матрицу <tex>X</tex> не нужно.
-
====Индекс HDD====
+
При увеличении числа признаков (в случае добавления столбцов <tex>\mathbf{s}_2..., \mathbf{s}_m)</tex> необходимо уменьшить размерность пространства засчёт отбора признаков. В качестве алгоритма отбора признаков выбран [[Метод наименьших углов (пример)|метод наименьших углов]]. Проверяется, улучшает ли отбор признаков прогнозирование.
-
[[Изображение:Heating days.png#filelinks|800px]]
 
-
 
-
====Осадки====
 
-
 
-
[[Изображение:Precipitation.png#filelinks|800px]]
 
-
 
-
 
-
===LARS===
 
-
 
-
Выборка разбивается на обучающую и тестовую. Тестовой выборкой являются данные за последний год. Вектор Y находим с помощью алгоритма LARS.Проверим, насколько реальные данные соотносятся с прогнозируемыми.
 
-
 
-
====График LARS====
 
-
 
-
[[Изображение:Price.png#filelinks|800px]]
 
-
 
-
====График MAPE====
 
-
 
-
[[Изображение:Mape.png#filelinks|800px]]
 
-
 
-
==Код==
 
-
 
-
 
-
[https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/electricity%20forcasting/autoregression.m autoregression.m]
 
-
 
-
 
-
[https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/FeatureSelectionStep/lars.m lars.m]
 
==Смотри также==
==Смотри также==
-
 
+
* Полный текст этой работы, [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/Group774/Dzhamtyrova2010Forecasting/doc/Dzhamtyrova10forecasting.pdf PDF]
-
* [[Прогнозирование ежедневных цен на электроэнергию (отчет)]]
+
* Исходный код вычислительного эксперимента [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/Group774/Dzhamtyrova2010Forecasting]
-
* [[Метод наименьших углов (пример)|Метод наименьших углов]]
+
==Литература==
==Литература==
Строка 167: Строка 112:
|ссылка = http://www3.iam.metu.edu.tr/iam/images/9/9b/Strijov-ankara.pdf
|ссылка = http://www3.iam.metu.edu.tr/iam/images/9/9b/Strijov-ankara.pdf
|заглавие = Model Generation and its Applications in Financial Sector
|заглавие = Model Generation and its Applications in Financial Sector
 +
|издательство = Middle East Technical University
|год = 2009
|год = 2009
}}
}}
Строка 178: Строка 124:
|автор = Стрижов В.В
|автор = Стрижов В.В
|заглавие = Методы выбора регрессионных моделей
|заглавие = Методы выбора регрессионных моделей
 +
|издательство = ВЦ РАН
|год = 2010
|год = 2010
}}
}}
Строка 186: Строка 133:
|год = 2006
|год = 2006
}}
}}
 +
# {{книга
 +
|автор = Hsiao-Tien Pao
 +
|ссылка = http://www.springerlink.com/content/h422246780708564
 +
|заглавие = A Neural Network Approach to m-Daily-Ahead Electricity Price Prediction
 +
|год = 2006
 +
}}
 +
# {{книга
 +
|автор = Wei Wu, Jianzhong Zhou,Li Mo and Chengjun Zhu
 +
|ссылка = http://www.springerlink.com/content/m321712571941311/
 +
|заглавие = Forecasting Electricity Market Price Spikes Based on Bayesian Expert with Support Vector Machines
 +
|год = 2006
 +
}}
 +
 +
{{ЗаданиеВыполнено|Раиса Джамтырова|В.В.Стрижов|24 декабря 2010|Раиса Джамтырова|Strijov}}
 +
[[Категория:Практика и вычислительные эксперименты]]

Текущая версия

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

Полный текст этой работы, PDF


Содержание

Постановка задачи

Дан временной ряд \mathbf{s}_1=[x_1,\ldots,x_{T-1}]^T, x\in\mathbb{R}^1 и матрица признаков, столбцами которой являются  \mathbf{s}_2, \mathbf{s}_3 \ldots \mathbf{s}_m. Необходимо спрогнозировать следующую величину x_{T}.

Предполагается, что

1) отсчёты сделаны через равные промежутки времени,

2) ряд имеет периодическую составляющую,

3) ряд не имеет пропущенных значений,

4) длина ряда кратна периоду k.


Составляется  (m \times k) — матрица значений временного ряда:


A =
\left(
\begin{array}{llll}
x_T     & x_{T-1}   & \ldots & x_{T-k+1}   \\
x_{(m-1)k} & x_{(m-1)k-1} & \ldots & x_{(m-2)k+1} \\
\ldots  & \ldots    & \ldots & \ldots    \\
x_{nk} & x_{nk-1} & \ldots & x_{n(k-1)+1} \\
\ldots  & \ldots    & \ldots & \ldots    \\
x_k     & x_{k-1}   & \ldots & x_1       \\
\end{array}
\right),
в которой длина ряда  T= mk .


A =
\left(
\begin{array}{l|lll}
x_T     & x_{T-1}   & \ldots & x_{T-k+1}   \\
\hline\\
x_{(m-1)k} & x_{(m-1)k-1} & \ldots & x_{(m-2)k+1} \\
\ldots  & \ldots    & \ldots & \ldots    \\
x_{nk} & x_{nk-1} & \ldots & x_{n(k-1)+1} \\
\ldots  & \ldots    & \ldots & \ldots    \\
x_k     & x_{k-1}   & \ldots & x_1       \\
\end{array}
\right).

Введём обозначения 
A= 
\left(
\begin{array}{l|l}
x_T     & \mathbf{x}^T\\
\hline \\
\mathbf{y} & X \\
\end{array}
\right).


В случае, когда учитываются временные ряды  \mathbf{s}_1, \mathbf{s}_2 \cdots \mathbf{s}_m, для каждого j-го временного ряда строится матрица S_j и присоединяется справа. Полученная матрица  A= \begin{bmatrix} S_1 & S_2 & \cdots & S_m \end{bmatrix} .

Пусть задан набор функций G=\{g_1,\ldots,g_r\}, например,

g_1=1, g_2=\sqrt{x}, g_3=x, g_4=x\sqrt{x}. Матрица порождённых признаков


A =
\left(
\begin{array}{l|lllllll}
x_T  & g_1\circ x_{T-1}    & \ldots & g_r\circ x_{T-1}        & \ldots & g_1\circ x_{T-k+1} & \ldots   & g_r\circ x_{T-k+1}\\
\hline\\
x_{(m-1)k} & g_1\circ x_{(m-1)k-1}& \ldots & g_r\circ x_{(m-1)k-1}   & \ldots & g_1\circ x_{(m-2)k+1} & \ldots & g_r\circ x_{(m-2)k+1} \\
\ldots & \ldots      & \ldots & \ldots        & \ldots & \ldots  & \ldots      & \ldots\\
x_{nk} & g_1\circ x_{nk-1}    & \ldots & g_r\circ x_{nk-1}       & \ldots & g_1\circ x_{n(k-1)+1} & \ldots & g_r\circ x_{n(k-1)+1}\\
\ldots & \ldots      & \ldots & \ldots        & \ldots & \ldots  & \ldots      & \ldots\\
x_k & g_1\circ x_{k-1}     & \ldots & g_r\circ x_{k-1}        & \ldots & g_1\circ x_1  & \ldots         & g_r\circ x_1\\
\end{array}
\right).

Пути решения задачи

Требуется решить задачу линейной регресии |X\mathbf{w}-\mathbf{y}\|^2\longrightarrow\min. Требуется найти такие параметры \mathbf{w}, которые доставляют минимум норме вектора невязок X\mathbf{w}-\mathbf{y}.

 \mathbf{w}=(X^TX)^{-1}(X^T\mathbf{y}).

В терминах линейной регрессии

\mathbf{y}= X\mathbf{w}

y_T=  <\mathbf{x}^{T}, \mathbf{w}>

Возможны два подхода к нахождению значения x_T. Первый заключается в последовательном построении прогнозируемых значений. В качестве вектора \mathbf{x}^{T} выбираюся K-1 предыдущих значений временного ряда, и для каждого следующего значения x_{T+1}, x_{T+2}, ..., x_{T+l} необходимо заново строить авторегрессионную матрицу X. Второй подход заключается в прогнозировании периода ряда по предыдущему. В качестве вектора \mathbf{x}^{T} выбираются K-1 значений ряда предшествующего периода. При данном подходе перестраивать авторегрессионную матрицу X не нужно.

При увеличении числа признаков (в случае добавления столбцов \mathbf{s}_2..., \mathbf{s}_m) необходимо уменьшить размерность пространства засчёт отбора признаков. В качестве алгоритма отбора признаков выбран метод наименьших углов. Проверяется, улучшает ли отбор признаков прогнозирование.


Смотри также

  • Полный текст этой работы, PDF
  • Исходный код вычислительного эксперимента [1]

Литература

  1. Vadim Strijov Model Generation and its Applications in Financial Sector. — Middle East Technical University, 2009.
  2. Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani Least Angle Regression. — 2002.
  3. Стрижов В.В Методы выбора регрессионных моделей. — ВЦ РАН, 2010.
  4. Rafal Weron Modeling and Forecasting Electricity Loads and Prices. — 2006.
  5. Hsiao-Tien Pao A Neural Network Approach to m-Daily-Ahead Electricity Price Prediction. — 2006.
  6. Wei Wu, Jianzhong Zhou,Li Mo and Chengjun Zhu Forecasting Electricity Market Price Spikes Based on Bayesian Expert with Support Vector Machines. — 2006.


Данная статья была создана в рамках учебного задания.
Студент: Раиса Джамтырова
Преподаватель: В.В.Стрижов
Срок: 24 декабря 2010


В настоящее время задание завершено и проверено. Данная страница может свободно правиться другими участниками проекта MachineLearning.ru.

См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.

Личные инструменты