Introdução


Imagine que você trabalhe na Kibon e que um dos C levels da empresa lhe fizesse as seguintes demandas:


a) Estimativa de vendas do produto para os próximos 6 meses;
b) Ele diz que o país está em um momento de crise e pode ser que a renda das famílias caiam, mas ele não tem certeza sobre essa afirmação. O que você propõe?;
c) Ele diz que a empresa está pensando em aumentar o preço do Chicabon em 10% e lhe pergunta se isso irá afetar as vendas;
d) O presidente lhe informa que o carnaval é a época do ano que mais vende Chicabon, mas ele está preocupado com as notícias de que o El Niño fará as temperaturas caírem aproximadamente 10% em todo Brasil e ele pergunta como serão as vendas se isso realmente acontecer;
e) Ele lembra também de uma campanha de marketing que ocorrerá no final do ano e que pretende fazer um contrato com a empresa de marketing baseado no aumento das vendas, o que você propõe?

Imagem meramente ilustrativa. Os números usados no exercício não refletem a venda deste produto

Imagem meramente ilustrativa. Os números usados no exercício não refletem a venda deste produto


Bem, vamos responde-lo seguindo as seguintes etapas:

Leitura dos dados

Carregue o conjunto de dados e trace as variáveis cons (consumo de sorvete), temp (temperatura), renda e preço;

library(ggplot2)
library(gridExtra)
# Estou lendo o dado diretamente do meu github
df <- read.csv("https://raw.githubusercontent.com/pedrocostaferreira/BigDataDataScience/master/TimeSeries/Icecream.csv")


p1 <- ggplot(df, aes(x = X, y = cons)) +
  ylab("consumo") +
  xlab("") +
  geom_line() +
  expand_limits(x = 0, y = 0)
p2 <- ggplot(df, aes(x = X, y = temp)) +
  ylab("Temperatura") +
  xlab("") +
  geom_line() +
  expand_limits(x = 0, y = 0)
p3 <- ggplot(df, aes(x = X, y = income)) +
  ylab("renda") +
  xlab("Period") +
  geom_line() +
  expand_limits(x = 0, y = 70)
p4 <- ggplot(df, aes(x = X, y = price)) +
  ylab("preço") +
  xlab("Period") +
  geom_line() +
  expand_limits(x = 0, y = 0.25)
grid.arrange(p1, p2, p3, p4, ncol=1, nrow=4)

Modelagem

Modelo ARIMA univariado

Agora vamos estimar um modelo ARIMA para os dados sobre consumo de sorvete usando a função auto.arima(). Em seguida, passe o modelo como entrada para a função forecast para obter uma previsão para os próximos 6 períodos (ambas as funções são do pacote forecast).

library(forecast)
library(BETS)
consumo <- ts(df$cons, start = c(2010,1), frequency = 12)
ts.plot(consumo)

fit_cons_auto <- auto.arima(consumo)
fit_cons_auto
## Series: consumo 
## ARIMA(0,0,0)(0,1,0)[12] with drift 
## 
## Coefficients:
##        drift
##       0.0017
## s.e.  0.0010
## 
## sigma^2 estimated as 0.00253:  log likelihood=28.79
## AIC=-53.58   AICc=-52.78   BIC=-51.8
checkresiduals(fit_cons_auto)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,0,0)(0,1,0)[12] with drift
## Q* = 13.227, df = 5, p-value = 0.02134
## 
## Model df: 1.   Total lags used: 6

Pontos de atenção

As nossas séries temporais são pequenas (apenas 30 dados), por isso não vamos dividir em treino e teste;

A função auto.arima() não identificou nenhum modelo (observe também que o resíduo está bem estranho), por isso, faremos isso através do teste de sobrefixação.

Vamos executar o teste de sobrefixação

