Как подобрать модель для временного ряда, который содержит выбросы

9

Я установил модель ARIMA (5,1,2), используя auto.arima()функцию в R, и, посмотрев порядок, мы можем сказать, что это не лучшая модель для прогнозирования. Если в рядах данных существуют выбросы, каков метод для подгонки модели к таким данным?

Энтони
источник
Есть ли у вас какие-либо данные / теория относительно того, какие точки являются выбросами? Вы не можете просто предполагать, что «отдаленные» точки являются выбросами, но если вы знаете, что что-то особенное произошло в конкретную дату и это событие повлияет на ваши данные, вы можете добавить переменную индикатора в вашу модель на эту дату. Смотрите комментарий IrishStat ниже.
Уэйн
Если что-то особенное произошло в течение 1 или 2 недель в этот период, и это влияет на модель, то модель может быть неправильной. поскольку нет других причин, таких как сезонные колебания, я предположил, что выбросы являются причиной, влияющей на модель.
Энтони

Ответы:

7

Майкл Черник указывает вам в правильном направлении. Я бы также посмотрел на работу Рюи Цая как на добавление к этой совокупности знаний. Подробнее здесь .

Вы не можете конкурировать с современными автоматизированными компьютерными алгоритмами. Они смотрят на многие способы приблизиться к временным рядам, которые вы не рассматривали и часто не документировали ни в одной статье или книге. Когда спрашивают, как сделать ANOVA, можно ожидать точного ответа при сравнении с различными алгоритмами. Когда кто-то задает вопрос, как мне сделать распознавание образов, возможны многие ответы, когда речь идет об эвристике. Ваш вопрос связан с использованием эвристики.

Лучший способ соответствовать модели ARIMA, если в данных существуют выбросы, - это оценить возможные состояния природы и выбрать тот подход, который считается оптимальным для конкретного набора данных. Одним из возможных состояний природы является то, что процесс ARIMA является основным источником объясненных изменений. В этом случае можно было бы «предварительно определить» процесс ARIMA с помощью функции acf / pacf, а затем проверить остатки на возможные выбросы. Выбросы могут быть импульсами, то есть одноразовыми событиями ИЛИ сезонными импульсами, о которых систематически свидетельствуют выбросы с некоторой частотой (скажем, 12 для месячных данных). Третий тип выбросов состоит в том, что каждый имеет непрерывный набор импульсов, каждый из которых имеет один и тот же знак и величину, это называется скачком или сдвигом уровня. После изучения остатков в предварительном процессе ARIMA можно предварительно добавить эмпирически идентифицированную детерминированную структуру, чтобы создать предварительную комбинированную модель. Также, если основным источником вариации является один из 4-х видов или «выбросов», то лучше было бы обслужить их идентификацию ab initio (сначала), а затем использовать остатки из этой «регрессионной модели» для идентификации стохастической (ARIMA) структуры. , Теперь эти две альтернативные стратегии становятся немного более сложными, когда у одной есть «проблема», когда параметры ARIMA изменяются со временем или дисперсия ошибки изменяется со временем из-за ряда возможных причин, возможно, из-за необходимости взвешенных наименьших квадратов или преобразования мощности как логи / взаимные ссылки и т. д. Другая сложность / возможность заключается в том, как и когда формировать вклад предложенных пользователем предикторов для формирования бесшовно интегрированной модели, включающей память, причинно-следственные связи и эмпирически идентифицированные фиктивные ряды. Эта проблема еще более усугубляется, когда ряд трендов лучше всего моделируется сериями индикаторов вида, Или 1 , 2 , 3 , 4 , 5 , . , , N0,0,0,0,1,2,3,4,...1,2,3,4,5,...n и комбинации рядов сдвига уровня, такие как 0,0,0,0,0,0,1,1,1,1,1, Вы можете попробовать написать такие процедуры на R, но жизнь коротка. Я был бы рад на самом деле решить вашу проблему и продемонстрировать в этом случае, как работает процедура, пожалуйста, опубликуйте данные или отправьте их на sales@autobox.com


Дополнительный комментарий после получения / анализа данных / ежедневных данных для курса обмена валют / 18 = 765 значений, начиная с 01.01.2007

введите описание изображения здесь

Данные имели следующие значения:

введите описание изображения здесь

После идентификации модели arma вида и количества выбросов, acf остатков указывает случайность, так как значения acf очень малы. AUTOBOX выявил ряд выбросов:(1,1,0)(0,0,0)

введите описание изображения здесь

Финальная модель:

введите описание изображения здесь

включал необходимость усиления стабилизации дисперсии в виде TSAY, где изменения дисперсии в остатках были идентифицированы и включены. Проблема, с которой вы столкнулись при автоматическом запуске, заключалась в том, что используемая вами процедура, подобно бухгалтеру, доверяет данным, а не оспаривает данные с помощью Intervention Detection (иначе, Outlier Detection). Я разместил полный анализ здесь .

введите описание изображения здесь

IrishStat
источник
@IrishStat: В будущем, вы можете использовать параметры форматирования? (правильный ключ для вставки ссылок - ctrl-l, а не ctrl-c).
user603
@ user603 Я просто использовал опцию добавления графика. Я не знаю, что вы подразумеваете под ctrl-l или cntrl-c. Возможно, вы могли бы помочь мне, пожалуйста, свяжитесь со мной по адресу dave / @ / autobox.com и, возможно, вы сможете пройтись / поговорить со мной через это.
IrishStat
@IrishStat: посмотрите здесь .
user603
@ user603 Хорошо, но я все еще не знаю, что вы подразумеваете под ctrl-l и cntrl-c. Я использовал передачу изображения, где я могу вставить изображение. Если я набираю cntrl-g, я просто получаю пустой всплывающий экран.
IrishStat
@IrishStat: все в порядке - метод ссылки даже лучше, чем ctrl-l :). PS: моя цель состояла в том, чтобы помочь вам сделать ваши ответы / комментарии более привлекательными, косметически, скрывая эти длинные ссылки, которые прорезают поток текста. Ссылка объясняет вам, как этого добиться.
user603
6

