Как применить нейронную сеть для прогнозирования временных рядов?

83

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

Допустим, у меня есть несколько ценовых значений для каждого месяца в течение нескольких лет, и я хочу предсказать новые ценовые значения. Я мог бы получить список цен за последние несколько месяцев, а затем попытаться найти похожие тенденции в прошлом, используя K-Nearest-Neighbor. Я мог бы использовать скорость изменения или какое-то другое свойство прошлых тенденций, чтобы попытаться предсказать новые цены. Как я могу применить нейронную сеть к этой же проблеме - вот что я пытаюсь выяснить.

solartic
источник
@solartic, просто любопытно, вы успешно реализовали этот метод?
Унылый ламантин и лебедь

Ответы:

102

Вот простой рецепт, который может помочь вам начать писать код и тестировать идеи ...

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

  1. Исследовательский анализ данных: примените некоторые традиционные методы анализа временных рядов для оценки зависимости запаздывания в данных (например, графики автокорреляции и частичной автокорреляции, преобразования, дифференцирование). Допустим, вы обнаружите, что значение данного месяца коррелирует с данными за последние три месяца, но не настолько, как это.
  2. Разделите ваши данные на обучающие и проверочные наборы: возьмите первые 24 балла в качестве ваших тренировочных значений, а оставшиеся баллы - в качестве проверочного набора.
  3. Создайте макет нейронной сети. В качестве входных данных вы возьмете значения за последние три месяца и захотите предсказать значение следующего месяца. Итак, вам нужна нейронная сеть с входным слоем, содержащим три узла, и выходным слоем, содержащим один узел. Вероятно, у вас должен быть скрытый слой с хотя бы парой узлов. К сожалению, выбор количества скрытых слоев и их соответствующего количества узлов не является чем-то, для чего есть четкие рекомендации. Я бы начал с малого, как 3: 2: 1.
  4. Создайте шаблоны обучения: каждый шаблон обучения будет иметь четыре значения, причем первые три соответствуют входным узлам, а последнее определяет правильное значение для выходного узла. Например, если ваши тренировочные данные имеют значения то
    x1,x2,x24
    pattern1:x1,x2,x3,x4
    pattern2:x2,x3,x4,x5
    pattern21:x21,x22,x23,x24
  5. Тренируйте нейронную сеть по этим паттернам
  6. Протестируйте сеть на проверочном наборе (месяцы 25-36): здесь вы передадите три значения, которые необходимы нейронной сети для входного слоя, и посмотрите, на что настроен выходной узел. Итак, чтобы увидеть, насколько хорошо обученная нейронная сеть может предсказать значение 32-го месяца, вы передадите значения для 29-го, 30-го и 31-го месяцев.

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

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

Я настоятельно рекомендую посетить веб-сайт neural_forecasting , который содержит тонны информации о соревнованиях по прогнозированию нейронных сетей. Страница Мотивации особенно полезна.

Джош Хеманн
источник
12
+1 к этому ответу, но также добавив, что, даже если самые последние 3 месяца являются единственными, которые соответствуют ответу, могут также быть такие факторы, как тот же месяц года за последние 5 предыдущих лет, которые являются полезными входными данными ( например, если Decembers имеют тенденцию выглядеть как предыдущие Decembers, как правило).
Россдавидь
1
Отличный ответ. Я нашел это очень полезным. Объяснение высокого уровня - именно то, что я хотел. @rossdavidh: Хорошая точка +1.
Solartic
2
Было бы здорово получить несколько примеров кодов здесь.
Лео Леопольд Герц 준영
1
Интересно было бы многовариантный набор данных временных рядов вместе с регрессорами ..
Томмазо
1
Кто-нибудь знает какую-нибудь статью с приложением к реальным данным и сравнением с «традиционным» методом временных рядов?
Марко Фумагалли