일별, 주별 및 연간 주기로 시간별 시계열 예측


12

주요 편집 : 지금까지 그들의 답변에 대해 Dave & Nick에게 큰 감사를 표하고 싶습니다. 좋은 소식은 내가 일할 루프가 있다는 것입니다 (배치 예측에 대한 Hydnman 교수의 게시물에서 빌린 원칙). 미해결 쿼리를 통합하려면 다음을 수행하십시오.

a) auto.arima의 최대 반복 횟수를 늘리는 방법-많은 외인성 변수를 사용하면 auto.arima가 최종 모델에 수렴하기 전에 최대 반복 횟수에 도달 한 것으로 보입니다. 내가 오해하는 경우 수정하십시오.

b) Nick의 한 답변은 시간 간격에 대한 나의 예측은 해당 시간 간격에서만 파생되며 그 전날의 사건의 영향을받지 않는다는 것을 강조합니다. 이 데이터를 다루는 내 본능은 이것이 중요한 문제를 일으키지 않아야한다고 말하지만이를 다루는 방법에 대한 제안에 열려 있습니다.

c) Dave는 예측 변수를 둘러싼 리드 / 래그 시간을 식별하기 위해 훨씬 더 정교한 접근 방식이 필요하다고 지적했습니다. 누구든지 R에서 프로그래밍 방식에 대한 경험이 있습니까? 물론 제한 사항이있을 것으로 예상하지만이 프로젝트를 가능한 한 많이 수행하고 싶습니다. 다른 사람들도이 프로젝트를 사용해야한다는 것을 의심하지 않습니다.

d) 새로운 쿼리이지만 현재 작업과 완전히 관련되어 있습니다. auto.arima는 주문을 선택할 때 회귀자를 고려합니까?

상점 방문을 예측하려고합니다. 이사 휴가, 윤년 및 산발적 사건 (필수적으로 이상치)을 설명 할 수있는 능력이 필요합니다. 이를 바탕으로 ARIMAX가 외생 변수를 사용하여 여러 계절 성과 위에서 언급 한 요소를 모델링하는 최선의 방법이라고 생각합니다.

데이터는 24 시간 간격으로 기록됩니다. 내 데이터의 제로 양, 특히 매우 적은 방문 횟수를 볼 수있는 시간대에 문제가있는 것으로 판명되었습니다. 또한 개관 시간은 비교적 불규칙합니다.

또한 3 년 이상의 과거 데이터를 가진 하나의 완전한 시계열로 예측할 때 계산 시간이 엄청납니다. 나는 매일 시계를 별도의 시계열로 계산하여 더 빨라질 것이라고 생각했으며, 바쁜 시간에 이것을 테스트 할 때 더 높은 정확도를 얻는 것처럼 보이지만 다시는 늦은 / 늦은 시간에 문제가되는 것으로 판명되었습니다. 지속적으로 방문을받지 않습니다. 프로세스가 auto.arima를 사용하면 이점이 있다고 생각하지만 최대 반복 횟수에 도달하기 전에 모델에 수렴 할 수없는 것 같습니다 (따라서 수동 맞춤 및 maxit 절 사용).

방문 = 0 일 때 외인 변수를 만들어 '누락'데이터를 처리하려고했습니다. 다시 말하지만, 방문이없는 유일한 시간은 상점이 하루 동안 문을 닫는 경우에만 더 바쁜 시간에 효과적입니다. 이러한 경우, 외인성 변수는 이전 예측이 끝나고 이전에 닫 히던 날의 영향을 포함하지 않고이를 예측하기 위해이를 성공적으로 처리하는 것으로 보입니다. 그러나 상점이 열려 있지만 항상 방문을받는 것은 아닌 조용한 시간을 예측하는 데이 원칙을 사용하는 방법을 잘 모르겠습니다.

Hyndman 교수의 R의 배치 예측에 대한 게시물의 도움으로 24 시리즈 예측에 대한 루프를 설정하려고하지만 오후 1시 이후에는 예측하고 싶지 않아 이유를 알 수 없습니다. "optim (init [mask], armafn, method = optim.method, hessian = TRUE, : finite-finite finite-difference value [1]"오류가 발생하지만 모든 계열의 길이가 같고 본질적으로 같은 매트릭스, 왜 이런 일이 일어나고 있는지 이해할 수 없습니다. 이것은 매트릭스가 전체 순위가 아님을 의미합니다. 아니요?이 접근법에서 이것을 피할 수 있습니까?

https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip

date()

#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")

#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)


fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))

