--- slideOptions: transition: slide --- ###### tags: `educação` `serie temporal` # IPCA via suavização exponencial Palestrante: Euler Alencar --- ## Modelos a serem estudados - Médias Móveis Simples (MMS) - Série localmente constante - Suavização Exponencial Simples (SES) - Série localmente constante - Suavização Exponencial de Holt (SEH) - Série que apresenta tendência - Suavização Exponencial de Holt - Winters (HW) - Série sazonais --- ## Conceitos Básicos Métodos de Previsão baseiam-se na ideia que observações passadas contêm informações sobre o padrão de comportamento da série temporal. O propósito do é distinguir padrão do ruído e modelar este padrão de forma a prever valores futuros. Importância: > Tales de Mileto mostrou a importância da filosofia dos conhecimentos sobre a natureza. Previu que uma safra próxima de azeitona seria excepcional; assim, passou a comprar grande quantidade prensas, o que permitiu ganhar bastante dinheiro e a importância da ciência. --- ## Dados [Dados IPCA via IBGE](https://ww2.ibge.gov.br/home/estatistica/indicadores/precos/inpc_ipca/defaultseriesHist.shtm) Caminho para carregar dados diretamente da internet. ```{r} # Importard dados library(readr) pub_output_csv <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQelZWLtxzH-KIAwVtVIsHJk3i308sczzGv0sZ14QNae5RnSNsnrne9SoBZ5PcjZ9wUl0wRx4ft5Vaf/pub?output=csv") View(pub_output_csv) ``` [Dados IPCA (formatado)](https://docs.google.com/spreadsheets/d/1_wrc75pyFjoVy5TS2amt_eYRDlIE86h0lQdTIfrfWzw/edit?usp=sharing) --- ## Modelos de Suavização ### Média Móvel Simples Considere a série temporal $Z_1$, $Z_2$, ... , $Z_n$, estacionária e localmente constante, composta de seu nível e mais um ruído aleatório da seguinte forma :::warning $Z_t = \mu_t + a_t, \quad t=1,\dots,N$ ::: onde E($a_t$) = 0, Var($a_t$) = $\sigma_a^2$ e $\mu_t$ é um parâmetro desconhecido que varia com o tempo. --- ### Matematicamente A técnica de média móvel consiste em calcular a média aritmética das k observações mais recentes, ou seja :::info $M_t = \dfrac{Z_t + Z_{t-1} + \dots + Z_{t-k+1}}{k}.$ ::: Denotamos por k como sendo o comprimento da média. --- ### Previsão $M_t$ é uma estimativa do nível $\mu_t$ que não leva em consideração as observações mais antigas (após nível k). A cada período a observação mais antiga é substituída pela mais recente, calculando-se uma média nova. Portanto, a previsão dos h valores futuros é dada pela última média móvel calculada, ou seja, :::danger $\hat{Z}_t(h) = M_t.$ ::: --- ### Vantagens - Aplicação simples - Aplicável quando se tem um número pequeno de observações - Flexibilidade, dado que é possível modificar "k" que é o período da média. --- ### Desvantagens - Aplicação somente em séries estacionárias - Dificuldade de escolher o valor de "k" - Pesos atribuídos as observações na média é igual --- ## Modelos de Suavização ### Suavização Exponencial Simples Podemos descrever uma SES por :::warning $\bar{Z}_t = \alpha\sum_{j=0}^{t-1}(1- \alpha)^jZ_{t-j} + (1-\alpha)^t\bar{Z}_0,$ ::: onde $t=1,\dots,N$ e $\bar{Z}_t$ é denominado valor exponencialmente suavizado e $\alpha$ é a constante de suavização, tal que $0 \le \alpha \le 1$. --- ### Matematicamente Expandindo a equação acima temos :::info $\bar{Z}_t = \alpha Z_t + \alpha(1-\alpha)Z_{t-1} +$ $\quad \quad + \alpha(1-\alpha)^2Z_{t-2} + \dots + (1-\alpha)^t\bar{Z}_0$ ::: então, podemos concluir que a SES é uma média ponderada que da pesos maiores às observações mais recentes, eliminando uma das desvantagens do método de MMS. --- ### Previsão A previsão dos h valores futuros é dada pelo último valor exponencialmente suavizado, ou seja :::danger $\hat{Z}(h) = \bar{Z}_t, \quad \forall h$ ::: :::danger $\hat{Z}(h) = \alpha Z_t + (1 - \alpha)\hat{Z}_{t-1}(h+1)$ ::: --- ### Determinação da Constante $\alpha$ - Quanto menor o valor de $\alpha$ mais estáveis serão as previsões finais, pois implica maior peso as observações passadas. Assim, flutuações no presente exercerão menor influência em previsões; - Quanto mais aleatórias foram as séries, menores serão os valores da constante $\alpha$; --- ### Vantagens - Fácil entendimento; - Aplicação simples; - Grande flexibilidade dada pela constante de suavização; - Necessidade de armazenar poucas informações para previsão; - O valor de $\alpha$ = 2/(r-1) fornece previsãoes semelhantes à media móvel com parâmetro r; --- ### Desvantagens - Principal desvantagem é a determinação da constante de suavização. --- ## Modelos de Suavização ### Suavização Exponencial de Holtz Esta técnica de suavização é recomendada para séries que apresentam tendência. Considere o caso de uma série temporal que é composta localmente da soma de nível, tendencia e resíduo com média zero e variância constante $\sigma_a^2$, isto é :::warning $Z_t = \mu_t + T_t + a_t, \quad t = 1, \dots , N$ ::: --- Esta técnica é similar a uma Suavização Exponencial Simples (SES) com uma constante extra para modelar a componente de tendência. :::info $\bar{Z}_t = AZ_t + (1-A)(\bar{Z}_{t-1} + \hat{T}_{t-1}),$ ::: tal que, $\quad 0\leq A \leq 1 \quad e \quad t = 2, \dots , N$ e :::info $\hat{T}_t = C(\bar{Z}_t - \bar{Z}_{t-1}) + (1-C)\hat{T}_{t-1},$ ::: tal que $\quad 0 \leq C \leq 1 \quad e \quad t = 2, \dots , N,$ onde A e C são denominados constantes de suavização, tal que $A \ge C$. O procedimento para determinação da constante de suavização é semelhantes ao modelo simples de suavização, porém ao invés de determinar $\alpha$ determina-se o valor do vetor (A,C). --- ### Previsão Assim, a previsão do valor $Z_{t+h}$ com origem em t é dada por :::danger $\hat{Z}_t(h) = \bar{Z}_t + h\hat{T}_t \quad \forall h \geq 0$ ::: A previsão é feita adicionando o valor básico $\bar{Z}_t$ a tendência multiplicada pelo número de passos à frente que deseja prever (h). --- ### Vantagens - Semelhantes ao caso simples. --- ### Desvantagens - Dificuldade em determinar A e C. --- ## Modelos de Suavização ### Suavização Exponencial de Holt-Winters No caso de séries com sazonalidade, utiliza-se a suavização de Holt - Winters. Essa técnica envolve três equações com três parâmetros de suavização que são associados a cada componente da série: **nível, tendência e sazonalidade.** --- ### Tipos de Modelos Portanto, temos dois casos a serem considerados: - Modelo Multiplicativo :::warning $Z_t = \mu_t F_t + T_t + a_t, \quad t = 1, \dots , N.$ ::: - Modelo Aditivo :::warning $Z_t = \mu_t + T_t + F_t + a_t, \quad t = 1, \dots , N.$ ::: Ou seja, utilizaremos modelo aditivo ou multiplicativo quando tratamos de Sazonalidade. Há três constantes de suavização: A, C e D (sazonalidade). **Referência**: Morettin e Toloi, Cap. 4, Pág. 97. ___ ### Vantagens - Semelhante ao modelo simples. --- ### Desvantagens - Determinar as constantes de suavização; - Dificuldade em estudar propriedades estatísticas: média, variância da previsão. --- # Aplicação no R - Passos - Instalação de pacotes - Carregamento dos dados - Transformação dos dados - Construção do modelo - Avaliação do Modelo --- ## Pacotes necessários ```{r} #Primeiros pacotes a instalar install.packages("forecast") require(forecast) install.packages("ggplot2") require(ggplot2) install.packages("readr") library(readr) # instalar pacote TTR install.packages("TTR") #para SMA require(TTR) # Previsão Médias Móveis - função sma install.packages("smooth") require(smooth) install.packages("Mcomp") require(Mcomp) ``` --- ## Carregar dados Caminho para carregar dados diretamente da internet. ```{r} # Importard dados library(readr) pub_output_csv <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vQelZWLtxzH-KIAwVtVIsHJk3i308sczzGv0sZ14QNae5RnSNsnrne9SoBZ5PcjZ9wUl0wRx4ft5Vaf/pub?output=csv") View(pub_output_csv) ``` --- ## Transformação dos dados ```{r} # Transformar em Série Temporal pibtsmes <- ts(pib[,5], start=c(1994, 1), end=c(2018, 8), frequency=12) pibtsano <- ts(pib[,8], start=c(1994, 1), end=c(2018, 8), frequency=12) autoplot(pibtsmes) # Série mais comportada pibtsmes2 <- window(pibtsmes, start=c(2004, 1), end=c(2018, 8)) # Divido a série entre treino e teste pibtsmes2_treino <- window(pibtsmes, start=c(2004, 1), end=c(2017, 12)) pibtsmes2_teste <- window(pibtsmes, start=c(2018, 1), end=c(2018, 8)) #Plot com os dados ano a ano autoplot(pibtsmes2, ylab= 'pib', xlab='mes.ano', main="PIB 2004 - 2018") ``` --- ![Dados94a18](https://diariodefilosofocom.files.wordpress.com/2018/12/Inflacao_94.jpeg?w=450 =700x400) --- ![Dados04a18](https://diariodefilosofocom.files.wordpress.com/2018/12/Inflacao_04.jpeg?w=450 =700x400) --- ## Modelagem com Médias Móveis - função ma() ```{r} # Modelagem com Médias Móveis pibtsmes_mms = ma(pibtsmes2, order=5) autoplot(pibtsmes_mms) plot(pibtsmes2) lines(pibtsmes_mms, col="red") pibtsmes_mms12 = ma(pibtsmes2, order=12) lines(pibtsmes_mms12, col="blue") legend("topleft", legend = c("Orig", "MA5", "MA12"), col = c("black", "red", "blue"), lty=1.2, cex=0.8) ``` --- ## Modelagem com Médias Móveis - função SMA() ```{r} install.packages("TTR") #para SMA require(TTR) o.pibtsmes_mms <- SMA(pibtsmes2,n=5) plot.ts(o.pibtsmes_mms) plot.ts(pibtsmes2) lines(o.pibtsmes_mms, col="red") o.pibtsmes_mms12 = SMA(pibtsmes2, n=12) lines(o.pibtsmes_mms12, col="blue") legend("topleft", legend = c("Orig", "MA5", "MA12"), col = c("black", "red", "blue"), lty=1.2, cex=0.8) ``` --- ![ModeloMMA](https://diariodefilosofocom.files.wordpress.com/2018/12/Modelagem-via-M%C3%A9dias-M%C3%B3veis.jpeg?w=450 =700x400) --- ::: success ## Exercício: compare as duas estimativas. ::: --- ## Previsão Médias Móveis - função sma() ```{r} # previsão Média Móveis - função sma install.packages("smooth") require(smooth) install.packages("Mcomp") require(Mcomp) sma.prev1 <- sma(pibtsmes2, h=5) sma.prev1$forecast sma.prev1 <- sma(pibtsmes2, order = 5, h=5) sma.prev1$forecast #> sma.prev1$forecast # Jan Feb Mar Apr May Jun Jul Aug Sep # Oct Nov Dec #2018 0.4240000 0.4648000 0.4777600 0.3213120 #2019 0.3195744 # Conferindo com 5 últimos x <- c(0.22, 0.40, 1.26, 0.33, -0.09) print(mean(x)) print(mean(c((x[-1]),mean(x)))) ``` --- ## Suavização Exponencial Simples ```{r} # Suavização Exponencial # Função holt autoplot(pibtsmes2) mdl1 = holt(pibtsmes2, h=16) autoplot(mdl1) mdl1$model # Smoothing parameters: # alpha = 0.7611 # beta = 1e-04 #damped=FALSE # Modelo modificando o valor alfa mdl2 <- holt(pibtsmes2, h=16, alpha=0.5) autoplot(mdl2) # Diferença entre modelo 1 e modelo 2 plot(mdl1) lines(mdl2$mean, col="red") ``` --- ![Model1e2](https://diariodefilosofocom.files.wordpress.com/2018/12/Holt_model1and2.jpeg?w=450 =700x400) --- ## Amortecimento da Suavização ```{r} # damped = amortecido mdl3 <- holt(pibtsmes2, damped = T, phi=0.9, h=16) #autoplot(mdl3) mdl4 <- holt(pibtsmes2, damped = T, phi=0.8, h=16) #autoplot(mdl4) # Comparando os dois modelos com phi = 0.9 e phi = 0.8 plot(mdl3) lines(mdl4$mean, col = "red") print(mdl3$mean) print(mdl4$mean) ``` --- ![Model3e4](https://diariodefilosofocom.files.wordpress.com/2018/12/Holt_modelo3and4.jpeg?w=450 =700x400) --- ## Exemplos de Suavização com dados com tendência Será utilizado o conjunto de dados AirPassengers por possuir um padrão cíclico com tendência e multiplicativo. ```javascript= plot(AirPassengers, type="l") # original series mdl5 = holt(AirPassengers, h=16) plot(mdl5) mdl5$model mdl5$mean mdl6 = hw(AirPassengers, seasonal = "additive", h=16) autoplot(mdl6) mdl6$model mdl6$mean mdl7 = hw(AirPassengers, seasonal = "multiplicative", h=16) autoplot(mdl7) mdl7$model mdl7$mean #Modelo com amortecimento mdl8 <- hw(AirPassengers, seasonal="multiplicative", damped = T, phi=0.9, h=16) autoplot(mdl8) mdl8$residuals #Comparando modelos plot(mdl5) lines(mdl6$mean, col = "red") lines(mdl7$mean, col = "green") lines(mdl8$mean, col = "blue") legend("topleft", legend = c("Mdl5", "Mdl6", "Mdl7", "Mdl8"), col = c("black", "red", "green","blue"), lty=1.2, cex=0.8) ``` --- ![ModelTendencia](https://diariodefilosofocom.files.wordpress.com/2018/12/comparacao-modelos.jpeg?w=450 =700x400) --- Histograma dos erros ```javascript= PlotForecastErrors <- function(forecasterrors){ mybinsize <- IQR(forecasterrors)/4 mysd <- sd(forecasterrors) mymin <- min(forecasterrors)-mysd*5 mymax <- max(forecasterrors)+mysd*5 mynorm <- rnorm(10000,mean=0,sd=mysd) mymin2 <- min(mynorm) mymax2 <- max(mynorm) if (mymin2<mymin) { mymin<-mymin2 } if (mymax2>mymax) { mymax<-mymax2 } mybins <- seq(mymin,mymax,mybinsize) hist(forecasterrors, col="red", freq=FALSE, breaks=mybins) myhist <- hist(mynorm, plot=FALSE, breaks=mybins) points(myhist$mids, myhist$density, type="l", col="blue", lwd=2) } ``` --- ![Erros1](https://diariodefilosofocom.files.wordpress.com/2018/12/erros.png?w=450 =700x350) --- ![Erros1](https://diariodefilosofocom.files.wordpress.com/2018/12/erros2.png?w=450 =700x350) --- # Fontes Livro - Análise de Séries Temporais. Morettin e Toloi. [Modelos](http://www.portalaction.com.br/series-temporais/34-suavizacao-exponencial-de-holt-winters-hw) [How To - Importar dados do googledocs](https://exploredata.wordpress.com/2012/08/20/importing-a-google-spreadsheet-into-r/) [Git-OnlineCurseR](https://github.com/euleralencar/time-series/blob/master/onlinecourses_science.R) [Git-HoltWinters](https://github.com/euleralencar/time-series/blob/master/forecast_HoltWinters.R) [Forecast-TS](https://github.com/euleralencar/time-series/blob/master/forecast_ts.R) [Smooth](https://cran.r-project.org/web/packages/smooth/vignettes/smooth.html) [SQL in R](http://dept.stat.lsa.umich.edu/~jerrick/courses/stat701/notes/sql.html) ---