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
Bem, vamos responde-lo seguindo as seguintes etapas:
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)
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
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
Para tentar melhorar ainda mais nosso modelo vamos inserir as seguintes variáveis:
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
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?