#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
                    Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
                Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
                    Nodata=XREGFDATA$NoData,
                NewYearsDay=XREGFDATA$NewYearsDay,
                    GoodFriday=XREGFDATA$GoodFriday,
                EasterWeekend=XREGFDATA$EasterWeekend,
                    EasterMonday=XREGFDATA$EasterMonday,
                MayDay=XREGFDATA$MayDay,
                    SpringBH=XREGFDATA$SpringBH,
                SummerBH=XREGFDATA$SummerBH,
                    Christmas=XREGFDATA$Christmas,
                BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]

NoFcast <- 0

for(i in 1:24) {

  if(max(INPUT[,i+1])>0) {

  #The exogenous variables used to fit are the same for all series except for the
  #'Nodata' variable. This is to handle missing data for each series
   xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
                     Month=model.matrix(~as.factor(INPUT$MONTH)),
                 Week=model.matrix(~as.factor(INPUT$WEEK)),
                     Nodata=ifelse(INPUT[,i+1] < 1,1,0),
                     NewYearsDay=INPUT$NewYearsDay,
                 GoodFriday=INPUT$GoodFriday,
                     EasterWeekend=INPUT$EasterWeekend,
                 EasterMonday=INPUT$EasterMonday,
                     MayDay=INPUT$MayDay,
                 SpringBH=INPUT$SpringBH,
                     SummerBH=INPUT$SummerBH,
                 Christmas=INPUT$Christmas,
                     BoxingDay=INPUT$BoxingDay))
  xreg <- xreg[,c(-1,-8,-20)]

  ARIMAXfit <- Arima(TS[,i], 
                     order=c(0,1,8), seasonal=c(0,1,0),
                     include.drift=TRUE,
                     xreg=xreg,
                     lambda=BoxCox.lambda(TS[,i])
                     ,optim.control = list(maxit=1500), method="ML")  


  fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean

 } else{
  NoFcast <- NoFcast +1
 }
}

#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))


date()

나는 이것에 관한 방법에 대한 건설적인 비판 과이 스크립트가 작동하는 데 도움이되는 것에 대해 완전히 감사하겠습니다. 사용 가능한 다른 소프트웨어가 있음을 알고 있지만 여기에서 R 및 / 또는 SPSS 사용으로 엄격하게 제한됩니다 ...

또한 저는이 포럼을 처음 접했습니다. 가능한 한 완전한 설명을 제공하고, 이전에 수행 한 연구를 설명하고, 재현 가능한 예를 제공하려고 노력했습니다. 이것이 충분하기를 희망하지만 내 게시물을 개선하기 위해 제공 할 수있는 다른 것이 있으면 알려주십시오.

편집 : Nick은 먼저 일일 합계를 사용하도록 제안했습니다. 나는 이것을 테스트했으며 외생 변수는 매일, 매주 및 매년 계절을 포착하는 예측을 생성한다고 덧붙여 야합니다. Nick이 언급했듯이 특정 날짜의 오후 4시에 대한 예측은 하루의 이전 시간에 영향을받지 않지만 이것은 내가 매 시간을 별도의 시리즈로 예측하는 다른 이유 중 하나였습니다.

편집 : 09/08/13, 루프의 문제는 단순히 테스트에 사용한 원래 주문과 관련이 있습니다. 나는 이것을 빨리 발견하고 auto.arima 가이 데이터로 작업하기 위해 더 긴급하게 노력해야합니다-위의 a) & d)를 참조하십시오.


또한 fourier를 사용하여 계절성을 돌 보려고 시도했지만 같은 오류 "optim (init [mask], armafn, method = optim.method, hessian = TRUE, : finite-finite finite-difference value [1]의 오류")와 같은 오류가 반환되었습니다. 다른 외인성 변수없이 자체적으로 매트릭스로 사용되는 경우에도 그 이유가 무엇인지 설명해 주시겠습니까?
krcooke

데이터를 다시 업로드 할 수 있습니까?
MyHeadHurts

답변:


4

불행히도 R과 SPSS로 제한되어 있기 때문에 임무가 실패로 끝났습니다. 작동 할 수있는 각 이벤트 / 휴일 / 외생 변수에 대한 리드 및 지연 관계 구조를 식별해야합니다. SPSS가 수행 할 수없는 가능한 시간 추세를 감지해야합니다. 통합 된 조정 된 예측을 제공하려면 매일 추세 / 예측을 각 시간별 예측에 통합해야합니다. 매개 변수 변경 및 분산 변경에 관심이 있어야합니다. 도움이 되었기를 바랍니다. 우리는 이러한 종류의 데이터를 몇 년 동안 자동 방식으로 모델링 해 왔으며 물론 사용자 지정 컨트롤 옵션도 있습니다.

