2017-11-18 6 views
2

제품 및 쇼핑몰에 관한 예측을 수행해야합니다. 내 데이터 세트의 일부.R :: 예측 2 요인 예측

date  mall product price 
01.01.2017 mall1 prod1 94 
01.01.2017 mall1 prod1 65 
01.01.2017 mall1 prod1 50 
01.01.2017 mall1 prod1 92 
01.01.2017 mall1 prod2 97 
01.01.2017 mall1 prod2 80 
01.01.2017 mall1 prod2 51 
01.01.2017 mall1 prod2 90 
01.01.2017 mall1 prod3 52 
01.01.2017 mall1 prod3 73 
01.01.2017 mall1 prod3 59 
01.01.2017 mall1 prod3 85 
01.01.2017 mall2 prod1 56 
01.01.2017 mall2 prod1 60 
01.01.2017 mall2 prod1 89 
01.01.2017 mall2 prod1 87 
01.01.2017 mall2 prod2 77 
01.01.2017 mall2 prod2 79 
01.01.2017 mall2 prod2 99 
01.01.2017 mall2 prod2 59 
01.01.2017 mall2 prod3 98 
01.01.2017 mall2 prod3 50 
01.01.2017 mall2 prod3 54 
01.01.2017 mall2 prod3 98 
02.01.2017 mall1 prod1 60 
02.01.2017 mall1 prod1 68 
02.01.2017 mall1 prod1 65 
02.01.2017 mall1 prod1 81 
02.01.2017 mall1 prod2 74 
02.01.2017 mall1 prod2 63 
02.01.2017 mall1 prod2 88 
02.01.2017 mall1 prod2 71 
02.01.2017 mall1 prod3 67 
02.01.2017 mall1 prod3 73 
02.01.2017 mall1 prod3 62 
02.01.2017 mall1 prod3 57 
02.01.2017 mall2 prod1 51 
02.01.2017 mall2 prod1 65 
02.01.2017 mall2 prod1 100 
02.01.2017 mall2 prod1 67 
02.01.2017 mall2 prod2 74 
02.01.2017 mall2 prod2 70 
02.01.2017 mall2 prod2 60 
02.01.2017 mall2 prod2 97 
02.01.2017 mall2 prod3 90 
02.01.2017 mall2 prod3 100 
02.01.2017 mall2 prod3 72 
02.01.2017 mall2 prod3 50 

각 쇼핑몰의 제품마다 2 일 전에 미리 예측해야합니다. 도서관에서 R 을 검색하고 라이브러리 :: forecast를 (를) 찾았을 때 ets 기능으로이 포럼을 찾았습니다. 그래서 각 쇼핑몰의 각 제품에 대한 예측을 수행하는 루프 또는 함수를 작성하는 방법. 이상적으로, 출력은

date  mall product price 
03.01.2017 mall1 prod1 pred.value 
03.01.2017 mall1 prod2 pred.value 
03.01.2017 mall1 prod3 pred.value 
03.01.2017 mall1 prod4 pred.value 
03.01.2017 mall2 prod1 pred.value 
03.01.2017 mall2 prod2 pred.value 
03.01.2017 mall2 prod3 pred.value 
03.01.2017 mall2 prod4 pred.value 
04.01.2017 mall1 prod1 pred.value 
04.01.2017 mall1 prod2 pred.value 
04.01.2017 mall1 prod3 pred.value 
04.01.2017 mall1 prod4 pred.value 
04.01.2017 mall2 prod1 pred.value 
04.01.2017 mall2 prod2 pred.value 
04.01.2017 mall2 prod3 pred.value 
04.01.2017 mall2 prod4 pred.value 

어떤 도움이 가치가 있어야합니다.

+0

교육 일정은 얼마입니까? 그리고 어느 정도의 시간을 예측하고 싶습니까? 귀하의 질문은 명확하지 않습니다 – DataTx

+0

@DataTx, 내 질문이 명확하지 않은 이유는 무엇이라고 생각합니까? 분명히 이것이 일일 데이터이고 예측 (Y)은 2 일 전입니다. 이것은 데이터 세트의 일부입니다. 특별히 무엇을 이해하지 못합니까 :) – varimax

답변

2

본질적으로 2 일 전에, (제품 수) x (몰 수) 변수를 포 캐스팅합니다. 모든 데이터는 각 제품, 각 쇼핑몰의 제품 가격으로 매일 제한됩니다.

먼저해야 할 일은 예측을 어떻게 생성 할지를 결정하기 위해 어떤 방식으로 비교할 예측 모델 집합을 지정하는 것입니다. ARIMA 유형 모델 또는 지원 벡터 회귀와 같은 비모수 방법을 사용하여 현재 가격과 관련된 현재 가격을 사용할 수 있습니다.

ARIMA 유형 모델을 사용하고 ARMA (1,1) 모델과 AR (2) 모델을 비교하고자한다고 가정 해 보겠습니다. 아이디어는 결국 데이터 세트의 일부를 선택하는 것입니다. 데이터 세트의 마지막 20 %는 보관합니다. 지난 이틀 동안 처음 80 %를 뺀 다음 AR (2)와 ARMA (1,1)를 계산합니다. 그런 다음 그것을 사용하여 남겨둔 20 %의 첫날을 예측합니다. 그런 다음 하루의 끝까지 이동합니다. 추정치를 항상 같은 수의 데이터 요소에 유지하려는 경우 첫 번째 관측 값을 버릴 수도 있습니다. 모든 모델을 다시 추정하고 두 번째 예측을 생성합니다. 모든 모델에 대해 모든 예측치를 산출합니다.