fit_cons1 <- Arima(consumo, order = c(1,0,0), seasonal = c(1,0,0))
t_test(fit_cons1)
##              Coeffs Std.Errors         t Crit.Values Rej.H0
## ar1       0.8383294 0.12353000 6.7864440    2.048407   TRUE
## sar1      0.1700281 0.23967053 0.7094243    2.048407  FALSE
## intercept 0.3871271 0.04800441 8.0644080    2.048407   TRUE
fit_cons2 <- Arima(consumo, order = c(1,0,0), seasonal = c(0,0,1))
t_test(fit_cons2)
##              Coeffs Std.Errors         t Crit.Values Rej.H0
## ar1       0.8127006 0.13691919 5.9356223    2.048407   TRUE
## sma1      0.3057879 0.32504532 0.9407548    2.048407  FALSE
## intercept 0.3839336 0.04395014 8.7356621    2.048407   TRUE
fit_cons3 <- Arima(consumo, order = c(1,0,0), seasonal = c(0,0,0))
t_test(fit_cons3)
##              Coeffs Std.Errors        t Crit.Values Rej.H0
## ar1       0.8679426 0.10339698 8.394274     2.04523   TRUE
## intercept 0.3922198 0.05030758 7.796435     2.04523   TRUE
# Diagnóstico
checkresiduals(fit_cons3)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,0,0) with non-zero mean
## Q* = 8.3624, df = 4, p-value = 0.07917
## 
## Model df: 2.   Total lags used: 6
t_test(fit_cons3)
##              Coeffs Std.Errors        t Crit.Values Rej.H0
## ar1       0.8679426 0.10339698 8.394274     2.04523   TRUE
## intercept 0.3922198 0.05030758 7.796435     2.04523   TRUE
## Vamos ficar com o ARIMA(1,0,0) 
fcast_cons3 <- forecast(fit_cons3, h = 6)
autoplot(fcast_cons3)

Bem, parece que atendemos o primeiro pedido do C level, mas será que podemos melhorar esse modelo?! Outra dúvida é: quanto estamos errando?

Vamos usar a função accuracy do pacote forecast para encontrar o MAPE do modelo ARIMA ajustado.

ajuste <- accuracy(fit_cons3)
ajuste
##                        ME       RMSE        MAE       MPE     MAPE
## Training set 0.0002815981 0.03981392 0.03160019 -1.118467 8.643792
##                   MASE      ACF1
## Training set 0.6979182 0.2147442

Modelo ARIMA com a variável temperatura

Objetivando melhorar nosso modelo vamos estimar um modelo ARIMA estendido para os dados de consumo com a variável de temperatura como um regressor adicional. Em seguida, faremos uma previsão para os próximos 6 períodos (note que esta previsão requer uma suposição sobre a temperatura esperada; suponha que a temperatura para os próximos 6 períodos será representada pelo seguinte vetor: fcast_temp <- c (70,5, 66, 60,5, 45,5, 36, 28)).

library(forecast)
temperatura <- ts(df$temp, start = c(2010,1), frequency = 12)
fit_cons_temp <- Arima(consumo, order = c(1,0,0), xreg = temperatura, lambda = 0) ## lambda = 0 para termos um modelo log-log e estimarmos as elasticidades
fit_cons_temp
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept  temperatura
##       0.7543    -1.4107       0.0083
## s.e.  0.1414     0.1060       0.0017
## 
## sigma^2 estimated as 0.006811:  log likelihood=33.43
## AIC=-58.86   AICc=-57.26   BIC=-53.26
# Diagnóstico
## observe que a variável temperatura é estatisticamente significante ao nível de 5%
t_test(fit_cons_temp)
##                   Coeffs  Std.Errors         t Crit.Values Rej.H0
## ar1          0.754272216 0.141432810  5.333078     2.04523   TRUE
## intercept   -1.410666087 0.106015675 13.306203     2.04523   TRUE
## temperatura  0.008283759 0.001700127  4.872436     2.04523   TRUE
checkresiduals(fit_cons_temp)

## 
##  Ljung-Box test
## 
## data:  Residuals from Regression with ARIMA(1,0,0) errors
## Q* = 5.1882, df = 3, p-value = 0.1585
## 
## Model df: 3.   Total lags used: 6
# Previsão
fcast_temp <- c(70.5, 66, 60.5, 45.5, 36, 28)
fcast_cons_temp <- forecast(fit_cons_temp, xreg = fcast_temp, h = 6)
autoplot(fcast_cons_temp)