편집 : OP가 요청 한대로 전형적인 분석을 제시합니다. 바쁜 시간이면 하나를 가져 와서 매일 모델을 개발했습니다. 완전한 분석에서 예측을 조정하기 위해 24 시간 모두가 개발되고 일일 모델도 개발 될 것입니다. 다음은 모델의 일부 목록입니다 여기에 이미지 설명을 입력하십시오. 유의미한 회귀 분석기 (실제 리드 및 지연 구조는 생략 됨) 외에도 계절성, 레벨 변화, 일일 효과, 일일 효과의 변화 및 역사와 일치하지 않는 특이한 값을 반영하는 지표가있었습니다. 모델 통계는 여기에 이미지 설명을 입력하십시오입니다. 다음 360 일에 대한 예측 도표가 여기에 표시됩니다 여기에 이미지 설명을 입력하십시오. 실제 / 적합 / 예측 그래프는 결과를 깔끔하게 요약합니다.여기에 이미지 설명을 입력하십시오. 이처럼 엄청나게 복잡한 문제에 직면했을 때 많은 용기, 경험 및 컴퓨터 생산성 보조 도구와 함께 나타나야합니다. 기본 도구를 사용하여 문제를 해결할 수 있지만 반드시 그런 것은 아니라는 것을 경영진에게 알려주십시오. 이전 의견이 매우 전문적이고 개인적 강화와 학습에 중점을 두었 기 때문에 귀하의 노력에 계속 격려가 되길 바랍니다. 이 분석의 예상 값을 알고 추가 소프트웨어를 고려할 때이를 지침으로 사용해야한다고 덧붙입니다. 아마도 "감독"을이 어려운 과제에 대한 가능한 해결책으로 향하게하려면 더 큰 목소리가 필요할 것입니다.

일일 총계와 24 개의 시간별 모델을 검토 한 후 방문 횟수가 심각한 하락세에 있음을 분명히 나타냅니다! 예비 구매자에 의한 이런 종류의 분석은 비구매를 암시하지만 판매자는이 매우 부정적인 예측에 기초하여 사업을 판매하려는 노력을 두 배로 늘리는 것이 현명 할 것입니다.


안녕하십니까, 시간을내어 질문을 읽고 답변 해 주셔서 감사합니다. 귀하의 소프트웨어가 다른 대안을 능가하지만 안타깝게도 당분간 나에게는 옵션이 아닙니다. R의 기능을 알고 있으면 이미 수행 한 작업을 개선 할 수있는 조언이 있습니까? 종류,
krcooke

@krcooke 적절한 회귀 응답을 찾기 위해 각 회귀 자 주변의 방문과 대체 리드 / 래그 간의 상호 상관 관계를 조사 할 수 있습니다. 일부 회귀자는 일부 시간에는 유용하지만 다른 시간에는 유용하지 않을 것이라는 점에 전적으로 동의합니다. SAS에서는 인과 관계가 있거나 SPSS에서 사용 불가능할 때 4 가지 종류의 이상치 (펄스, 레벨 시프트, 계절 펄스 및 시간 추세)를 감지 할 수없는 경우 SAS에서 사용할 수 없습니다. 데이터를 다운로드했으며 AUTOBOX를 사용합니다. 우리는 항상 분석 자료를 강화하기 위해 귀하와 같은 "엄격한 데이터"를 찾고 있습니다.
IrishStat

안녕 데이브, 나는 회귀 분석을 둘러싼 무엇을 할 수 있는지 볼 것이다. 필자가 사용한 회귀 분석 도구는 매우 '표준'이며 이러한 모든 상점에 영향을 줄 수 있다고 생각했습니다. 나는 Jubilee 은행 휴일 주말을 Nick의 의견에서 예로 사용했습니다. 이것은 아마도 회귀자를 사용하면 도움이 될 것이지만 지금은 이것을 포함시키지 않았습니다. 그리고 데이터로 무엇을 할 수 있는지 알고 싶습니다. 다시 감사합니다.
krcooke

7
" 불행히도 당신의 임무는 R과 SPSS로 제한되어 있기 때문에 실패로 끝날 것입니다. "-이 의견은 불행히도 너무 멀다. 어떤 튜링 완전한 언어는 똑딱 스위치에 의해 기계 코드 만 프로그래밍 및 완전히 레고로 구현되는 경우에도, 다른 어떤로 작성된 모든 알고리즘을 구현할 수 있습니다. 다른 것으로는 할 수없는 계산은 없습니다. AUTOBOX에 대한 마법의 속성을 주장하지 않는 한 "바닐라 분포의 함수로 이미 사용 가능"과 같은 것을 차이점으로 생각합니다.
Glen_b-복지 주 모니카

@Glen_b 내가 말한 것은 사용중인 바닐라 배포판의 화력이 새로운 절차를 작성하는 데 많은 시간이없는 한 당면한 문제를 해결하기에 충분하지 않다는 것입니다.
IrishStat

