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

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

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
-
#REDIRECT [[Daily electricity price forecasting (report)]]
+
==Введение==
 +
Эта статья является сильно сокращенным вариантом статьи
 +
[[Daily electricity price forecasting (report)]].
 +
 
 +
== Описание проекта ==
 +
 
 +
=== Цель проекта ===
 +
Цель проекта - прогнозирование ежедневных цен на электричество. Горизонт прогнозирования - один месяц.
 +
=== Обоснование проекта ===
 +
Полученные данные могут быть использованы для хеджинга или другой игры на свободном рынке цен на электричество.
 +
=== Описание данных ===
 +
У нас есть данные с 01/01/2003 до сегодняшнего дня. Данные для прогнозирования состоят из временного ряда, различных погодных параметров (температура, скорость ветра, относительная влажность, ...) и средних цен на электричество.
 +
=== Критерии качества ===
 +
Критерием качества служит скользящий контроль. Мы разбиваем данные на основную выборку - все данные без данных за последний месяц и контрольную выборку - данные за последний месяц. Эту процедуру можно повторить для всех месяцев полседнего года. Целевая функция MAPE (средняя абсолютная ошибка в процентах) для посленего месяца.
 +
=== Требования к проекту ===
 +
Месячная ошибка для нашего алгоритма должна быть меньше ошибки для алгоритма заказчика (LASSO).
 +
=== Выполнимость проекта ===
 +
В данных отсутствует информация о пиках, предсказание которых является отдельной задачей.
 +
=== Используемые методы ===
 +
Мы испольуем предположение о линейной зависимости откликов от признаков или их различных производных. Также модель должна использовать периодичность конечных данных.
 +
== Постановка задачи ==
 +
 
 +
У нас есть временной ряд из матрицы <tex>X</tex> признаков и вектора <tex>Y</tex> ответов. Нам необходимо восстановить вектор ответов <tex>\hat{Y}</tex> по матрице признаков <tex>\hat{X}</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> -- правильные ответы.
 +
 
 +
== Описание алгоритмов ==
 +
 
 +
Для решения предложенной задачи было выбрано 2 алгоритма - [[LARS]] и локальный алгоритм, вариация [[Метод k ближайших соседей (пример)|метода k ближайших соседей]].
 +
Были использованы различные модификации для улучшения работы алгоритма на реальных данных. Мы применяли преобразования начальных признаков, ядерное сглаживание, фильтрацию выбросов и нормализацию.
 +
 
 +
==Описание системы==
 +
 
 +
Цель этого раздела -- описание системной архитектуры проекта.
 +
 
 +
===Общий взгляд на систему===
 +
 
 +
====Описание архитектуры проекта====
 +
 
 +
Мы использовали стандарт <big>IDEF0</big> для описания архитектуры проекта.
 +
 
 +
[[Изображение:EPF S SystemA-0.PNG|400px]]
 +
[[Изображение:EPF S SystemA0.PNG|400px]]
 +
[[Изображение:EPF S SystemA2.PNG|400px]]
 +
 
 +
 
 +
====Описание данных====
 +
 
 +
Для всех алгоритмов мы использовали данные из файла '''
 +
DayElectricityPrice.mat''', содержащего
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=90 % |Name
 +
! width=70 % |Size
 +
! width=120 % | Description
 +
|-
 +
| '''xRegression''' || <tex>[n\times m]</tex> || матрица переменных
 +
|-
 +
| '''yRegression''' || <tex>[n\times 2]</tex> || матрица откликов
 +
|-
 +
|}
 +
 
 +
 
 +
Каждый элемент матрицы -- целое либо действительное число, первый столбец каждой матрицы -- временной ряд.
 +
 
 +
 
 +
Для алгоритмов DOW LARS и LARS мы модифицировали данные следующим образом:
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=90 % |Имя
 +
! width=70 % |Размер
 +
! width=120 % | Описание
 +
|-
 +
| '''trainingX''' || <tex>[n\times m]</tex> || обучающая матрица переменных
 +
|-
 +
