Перекрестный анализ временных рядов

37

Я использовал пакет caret в R для построения прогностических моделей для классификации и регрессии. Caret предоставляет унифицированный интерфейс для настройки гиперпараметров модели путем перекрестной проверки или привязки загрузки. Например, если вы строите простую модель «ближайших соседей» для классификации, сколько соседей вы должны использовать? 2? 10? 100? Caret помогает вам ответить на этот вопрос путем повторной выборки ваших данных, опробования различных параметров, а затем агрегирования результатов, чтобы решить, какие из них дают наилучшую точность прогнозирования.

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

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

Zach
источник
Я нашел действительно интересный вопрос. Есть ли способ, которым я могу отметить вопрос, чтобы следовать за ним?
Мариана Соферфер
1
@mariana soffer Нажмите значок «Звезда» под стрелками вверх / вниз.
Зак
4
Caret теперь поддерживает перекрестную проверку временных
рядов
1
@ Zach Это старый пост, но мне интересно, есть ли у вас какие-нибудь новые мысли? Известно ли вам о какой-либо недавней работе по проверке последовательной модели?
horaceT

Ответы:

10

«Классическая» методика перекрестной проверки в k раз основана на том факте, что каждая выборка в доступном наборе данных используется (k-1) раз для обучения модели и 1 раз для ее проверки. Поскольку очень важно проверять модели временных рядов на «будущих» данных, этот подход не будет способствовать стабильности модели.

Одним из важных свойств многих (наиболее?) Временных рядов является корреляция между соседними значениями. Как указывает IrishStat, если вы используете предыдущие показания в качестве независимых переменных вашего кандидата в модель, эта корреляция (или отсутствие независимости) играет важную роль и является еще одной причиной, по которой перекрестная проверка по k-разу не является хорошей идеей.

Одним из способов преодоления этой проблемы является «избыточная выборка» данных и их декоррелирование. Если процесс декорреляции успешен, то использование перекрестной проверки временных рядов становится менее проблематичным. Однако это не решит проблему проверки модели с использованием будущих данных.

Разъяснения

Под проверкой модели на будущих данных я подразумеваю построение модели, ожидание новых данных, которые не были доступны во время построения модели, тестирования, тонкой настройки и т. д., и проверку их на этих новых данных.

Под передискретизацией данных я подразумеваю сбор данных временных рядов с частотой, намного превышающей практически необходимую. Например: выборка цен на акции каждые 5 секунд, когда вы действительно заинтересованы в почасовых изменениях. Здесь, когда я говорю «выборка», я не имею в виду «интерполяцию», «оценку» и т. Д. Если данные не могут быть измерены с более высокой частотой, этот метод не имеет смысла

Борис Горелик
источник
Каков «классический» способ проверки модели на будущих данных? Что вы подразумеваете под «передискретизацией»? Спасибо!
Зак
Следует отметить, что статистические свойства данных временных рядов реального времени (особенно финансовых данных) могут варьироваться в зависимости от частоты выборки. Для многих финансовых временных рядов нет простых связь между стандартными отклонениями, выбранными с периодомpTp и с периодом . Фактически стандартное отклонение имеет тенденцию увеличиваться с увеличением частоты дискретизации. Аналогичным образом корреляция уменьшается с увеличением частоты дискретизации (это обычно называют эффектом Эппса )pT
Крис Тейлор
@bgbg Я столкнулся с очень похожей проблемой и только что нашел ваш пост. Можете ли вы привести некоторые ссылки на данные временных рядов с избыточной выборкой и декорреляцией? Я думаю, что если память во временном ряду достаточно коротка (может показывать, что она соответствует ариме), можно просто взять «непересекающиеся» выборки и выполнить обычную перекрестную проверку. Любая мысль приветствуется.
horaceT
9

http://robjhyndman.com/researchtips/crossvalidation/ содержит быстрый совет для перекрестной проверки временных рядов. Относительно использования случайного леса для данных временных рядов ... не уверен, хотя это кажется странным выбором, учитывая, что модель подбирается с использованием выборок начальной загрузки. Конечно, можно использовать классические методы временных рядов (например, ARIMA), а также методы ML, такие как Neural Nets ( пример в формате pdf ). Возможно, некоторые эксперты временного ряда могут прокомментировать, насколько хорошо работают методы ML по сравнению с алгоритмами, специфичными для временных рядов.

B_Miner
источник
2
Это в значительной степени ударяет гвоздь по голове. Я пытаюсь понять, как применять методы машинного обучения для анализа временных рядов.
Зак
Я имел успех, используя случайные леса для прогнозирования раньше. Проверить: biomedcentral.com/1471-2105/15/276
captain_ahab
6

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

Вот копия кода из блога Роба Хиндмана:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

Results

Zach
источник
Привет Зак. Я реализовал немного другую версию кода Хиндмана, чтобы определить соответствующее количество терминов для регрессионной модели с временными рядами. К сожалению, график ошибок CV показал несколько локальных минимумов, что заставило меня задуматься о том, как правильно выбрать количество терминов. Полная проблема описана здесь . Сталкивались ли вы с чем-то подобным раньше?
jroberayalas
5

Если у вас есть данные временных рядов, то у вас может возникнуть «проблема степеней свободы». Например, если у вас есть 4 наблюдения с почасовыми интервалами, а затем вы решили использовать 241 наблюдение с интервалом в 1 минуту, у вас есть 241 наблюдение, но они не обязательно независимы. Когда вы отправляете эти 241 значения / измерения в аналитический пакет, пакет может ожидать, что это 241 независимое значение, поскольку он продолжает выполнять свою особую магию. Если у вас есть данные временных рядов, возможно, вам придется обновить аналитику. Я не знаю программу, на которую вы ссылаетесь, но с моей стороны вполне обоснованно (я могу ошибаться!), Что ее тесты (F-тесты / T-тесты ... и т. Д.), Вероятно, не относятся к вашему набору задач.

IrishStat
источник
1

Я могу порекомендовать вам 2 интересные статьи для чтения, которые доступны в Интернете. 1. Потоковое обучение: однопроходные SVM, Пиюш Рай, Hal Daum´e III, Суреш Венкатасубраманян. 2. Приближение потока k-средних, Нир Айлон.

Надеюсь, это немного прояснит ваши идеи

Мариана Софер
источник
Можете ли вы предоставить ссылки на эти документы? Спасибо.
Зак
Зак здесь первый snowbird.djvuzone.org/2008/abstracts/180.pdf, а другой - www1.cs.columbia.edu/~rjaiswal/ajmNIPS09.pdf . Надеюсь, это поможет
Мариана мягче