Как я уже писала в заметке «Какая модель лучше для прогнозирования временных рядов?» на сегодняшний день существуют две наиболее популярные модели прогнозирования временных рядов: нейронные сети и ARIMAX. Начнем с нейронных сетей.
Пример реализации простой нейронной сети для прогнозирования временного ряда энергопотребления с исходными данными и пояснениями вы найдете в записи «Создаем нейронную сеть для прогнозирования временного ряда»
Описание нейронных сетей
Идею о воспроизведении работы головного мозга человека, архитектуры сетей, способы обучения, достоинства и недостатки вы найдете в множестве статьей по нейронным сетям, в том числе в моем обзоре моделей прогнозирования. Одной из наиболее популярных книг, написанной просто и доступно, является «Нейронные сети. Полный курс» Саймона Хайкина. Книгу можно сказать в формате DJVU. Кроме того, к книге прилагается набор реализованных в MATLAB’е алгоритмов.
Что нужно знать о нейронных сетях?
Прежде чем реализовывать нейронную сеть, нужно понимать простую вещь: это инструмент сложный, непрозрачный и довольно громоздкий, нашедший широкое применение в целом классе задач. Нейронные сети используются главным образом в задачах распознавания образов (patter recognition). Существует множество применений нейронных сетей для решения задачи прогнозирования временных рядов. Обычно при прогнозировании временных рядов используются многослойные, чаще всего трехслойные, нейронные сети прямого распространения. Выглядит такая сеть следующим образом.
Если нам нужен один выход, то сеть имеет следующий вид.
Если нам нужно несколько выходов, то вид сети будет следующий.
Нужно понимать, что входов и выходов сети может быть различное количество. Как правило, на вход сети подаются фактические значения временного ряда, а также значения внешних факторов, на выходе получается одно или несколько прогнозных значений процесса.
В чем основной недостаток нейронных сетей?
Недостаток нейронных сетей состоит в том, что нам, разработчикам, недоступно то, что происходит внутри сети. Мы формируем входы, после этого рассчитываем выходы и просто сопоставляем одно с другим. У нас нет возможности детально и пошагово проследить то, как полученные на выходе значения были рассчитаны. Этот режим выполнения вычислений в «черном ящике» чрезвычайно усложняет процесс интерпретации результатов и модификации сети — неясно, что в ней нужно изменить, чтобы стало точнее.
Как быстро реализовать нейронную сеть?
Самым простым способом реализации сети, который мне удалось обнаружить, оказался следующий вариант. В приложении к книге Хайкина можно найти примеры реализации ряда алгоритмов нейронных сетей, созданных в MATLAB’е. Там же можно найти исходные данные. Я взяла тот алгоритм, что мне показался короче и понятнее остальных, и, потратив 2-3 часа на модификацию, получила рабочую нейронную сеть. В том же приложении я нашла готовый алгоритм обучения сети, а также разобралась, как сформировать прогноз. В итоге, потратив полдня, я получила трехслойную нейронную сеть прямого распространения с 4 входами и 1 выходом, которая прогнозировала энергопотребление на следующий час. Далее передо мною встал вопрос более сложный: какие именно данные следует подавать на вход сети, чтобы точность стала выше? Ответ на этот и сопутствующие вопросы об алгоритмах обучения стоит многих часов работы с нейронными сетями, использования их для различных видов прогнозирования, накоплении экспертного опыта в данной области.
Стоит ли пользоваться нейронным сетями?
Нейронными сетями пользоваться стоит, прогнозировать на них стоит, потому как они не единожды доказывали свою высокую эффективность для решения данного класса задач. Однако нужно понимать, что наряду с другими моделями прогнозирования нейронные сети являются инструментом, инструментом сложным, требующих твердых навыков программирования и четкого понимания задачи прогнозирования временного ряда. Вероятно, написав с десяток таких записей, мне не удастся вместить все необходимые рекомендации по реализации нейронных сетей для конкретной задачи. Этим нужно заниматься изо дня в день, выращивать в голове экспертный опыт, формировать готовые программные библиотеки, которые в последствие позволят решать задачи быстро и эффективно, используя нейронные сети. На сегодняшний день нейронные сети представляют для меня громадный интерес и по мере накопления практического опыта я буду им делиться в нашем блоге.
Ирина, добрый день!
Прежде всего, хотел выразить Вам свою благодарность за Ваш труд и проведенные исследования в сфере прогнозирования. Мне очень помогают Ваши материалы в научной деятельности.
Я занимаюсь разработкой кластерной модели, результаты прогноза которой хотелось бы стравнить с результатами на основе нейронных сетей. Может быть Вы сможите мне порекомендавать какой-то бесплатный продукт, либо его демо версию, где я бы смог поработать с нейросетями и результатами прогноза на их основе?
Александр, здравствуйте!
Мне приятно, спасибо.
Кнопочный продукт для работы с нейронными сетями обсуждали у нас на форуме, я давала развернутый ответ на этот вопрос. Однако я считаю неразумной такую постановку задачи: сравнить свой прогноз с результатом какого-то продукта, который вы не потрудитесь глубоко изучить. Это заведомо глупо, ибо очевидно, что ваш прогноз будет точнее. Нейронными ли сетями или другими моделями надо уметь пользоваться, на их изучение нужны годы. Хотите сравнивать корректно? Ищите конкурентов в вашей сфере и сравнивайте с ними.