| '''trainingY''' || <tex>[n\times 1]</tex> || обучающий вектор откликов
 +
|-
 +
| '''testX''' || <tex>[n\times m]</tex> || контрольная матрица переменных
 +
|-
 +
| '''model''' || <tex>[10\times 1]</tex> || вектор параметров алгоритма
 +
|-
 +
|}
 +
 
 +
Для локального алгоритма Федоровой мы использовали следующие структуры:
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=90 % |Имя
 +
! width=70 % |Размер
 +
! width=120 % |Описание
 +
|-
 +
| '''trainingY''' || <tex>[n\times 1]</tex> || обучающий вектор откликов
 +
|-
 +
| '''testX''' || ''int'' || горизонт прогнозирования
 +
|-
 +
| <tex>[k,\lambda]</tex> || <tex>[int,\mathbb{R}]</tex> || параметры алгоритма
 +
|-
 +
|}.
 +
 
 +
 
 +
===Описание модулей===
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=90 % |Алгоритм
 +
! width=100 % |MATLab файл
 +
! width=120 % | Описание
 +
|-
 +
| '''LARS''' || LARS.m,modLARS.m || реализует LARS
 +
|-
 +
| '''Local algorithm Fedorovoy''' || kMeans.m || реализует LAF
 +
|-
 +
|}
 +
 
 +
 
 +
Каждый модуль снабжен комментариями и файлом '''Demo.m''' -- демонстрация возможностей его работы.
 +
 
 +
 
 +
 
 +
==Отчет о вычислительном эксперименте==
 +
 
 +
===Визуальный анализ===
 +
 
 +
====Модельные данные====
 +
 
 +
Проверим корректность работы LARS на модельных данных и его свойство ухудшать прогноз для плохо обусловленных матриц. Модельные данные создаются на основе кода, приведенного ниже:
 +
 
 +
<code>
 +
n = 100;
 +
m = 20;
 +
X = e*ones(n,m)+(1-e)*[diag(ones(m,1));zeros(n-m,m)];
 +
beta = (rand(m,1)-0.5);
 +
Y = X*beta;
 +
X = X + (rand(n,m) - 0.5)/10;
 +
 
 +
</code>
 +
 
 +
 
 +
 
 +
Для различных значений <tex>e</tex> мы получили плохо и хорошо обусловленные матрицы. Мы использовали <tex>e=0.1k, k=\overline{1,10}</tex>. Для небольших значений <tex>e</tex> матрица хорошо обусловлена и имеет практически нулевую корреляцию признаков. Для значений <tex>e</tex> близких к 1, мы получим матрицу состоящую только из единиц с небольшим шумом. Она плохо обусловлена. Направления векторов корреляции почти совпадают.
 +
 
 +
[[Изображение:EPF_10e=0.png|400px]]
 +
[[Изображение:EPF_10e=1.png|400px]]
 +
[[Изображение:EPF_10e=5.png|400px]]
 +
[[Изображение:EPF_10e=8.png|400px]]
 +
[[Изображение:EPF_10e=9.png|400px]]
 +
[[Изображение:EPF_10e=10.png|400px]]
 +
 
 +
Эксперимент показывает, что реализованный нами алгоритм обладает предложенным свойством.
 +
 
 +
====Описание данных====
 +
 
 +
В нашей задаче мы используем следующие данные - матрицу переменных '''xRegression''' и вектор откликов '''yRegression'''. Мы будем обозначать их '''X''' и '''Y''' соответственно. Размер '''X'''
 +
