Previsão de saída com média móvel simples

Em um post anterior, expliquei a previsão baseada em CAGR. A previsão baseada em CAGR é um método de previsão muito simples que é frequentemente aplicado na indústria, por exemplo, para previsão de vendas e produção.

Modelos de previsão simples têm benefícios. Eles são fáceis de entender e fáceis de implementar. Além disso, eles contêm poucos parâmetros e, portanto, são muito precisos em suas principais suposições. Desta forma, pode-se dizer que métodos simples de previsão são, em muitos casos, os melhores métodos de previsão. Em outras palavras: se você tentar prever o futuro, pode muito bem fazê-lo com um modelo de previsão que você entenda completamente e que possa explicar a qualquer pessoa a qualquer momento.

Nesta postagem, gostaria de apresentar a previsão de séries temporais com base em um cálculo simples de média móvel. As médias móveis, também conhecidas como médias móveis ou meios móveis, são usadas para analisar e pré-processar dados históricos de séries temporais. No entanto, eles podem ser usados ​​para criar um algoritmo de previsão simples.

Eu diferencio a previsão de média móvel simples em duas categorias:

(a) previsão a partir de dados históricos, calculando uma média móvel

(b) o mesmo que (a), mas com um parâmetro de crescimento intrínseco adicional

A categoria (b) é, portanto, uma combinação de previsão baseada em CAGR e previsão de média móvel.

Como a previsão baseada em CAGR, a previsão de média móvel simples pode ser usada apenas para horizontes de tempo limite.

Eu implemento essa abordagem de previsão no exemplo de codificação abaixo, usando uma função que calcula uma média móvel de comprimento definido. Eu implemento essa função no R e a aplico para prever valores futuros. Eu chamo a função de “sma_forecast”. É implementado no código R abaixo:

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)
}

A próxima etapa neste fluxo de trabalho é ler os dados históricos. Neste caso, li dados sobre a produção anual da indústria automotiva por país, medida em número de unidades produzidas em um determinado ano em um determinado país. A última etapa é calcular a previsão, usando o sma_forecast. Tudo isso é feito no exemplo de codificação abaixo, usando 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)

Termino meu exemplo neste ponto.

Coisas que eu poderia ter adicionado:

(a) Divisão em conjunto de treinamento e teste para avaliar o método

(b) Avalie o método para vários países, intervalos de tempo e comprimentos de previsões

(c) Testar a previsão em dados diferentes dos dados de saída de produção

(d) …

Se você achou esta postagem interessante, considere verificar minhas outras postagens, por exemplo, previsão baseada em CAGR, obtenção e análise de dados OICA, análise de séries temporais, programação linear, fontes públicas para dados de vendas da indústria automotiva, etc.

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Close

Meta