Simulations sur la reconnaissance visuelle de mots et la décision lexicale
3.2 Simulation B04 : Effet de légalité des non-mots
As figuras 5.1, 5.2, 5.3 e 5.4 apresentam os resultados obtidos a partir dos seis modelos testados, para a previsão de 10% da amostra inicial referente ao total das categorias (primeiro caso de estudo). No cimo de cada um dos gráficos é identificado o erro absoluto médio (MAE, do inglês, Mean Absolute Error) para cada um dos modelos testados, no entanto, a seleção daquele que corresponderia ao melhor modelo foi calculada através da análise do RMSE (do inglês, Root Mean Squared Error) e da análise da correlação entre os dados de treino e os previstos. É importante realçar a diferença de erro que existe entre as duas aplicações da função auto.arima() devido a uma incorporar uma matriz de eventos (“ARIMA reg”) e a outra não (“ARIMA SEM REG”). Esta discrepância destaca a relevância que esta matriz tem na
𝒚_𝒕𝒆𝒔𝒕
1º Caso de estudo 2º Caso de estudo 3º Caso de estudo
modelação de séries temporais, identificando fatores influenciadores de vendas. Esta matriz de eventos foi também incorporada na função tslm().
Figura 5.1 - Valores obtidos para o primeiro caso de estudo através das funções de modelação: hm() e tbats().
Figura 5.2 - Valores obtidos para o primeiro caso de estudo através das funções de modelação: nnetar() e tslm().
66 Figura 5.3 - Valores obtidos para o primeiro caso de estudo através da função de modelação auto.arima() com e sem regressores.
Figura 5.4 - Valores obtidos para o primeiro caso de estudo através da função de modelação ets().
O erro médio absoluto (MAE) e o erro quadrático médio (RMSE) são duas das métricas mais comuns utilizadas para medir precisão. O MAE mede a magnitude média dos erros num conjunto de previsões, sem considerar sua direção. Consiste na média das diferenças absolutas entre a previsão e a observação real, em que todas as diferenças individuais possuem o mesmo peso. Por sua vez, o RMSE, para além de medir a magnitude média dos erros num conjunto de previsões, mede também a magnitude média do próprio erro. É a raiz quadrada da média das
diferenças quadradas entre a previsão e o comportamento real, ou seja, é raiz quadrada do erro médio quadrático (MSE, do inglês Mean Squared Error). Estatisticamente, este é provavelmente o erro mais facilmente interpretado, uma vez que se apresenta segundo as unidades da variável a ser prevista e depende da sua gama de valores. Por exemplo, para uma média de vendas de 1000 unidades, se o RMSE for 50 significa que o modelo está a prever erroneamente apenas 50 unidades [67]. A correlação, tal como o nome indica, tem como objetivo medir o grau de relacionamento entre variáveis, neste caso, entre 𝑦_𝑡𝑒𝑠𝑡 e as previsões feitas a este vetor. O coeficiente de correlação pode ser forte ou fraco. Duas variáveis têm um coeficiente de correlação dito forte sempre que ambas atinjam de forma semelhante os picos altos de valores, bem como os baixos, doutra forma, uma acompanha o comportamento da outra. Por sua vez, um coeficiente de correlação fraco está relacionado com duas variáveis em que o seu comportamento nada tem a ver uma com a outra [68].
Tabela 5.2 – Interpretação do coeficiente de correlação (adaptado de [58])
𝝆 Interpretação
0.00 – 0.19 Correlação muito fraca
0.20 – 0.39 Correlação fraca
0.40 – 0.69 Correlação moderada
0.70 – 0.89 Correlação forte
0.90 – 1.00 Correlação muito forte
Após verificação dos valores obtidos para o RMSE e para a correlação de cada um dos modelos, conferiu-se que o modelo que obteve menor erro e maior correlação era o tslm() com 5453.599 para o RMSE e cerca de 76% (tabela 5.3) para a correlação. Visto que, tanto a função
auto.arima() como a tslm() podem integrar uma matriz de eventos, ambas foram submetidas
ao mesmo conjunto de eventos, todavia a função de modelação tslm() conseguiu alcançar menor erro.
68 Tabela 5.3 - Valores obtidos para o RMSE e o coeficiente de correlação para os modelos aplicados ao primeiro caso de estudo Modelos 𝑹𝑴𝑺𝑬 Correlação HW 9033.45 0.4908843 TBATS 7453.714 0.5156691 NNETAR 7375.09 0.5149254 TSLM 5453.599 0.7553265 ARIMACREG 5581.632 0.7472985 ARIMACREG 9273.86 0.4445781 ETS 8650.93 0.5081895
Para o segundo caso de estudo (análise a uma categoria de produtos) o modelo com melhores resultados foi o auto.arima() fazendo uso dos regressores (matriz de eventos), o qual obteve 1352.951 para o RMSE e alcançou 66% no teste de correlação. O modelo ARIMA conseguido apresenta os valores 3, 1 e 3 para os parâmetros 𝑝, 𝑑, 𝑞 respectivamente, o que significa que a série temporal não foi considerada estacionária pelo modelo, diferenciando-a uma vez. Os resultados da previsão efetuada sobre a amostra de dados 𝑦_𝑡𝑒𝑠𝑡 podem ser analisados através das figuras 5.5, 5.6, 5.7 e 5.8; e seguidamente apresenta-se os resultados obtidos para o RMSE e o coeficiente de correlação na tabela 5.4.
Figura 5.6 - Valores obtidos para o segundo caso de estudo através das funções de modelação: nnetar(), tslm().
Figura 5.7 - Valores obtidos para o segundo caso de estudo através da função de modelação auto.arima() com e sem regressores.
70
Figura 5.8 - Valores obtidos para o segundo caso de estudo através da função de modelação ets().
Tabela 5.4 - Valores obtidos para o RMSE e o coeficiente de correlação para os modelos aplicados ao segundo caso de estudo Modelos 𝑹𝑴𝑺𝑬 Correlação HW 1729.326 0.4264926 TBATS 1729.001 0.435291 NNETAR 1570.489 0.5068687 TSLM 1469.158 0.610086 ARIMACREG 1352.951 0.6571809 ARIMACREG 1584.575 0.4966474 ETS 1684.406 0.4261297
O teste de estacionaridade é aplicado ao 𝑦_𝑡𝑟𝑎𝑖𝑛 pois corresponde ao subset da série utilizado para construção do modelo. De referir que, apesar do 𝑦_𝑡𝑟𝑎𝑖𝑛 ter sido considerado uma série temporal não estacionária, o modelo é depois compilado e aplicado sobre o 𝑦_𝑡𝑒𝑠𝑡, podendo este ser estacionário, mas esta disparidade entre as duas séries temporais em nada afeta a precisão do modelo. Os dois testes mais comuns para verificação da estacionaridade são o de Dickey-Fuller aumentado (ADF, do inglês augmented Dickey–Fuller) e o teste kpss (Kwiatkowski-Phillips-Schmidt-Shin). O teste ADF testa a hipótese nula no sentido de rejeitar a existência de pelo menos uma raiz dentro do círculo unitário. Assim,
• H0 - Existe pelo menos uma raiz dentro do círculo unitário
• H1 - Não existem raízes dentro do círculo unitário.
Aceitar H0 significa que a série não é estacionária. Por sua vez, a hipótese alternativa, H1, é
aceite quando a série se considera estacionária. Quando o valor do parâmetro 𝑝 é menor que 0.05 a série é considerada estacionária para um nível de significância de 5%. O nível de significância, também denotado como alfa (𝛼), é a probabilidade de rejeitar/aceitar (dependendo do teste) a hipótese nula quando esta é apurada. Por exemplo, para o teste ADF, ao rejeitar H0 para um nível de significância de 0.05 significa que poderíamos estar a concluir
erroneamente com um risco de 5% que a série é estacionária [69].
No teste kpss, contrariamente ao que acontece com o teste ADF, aceitar a hipótese nula indica que a série temporal é estacionária e a hipótese alternativa afirma que os dados não são estacionários. De igual forma, para valores de p-value (parâmetro utilizado para comparar com o nível de significância) menores que 0.05, a série temporal é tida como não estacionária [70]. Assim, para o teste kpss temos:
• H0 - Não existem raízes dentro do círculo unitário;
• H1 - Existe pelo menos uma raiz dentro do círculo unitário.
Os excertos de código 5.1 e 5.2 mostram a implementação destes dois testes ao conjunto de dados 𝑦_𝑡𝑟𝑎𝑖𝑛 através da linguagem R:
Código 5.1 - Aplicação do teste ADF ao conjunto de dados y_train referente ao segundo caso de estudo, fazendo uso da linguagem de programação R.
> tseries::adf.test(y_train, alternative="stationary") Augmented Dickey-Fuller Test
data: y_train
Dickey-Fuller = -7.1027, Lag order = 8, p-value = 0.01 alternative hypothesis: stationary
Warning message:
In tseries::adf.test(y_train, alternative = "stationary"): p- value smaller than printed p-value
72 Analisando o resultado da aplicação do teste ADF verifica-se que o valor do p-value é menor que 0.05, indicando assim que a série temporal é estacionária, no entanto, os dados quando submetidos à função de modelação auto.arima() ,resultaram num modelo que indicou existir uma diferenciação da série temporal de primeira ordem (𝑑 = 1), o que contraria os resultados deste teste.
Código 5.2 - Aplicação do teste kpss ao conjunto de dados y_train referente ao segundo caso de estudo, fazendo uso da linguagem de programação R.
> tseries::kpss.test(y_train, null=c("Level", "Trend")) KPSS Test for Level Stationarity
data: y_train
KPSS Level = 0.82369, Truncation lag parameter = 5, p-value = 0.01
Warning message:
In tseries::kpss.test(y_train, null = c("Level", "Trend")) : p-value smaller than printed p-value
O resultado do teste kpss, contraria o teste ADF na medida em que o p-value toma o valor de 0.01, ou seja, é menor que 0.05 e, portanto, a hipótese nula é rejeitada para 𝛼 = 5%. Este resultado levanta o pressuposto de que a função de modelação auto.arima() deverá utilizar este teste para verificação da estacionariedade da série temporal, pois se utilizasse o teste ADF o modelo teria o valor do parâmetro 𝑑 = 0 e a série não sofreria uma diferenciação de primeira ordem.
Finalmente, para o modelo de previsão direcionado a um artigo, o menor valor de RMSE conseguido foi 838.3712 e o nível de correlação não ultrapassou os 55%. Estes valores resultaram da aplicação da função de modelação auto.arima() (sem a matriz de eventos) aos respetivos dados de treino para o caso de estudo. O resultado em evidência é um pouco particular, uma vez que a função auto.arima() com regressores apresentou piores resultados relativamente à aplicação da mesma sem a matriz, o que à partida não seria normal, pois esta matriz auxilia bastante na identificação de valores extraordinários (quer positivos, quer
negativos). Mesmo assim, estes fatores deverão ter contribuído, neste exemplo, de forma negativa na modelação dos dados, traduzindo-se num valor de erro superior.
Figura 5.9 - Valores obtidos para o terceiro caso de estudo através das funções de modelação: hw(), tbats().
74 Tabela 5.5 - Valores obtidos para o RMSE e o coeficiente de correlação para os modelos aplicados ao terceiro caso de estudo
Figura 5.11 - Valores obtidos para o terceiro caso de estudo através da função de modelação auto.arima() com e sem regressores.
Figura 5.12 - Valores obtidos para o terceiro caso de estudo através da função de modelação ets().
Modelos 𝑹𝑴𝑺𝑬 Correlação HW 2480.746 0.2991716 TBATS 891.177 0.4880483 NNETAR 1000.904 0.2262959 TSLM 1118.322 0.2540566 ARIMACREG 1113.745 0.5020359 ARIMACREG 838.3712 0.5543826 ETS 2537.2 0.2896635
Uma vez obtidas as previsões calculadas por um modelo, estas devem ser analisadas, com a finalidade de inferir o grau de acuidade das mesmas. A série de erros relativa aos valores previstos deverá ser em tudo semelhante a um ruído branco (do inglês, white noise), ou seja, independentemente da fração de tempo em que a série temporal é observada, ela deverá parecer semelhante. Quando os erros de previsão, também designados por resíduos, são considerados um ruído branco, significa que todas as informações na série temporal foram captadas pelo modelo para fazer previsões. O restante são flutuações aleatórias que não podem ser modeladas. Numa situação em que se verifique que os resíduos não apresentam um comportamento semelhante a um white noise, é indicação de que podem ser feitas melhorias adicionais ao modelo de previsão.
Através da análise gráfica dos resíduos é legítimo perceber se estes seguem uma distribuição semelhante a um white noise e se se verifica a existência de algum outlier. Para dados referentes a séries temporais, é habitual observar-se a função de autocorrelação, acf (do inglês, AutoCorrelation Function), dos resíduos, de forma a perceber se existe alguma correlação entre eles e, portanto, se existe ainda informação possível de ser extraída dos dados. A função de autocorrelação é uma medida da correlação entre as observações de uma série temporal que são separadas por k (lags) unidades de tempo (𝑦𝑡 e 𝑦𝑡−𝑘). A autocorrelação
entre as séries 𝑦𝑡 e 𝑦𝑡−1 (autocorrelação com desfasamento, lag, 1) indica como os valores
estão relacionados com seus valores imediatamente precedentes, enquanto que a autocorrelação entre 𝑦𝑡e 𝑦𝑡−2 (autocorrelação com lag 2) fornece uma relação dos valores da
série 𝑦𝑡 , com aqueles valores referidos acima atrasados em dois intervalo de tempo. Então, é possível existir 1 ou 2 correlações significativas em lags de ordem superior, ainda assim, geralmente, esses lags são devidos a erros aleatórios e, portanto, não são considerados indicadores de correlação nos resíduos [56].
Outra verificação a ser tida em conta é a da normalidade dos resíduos através da observação do seu histograma. O histograma utiliza-se para verificar se a distribuição de probabilidade associada a um conjunto de dados pode ser aproximada pela distribuição normal (distribuição de Gauss ou Gaussiana). Deste modo, se os resíduos seguirem uma distribuição normal, é indicador que estes não são autocorrelacionados e, logo, o modelo captou bem a informação presente nos dados.
76 Por fim, outro teste amplamente utilizado na verificação da autocorrelação dos resíduos em séries temporais e com análise semelhante à estabelecida para a função adf() é o de Box-
Pierce e Ljung-Box. Na estatística, o teste Box-Pierce e Ljung-Box testa se uma série de
observações ao longo do tempo é aleatória e independente. Se as observações não forem independentes, estamos presente a um problema de autocorrelação. A hipótese nula é a de que as autocorrelações, até um certo lag, são iguais a zero, ou seja, os valores dos dados são aleatórios e independentes. Se o valor do p-value for maior que 0.05, os resíduos são independentes e semelhantes a um white noite, caso seja inferior a 0.05, as autocorrelações para um ou mais lags poderão ser significativamente diferentes de zero, indicando que os valores não são aleatórios e independentes ao longo do tempo [30].
Tomando como ponto de partida a análise dos resíduos do primeiro caso de estudo, verificou-se que os mesmos eram correlacionados, o que significa que o modelo não conseguiu captar com sucesso a informação presente nos dados. A figura 5.13 resulta da aplicação da função checkresiduals() disponível no Rstudio, que permite fazer uma análise geral aos resíduos. Esta função apresenta simultaneamente o gráfico dos resíduos, o gráfico acf() e, ainda, o seu histograma. Apesar do histograma apresentar uma distribuição Gaussiana, analisando o gráfico da função de autocorrelação é notória a correlação ainda existente nos resíduos, encontrando-se várias barras acima do valor de referência. No próprio gráfico dos resíduos é também verificada a presença de um outlier, que poderá ser o causador da correlação ainda existente. O teste de Box-Pierce e Ljung-Box foi igualmente feito no sentido de comprovar esta verificação. Os resultados apresentam-se na figura 5.13 e no excerto de código seguinte:
Código 5.3 - Aplicação do teste Box-Pierce e Ljung-Box aos resíduos do primeiro caso de estudo para 1 lag, 12 lags e 24 lags referente à função de modelação tslm(),fazendo uso da linguagem de programação R.
> Box.test(fitTSLM$residuals, lag=1, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test data: fitTSLM$residuals
X-squared = 128.97, df = 1, p-value < 2.2e-16
> Box.test(fitTSLM$residuals, lag=12, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test data: fitTSLM$residuals
X-squared = 163.63, df = 12, p-value < 2.2e-16
> Box.test(fitTSLM$residuals, lag=24, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test data: fitTSLM$residuals
X-squared = 192.35, df = 24, p-value 2.2e-16
Todos os valores de p-value obtidos para os lags testados refletiram a presença de correlação, consequentemente, optou-se por analisar o segundo modelo com melhores resultados, neste caso, o ARIMA com regressores. O modelo ARIMA alcançado foi do tipo 𝐴𝑅𝐼𝑀𝐴 (2,1,2), indicando uma série temporal de 2ª ordem para parte autorregressiva e média Figura 5.13 - Análise dos resíduos para o primeiro caso de estudo através da função tslm(). No cimo: gráfico dos resíduos; em baixo à esquerda: função de autocorrelação dos resíduos; em baixo à direita: histograma dos resíduos.
78 móvel e com uma diferenciação de 1ª ordem. O resultado da análise aos resíduos a este modelo, encontra-se na figura 5.14 e no código transcrito 5.4.
Figura 5.14 - Análise dos resíduos para o primeiro caso de estudo através da função auto.arima(). No cimo: gráfico dos resíduos; canto inferior esquerdo: função de autocorrelação dos resíduos; canto inferior direito: histograma dos resíduos.
Código 5.4 - Aplicação do teste Box-Pierce e Ljung-Box aos resíduos do primeiro caso de estudo para 1 lag, 12 lags e 24 lags referente à função de modelação auto.arima(),fazendo uso da linguagem de programação R.
> Box.test(fitARIMACREG$residuals, lag=1, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMACREG$residuals
X-squared = 0.00017911, df = 1, p-value = 0.9893
> Box.test(fitARIMACREG$residuals, lag=12, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMACREG$residuals
X-squared = 19.787, df = 12, p-value = 0.07122
> Box.test(fitARIMACREG$residuals, lag=24, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMACREG$residuals
Comparando o gráfico de autocorrelação obtido para as funções de modelação tslm() e
auto.arima(), pode-se concluir que o segundo apresenta um nível de correlação menor entre os
resíduos. De igual forma, o teste Box-Pierce e Ljung-Box até 24 lags apresenta valores de p-
value superiores a 0.05, indicando ausência de correlação. Apesar da função tslm() ter
grangeado melhores valores para o RMSE (para correlação os valores foram semelhantes), isso não se traduziu no melhor modelo entre os testados, uma vez que a análise feita aos seus resíduos permitiu concluir que o modelo não conseguiu extrair toda informação possível presente nos dados, contrariamente ao sucedido no modelo ARIMA. O facto do modelo TSLM apresentar ainda correlação nos resíduos indica que aquele poderia ser posteriormente melhorado, no entanto, por vezes, mesmo tentando melhorar o modelo, por exemplo, fazendo crescer a matriz de eventos, não é certo que se consiga obter melhores resultados. Por fim, o modelo selecionado para o primeiro caso de estudo foi o ARIMA com regressores.
Para o segundo caso de estudo concluiu-se que o modelo conseguiu captar com sucesso as informações presentes nos dados, pois tanto o teste Box- Pierce e Ljung-Box como a função de correlação informaram que não existia correlação entre os resíduos. Do mesmo modo, o histograma demonstrava uma distribuição Gaussiana, portanto, é viável afirmar que não existia informação remanescente nos dados passível de ser modelada. A figura e o código transcritos de seguida demonstram os resultados obtidos:
Figura 5.15 - Análise dos resíduos para o segundo caso de estudo. No cimo: gráfico dos resíduos; canto inferior esquerdo: função de autocorrelação dos resíduos; canto inferior direito: histograma dos resíduos.
80 Código 5.5 - Aplicação do teste Box-Pierce e Ljung-Box aos resíduos do segundo caso de estudo para 1 lag, 12 lags e 24 lags, fazendo uso da linguagem de programação R. Todos os testes demonstram valores de p-value altos refletindo a ausência de correlação.
> Box.test(fitARIMACREG$residuals, lag=1, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test data: fit5$residuals
X-squared = 0.11033, df = 1, p-value = 0.7398
> Box.test(fitARIMACREG$residuals, lag=12, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMACREG$residuals
X-squared = 3.9152, df = 12, p-value = 0.9849
> Box.test(fitARIMACREG$residuals, lag=24, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMACREG$residuals
X-squared = 15.677, df = 24, p-value = 0.8994
O terceiro caso de estudo foi ao encontro dos resultados obtidos para o teste a uma categoria de produtos, tendo-se verificado ausência de correlação, quer através do teste Box-
Pierce e Ljung-Box, quer da análise do gráfico acf(). O primeiro exibiu ausência de correlação
para todos os lags testados pois os valores de p-value são elevados. A função de autocorrelação também exibiu ausência de autocorrelação, não se verificando observações acima da linha. As conclusões são apresentadas na figura 5.16 e código 5.6:
Figura 5.16 - Análise dos resíduos para o terceiro caso de estudo. No cimo: gráfico dos resíduos; canto inferior esquerdo: função de autocorrelação dos resíduos; canto inferior direito: histograma dos resíduos.
Código 5.6 - Aplicação do teste Box-Pierce e Ljung-Box aos resíduos do terceiro caso de estudo para 1 lag, 12 lags e 24 lags, fazendo uso da linguagem de programação R. Mais uma vez todos os testes demonstram valores de p- value altos refletindo a ausência de correlação.
> Box.test(fitARIMASREG$residuals, lag=1, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMASREG$residuals
X-squared = 0.2594, df = 1, p-value = 0.6105
> Box.test(fitARIMASREG$residuals, lag=12, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMASREG$residuals
X-squared = 3.9152, df = 12, p-value = 0.9805
> Box.test(fitARIMASREG$residuals, lag=24, type=c("Box-Pierce", "Ljung-Box"))
Box-Pierce test
data: fitARIMASREG$residuals
X-squared = 15.677, df = 24, p-value = 0.5927