Арима с регрессорами

У меня есть некоторые ежеквартальные данные о транзакциях, которые я могу прогнозировать очень точно. Однако каждые 4-5 лет в компании происходит изменение цены, в результате чего прогнозы становятся намного ниже или выше, чем фактическая сумма. Каков наилучший способ настроить это, используя Arima?

Мои данные начинаются в 08Q1 и заканчиваются в 15Q1. Первое изменение цены произошло в 11Q3, а второе произошло в 15Q1.

data <- ts(c(155782698, 159463653.4, 172741125.6, 200266239.9, 126129831.8, 138648461.5, 135678842.1, 242568446.1, 177019289.3, 200397120.6, 182516217.1, 306143365.6, 215193973.8, 239062450.2, 229124263.2, 370575384.7, 257757410.5, 256125841.6, 231879306.6, 415059425.9, 258567845, 274423841.3, 261799212.9, 429126949.7, 254770376.5, 329422935.1, 264029599.1, 493122080.3, 283776872.9), start=c(8,1), deltat=1/4)

dates <- c("08Q1", "08Q2", "08Q3", "08Q4", "09Q1", "09Q2", "09Q3", "09Q4", "10Q1", "10Q2", "10Q3", "10Q4", "11Q1", "11Q2", "11Q3", "11Q4", "12Q1", "12Q2", "12Q3", "12Q4", "13Q1", "13Q2", "13Q3", "13Q4", "14Q1", "14Q2", "14Q3", "14Q4", "15Q1")

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

1 ответ

Построить фиктивную переменную для изменения цены:

prices <- matrix(0, length(dates), 2)

prices[16:29,1] <- 1
prices[29,2] <- 1

это не лучший способ построить манекен, но самый быстрый. Я только что посмотрел на позицию "11Q3", то есть 16, а "15Q1", то есть 29. Так что я говорю, фиктивная 1 для периода 11Q3 - 15Q1 и фиктивная 2 для 15Q1

А затем построить модель:

model_reg <- arima(data, xreg = prices)

сравнить с:

model <- arima(data)

Затем, чтобы предсказать 3 следующих квартала, которые вы используете:

predict(model, 3)
predict(model_reg, 3, newxreg = matrix(1, 3, 2))

Данные:

data <- ts(c(155782698, 159463653.4, 172741125.6, 200266239.9, 126129831.8, 138648461.5, 135678842.1, 242568446.1, 177019289.3, 200397120.6, 182516217.1, 306143365.6, 215193973.8, 239062450.2, 229124263.2, 370575384.7, 257757410.5, 256125841.6, 231879306.6, 415059425.9, 258567845, 274423841.3, 261799212.9, 429126949.7, 254770376.5, 329422935.1, 264029599.1, 493122080.3, 283776872.9), start=c(8,1), deltat=1/4)

dates <- c("08Q1", "08Q2", "08Q3", "08Q4", "09Q1", "09Q2", "09Q3", "09Q4", "10Q1", "10Q2", "10Q3", "10Q4", "11Q1", "11Q2", "11Q3", "11Q4", "12Q1", "12Q2", "12Q3", "12Q4", "13Q1", "13Q2", "13Q3", "13Q4", "14Q1", "14Q2", "14Q3", "14Q4", "15Q1")
Другие вопросы по тегам