ajuste_temp <- accuracy(fcast_cons_temp)
ajuste_temp 
##                        ME      RMSE        MAE        MPE     MAPE
## Training set -0.001115714 0.0307947 0.02393672 -0.7403195 6.394953
##                   MASE       ACF1
## Training set 0.5286637 -0.1103746

Ao observar o MAPE e o RMSE percebemos que apenas inserindo a variável temperatura no nosso modelo já conseguimos melhorar o nosso erro de previsão.

compara_MAPE <- data.frame("ARIMA" = ajuste[[5]],"ARIMA++temp" = ajuste_temp[[5]])

compara_MAPE
##      ARIMA ARIMA..temp
## 1 8.643792    6.394953
compara_RMSE <- data.frame("ARIMA" = ajuste[[2]],"ARIMA++temp" = ajuste_temp[[2]])

compara_RMSE
##        ARIMA ARIMA..temp
## 1 0.03981392   0.0307947

Modelo ARIMA com as variáveis temperatura, renda e preço

Para tentar melhorar ainda mais nosso modelo vamos inserir as seguintes variáveis:

  1. Temperatura,
  2. Renda com lag igual a 1 (estamos supondo que a queda da renda só irá afetar o consumo no mês seguinte),
  3. Preço.

Para mostrar o que eu fiz, estou imprimindo a matriz com as variáveis que entrarão no modelo.

price <- df$price
temp <- df$temp
income <- c(NA, df$income)[-31]
vars_matrix <- cbind(temp, income,price)
print(vars_matrix)
##       temp income price
##  [1,]   41     NA 0.270
##  [2,]   56     78 0.282
##  [3,]   63     79 0.277
##  [4,]   68     81 0.280
##  [5,]   69     80 0.272
##  [6,]   65     76 0.262
##  [7,]   61     78 0.275
##  [8,]   47     82 0.267
##  [9,]   32     79 0.265
## [10,]   24     76 0.277
## [11,]   28     79 0.282
## [12,]   26     82 0.270
## [13,]   32     85 0.272
## [14,]   40     86 0.287
## [15,]   55     83 0.277
## [16,]   63     84 0.287
## [17,]   72     82 0.280
## [18,]   72     80 0.277
## [19,]   67     78 0.277
## [20,]   60     84 0.277
## [21,]   44     86 0.292
## [22,]   40     85 0.287
## [23,]   32     87 0.277
## [24,]   27     94 0.285
## [25,]   28     92 0.282
## [26,]   33     95 0.265
## [27,]   41     96 0.265
## [28,]   52     94 0.265
## [29,]   64     96 0.268
## [30,]   71     91 0.260

Agora, estimaremos um modelo onde essas variáveis são levadas em consideração.

vars_matrix <- ts(vars_matrix, start = c(2010,1),frequency = 12)
fit_vars <- Arima(consumo, order = c(1,0,0), xreg = vars_matrix, lambda = 0) ## lambda = 0 para termos um modelo log-log e estimarmos as elasticidades
summary(fit_vars)
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income    price
##       0.4191     -1.967  0.0097  0.0110  -1.7383
## s.e.  0.1942      0.599  0.0012  0.0033   1.7208
## 
## sigma^2 estimated as 0.005138:  log likelihood=37.34
## AIC=-62.67   AICc=-59.02   BIC=-54.27
## 
## Training set error measures:
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473
t_test(fit_vars)
##                 Coeffs  Std.Errors        t Crit.Values Rej.H0
## ar1        0.419134114 0.194161630 2.158687     2.04523   TRUE
## intercept -1.967007334 0.598993997 3.283851     2.04523   TRUE
## temp       0.009732735 0.001165196 8.352875     2.04523   TRUE
## income     0.010998589 0.003258491 3.375363     2.04523   TRUE
## price     -1.738334523 1.720785749 1.010198     2.04523  FALSE
checkresiduals(fit_vars)

