Como corrigir os outliers detectados uma vez para a previsão de dados de séries temporais?

10

Estou tentando encontrar uma maneira de corrigir os valores discrepantes quando os encontrar / detectar nos dados de séries temporais. Alguns métodos, como o nnetar no R, apresentam alguns erros para séries temporais com valores extremos grandes / grandes. Já consegui corrigir os valores ausentes, mas os valores discrepantes ainda estão prejudicando minhas previsões ...

Mila
fonte
o que você quer dizer com "corrigir"?
Rbatt
Substituindo ou substituindo ... Ou deveria ser apenas subtraindo ...?
Mila
3
Os outliers são "reais"? Com isso, quero dizer, os outliers são causados ​​pela incapacidade do modelo de prever eventos extremos ou choques? Ou são "erros", como problemas de entrada de dados?
probabilityislogic

Respostas:

9

Atualmente, existe um recurso no pacote de previsão do R para identificar e substituir valores discrepantes. (Ele também lida com os valores ausentes.) Como você aparentemente já está usando o pacote de previsão, essa pode ser uma solução conveniente para você. Por exemplo:

fit <- nnetar(tsclean(x))

A tsclean()função ajustará uma tendência robusta usando loess (para séries não sazonais) ou tendência robusta e componentes sazonais usando STL (para séries sazonais). Os resíduos são calculados e os seguintes limites são calculados:

q0,1q0,9

U=q0.9+2(q0.9q0.1)L=q0.12(q0.9q0.1)
onde e são os percentis 10 e 90 dos resíduos, respectivamente.q0.1q0.9

Outliers são identificados como pontos com resíduos maiores do que ou menores do que .LUL

Para séries temporais não sazonais, os valores discrepantes são substituídos por interpolação linear. Para séries temporais sazonais, o componente sazonal do ajuste STL é removido e a série ajustada sazonalmente é interpolada linearmente para substituir os valores extremos, antes de re-sazonalizar o resultado.

Rob Hyndman
fonte
1
Sua elaboração aqui também é útil: stats.stackexchange.com/questions/1142/… (tsclean chama tsoutliers)
4

Ao identificar um modelo ARIMA, você deve identificar simultaneamente pulsos / turnos de nível / pulsos sazonais e / ou tendências de horário local. Você pode obter algum material de leitura sobre os procedimentos de detecção de intervenção em http://www.ebay.com/ctg/Time-Series-Analysis-Univariate-and-Multivariate-Methods-David-P-Reilly-and-William-Wei-1999 - / 85697 e http://www.unc.edu/~jbhill/tsay.pdf . Talvez você precise buscar softwares comerciais como SAS / SPSS / AUTOBOX para obter resultados úteis, pois o software livre que eu vejo está precisando. De passagem, contribuí com grandes melhorias técnicas nessa área para a AUTOBOX.

EDITAR:

Uma abordagem ainda melhor é identificar os valores discrepantes usando o método rigoroso ARIMA, além dos procedimentos de detecção de intervenção, levando a parâmetros ARIMA robustos e uma boa previsão. Agora considere o desenvolvimento de previsões simuladas incorporando resíduos re-amostrados sem efeitos de pulso. Dessa maneira, você obtém o melhor dos dois mundos, como um bom modelo e declarações de incerteza mais realistas para as previsões que não assumem que os parâmetros estimados do modelo são os valores da população.

IrishStat
fonte
1

Eu concordo com @Aksakal. Em vez de remover os outliers, uma abordagem melhor seria usar algum tipo de procedimento estatístico para lidar com os outliers. Eu sugiro que você ganhe dinheiro com seus dados. Se implementada adequadamente, a winorisation pode ser relativamente robusta para os outliers. Nesta página: http://www.r-bloggers.com/winsorization/ , você encontrará códigos R para implementar a winsorização. Se você pensa em ganhar seus dados, precisará pensar cuidadosamente nos detalhes da distribuição. Os outliers devem ser extremamente baixos, ou devem ser extremamente altos, ou talvez ambos. Isso afetará se você ganha ou ganha no nível de 5% ou 10% e / ou 95% ou 99%.

Daniel
fonte
1
A Winsorization, com o objetivo de estimar uma média geral, pode fazer algum sentido na ausência de qualquer tendência ou componente sazonal nos dados, mas ameaça destruir informações importantes.
whuber
0

No contexto de previsão, a remoção de valores discrepantes é muito perigosa. Por exemplo, você está prevendo vendas de uma mercearia. Digamos que houve uma explosão de gás no prédio vizinho, o que fez com que você fechasse a loja por alguns dias. Foi a única vez que a loja foi fechada em 10 anos. Assim, você obtém a série temporal, detecta o outlier, remove-o e projeta. Você silenciosamente assumiu que nada disso acontecerá no futuro. No sentido prático, você comprimiu sua variação observada, e as variações do coeficiente diminuíram. Portanto, se você mostrar as faixas de confiança para a sua previsão, elas serão mais estreitas do que teriam sido se você não removesse o outlier.

Obviamente, você pode manter a discrepância e prosseguir como de costume, mas essa também não é uma boa abordagem. A razão é que esse erro externo distorcerá os coeficientes.

Eu acho que uma abordagem melhor nesse caso é permitir uma distribuição de erro com caudas gordas, talvez uma distribuição estável. Nesse caso, seu erro externo não distorcerá muito os coeficientes. Eles ficarão próximos dos coeficientes com um outlier removido. No entanto, o outlier será exibido na distribuição de erros, a variação do erro. Essencialmente, você terá faixas de confiança de previsão mais amplas.

As faixas de confiança transmitem uma informação muito importante. Se você está prevendo que as vendas serão de US $ 1.000.000 este mês, mas há 5% de chance de serem US $ 10.000, isso afeta suas decisões sobre gastos, gerenciamento de caixa etc.

Aksakal
fonte
-1

Realizar previsões usando (ou não) um modelo com valores discrepantes removidos depende da probabilidade de discrepâncias ocorrerem no futuro e da distribuição esperada de seu efeito, se realmente ocorrer. Os dados de treinamento são suficientes para iluminar isso? Uma abordagem bayesiana deve ajudar ...

Ricardo Coqueiro
fonte
1
Isto está incorreto. sua previsão pode ser imprecisa se você não ajustar os valores discrepantes, principalmente se eles estiverem no final da série.
forecaster