Нет готового использования надежного аналога функции арима в R (пока) ; если он появится, он будет указан здесь . Возможно, альтернативой является снижение веса тех наблюдений, которые отличаются от простого однофакторного правила обнаружения выбросов, но я также не вижу готовых использовать пакеты для запуска взвешенной регрессии ARMA. Другой возможной альтернативой будет Winsorize отдаленные пункты:

#parameters
para     <- list(ar=c(0.6,-0.48), ma=c(-0.22,0.24))
#original series
y1 <- y0 <- arima.sim(n=100, para, sd=sqrt(0.1796)) 
#outliers
out      <- sample(1:100, 20)               
#contaminated series
y1[out]  <- rnorm(20, 10, 1)                
plot( y1, type="l")
lines(y0, col="red")

пример случайного загрязнения

#winsorized series
y2      <- rep(NA, length(y1))
a1      <- (y1-median(y1)) / mad(y1)
a2      <- which(abs(a1)>3)
y2[-a2] <- y1[-a2]
for(i in 2:length(y2)){
   if(is.na(y2[i])){ y2[i] <- y2[i-1] }
}       

очищенная серия

user603
источник
Процедура, основанная на правилах, работает для этой серии, но, посмотрев на данные временных рядов в течение почти 42 лет, может не сработать в целом. Рассмотрим простую серию, которая имеет самопроективный процесс, например 1,9,1,9,1,9,5,9, 1,9,1,9, где седьмое значение является исключительным ИЛИ в общем случае серия, имеющая сильную автопроективную структуру некоторой неизвестной формы ИЛИ серия, имеющая 1,2,1,1,1,2,1,1,1, 2,1,20,1,2,1,2,1,1,1,2,1,2,2,19,2,1,1,2,1,2,1,1,2,2, 2,21 ежемесячная серия, которая не имеет импульсов, НО имеет неопределенную СЕЗОННУЮ КУКЛУ. Обнаружение 12, 24 и 36 как ПЛОХОГО будет выбрасывать ребенка с водой в ванной.
IrishStat
Все, что вы говорите, является правдой, т.е. вы предоставляли лейкопластырь, который помог бы с раной, если 1) серия была стационарной, что предполагает, среди прочего, отсутствие сдвигов уровня, никаких тенденций и т. Д., Отсутствие структуры ARIMA; и 2) серия должна быть несезонной или ранее не была сезонной; , По моему опыту, такие предположения вряд ли когда-либо сохранятся, и пользователи игнорируют ваши предостережения, поскольку они пытаются бороться с временными рядами, которые имеют "недостатки". Мои комментарии здесь не предназначены для аргументации, а скорее для освещения (для некоторых!)
IrishStat
@IrishStat ОП обновил свой вопрос и заявил, что сезонности нет.
user603
Ты Кристоф?
IrishStat
2

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

  • Вот ссылка на обзорную статью по теме со списком из более чем 100 ссылок. Это даже включает мою газету JASA 1982 года.
  • Вот кандидатская диссертация 2000 года (pdf), которая охватывает теорию, методы и приложения надежного анализа временных рядов и включает в себя хорошую библиографию.
  • Вот ссылка на программное обеспечение, которое включает в себя некоторые надежные инструменты временных рядов.
Майкл Р. Черник
источник
Какое программное обеспечение используется для надежного прогнозирования? Подходит ли это для одномерных серий?
Энтони
@ Энтони Это очень хороший вопрос. Я не делал надежного моделирования временных рядов. Мартин основал компанию Insightful (на самом деле у нее было несколько имен), которая продавала SPlus. Я почти уверен, что он включил надежные метиды в программное обеспечение SPlus. Вероятно, сейчас есть версия в R. Я проверю ее. Вот статья в Википедии, включающая историю SPlus. en.wikipedia.org/wiki/S-PLUS
Майкл Р. Черник,
@Anthony Вот источник, предоставленный Робом Хиндманом о том, что доступно в R для анализа временных рядов. Он включает в себя то, что находится в CRAN, и охватывает широкий спектр методов, включая надежную фильтрацию. cran.r-project.org/web/views/TimeSeries.html
Майкл Р. Черник,
2

Какова цель вашей модели для прогноза или анализа истории? если это не для прогнозирования, а вы знаете, что это выбросы, просто добавьте фиктивную переменную, которая равна 1 в эти даты и 0 в другие даты. таким образом, фиктивные коэффициенты будут заботиться о выбросах, и вы сможете интерпретировать другие коэффициенты в модели.

если это для прогнозирования, то вы должны задать себе два вопроса: произойдут ли эти выбросы снова? если они будут, я должен отчитываться за них?

Например, предположим, что у ваших рядов данных есть выбросы, когда братья Леман пошли вниз. это событие, которое вы не можете предсказать, очевидно, но вы не можете просто проигнорировать его, потому что нечто подобное должно произойти в будущем. если вы добавляете пустышку для выбросов, то вы фактически удаляете неопределенность этого события из дисперсии ошибки. Ваш прогноз будет недооценивать риск хвоста - возможно, не очень хорошая вещь для управления рисками. однако, если вы хотите создать базовый прогноз продаж, манекен сработает, потому что вас не интересует хвост, вас интересуют наиболее вероятные сценарии - поэтому вам не нужно учитывать непредсказуемое событие для эта цель.

Следовательно, цель вашей модели влияет на то, как вы справляетесь с выбросами.

Аксакал
источник