## 
##  Ljung-Box test
## 
## data:  Residuals from Regression with ARIMA(1,0,0) errors
## Q* = 6.5967, df = 3, p-value = 0.08592
## 
## Model df: 5.   Total lags used: 8

Antes de continuar, vou testar uma relação quadrática entre o preço e o consumo. Observe que a relação entre preço e consumo ficou meio estranha, por isso, não vamos continuar com essa ideia.

price <- df$price
price2 <- df$price^2
temp <- df$temp
income <- c(NA, df$income)[-31]
vars_matrix2 <- cbind(temp, income,price,price2)
vars_matrix2 <- ts(vars_matrix2, start = c(2010,1),frequency = 12)
fit_vars2 <- Arima(consumo, order = c(1,0,0), xreg = vars_matrix2, lambda = 0)
summary(fit_vars2)
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income     price    price2
##       0.4469     3.9072  0.0097  0.0105  -44.0254   76.5917
## s.e.  0.1947    12.2875  0.0012  0.0035   88.4169  160.1359
## 
## sigma^2 estimated as 0.005306:  log likelihood=37.45
## AIC=-60.9   AICc=-55.81   BIC=-51.09
## 
## Training set error measures:
##                        ME       RMSE        MAE        MPE     MAPE
## Training set 0.0001450847 0.02586671 0.01981061 -0.3534006 5.386191
##                  MASE        ACF1
## Training set 0.437535 -0.09288588
t_test(fit_vars2)
##                  Coeffs   Std.Errors         t Crit.Values Rej.H0
## ar1         0.446861421 1.947324e-01 2.2947456     2.04523   TRUE
## intercept   3.907222090 1.228747e+01 0.3179841     2.04523  FALSE
## temp        0.009726938 1.190151e-03 8.1728593     2.04523   TRUE
## income      0.010498790 3.482390e-03 3.0148226     2.04523   TRUE
## price     -44.025353739 8.841687e+01 0.4979293     2.04523  FALSE
## price2     76.591716235 1.601359e+02 0.4782921     2.04523  FALSE

Observando os resultados do modelo anterior, percebemos que apenas a variável preço não é significante, contudo, como o C level perguntou especificamente sobre essa variável decidimos mante-la. Uma pergunta que precisamos fazer é se o nosso novo modelo está errando menos, vamos ver isso agora?!Como podemos observar, tanto o MAPE quanto o MASE melhoraram significativamente.

ajuste_temp_renda_preco <- accuracy(fit_vars)
ajuste_temp_renda_preco
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473

Antes de fazermos a previsão, vamos comparar as métricas de teste.

compara_MAPE <- data.frame("ARIMA" = ajuste[[5]],
                           "ARIMA++temp" = ajuste_temp[[5]],
                           "ARIMA+temp+renda+preco" = ajuste_temp_renda_preco[[5]] )

compara_MAPE
##      ARIMA ARIMA..temp ARIMA.temp.renda.preco
## 1 8.643792    6.394953               5.434105
compara_RMSE <- data.frame("ARIMA" = ajuste[[2]],
                           "ARIMA++temp" = ajuste_temp[[2]],
                           "ARIMA+temp+renda+preco" = ajuste_temp_renda_preco[[2]])

compara_RMSE
##        ARIMA ARIMA..temp ARIMA.temp.renda.preco
## 1 0.03981392   0.0307947              0.0261767

Previsão

Agora, nós vamos usar este modelo para fazer uma previsão para os próximos 6 períodos. Observe que a previsão requer uma matriz da temperatura esperada, renda e preço para os próximos 6 períodos.

Vamos criar uma matriz usando a variável fcast_temp e os seguintes valores para a renda esperada: 91, 91, 93, 96, 96, 96 e do preço esperado: 0.282, 0.265, 0.265, 0.265, 0.268, 0.267.

expected_temp_income_price <- matrix(c(fcast_temp,
                                       91, 91, 93, 96, 96, 96, 0.282,
                                       0.265, 0.265, 0.265, 0.268, 0.267),
                                     ncol = 3, nrow = 6)