-- <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. Они представлены в таблице ниже.
 +
 
 +
{| 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''' || скорость ветра
 +
|-
 +
|}
 +
 
 +
====Эксперимент с LARS====
 +
 
 +
Для данных нашей задачи мы провели ряд вычислительных экспериментов. Для каждого эксперимента мы посчитали MAPE.
 +
 
 +
В первом случае мы использовали для решения задачи обычный LARS и не модифицированные данные.
 +
 
 +
<code>
 +
model = [1,1,0,0,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF SC LARSresults.png|600px]]
 +
[[Изображение:EPF SC MAPEresults.png|600px]]
 +
 
 +
Среднее значение MAPE для всех месяцев -- 16.64%.
 +
 
 +
Во втором эксперименте мы модифицировали матрицу признаков, добавив квадраты и корни начальных переменных.
 +
 
 +
<code>
 +
model = [1,1,1,0,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF AV LARSresults.png|600px]]
 +
[[Изображение:EPF AV MAPEresults.png|600px]]
 +
 
 +
Средняя MAPE для всех месяцев равняется 17.20%.
 +
 
 +
В третьем эксперименте мы использовали сглаженные и индикаторные переменные.
 +
 
 +
<code>
 +
model = [1,0,0,1,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF SS LARSresults.png|600px]]
 +
[[Изображение:EPF SS MAPEresults.png|600px]]
 +
 
 +
Средняя MAPE получилась равной 17.16%.
 +
 
 +
В следующем эксперименте мы использовали сглаженные и сглаженные квадраты переменных.
 +
 
 +
<code>
 +
model = [1,0,0,1,1,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF CS LARSresults.png|600px]]
 +
[[Изображение:EPF CS MAPEresults.png|600px]]
 +
 
 +
MAPE -- 19.2%.
 +
 
 +
В последнем эксперименте этого раздела мы использовали и сглаженные, и не сглаженные значения переменных
 +
 
 +
<code>
 +
model = [1,1,1,1,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF CSS LARSresults.png|600px]]
 +
[[Изображение:EPF CSS MAPEresults.png|600px]]
 +
 
 +
Мы получили MAPE 16.89% в этом эксперименте.
 +
 
 +
Полученные результаты позволяют говорить о том, что для такого набора переменных значение MAPE -- между 16% и 18%. Сглаживание не способно сильно повлиять на ситуацию. Необходимо попробовать исключить выбросы из данных, что бы улучшить прогноз.
 +
 
 +
====Фильтрация выбросов====
 +
 
 +
В этом разделе мы использовали фильтрацию выбросов. Для оптимизации параметров фильтрации использовалась двухмерная оптимизация.
 +
 
 +
В первом эксперименте мы использовали начальный набор переменных и фильтацию.
 +
 
 +
<code>
 +
model = [1,1,0,0,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF P SimplePicks.png|600px]]
 +
 
 +
Минимальная MAPE равнаs 15.45\%( в точке
 +
<tex>\{r_1,r_2\}=\{0.5,0.7\}</tex>). Мы получили меньшее значение MAPE , чем раньше.
 +
 
 +
В следующем эксперименте мы использовали модифицированные и сглаженные переменные.
 +
 
 +
<code>
 +
model = [1,1,1,1,0,0,0,0,0]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF P CompliPicks.png|600px]]
 +
 
 +
У функции MAPE локальный минимум в точке <tex>\{r_1,r_2\}=\{0.8,1.0\}</tex>,
 +
значение функции -- 15.29%. Ниже представлены результаты для оптимальных параметров фильтрации.
 +
 
 +
[[Изображение:EPF P LARSresults.png|600px]]
 +
[[Изображение:EPF P MAPEresults.png|600px]]
 +
 
 +
Мы получили результат лучше, чем в предыдущем разделе.
 +
 
 +
====Авторегрессия====
 +
 
 +
Давайте применим авторегрессию к решению этой задачи.
 +
 
 +
Как и раньше, для оптимизации мы используем двухмерную оптимизацию.
 +
 
 +
 
 +
[[Изображение:EPF auto autoPicks.png|600px]]
 +
 
 +
Минимум значения MAPE -- в точке <tex>\{r_1,r_2\}=\{0.7,0.8\}</tex>.
 +
Он равен 13.31%.
 +
 
 +
<code>
 +
model = [1,1,1,1,0,0,0,0.7,0.8]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF auto LARSresults.png|600px]]
 +
[[Изображение:EPF auto MAPEresults.png|600px]]
 +
 
 +
 
 +
Для каждого месяца:
 +
 
 +
[[Изображение:EPF EM LARSresults1.png|400px]]
 +
[[Изображение:EPF EM LARSresults2.png|400px]]
 +
[[Изображение:EPF EM LARSresults3.png|400px]]
 +
[[Изображение:EPF EM LARSresults4.png|400px]]
 +
[[Изображение:EPF EM LARSresults5.png|400px]]
 +
[[Изображение:EPF EM LARSresults6.png|400px]]
 +
[[Изображение:EPF EM LARSresults7.png|400px]]
 +
[[Изображение:EPF EM LARSresults8.png|400px]]
 +
[[Изображение:EPF EM LARSresults9.png|400px]]
 +
[[Изображение:EPF EM LARSresults10.png|400px]]
 +
[[Изображение:EPF EM LARSresults11.png|400px]]
 +
[[Изображение:EPF EM LARSresults12.png|400px]]
 +
 
 +
Этот результат -- лучший из полученных нами.
 +
 
 +
====Набор моделей для каждого дня недели====
 +
 
 +
В данном разделе мы используем периодику предложенных данных для создания более точного прогноза. Для каждого мы построим отдельную модель регрессии.
 +
 
 +
<code>
 +
model = [1,1,1,1,0,0,0,0,0,s]; % model parameters
 +
</code>
 +
 
 +
<tex>S</tex> -- множитель для создания обучающей выборки. Ее размер
 +
-- <tex>5\cdot s</tex>.
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=90 % |Control set size
 +
! width=30 % | 4
 +
! width=30 % | 8
 +
! width=30 % | 12
 +
! width=30 % | 16
 +
! width=30 % | 20
 +
! width=30 % | 24
 +
! width=30 % | 28
 +
! width=30 % | 32
 +
! width=30 % | 36
 +
! width=30 % | 40
 +
 
 +
|-
 +
| '''MAPE rate''' || 0.1740 || 0.1860 || 0.1790 || 0.1897 || 0.184 || 0.1826 || 0.1882 || 0.1831 || 0.1846 || 0.195
 +
|-
 +
|}
 +
 
 +
 
 +
Мы видим, что улучшения за счет использования периодичности данных путем создания отдельных моделей для каждого дня недели добиться не удается.
 +
 
 +
Попробуем удалить выбросы из выборки и снова применить данную идею.
 +
 
 +
 
 +
[[Изображение:EPF AD AutoPicks.png|600px]]
 +
 
 +
 
 +
MAPE равняется 14.79\%.
 +
 
 +
<code>
 +
model = [1,1,1,0,0,0,6,0.3,0.3,1]; % model parameters
 +
</code>
 +
 
 +
[[Изображение:EPF AD LARSresults.png|600px]]
 +
[[Изображение:EPF AD MAPEresults.png|600px]]
 +
 
 +
Нам не удалось добиться улучшения качества прогнозирования путем создания отдельной модели для каждого дня недели.
 +
 
 +
====Локальный алгоритм Федоровой====
 +
For algorithm Fedorovoy we don't use any additional
 +
hypotheses except described in works \cite{[11]},\cite{[12]}.
 +
Results for this algorithm are worse, that result for different
 +
LARS variations. Main complications in our data for this algorithm
 +
are big noises and spikes in learning and test data set and weak
 +
dependence future data from past. Motivation to use this algorithm
 +
is periodics in our data.
 +
 
 +
Мы используем алгоритм из работ (11) и (12). Мотивация для его использования -- наличие периодик в наших данных. Проблема в его использовании -- наличие выбросов и шума в наших данных. В итоге мы получили результаты хуже, чем результаты для LARS.
 +
 
 +
Процедура оптимизации параметров алгоритма быстро сходится и дает результаты, представленные ниже.
 +
 
 +
[[Изображение:EPF L KNNresults.png|600px]]
 +
[[Изображение:EPF L MAPEresults.png|600px]]
 +
 
 +
MAPE равняется 20.43%.
 +
 
 +
===Сравнение алгоритмов===
 +
 
 +
Подведем итог нашей работы. Вынесем результата работы наших алгоритмов в таблицу
 +
 
 +
{| class="wikitable" style="text-align: center;"
 +
|- bgcolor="#cccccc"
 +
! width=80 % |Algorithm
 +
! width=50 % | LARS
 +
! width=50 % | RS LARS
 +
! width=50 % | RS and autoLARS
 +
! width=50 % | DOW LARS
 +
! width=50 % | LAF
 +
|-
 +
| '''MAPE''' || 16.64% || 15.29% || 13.31% || 14.79% || 20.43%
 +
|-
 +
|}
 +
 
 +
 
 +
Две основные трудности при попытке создания регрессионных моделей для наших данных -- наличие выбросов, резких скачков в векторе ответов и слабая корреляция между представленными матрицами переменных и откликов.
 +
 
 +
==Отчет о результатах==
 +
 
 +
Для нашего лучшего алгоритма мы уменьшили MAPE на 5% по отношению к начальному алгоритму (Мы получили 13.31% по сравнению с начальными 17%). Что бы решить эту задачу мы применили различные дополнительные эвристики и модификации к LARS. Так же мы создали реализацию локального алгоритма к ближайших соседей и сравнили результаты работы наших алгоритмов с его результатом работы.
 +
 
 +
==Смотри также==
 +
 
 +
[[Daily electricity price forecasting (report)]]
 +
 
 +
 
 +
== Литература ==
 +
 
 +
# {{книга
 +
|автор = 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
 +
}}
 +
# {{книга
 +
|автор = S.Borovkova, J.Permana
 +
|ссылка = http://www.springerlink.com/content/x808q22h14q2w070/
 +
|заглавие = Modelling electricity prices by the potential jump-diffusion
 +
|год = 2006
 +
}}
 +
# {{книга
 +
|автор = R.Weron, A.Misiorek
 +
|ссылка = http://mpra.ub.uni-muenchen.de/10428
 +
|заглавие = Forecasting spot electricity prices: A comparison of parametric and semiparametric time series models
 +
|год = 2008
 +
}}
 +
# {{книга
 +
|автор = J.Cherry, H.Cullen, M.Vissbeck, A.Small and C.Uvo
 +
|ссылка = http://www.springerlink.com/content/y3507q34185g7752
 +
|заглавие = Impacts of the North Atlantic Oscillation on Scandinavian Hydropower Production and Energy Markets
 +
|год = 2005
 +
}}
 +
# {{книга
 +
|автор = Yuji Yamada
 +
|ссылка = http://www.springerlink.com/content/b21h50524w1w5413
 +
|заглавие = Optimal Hedging of Prediction Errors Using Prediction Errors
 +
|год = 2008
 +
}}
 +
# {{книга
 +
|ссылка = http://en.wikipedia.org/Energy_in_germany
 +
|заглавие = Wikipedia
 +
}}
 +
# {{книга
 +
|автор = Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani
 +
|ссылка = http://www-stat.stanford.edu/~tibs/ftp/lars.pdf
 +
|заглавие = Least Angle Regression
 +
|год = 2002
 +
}}
 +
# {{книга
 +
|автор = Robert Tibshirani
 +
|ссылка = http://www-stat.stanford.edu/~tibs/lasso/lasso.pdf
 +
|заглавие = Regression shrinkage selection and via the LASSO
 +
|год = 1996
 +
}}
 +
# {{книга
 +
|автор = Vadim Strijov
 +
|ссылка = http://www3.iam.metu.edu.tr/iam/images/9/9b/Strijov-ankara.pdf
 +
|заглавие = Model Generation and its Applications in Financial Sector
 +
|год = 2009
 +
}}
 +
# {{книга
 +
|автор = J. McNames
 +
|ссылка = http://web.cecs.pdx.edu/~mcnames/Publications/Dissertation.pdf
 +
|заглавие = Innovations in local modeling for time series prediction
 +
|год = 1996
 +
}}
 +
# {{книга
 +
|автор = В. Федорова
 +
|заглавие = Локальные методы прогнозирования временных рядов
 +
|год = 2009
 +
}}
 +
 
 +
{{Задание|Зайцев Алексей|В.В. Стрижов|15 декабря 2009|Likz|Strijov|}}
 +
__NOTOC__

Версия 08:36, 15 февраля 2010

Введение

Эта статья является сильно сокращенным вариантом статьи Daily electricity price forecasting (report).

Описание проекта

Цель проекта

Цель проекта - прогнозирование ежедневных цен на электричество. Горизонт прогнозирования - один месяц.

Обоснование проекта

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

Описание данных

У нас есть данные с 01/01/2003 до сегодняшнего дня. Данные для прогнозирования состоят из временного ряда, различных погодных параметров (температура, скорость ветра, относительная влажность, ...) и средних цен на электричество.

Критерии качества

Критерием качества служит скользящий контроль. Мы разбиваем данные на основную выборку - все данные без данных за последний месяц и контрольную выборку - данные за последний месяц. Эту процедуру можно повторить для всех месяцев полседнего года. Целевая функция MAPE (средняя абсолютная ошибка в процентах) для посленего месяца.

Требования к проекту

Месячная ошибка для нашего алгоритма должна быть меньше ошибки для алгоритма заказчика (LASSO).

Выполнимость проекта

В данных отсутствует информация о пиках, предсказание которых является отдельной задачей.

Используемые методы

Мы испольуем предположение о линейной зависимости откликов от признаков или их различных производных. Также модель должна использовать периодичность конечных данных.

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

У нас есть временной ряд из матрицы X признаков и вектора Y ответов. Нам необходимо восстановить вектор ответов \hat{Y} по матрице признаков \hat{X}. Известно, что временной ряд, который необходимо восстановить идет непосредственно после временного ряда, ответы для которого нам известны.

Предлагается использовать функционал качества MAPE:

{ Q(\hat{Y}) = \sum_{i=1}^n \frac{|y_i-\hat{y}_i|}{|y_i|},

где \hat{Y} = (\hat{y}_1, \hat{y}_2, \dots, \hat{y}_n ) -- восстановленные ответы, а Y = (y_1, y_2, \dots , y_n) -- правильные ответы.

Описание алгоритмов

Для решения предложенной задачи было выбрано 2 алгоритма - LARS и локальный алгоритм, вариация метода k ближайших соседей. Были использованы различные модификации для улучшения работы алгоритма на реальных данных. Мы применяли преобразования начальных признаков, ядерное сглаживание, фильтрацию выбросов и нормализацию.

Описание системы

Цель этого раздела -- описание системной архитектуры проекта.

Общий взгляд на систему

Описание архитектуры проекта

Мы использовали стандарт IDEF0 для описания архитектуры проекта.


Описание данных

Для всех алгоритмов мы использовали данные из файла DayElectricityPrice.mat, содержащего

Name Size Description
xRegression [n\times m] матрица переменных
yRegression [n\times 2] матрица откликов


Каждый элемент матрицы -- целое либо действительное число, первый столбец каждой матрицы -- временной ряд.


Для алгоритмов DOW LARS и LARS мы модифицировали данные следующим образом:

Имя Размер Описание
trainingX [n\times m] обучающая матрица переменных
trainingY [n\times 1] обучающий вектор откликов
testX [n\times m] контрольная матрица переменных
model [10\times 1] вектор параметров алгоритма

Для локального алгоритма Федоровой мы использовали следующие структуры:

Имя Размер Описание
trainingY [n\times 1] обучающий вектор откликов
testX int горизонт прогнозирования
[k,\lambda] [int,\mathbb{R}] параметры алгоритма
.


Описание модулей

Алгоритм MATLab файл Описание
LARS LARS.m,modLARS.m реализует LARS
Local algorithm Fedorovoy kMeans.m реализует LAF


Каждый модуль снабжен комментариями и файлом Demo.m -- демонстрация возможностей его работы.


Отчет о вычислительном эксперименте

Визуальный анализ

Модельные данные

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

n = 100;
m = 20;
X = e*ones(n,m)+(1-e)*[diag(ones(m,1));zeros(n-m,m)];
beta = (rand(m,1)-0.5);
Y = X*beta;
X = X + (rand(n,m) - 0.5)/10;


Для различных значений e мы получили плохо и хорошо обусловленные матрицы. Мы использовали e=0.1k, k=\overline{1,10}. Для небольших значений e матрица хорошо обусловлена и имеет практически нулевую корреляцию признаков. Для значений e близких к 1, мы получим матрицу состоящую только из единиц с небольшим шумом. Она плохо обусловлена. Направления векторов корреляции почти совпадают.

Эксперимент показывает, что реализованный нами алгоритм обладает предложенным свойством.

Описание данных

В нашей задаче мы используем следующие данные - матрицу переменных xRegression и вектор откликов yRegression. Мы будем обозначать их X и Y соответственно. Размер X -- n\times m, где n -- количество объектов (временной ряд дней), а m -- количество переменных. Размер Y -- n\times 1.

Первый столбец X и Y -- временной ряд. Второй столбец Y -- вектор откликов. Они нормализованы на среднегодичное значение. Количество переменных в X -- 26. Они представлены в таблице ниже.

# Описание
1 временной ряд
2-6 день недели
7-18 месяц
19 средняя температура
20 индекс HDD
21 индексCDD
22 максимальная температура
23 минимальная температура
24 относительная влажность
25 осадки
26 скорость ветра

Эксперимент с LARS

Для данных нашей задачи мы провели ряд вычислительных экспериментов. Для каждого эксперимента мы посчитали MAPE.

В первом случае мы использовали для решения задачи обычный LARS и не модифицированные данные.

model = [1,1,0,0,0,0,0,0,0]; % model parameters

Среднее значение MAPE для всех месяцев -- 16.64%.

Во втором эксперименте мы модифицировали матрицу признаков, добавив квадраты и корни начальных переменных.

model = [1,1,1,0,0,0,0,0,0]; % model parameters

Средняя MAPE для всех месяцев равняется 17.20%.

В третьем эксперименте мы использовали сглаженные и индикаторные переменные.

model = [1,0,0,1,0,0,0,0,0]; % model parameters

Средняя MAPE получилась равной 17.16%.

В следующем эксперименте мы использовали сглаженные и сглаженные квадраты переменных.

model = [1,0,0,1,1,0,0,0,0]; % model parameters

MAPE -- 19.2%.

В последнем эксперименте этого раздела мы использовали и сглаженные, и не сглаженные значения переменных

model = [1,1,1,1,0,0,0,0,0]; % model parameters

Мы получили MAPE 16.89% в этом эксперименте.

Полученные результаты позволяют говорить о том, что для такого набора переменных значение MAPE -- между 16% и 18%. Сглаживание не способно сильно повлиять на ситуацию. Необходимо попробовать исключить выбросы из данных, что бы улучшить прогноз.

Фильтрация выбросов

В этом разделе мы использовали фильтрацию выбросов. Для оптимизации параметров фильтрации использовалась двухмерная оптимизация.

В первом эксперименте мы использовали начальный набор переменных и фильтацию.

model = [1,1,0,0,0,0,0,0,0]; % model parameters

Минимальная MAPE равнаs 15.45\%( в точке \{r_1,r_2\}=\{0.5,0.7\}). Мы получили меньшее значение MAPE , чем раньше.

В следующем эксперименте мы использовали модифицированные и сглаженные переменные.

model = [1,1,1,1,0,0,0,0,0]; % model parameters

У функции MAPE локальный минимум в точке \{r_1,r_2\}=\{0.8,1.0\}, значение функции -- 15.29%. Ниже представлены результаты для оптимальных параметров фильтрации.

Мы получили результат лучше, чем в предыдущем разделе.

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

Давайте применим авторегрессию к решению этой задачи.

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


Минимум значения MAPE -- в точке \{r_1,r_2\}=\{0.7,0.8\}. Он равен 13.31%.

model = [1,1,1,1,0,0,0,0.7,0.8]; % model parameters


Для каждого месяца:

Этот результат -- лучший из полученных нами.

Набор моделей для каждого дня недели

В данном разделе мы используем периодику предложенных данных для создания более точного прогноза. Для каждого мы построим отдельную модель регрессии.

model = [1,1,1,1,0,0,0,0,0,s]; % model parameters

S -- множитель для создания обучающей выборки. Ее размер -- 5\cdot s.

Control set size 4 8 12 16 20 24 28 32 36 40
MAPE rate 0.1740 0.1860 0.1790 0.1897 0.184 0.1826 0.1882 0.1831 0.1846 0.195


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

Попробуем удалить выбросы из выборки и снова применить данную идею.



MAPE равняется 14.79\%.

model = [1,1,1,0,0,0,6,0.3,0.3,1]; % model parameters

Нам не удалось добиться улучшения качества прогнозирования путем создания отдельной модели для каждого дня недели.

Локальный алгоритм Федоровой

For algorithm Fedorovoy we don't use any additional hypotheses except described in works \cite{[11]},\cite{[12]}. Results for this algorithm are worse, that result for different LARS variations. Main complications in our data for this algorithm are big noises and spikes in learning and test data set and weak dependence future data from past. Motivation to use this algorithm is periodics in our data.

Мы используем алгоритм из работ (11) и (12). Мотивация для его использования -- наличие периодик в наших данных. Проблема в его использовании -- наличие выбросов и шума в наших данных. В итоге мы получили результаты хуже, чем результаты для LARS.

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

MAPE равняется 20.43%.

Сравнение алгоритмов

Подведем итог нашей работы. Вынесем результата работы наших алгоритмов в таблицу

Algorithm LARS RS LARS RS and autoLARS DOW LARS LAF
MAPE 16.64% 15.29% 13.31% 14.79% 20.43%


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

Отчет о результатах

Для нашего лучшего алгоритма мы уменьшили MAPE на 5% по отношению к начальному алгоритму (Мы получили 13.31% по сравнению с начальными 17%). Что бы решить эту задачу мы применили различные дополнительные эвристики и модификации к LARS. Так же мы создали реализацию локального алгоритма к ближайших соседей и сравнили результаты работы наших алгоритмов с его результатом работы.

Смотри также

Daily electricity price forecasting (report)


Литература

  1. Hsiao-Tien Pao A Neural Network Approach to m-Daily-Ahead Electricity Price Prediction. — 2006.
  2. Wei Wu, Jianzhong Zhou,Li Mo and Chengjun Zhu Forecasting Electricity Market Price Spikes Based on Bayesian Expert with Support Vector Machines. — 2006.
  3. S.Borovkova, J.Permana Modelling electricity prices by the potential jump-diffusion. — 2006.
  4. R.Weron, A.Misiorek Forecasting spot electricity prices: A comparison of parametric and semiparametric time series models. — 2008.
  5. J.Cherry, H.Cullen, M.Vissbeck, A.Small and C.Uvo Impacts of the North Atlantic Oscillation on Scandinavian Hydropower Production and Energy Markets. — 2005.
  6. Yuji Yamada Optimal Hedging of Prediction Errors Using Prediction Errors. — 2008.
  7. Wikipedia.
  8. Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani Least Angle Regression. — 2002.
  9. Robert Tibshirani Regression shrinkage selection and via the LASSO. — 1996.
  10. Vadim Strijov Model Generation and its Applications in Financial Sector. — 2009.
  11. J. McNames Innovations in local modeling for time series prediction. — 1996.
  12. В. Федорова Локальные методы прогнозирования временных рядов. — 2009.


Данная статья является непроверенным учебным заданием.
Студент: Зайцев Алексей
Преподаватель: В.В. Стрижов
Срок: 15 декабря 2009

До указанного срока статья не должна редактироваться другими участниками проекта MachineLearning.ru. По его окончании любой участник вправе исправить данную статью по своему усмотрению и удалить данное предупреждение, выводимое с помощью шаблона {{Задание}}.

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