Я работаю над небольшим проектом, в котором мы пытаемся прогнозировать цены на товары (нефть, алюминий, олово и т. Д.) На ближайшие 6 месяцев. У меня есть 12 таких переменных для прогнозирования, и у меня есть данные за апрель 2008 года - май 2013 года.
Как я должен идти о предсказании? Я сделал следующее:
- Импортированные данные как набор данных Timeseries
- Сезонность всех переменных имеет тенденцию меняться в зависимости от тренда, поэтому я собираюсь использовать мультипликативную модель.
- Я взял журнал переменной для преобразования в аддитивную модель
- Для каждой переменной разложены данные с использованием STL
Я планирую использовать для прогнозирования экспоненциальное сглаживание Холта Уинтерса, ARIMA и нейронную сеть. Я разделяю данные в процессе обучения и тестирования (80, 20). Планирую выбрать модель с меньшим MAE, MPE, MAPE и MASE.
Я делаю это правильно?
Кроме того, у меня был один вопрос: перед тем, как перейти к ARIMA или нейронной сети, мне следует сгладить данные? Если да, то с помощью чего? Данные показывают как сезонность, так и тренд.
РЕДАКТИРОВАТЬ:
Прикрепление графика временных рядов и данных
Year <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009,
2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010,
2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2)
Coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000,
29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500,
33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500,
33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700,
40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500,
40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300,
39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)
РЕДАКТИРОВАТЬ 2: Один вопрос, можете ли вы сказать мне, если мои данные имеют сезонность или тенденцию? А также, пожалуйста, дайте мне несколько советов о том, как их идентифицировать.
источник
Ответы:
Вам следует использовать пакет прогноза , который поддерживает все эти модели (и даже больше) и упрощает их подгонку:
Я бы посоветовал не сглаживать данные до подгонки вашей модели. Ваша модель по своей сути будет пытаться сгладить данные, поэтому предварительное сглаживание просто усложняет ситуацию.
Редактировать на основе новых данных:
Похоже, что arima - одна из худших моделей, которую вы могли выбрать для этого тренировочного и тестового набора.
Я сохранил ваши данные в файл вызова
coil.csv
, загрузил их в R, и разделил их на обучающий и тестовый набор:Далее я подхожу к ряду моделей временных рядов: арима, экспоненциальное сглаживание, нейронная сеть, tbats, летучие мыши, сезонная декомпозиция и структурные временные ряды:
Затем я сделал несколько прогнозов и сравнил их с тестовым набором. Я включил наивный прогноз, который всегда предсказывает плоскую горизонтальную линию:
Как вы можете видеть, модель arima неправильно понимает тренд, но мне нравится внешний вид «Базовой структурной модели»
Наконец, я измерил точность каждой модели на тестовом наборе:
Используемые метрики описаны в Hyndman, RJ and Athanasopoulos, G. (2014) «Прогнозирование: принципы и практика» , которые также являются авторами пакета прогнозов. Я настоятельно рекомендую вам прочитать их текст: он доступен бесплатно онлайн. Структурный временной ряд является лучшей моделью по нескольким показателям, включая MASE, который я предпочитаю выбирать при выборе модели.
Последний вопрос: удалась ли структурная модель в этом тестовом наборе? Один из способов оценить это - посмотреть на ошибки тренировочного набора. Ошибки обучающих наборов менее надежны, чем ошибки тестовых наборов (потому что они могут быть переопределены), но в этом случае структурная модель все еще выходит на первое место:
(Обратите внимание, что нейронная сеть наложена, отлично работает на тренировочном наборе и плохо на тестовом наборе)
Наконец, было бы неплохо провести перекрестную проверку всех этих моделей, возможно, путем обучения 2008-2009 гг. / Тестирования 2010 г., обучения 2008-2010 гг. / Тестирования 2011 г., обучения 2008-2011 гг. / Тестирования 2012 г., обучения в 2008-2012 гг. / тестирование в 2013 г. и усреднение ошибок по всем этим периодам времени. Если вы хотите пойти по этому пути, у меня есть частично полный пакет для перекрестной проверки моделей временных рядов на github, который я хотел бы, чтобы вы попробовали и дали мне отзывы / запросы на получение:
Редактировать 2: Давайте посмотрим, помню ли я, как использовать свой собственный пакет!
Прежде всего, установите и загрузите пакет из github (см. Выше). Затем проведите перекрестную проверку некоторых моделей (используя полный набор данных):
(Обратите внимание, что я уменьшил гибкость модели нейронной сети, чтобы попытаться предотвратить ее переоснащение)
После подбора моделей мы можем сравнить их по MAPE (cv.ts еще не поддерживает MASE):
Уч. Казалось бы, нашему структурному прогнозу повезло. В долгосрочной перспективе наивный прогноз дает наилучшие прогнозы, усредненные по 12-месячному горизонту (модель аримы по-прежнему является одной из худших моделей). Давайте сравним модели на каждом из 12 прогнозируемых горизонтов и посмотрим, превзойдет ли когда-нибудь какая-либо из них наивную модель:
Что характерно, модель экспоненциального сглаживания всегда выбирает наивную модель (оранжевая линия и синяя линия перекрывают 100%). Другими словами, наивный прогноз «цены на рулоны в следующем месяце будет таким же, как цены на рулоны в этом месяце», является более точным (почти на каждом горизонте прогноза), чем 7 чрезвычайно сложных моделей временных рядов. Если у вас нет секретной информации, которую рынок катушек еще не знает, победить наивный прогноз цены на катушку будет крайне сложно .
Это никогда не тот ответ, который кто-либо хочет услышать, но если ваша цель - точность прогноза, вам следует использовать наиболее точную модель. Используйте наивную модель.
источник
Подход, который вы выбрали, является разумным. Если вы новичок в прогнозировании, я бы порекомендовал следующие книги:
Первая книга - это классика, которую я настоятельно рекомендую. Вторая книга - это книга с открытым исходным кодом, на которую вы можете ссылаться для методов прогнозирования и того, как они применяются с использованием прогноза
R
пакета программного обеспечения с открытым исходным кодом . Обе книги дают хорошее представление о методах, которые я использовал. Если вы серьезно относитесь к прогнозированию, то я бы порекомендовал « Принципы прогнозирования» от Armstrong, который представляет собой сборник огромного количества исследований в области прогнозирования, которые практикующие врачи могут найти очень полезным.Возвращаясь к вашему конкретному примеру на катушке, это напоминает мне концепцию прогнозируемости, которую большинство учебников часто игнорируют. Некоторые серии, такие как ваша серия, просто не могут быть спрогнозированы, потому что в них меньше шаблонов, поскольку в них нет тенденции, сезонных колебаний или каких-либо систематических изменений. В этом случае я бы классифицировал серию как менее прогнозируемую. Прежде чем углубляться в методы экстраполяции, я бы посмотрел на данные и задал вопрос: прогнозируется ли моя серия? В этом конкретном примере простая экстраполяция, такая как прогноз случайного блуждания, использующий последнее значение прогноза, оказалась наиболее точной ,
Также еще один комментарий о нейронной сети: известно, что нейронные сети терпят неудачу в эмпирических соревнованиях . Я бы попробовал традиционные статистические методы для временных рядов, прежде чем пытаться использовать нейронные сети для задач прогнозирования временных рядов.
Я пытался смоделировать ваши данные в
R's forecast package
, надеюсь, комментарии не требуют пояснений.Используя MAE для данных об удержании, я бы выбрал ARIMA для краткосрочного прогноза (1 - 12 месяцев). в долгосрочной перспективе я бы рассчитывал на прогноз случайного блуждания. Обратите внимание, что ARIMA выбрала модель случайного блуждания с дрейфом (0,1,0) + дрейф который имеет тенденцию быть намного более точным, чем модель чистого случайного блуждания, особенно в краткосрочной перспективе. Смотрите таблицу ниже. Это основано на функции точности, как показано в приведенном выше коде.
Конкретные ответы на ваши конкретные вопросы: Еще один вопрос, который у меня был, перед переходом на ARIMA или нейронную сеть, следует ли сгладить данные? Если да, то с помощью чего?
Данные показывают как сезонность, так и тренд.
Практические советы по повышению точности:
Объедините различные методы прогнозирования: - Вы можете попробовать использовать неэкстраполяционные методы, такие как прогнозирование по аналогии , прогнозное прогнозирование или другие методы, и объединить их со своими статистическими методами для обеспечения точных прогнозов. Смотрите эту статью для преимуществ объединения. Я попытался объединить вышеупомянутые 5 методов, но предсказание не было точным как отдельные методы, одна из возможных причин заключается в том, что отдельные прогнозы похожи. Вы получаете преимущества комбинирования прогноза, когда комбинируете различные методы, такие как статистические и оценочные прогнозы.
Обнаружение и понимание выбросов: - Данные реального мира заполнены выбросами. Выявить и соответствующим образом обработать выбросы во временных рядах. Рекомендую прочитать этот пост . Если посмотреть на данные вашей катушки, является ли падение до 2009 года выбросом ??
редактировать
Данные, как представляется, следуют некоторому типу макроэкономических тенденций. Я предполагаю, что тенденция к снижению, наблюдаемая до 2009 года, следует за спадом в экономике, наблюдавшимся в период между 2008 и 2009 годами, и начнется после 2009 года. Если это так, то я бы все вместе избегал использования любых методов экстраполяции и вместо этого полагался на обоснованную теорию о том, как эти экономические тенденции ведут себя так же, как те, на которые ссылается @GraemeWalsh.
Надеюсь это поможет
источник