expected_temp_income_price
##      [,1] [,2]  [,3]
## [1,] 70.5   91 0.282
## [2,] 66.0   91 0.265
## [3,] 60.5   93 0.265
## [4,] 45.5   96 0.265
## [5,] 36.0   96 0.268
## [6,] 28.0   96 0.267
fcast_cons_temp_income_price <- forecast(fit_vars,
                                   xreg = expected_temp_income_price,
                                   h = 6)
autoplot(fcast_cons_temp_income_price)

summary(fcast_cons_temp_income_price)
## 
## Forecast method: Regression with ARIMA(1,0,0) errors
## 
## Model Information:
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income    price
##       0.4191     -1.967  0.0097  0.0110  -1.7383
## s.e.  0.1942      0.599  0.0012  0.0033   1.7208
## 
## sigma^2 estimated as 0.005138:  log likelihood=37.34
## AIC=-62.67   AICc=-59.02   BIC=-54.27
## 
## Error measures:
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473
## 
## Forecasts:
##          Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
## Jul 2012      0.4879484 0.4451220 0.5348952 0.4239943 0.5615492
## Aug 2012      0.4665596 0.4223279 0.5154238 0.4006367 0.5433298
## Sep 2012      0.4463201 0.4034828 0.4937054 0.3824964 0.5207935
## Oct 2012      0.3964974 0.3583608 0.4386924 0.3396806 0.4628175
## Nov 2012      0.3587917 0.3242689 0.3969898 0.3073594 0.4188304
## Dec 2012      0.3321792 0.3002150 0.3675467 0.2845588 0.3877689

Respondendo as perguntas do C-level

Bem, agora que já temos o nosso modelo definido, vamos tentar responder todas as perguntas do C level.

a) Estimativa de vendas do produto para os próximos 6 meses:

   O modelo "*fcast_cons_temp_income_price*" nos dá essa previsão. É importante observar o que estamos esperando das demais variáveis que entraram no modelo.

b) Ele diz que o país está em um momento de crise e pode ser que a renda das famílias caiam, mas ele não tem certeza sobre essa afirmação. O que você propõe?

   Neste caso, nossa proposta é fazer uma previsão das vendas do Chicabon em que a renda caia 5%, neste caso o C level terá um cenário pessimista para as vendas, uma vez que o cenário "provável" já foi dado na resposta anterior.
   Vamos fazer isso:\
   * Observe que reduzimos a nossa previsão para a renda em 5%;
   
expected_temp_income_5_renda <- matrix(c(fcast_temp, 
                                         86.45, 86.45, 88.35, 91.2, 91.2, 91.2,
                                         0.282, 0.265, 0.265, 0.265, 0.268, 0.267),
                                         ncol = 3, nrow = 6)

fcast_expected_temp_income_5_renda <- forecast(fit_vars,
                                   xreg = expected_temp_income_5_renda,
                                   h = 6)
autoplot(fcast_expected_temp_income_5_renda)

summary(fcast_expected_temp_income_5_renda)
## 
## Forecast method: Regression with ARIMA(1,0,0) errors
## 
## Model Information:
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income    price
##       0.4191     -1.967  0.0097  0.0110  -1.7383
## s.e.  0.1942      0.599  0.0012  0.0033   1.7208
## 
## sigma^2 estimated as 0.005138:  log likelihood=37.34
## AIC=-62.67   AICc=-59.02   BIC=-54.27
## 
## Error measures:
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473
## 
## Forecasts:
##          Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
## Jul 2012      0.4641306 0.4233947 0.5087859 0.4032983 0.5341388
## Aug 2012      0.4437859 0.4017132 0.4902649 0.3810808 0.5168088
## Sep 2012      0.4240677 0.3833661 0.4690904 0.3634260 0.4948280
## Oct 2012      0.3761079 0.3399325 0.4161331 0.3222130 0.4390177
## Nov 2012      0.3403412 0.3075937 0.3765751 0.2915538 0.3972926
## Dec 2012      0.3150973 0.2847768 0.3486460 0.2699256 0.3678283

Vamos comparar as previsões…