그러면 실현 된 가치를 알기 때문에 데이터 집합의 마지막 20 % 동안 모든 단일 모델에 대해 2 일 전에 예측 오류를 계산할 수 있습니다. 평균 제곱 오류, 평균 절대 오류, 올바른 부호 예측의 백분율, 예상 값을 중심으로 한 간격으로 떨어지는 오류 백분율을 측정 할 수 있습니다. 예를 들어 다음과 같은 방법을 사용하여 다양한 다른 통계적 성능 측정치를 생성 할 수 있습니다. 그 오류. 그러한 모든 통계는 모든 모델의 순위를 매기는 데 도움이됩니다. 통계가 많은 경우 원한다면 모델이 스파이더 차트를 사용하여 수행되는 방식을 시각화 할 수 있습니다.

자, 어떻게 코딩합니까? 데이터를 시뮬레이션하고 시드가 제공되므로 각 부분의 작동 방식을 볼 수 있습니다. 기본적으로 하위 샘플을 선택하고 모델을 추정하고 각 모델에 대해 해당 하위 샘플에 대한 오류를 예측 및 수집합니다. 일을 더 복잡하게 만들려면 루프에 다른 레이어를 추가하여 많은 AR (p) 및 ARMA (p, q) 모델을 거쳐 BIC 값을 수집하고 예측을 최소 BIC 값으로 생성 할 수 있습니다. AR 모델의 최소 자승 추정치를 코드화하여 반복 예측을 생성하는 대신 ('예측'은 ARIMA 모델의 구조를 사용하여 반복적 인 방정식을 통해 예측을 생성합니다) 직접 예측을 생성 할 수 있습니다. 직접 예측이란 예측의 지평에서 시작 시점을 의미합니다. 여기에서 y_ {t + 2} = 상수 + phi_1 y_t + ... + phi_p y_ {tp} + e_ {t + h}가됩니다. y_ {t + 1}을 건너 뜁니다.

AR 모델의 직접 예측은 약간 더 나은 경향이 있습니다. ARMA에 관해서는, 예측을 위해 p> q를 권고하지 않습니다. ARMA (1,1)는 무한 MA와 AR에 대한 1 차 근사법이므로 복잡한 (그러나 선형) 응답을 포착합니다. 분명히 원하는 경우 'e1071'과 같은 패키지를 사용하고 지원 벡터 머신을 교육 할 수 있습니다.하이퍼 매개 변수와 커널 매개 변수를 조정할 수있는 조정 기능과 서브 샘플링 및 예측 기능을 사용하여 선택 사항을 생성하고 예측을 생성합니다. 코드 전체에서 볼 수있는 것보다 복잡하지 않습니다.

그리고, 당신이 그것에 대해 생각하지 않은 경우 당신은 몇 예측 모델이되면, 당신은 예측의 평균, 예측 또는 예측 모델로 예측 최적화 된 볼록 조합의 중간 값을 사용할 수 있습니다 - 그 경향 가장 좋을 때 비교할 모델이 몇 개 있으면 더 힘들지도 않고 길지 않습니다.

library(forecast) 

set.seed(1030) 
e <- rnorm(n=1000, sd=1, mean=0) # Create errors for simulation 
y <- array(data=0, dim=c(1000,1)) # Create vector to hold values 
phi <- 0.8 

# Simulate an AR(1) process 
for (i in 2:length(y)){ 
    y[i,1] <- phi*y[i-1,1] + e[i] 
} 

# Now, we'll use only the last half of the sample. It doesn't matter that 
# we started at 0 because an AR(1) procees with abs(phi) < 1 is ergodic and 
# stationnary. 
y <- y[501:1000,1] 

# Now we have data, we can estimate a model and produce an out-of-sample 
# exercise: 
poos <- c(250:length(y))      # We use the last half 
forecast_ar <- array(NA, dim=c(length(poos))) # Same size as poos 
forecast_arma <- forecast_ar 
error <- forecast_ar 
error_arma <- error 

for (i in poos){ 
    # AR model 
    a <- Arima(y = y[1:(i-2)],   # Horizon = 2 periods 
      order = c(1,0,0), 
      seasonal = c(0,0,0), 
      include.constant = TRUE) # We estimate an AR(1) model 
    forecast_ar[i] <- forecast(a, h=2)$mean[2] 
    error[i] <- y[i] - forecast_ar[i] 

    # ARMA model 
    a <- Arima(y = y[1:(i-2)],   # Horizon = 2 periods 
      order = c(1,0,1), 
      seasonal = c(0,0,0), 
      include.constant = TRUE) # We estimate an ARMA(1,1) model 
    forecast_arma[i] <- forecast(a, h=2)$mean[2] 
    error_arma[i] <- forecast_arma [i] 
} 
+0

아주 좋아요, 고마워요. – varimax