10

이것은 주석 묶음에 지나지 않지만 해당 형식에 비해 너무 길 것입니다. 나는 시계열 아마추어에 지나지 않지만 간단한 제안이 있습니다.

  1. 당신은 여기 명령을 받았을 지 모르지만, 이것이 당신이 성취 할 것으로 예상되는 것과 당신에게 가장 중요한 것의 측면에서 약간의 개선이 필요하다고 생각합니다. 안타깝게도 방문 예측은 퍼지 목표입니다. 예를 들어 오후 4시이고 1 시간 전에 방문을 예측한다고 가정합니다. 이전 시리즈 전체를 처리 한 수퍼 모델이 정말로 필요합니까? 이것은 실제적인 실용적 및 / 또는 과학적 목표에 대한 고려에서 비롯된 것이어야하며, 이는 상급자 나 의뢰인에 의해 규정되거나 연구원으로서 자신의 것일 수 있습니다. 다른 목적으로 다른 모델이 필요할 가능성이 더 높습니다.

  2. 시간별 시리즈를 분리하는 것은 얼마나 많은 의미를 고려하지 않고 계산을 줄이려는 아이디어에 의해 추진되는 것 같습니다. 따라서 오늘 오후 4시에 일어난 일을 예측하기 위해 오늘 오후의 정보를 사용하지 않을 것입니다. 많은 이야기가 필요한 것 같습니다.

  3. 당신은 분명히 시계열의 학습자이고 (그리고 나는 자신을 동위에두고 있습니다) 학습자는이 큰 문제로 시작해서는 안됩니다. 정말! 많은 데이터가 있고 여러 규모의주기가 있으며 개관 시간과 휴일의 불규칙성이 있으며 외생 변수가 있습니다. 매우 어려운 문제를 선택했습니다. (트렌드도 어떻습니까?) 말하기는 쉽지만 지금까지는 지나갔습니다. 문제의 단순화 된 버전을 먼저 작업하고 더 간단한 모델을 맞추는 방법에 대한 느낌을 얻어야 할 수도 있습니다. 크고 복잡한 모델에 모든 것을 던지는 것은 분명히 잘 작동하지 않으며, 근본적으로 더 간단한 것이 필요하거나 프로젝트가 너무 야심적이라는 실현이 필요합니다.


닉 안녕하세요, 1- 참으로 명령을 받고 있습니다! 목표는 모델이 너무 과대 예측되거나 (직원 낭비 시간이 길어 지거나) 저 예측 (직원이 압도적이지 않도록)되지 않도록 모델을 구축하는 것입니다. 2- 나는 이것을 고려했지만이 방법으로 얻을 수있는 것을 이해하기 위해 더 깊이 파고들 것이다. 하나의 시리즈로 예측하는 것은 '슈퍼 모델'과 비슷해 보였습니다. 3- 나는 이것이 매우 어렵다는 것을 알고 있으며 현재 무게보다 더 많이 펀칭하고 있지만 여기에서도 나에게 도움이되는 더 간단한 솔루션에 완전히 개방되어 있습니다. 당신의 생각에 감사합니다, Nick.
krcooke

더 간단한 해결책으로 작년 주말 기간이 올해 (동일한 기간) 과잉 예측되는 방식으로 지수 평활 기법을 사용할 수 없었습니다. 관련된 특이 치 때문에 외부 변수를 사용해야한다고 생각했습니다. 내가 알아볼 수있는 다른 아이디어가 있습니까?
krcooke

내가 말할 수있는 것은 내가 명령을 받고 여기에 당신이 제공 한 정보를 가지고 있다면 내가 할 것입니다. 내 본능은 먼저 총계로 집계되어 그와 함께 일할 것입니다. 충분하지 않습니다. 여기에 비판하기가 훨씬 쉽습니다 ....
Nick Cox

닉 안녕, 내 잘못, 나는 이것을 시도했다고 이미 말 했어야했다. 일일 합계로 결과가 합리적으로 보였습니다. 당신과 데이브가 말했듯이 여기에 고려해야 할 것이 훨씬 많기 때문에 핵심 단어가됩니다. 관심이 있다면 일별 데이터를 다시 실행하여 주별, 월별 및 연간 계절을 캡처하고 있음을 보여줄 수 있습니다. 그래서 나는 매시간을 매일 시리즈로 예측하려고 생각했습니다.
krcooke

첫 번째 게시물에서 언급했듯이 문제 중 하나는 auto.arima가 수렴하기 전에 최대 반복 횟수에 도달하므로 Arima ()와 함께 매우 일반적인 매개 변수를 사용하는 이유입니다. 이 문제를 극복 할 수있는 방법에 대한 조언은 대단히 감사하겠습니다!
krcooke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.