compara_vendas <- data.frame("Modelo neutro" = fcast_cons_temp_income_price$mean,
                                "Modelo Pessimista" = fcast_expected_temp_income_5_renda$mean,
                                "Perc_queda_mes" = (((fcast_cons_temp_income_price$mean/fcast_expected_temp_income_5_renda$mean) - rep(1,6)) * 100))
compara_vendas
##   Modelo.neutro Modelo.Pessimista Perc_queda_mes
## 1     0.4879484         0.4641306       5.131691
## 2     0.4665596         0.4437859       5.131691
## 3     0.4463201         0.4240677       5.247385
## 4     0.3964974         0.3761079       5.421164
## 5     0.3587917         0.3403412       5.421164
## 6     0.3321792         0.3150973       5.421164
queda5perc_renda <- fcast_expected_temp_income_5_renda$mean*100000
sem_queda5perc_renda <- fcast_cons_temp_income_price$mean*100000

comp_renda <- cbind(queda5perc_renda,sem_queda5perc_renda)

ts.plot(comp_renda,col= 1:2,lty=1:2)
legend("topright", legend = c("Sem queda na renda","Com queda na renda"), col = 1:2, lty = 1:2,cex = 0.8)

barplot(comp_renda,horiz = T)

summary(comp_renda)
##  queda5perc_renda sem_queda5perc_renda
##  Min.   :31510    Min.   :33218       
##  1st Qu.:34928    1st Qu.:36822       
##  Median :40009    Median :42141       
##  Mean   :39392    Mean   :41472       
##  3rd Qu.:43886    3rd Qu.:46150       
##  Max.   :46413    Max.   :48795

c) Ele diz que a empresa está pensando em aumentar o preço do Chicabon em 10% e lhe pergunta se isso irá afetar as vendas

require(forecast)
expected_temp_income_10_price <- matrix(c(fcast_temp, 
                                        91, 91, 93, 96, 96, 96,
                                        0.3102, 0.2915, 0.2915, 0.2915, 0.2948, 0.286),
                                        ncol = 3, nrow = 6)
fcast_cons_temp_income_10_price <- forecast(fit_vars,
                                   xreg = expected_temp_income_10_price,
                                   h = 6)
autoplot(fcast_cons_temp_income_10_price)

summary(fcast_cons_temp_income_10_price)
## 
## Forecast method: Regression with ARIMA(1,0,0) errors
## 
## Model Information:
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income    price
##       0.4191     -1.967  0.0097  0.0110  -1.7383
## s.e.  0.1942      0.599  0.0012  0.0033   1.7208
## 
## sigma^2 estimated as 0.005138:  log likelihood=37.34
## AIC=-62.67   AICc=-59.02   BIC=-54.27
## 
## Error measures:
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473
## 
## Forecasts:
##          Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
## Jul 2012      0.4646055 0.4238279 0.5093064 0.4037109 0.5346853
## Aug 2012      0.4455546 0.4033143 0.4922189 0.3825996 0.5188686
## Sep 2012      0.4262264 0.3853176 0.4714783 0.3652761 0.4973469
## Oct 2012      0.3786467 0.3422271 0.4189420 0.3243879 0.4419810
## Nov 2012      0.3424599 0.3095086 0.3789193 0.2933687 0.3997658
## Dec 2012      0.3213871 0.2904614 0.3556055 0.2753138 0.3751707

Vamos comparar as previsões…

compara_vendas <- data.frame("Modelo neutro" = fcast_cons_temp_income_price$mean,
                                "Modelo Pessimista" = fcast_cons_temp_income_10_price$mean,
                                "Perc_queda_mes" = (((fcast_cons_temp_income_price$mean/fcast_cons_temp_income_10_price$mean) - rep(1,6)) * 100))
compara_vendas
##   Modelo.neutro Modelo.Pessimista Perc_queda_mes
## 1     0.4879484         0.4646055       5.024244
## 2     0.4665596         0.4455546       4.714338
## 3     0.4463201         0.4262264       4.714338
## 4     0.3964974         0.3786467       4.714338
## 5     0.3587917         0.3424599       4.768961
## 6     0.3321792         0.3213871       3.357985
vendas_Novo_price <- fcast_cons_temp_income_10_price$mean*100000
vendas_price <- fcast_cons_temp_income_price$mean*100000
comp <- cbind(vendas_price,vendas_Novo_price)

