Прогноз Холта Уинтерса с несколькими входными переменными
Для контекста, я начинающий пользователь R, поэтому, пожалуйста, прости любую неправильную терминологию / процессы. Я активно пытаюсь улучшить свои навыки кодирования, но в последнее время зашла в тупик.
У меня есть следующий набор данных, где A * B * C = Выход:
Дата A B C Выходной
01.01.2013 177352 0,908329198 0,237047935 38187
1/2/2013 240724 0,852033865 0,237273592 48666
03.01.2013 243932 0.908380204 0.237039845 52524
04.01.2013 221485 0.820543152 0.236356733 42955
05.01.2013 202590 0.818066045 0.240900973 39925
06.01.2013 238038 0.770057722 0.247344561 45339
07.01.2013 271511 0.794258796 0.241252029 52026
08.01.2013 283434 0.807817693 0.233810703 53534
09.01.2013 275016 0.843220031 0.243769917 56530
10.01.2013 255266 0,797791324 0,238562428 48583
11.01.2013 226564 0.815791564 0.236153417 43648
12.01.2013 214366 0.800066242 0.237961133 40812
13.01.2013 256946 0.764845532 0.237640186 46702
14.01.2013 282298 0.816537843 0.234257528 53998
У меня есть данные за несколько лет, и я пытаюсь прогнозировать выходные данные, используя A, B и C. Однако, когда я моделирую A, B и C по отдельности, выходные данные становятся очень искаженными. Если я прогнозирую только выход, то я теряю входные факторы.
Каков наилучший пакет / код для выполнения этой задачи? Я пробовал поискать и искать здесь множество различных методов, но не нашел решения, которое искал.
Вот часть кода:
DataSet1[,"Date"] <- mdy(DataSet[,"Date"])
DataSet1
TotalSet <- ts(DataSet1, frequency = 365, start =c(2013,1))
DataA <- ts(DataSet1$A, frequency = 365, start = c(2013,1))
DataB <- ts(DataSet1$B, frequency = 365, start = c(2013,1))
DataC <- ts(DataSet1$C, frequency = 365, start = c(2013,1))
OutputData <- ts(DataSet$Output, frequency = 365, start = c(2013,1))
ADecompose <- decompose(DataA)
BDecompose <- decompose(DataB)
CDecompose <- decompose(DataC)
OutputDecompose <- decompose(OutputData)
DataAHW <- HoltWinters(DataA, seasonal = "mult")
DataBHW <- HoltWinters(DataB, seasonal = "mult")
DataCHW <- HoltWinters(DataC, seasonal = "mult")
OutputDataHW <- HoltWinters(OutputData, seasonal = "mult")
FC.A <- forecast.HoltWinters(DataAHW)
FC.B <- forecast.HoltWinters(DataBHW)
FC.C <- forecast.HoltWinters(DataCHW)
FC.Output <- forecast.HoltWinters(OutputDataHW)
plot(ForecastVisits)
plot(ForecastCPV)
plot(ForecastRPC)
plot(ForecastRevenue)
Вот еще одна модель, которую я построил для выхода, и я подключил к ней A, B и C по отдельности, а затем объединил их в Excel. Я уверен, что есть более подходящий способ справиться с этим, но, учитывая мой недостаток опыта, я обращаюсь за помощью
dataset <- testData
##FORECAST
forecastingFuntion <- function(dataset, lenghtOfForecast)
{
dataset[,"Date"] <- mdy(dataset[,"Date"])
myts <- ts(dataset[,"DataSet$Output"], start = c(2013,1), frequency = 365)
hwModel <- HoltWinters(myts, seasonal = "mult")
future <- data.frame(predict(hwModel, n.ahead = lenghtOfForecast, level = 0.9))
fittedValues <- data.frame(as.numeric(hwModel$fitted[,"xhat"]))
names(fittedValues) <- "fit"
futureDates <- c()
predicitedValues <- rbind(fittedValues, future)
for(i in 1: lenghtOfForecast)
{
futureDateSingle <- data.frame(dataset[nrow(dataset),"Date"] + days(i))
futureDates <- rbind(futureDates, futureDateSingle)
}
names(futureDates) <- "Date"
dates <- data.frame(dataset[366:(nrow(dataset)),"Date"])
names(dates) <- "Date"
dates <- rbind(dates, futureDates)
predictedData <- data.frame(predicitedValues, dates)
names(predictedData) <- c("predictedValues","Date")
finalData2 <- mergeData <- merge(predictedData, dataset, all.x = T, all.y = F, by = "Date")
finalData2
}
finalData2 <- forecastingFuntion(testData, 612)
rm(list=setdiff(ls(), c("finalData2")))
write.csv(finalData2, file="B2BForecastVisits.csv")
Спасибо!