Блог им. SciFi

Добавление и оценка влияния внешнего регрессора BRN6 в модель ARIMA для RIM6 на R

    • 10 июня 2016, 03:33
    • |
    • SciFi
  • Еще
По мотивам поста Применение ARIMA для предсказания цены на RIM6 на R

Итак, я добавил в ARIMA для RIM6 внешний регрессор — цену на нефть BRN6. И проверил — действительно ли это улучшает модель. Теоретически, должно, так как цена на нефть должна опережать РТС. Сначала меняется мировой спрос на нефть — затем уже меняется спрос на рос. активы.

И действительно — это улучшило модель. Критерий AIC, характеризующий качество модели, уменьшился, несмотря на то, что 1 параметром в модели стало больше. Кроме этого, ошибки модели стали меньше. В усовершенствованной версии диапазон (-100, 100), а в простой — (-200, 200).  

Гистограммы остатков моделей

Добавление и оценка влияния внешнего регрессора BRN6 в модель ARIMA для RIM6 на R

Здесь на верхнем графике ошибки (остатки) модели с дополнительным регрессором fit.arima.reg, а на нижнем — обычной ARIMA fit.arima.

По всем параметрам модель с регрессором fit.arima.reg лучше.

В предсказаниях отклонение цены для модели с регрессором 79.6, а для обычной модели 109.6. 

Характеристики моделей

> fit.arima
Series: cl.RIM6 
ARIMA(0,1,0)                    

sigma^2 estimated as 12012:  log likelihood=-984.25
AIC=1970.51   AICc=1970.53   BIC=1973.59
> fit.arima.reg
Series: cl.RIM6 
ARIMA(0,1,0)                    

Coefficients:
      BRN6.Close
       1321.0798
s.e.    109.7654

sigma^2 estimated as 6337:  log likelihood=-932.6
AIC=1869.19   AICc=1869.27   BIC=1875.36

Код на R

#install.packages("forecast")
#install.packages("tseries")
#install.packages("quantmod")
#install.packages("rusquant", repos="http://R-Forge.R-project.org")
# Установка пакетов. Она не требуется, если уже все установлено.

library(tseries)
library(quantmod)
library(rusquant)
library(forecast)
library(arfima)
# Подключение библиотек. ARFIMA и quantmod пока не используются. 

tickers = c("RIM6", "BRN6")

getSymbols(tickers, src = "Finam", from = Sys.Date()-1, period = "5min")
# Получение данных

cl.RIM6 <- Cl(RIM6)
cl.BRN6 <- Cl(BRN6)
# Цены закрытия

print("Best ARIMA Model")
fit.arima <- auto.arima(cl.RIM6)
print(fit.arima)
# Лучшая простая модель

print("Best ARIMA Model with Externeous regressor")
fit.arima.reg <- auto.arima(cl.RIM6, xreg=cl.BRN6)
print(fit.arima.reg)
# Лучшая модель с дополнительным регрессором

residuals.arima <- residuals(fit.arima)
residuals.arima.reg <- residuals(fit.arima.reg)
# Ошибки (остатки) моделей

par(mfrow=c(2,1))
# Создаем график с 2 строками и 1 столбцом

hist(residuals.arima.reg, breaks=100, col = "green", border = "black")
hist(residuals.arima, breaks=100, col = "green", border = "black")
# Гистограммы

print(predict(fit.arima, n.ahead = 1))
# Предсказание простой модели

lastPredictorValue = cl.BRN6[length(cl.BRN6)]
print(predict(fit.arima.reg, newxreg=c(lastPredictorValue)))
print("last predictor value =")
print(lastPredictorValue)
# Предсказание модели с регрессором для след. момента времени при цене на нефть 51.82


Использованные источники

1. Exogeneous regressors in auto.arima and using them in forecast function in R
2. ARIMA and external regressors in SAS and R
3. ARIMA models with regressors
4. Arima {forecast}


Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
294 | ★18
6 комментариев
оч давно идея была:
— берем n возможных предикторов (нефть, мировые индексы, eurusd, usdjpy, audjpy (тогда еще работало!:); ряд индикаторов долгового и межбанковского рынка и т.п.);
— оцениваем текущее действие каждого на целевой параметр в каком-то окне (m последних баров) 
— выбираем наиболее сильные
— включаем их в auto AR модель (неважно какую из них, пофигу)
— процесс повторяется постоянно

данный вид наглого оверфиттинга кстати как ни странно работал но потом пришел кажется то ли 2006-й то ли 2007й г. с тотальным ростом emerging markets и какими-то местными процессами связанными сначала с либерализацией Газпрома, потом с РАО ЕЭС, в общем приток инвестиций, и все дело поломалось :) Потом еще раз поломалось убившись в какой-то момент волатильностью 2008-2009 г. выпуска :)
avatar
Для большого количества регрессоров нужны VAR/VECM модели, чтобы понимать, где хвост собакой виляет, а где собака — хвостом.
Бобровский Дмитрий, идея была намного проще: из всех выбиралось 2-3 наиболее плотно связанных и все.
avatar
А что использовалось в качестве меры связи?
Бобровский Дмитрий, просто чистый профит алгоритма, с неким примитивным учетом стабильности. тупо перебирались все возможные комбинации без повторений по 2,3,4,5 из примерно 15 регрессоров в качестве вводных для модели, каждый алгоритм прогонялся на 1000 последних 15 минутных баров в последовательных окнах по 100, 200, 500 баров, выкидывались модели превышающие заданный размер дродауна хотя бы единожды, и из оставшихся  выбиралась дающая на ближайшей истории наилучший профит (все это автоматически). Просто постоянный (ежедневный) тупой механический перебор и все. 
avatar
speculair, да, как вариант. Единственный минус — скорость. Представляю, какие вычислительные мощности у Вас были... 

Читайте на SMART-LAB:
Фото
BRENT: Мелкими шагами направляемся вниз
Нефть марки Brent продолжает свое снижение и практически коснулась психологического уровня 70. Под закрытие торговой недели мы можем увидеть...
Фото
Как не пропустить новое ралли в золоте и серебре
В последние дни цены на драгоценные металлы попали под усиленное давление. — Цена золота снижалась под отметку $4000 за тройскую унцию ....
Фото
Насколько точны прогнозы аналитиков? Проверили на отчетностях компаний за первый квартал
Мы сравнили свои прогнозы с фактическими результатами компаний и подвели итоги сезона отчетности. Главные выводы Прогнозы были очень...
Фото
Мой инвест портфель. Структура портфеля, последние действия по портфелю. Состав портфеля валютных облигаций
Сегодня делал действия по портфелю. Кроме того, решил пособирать инфу по счетам и посмотреть как там дела.  

теги блога SciFi

....все тэги



UPDONW
Новый дизайн