ts.plot(comp,col= 1:2,lty=1:2)
legend("topright", legend = c("Preço Antigo","Novo Preço"), col = 1:2, lty = 1:2,cex = 0.8)

barplot(comp,horiz = T)

summary(comp)
##   vendas_price   vendas_Novo_price
##  Min.   :33218   Min.   :32139    
##  1st Qu.:36822   1st Qu.:35151    
##  Median :42141   Median :40244    
##  Mean   :41472   Mean   :39648    
##  3rd Qu.:46150   3rd Qu.:44072    
##  Max.   :48795   Max.   :46461

d) O presidente lhe informa que o carnaval é a época do ano que mais vende Chicabon, mas ele está preocupado com as notícias de que o El Niño fará as temperaturas caírem aproximadamente 10% em todo Brasil e ele pergunta como serão as vendas se isso realmente acontecer

require(forecast)
expected_temp_income_price_10_temp <- matrix(c(fcast_temp*0.9,
                                       91, 91, 93, 96, 96, 96, 0.282,
                                       0.265, 0.265, 0.265, 0.268, 0.267),
                                     ncol = 3, nrow = 6)
fcast_cons_temp_income_price_10_temp <- forecast(fit_vars,
                                   xreg = expected_temp_income_price_10_temp,
                                   h = 6)
autoplot(fcast_cons_temp_income_price_10_temp)

summary(fcast_cons_temp_income_price_10_temp)
## 
## Forecast method: Regression with ARIMA(1,0,0) errors
## 
## Model Information:
## Series: consumo 
## Regression with ARIMA(1,0,0) errors 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1  intercept    temp  income    price
##       0.4191     -1.967  0.0097  0.0110  -1.7383
## s.e.  0.1942      0.599  0.0012  0.0033   1.7208
## 
## sigma^2 estimated as 0.005138:  log likelihood=37.34
## AIC=-62.67   AICc=-59.02   BIC=-54.27
## 
## Error measures:
##                        ME      RMSE        MAE        MPE     MAPE
## Training set 0.0002430829 0.0261767 0.02000142 -0.3454377 5.434105
##                   MASE        ACF1
## Training set 0.4417491 -0.09847473
## 
## Forecasts:
##          Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
## Jul 2012      0.4555903 0.4156039 0.4994238 0.3958773 0.5243102
## Aug 2012      0.4375319 0.3960522 0.4833560 0.3757105 0.5095258
## Sep 2012      0.4207982 0.3804105 0.4654739 0.3606241 0.4910130
## Oct 2012      0.3793220 0.3428374 0.4196892 0.3249664 0.4427693
## Nov 2012      0.3464381 0.3131040 0.3833210 0.2967766 0.4044096
## Dec 2012      0.3232490 0.2921441 0.3576657 0.2769088 0.3773443

Vamos comparar as previsões…

compara_vendas <- data.frame("Modelo neutro" = fcast_cons_temp_income_price$mean,
                                "Modelo Pessimista" = fcast_cons_temp_income_price_10_temp$mean,
                                "Perc_queda_mes" = (((fcast_cons_temp_income_price$mean/fcast_cons_temp_income_price_10_temp$mean) - rep(1,6)) * 100))
compara_vendas
##   Modelo.neutro Modelo.Pessimista Perc_queda_mes
## 1     0.4879484         0.4555903       7.102463
## 2     0.4665596         0.4375319       6.634408
## 3     0.4463201         0.4207982       6.065119
## 4     0.3964974         0.3793220       4.527912
## 5     0.3587917         0.3464381       3.565890
## 6     0.3321792         0.3232490       2.762638

e) Ele lembra também de uma campanha de marketing que ocorrerá no final do ano e que pretende fazer um contrato com a empresa de marketing baseado no aumento das vendas, o que você propõe?

Cursos in company:

contato@modelthinkingbr.com [cursos in company MTBr]

Model Thinking Br