단순 이동 평균을 사용한 출력 예측

이전 게시물에서 CAGR 기반 예측에 대해 설명했습니다. CAGR 기반 예측은 판매 및 생산량 예측과 같이 업계에서 자주 적용되는 매우 간단한 예측 방법입니다.

간단한 예측 모델에는 이점이 있습니다. 이해하기 쉽고 구현하기 쉽습니다. 또한 매개 변수가 거의 없으므로 핵심 가정이 매우 정확합니다. 이런 식으로 간단한 예측 방법이 많은 경우에 가장 좋은 예측 방법이라고 말할 수 있습니다. 즉, 미래를 예측하려는 경우 완전히 이해하고 언제든지 누구에게나 설명할 수 있는 예측 모델을 사용하는 것이 좋습니다.

이 게시물에서는 간단한 이동 평균 계산을 기반으로 하는 시계열 예측을 소개하려고 합니다. 롤링 평균 또는 롤링 평균이라고도 하는 이동 평균은 과거 시계열 데이터를 분석하고 전처리하는 데 사용됩니다. 그럼에도 불구하고 간단한 예측 알고리즘을 만드는 데 사용할 수 있습니다.

단순 이동 평균 예측을 두 가지 범주로 구분합니다.

(a) 롤링 평균을 계산하여 과거 데이터에서 예측

(b) (a)와 동일하지만 추가 고유 성장 매개변수가 있음

따라서 범주 (b)는 CAGR 기반 예측과 롤링 평균 예측의 조합입니다.

CAGR 기반 예측과 마찬가지로 단순 이동 평균 예측은 제한 시간 지평에만 사용할 수 있습니다.

정의된 길이의 이동 평균을 계산하는 함수를 사용하여 아래 코딩 예제에서 이러한 예측 접근 방식을 구현합니다. 이 기능을 R로 구현하고 미래 가치 예측에 적용합니다. 저는 이 함수를 “sma_forecast”라고 부릅니다. 아래 R 코드에서 구현됩니다.

sma_forecast = function(past,length){

  future = rep(0,times = length)
  
  prediction = c(past,future)
  
  for(i in (length(past)+1):length(prediction)){
    prediction[i] = mean(prediction[(i-length(past)):(i-1)])
  }
  
  return(prediction)
}

이 워크플로의 다음 단계는 기록 데이터를 읽는 것입니다. 이 경우 특정 국가 내에서 특정 연도에 생산된 단위 수로 측정된 coutry별 자동차 산업의 연간 생산량 데이터를 읽었습니다. 마지막 단계는 sma_forecast를 사용하여 예측을 계산하는 것입니다. 이 모든 작업은 R을 사용하여 아래의 코딩 예제에서 수행됩니다.

library(readxl)
data_df = as.data.frame(read_xls("oica.xls"))
head(data_df)
##   year   country    total
## 1 2018 Argentina   466649
## 2 2018   Austria   164900
## 3 2018   Belgium   308493
## 4 2018    Brazil  2879809
## 5 2018    Canada  2020840
## 6 2018     China 27809196
tail(data_df)
##     year    country    total
## 835 1999     Turkey   297862
## 836 1999    Ukraine     1918
## 837 1999         UK  1973519
## 838 1999        USA 13024978
## 839 1999 Uzbekistan    44433
## 840 1999     Others    11965
library(dplyr)
data_df = filter(data_df,country=="USA")
library(ggplot2)
ggplot(data_df) + 
  geom_path(mapping = aes(x = year, y = total/1000000), 
            size = 2, 
color = "red") + 
  labs(title = "US automotive industry production output",
       subtitle = "historical OICA data, for 1999 - 2018") +
  xlab("year") +
  ylab("output [millions of units]") + 
  ylim(0,15)
library(dplyr)
data_df = data_df %>% arrange(desc(-year))
predictionVals = sma_forecast(past=data_df$total,length = 10)

plot_df = as.data.frame(matrix(nrow=length(predictionVals),ncol= 4))
colnames(plot_df) = c("year","country","total","category")
plot_df$total = predictionVals
plot_df$category[1:nrow(data_df)] = "history"
plot_df$category[(nrow(data_df)+1):length(predictionVals)] = "prediction"
plot_df$year = data_df$year[1]:(data_df$year[1]+length(predictionVals)-1)
plot_df$country = data_df$country[1]

ggplot(plot_df) +
  geom_point(mapping = aes(x = year,
                          y = total/1000000,
                          color = category),
             size = 2) +
  labs(title = "US autmotive industry production output",
       subtitle = "A prediction from historic OICA data, based on moving average calculation") +
  xlab("year") +
  ylab("output [millions of units]") +
  ylim(0,15)

이 시점에서 내 예를 마칩니다.

내가 추가할 수 있었던 것들:

(a) 방법을 평가하기 위한 교육 및 테스트 세트 분할

(b) 다양한 국가, 시간 간격 및 예측 길이에 대한 평가 방법

(c) 생산 출력 데이터와 다른 데이터에 대한 테스트 예측

(라) …

이 게시물이 흥미로웠다면 예를 들어 CAGR 기반 예측, OICA 데이터 획득 및 분석, 시계열 분석, 선형 프로그래밍, 자동차 산업 판매 데이터의 공개 소스 등과 같은 다른 게시물을 확인하는 것이 좋습니다.

You May Also Like

Leave a Reply

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.