Usando o pacote de previsão R com valores ausentes e / ou séries temporais irregulares

16

Estou impressionado com o forecastpacote R , bem como, por exemplo, o zoopacote para séries temporais irregulares e interpolação de valores ausentes.

Meu aplicativo é na área de previsão de tráfego de call center; portanto, os dados nos finais de semana estão (quase) sempre ausentes, o que pode ser bem tratado zoo. Além disso, alguns pontos discretos podem estar faltando, eu apenas uso R NApara isso.

A coisa é: todo o bom magia do pacote de previsão, tais como eta(), auto.arima()etc, parecem esperar simples tsobjetos, ou seja equidistantes série de tempo que não contenham quaisquer dados em falta. Penso que as aplicações do mundo real para séries temporais equidistantes são definitivamente existentes, mas - na minha opinião - muito limitadas.

O problema de algumas discretas NAvalores podem ser facilmente resolvidos utilizando qualquer das funções de interpolação oferecidos no zoo, bem como pelo forecast::interp. Depois disso, eu corro a previsão.

Minhas perguntas:

  1. Alguém sugere uma solução melhor?
  2. (minha pergunta principal) Pelo menos no domínio do aplicativo, na previsão de tráfego do call center (e até onde eu possa imaginar na maioria dos outros domínios problemáticos), as séries temporais não são equidistantes. Pelo menos, temos um esquema recorrente de "dias úteis" ou algo assim. Qual é a melhor maneira de lidar com isso e ainda usar toda a magia legal do pacote de previsão?

    Devo apenas "compactar" a série cronológica para preencher os fins de semana, fazer a previsão e "inflar" os dados novamente para reinserir os valores de NA nos fins de semana? (Isso seria uma pena, eu acho?)

    Existem planos para tornar o pacote de previsão totalmente compatível com pacotes de séries temporais irregulares, como o zoo ou o seu? Se sim, quando e se não, por que não?

Eu sou bastante novo em previsões (e estatísticas em geral), portanto posso ignorar algo importante.

entreprogreur
fonte
Bem-vindo ao site e à previsão! As aplicações do mundo real para séries temporais equidistantes não são definitivamente muito limitadas. Por acaso, conheço um pouco da previsão que entra no seu supermercado com produto disponível para atender à demanda promocional e, acredite, esses milhões de séries temporais (20.000 SKUs em 1.000 lojas são muito comuns) são realmente muito equitativas. (Desculpe, mas você meio que pediu ...) Mas tentarei encontrar algo mais útil em um minuto.
S. Kolassa - Restabelece Monica
2
Você poderia ser mais explícito sobre o motivo pelo qual os dados do call center não estão equidistantes? (Talvez eu esteja entendendo mal o que você entende por "equispaced".) Os métodos de previsão de call center que eu vi usualmente agrupam as chamadas recebidas em intervalos de 15 minutos, o que atende à minha definição de "equispaced". Em seguida, precisamos lidar com a sazonalidade complexa (intra-diária, intra-semanal, anual), para qual tópico isso pode ajudá-lo: stats.stackexchange.com/questions/44704/… Isso responde à sua pergunta? Caso contrário, diga-nos o que mais você precisa.
S. Kolassa - Restabelece Monica
5
auto.arimapode lidar com valores ausentes.
22813 Rob Robndndman
11
Obrigado por todos os comentários construtivos! Stephan, meus dados não estão equidistantes de duas maneiras: 1. Muitos call centers são fechados apenas aos sábados e domingos. Alguns estão fechados apenas aos domingos. Portanto, o espaço "normal" entre dois pontos de dados adjacentes é de um dia, exceto de sex a seg, que é de três dias. Portanto, o espaço não é igual, ou seja, não equidistante. Segundo, pode haver dados ausentes aleatórios em algum lugar porque eles simplesmente esqueceram de ligar o dispositivo de medição naquele dia ou o que seja. Espero que isso esclareça meu argumento.
entreprogreur
11
Apenas um pensamento (provocador). Se você disser que os call centers estão fechados nos fins de semana. Então você não tem dados ausentes. Suas séries temporais abrangem Mo-Fr. 5 dias. bastante equidistante. Interpolar os fins de semana parece-me formalmente errado, já que você sabe que nenhuma chamada ocorre e qualquer informação imputada é falsa. Eu argumentaria que você nunca pode melhorar uma estimativa inventando dados ...
significa-para-significado

Respostas:

1

Eu não sou um especialista em R, então talvez exista uma maneira mais simples, mas já me deparei com isso antes. O que eu fiz antes é implementar uma função que mede a distância (em unidades de tempo) entre as datas reais e a salva em uma nova coluna na série temporal existente. Então, temos algo como:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

Dessa forma, se sua série temporal ainda não estiver associada a uma série real de pontos no tempo (ou formato incorreto ou o que for), você ainda poderá trabalhar com ela.

Em seguida, você escreve uma função que cria uma nova série temporal para você, assim:

Primeiro, você calcula quantas unidades de tempo a série cronológica realmente teria entre as datas de sua escolha e cria essa linha do tempo no zoológico ou ts ou qualquer que seja a opção com valores vazios.

Segundo, você pega sua matriz de séries temporais incompletas e, usando um loop, preenche os valores na linha do tempo correta, de acordo com os limites de sua escolha. Quando você se depara com uma linha em que a distância da unidade não é uma (faltam dias (unidades)), preenche valores interpolados.

Agora, como essa é sua função, você pode realmente escolher como interpolar. Por exemplo, você decide que, se a distância for menor que duas unidades, use uma interpolação linear padrão. Se falta uma semana, você faz outra coisa e se um certo limite de datas ausentes é atingido, você emite um aviso sobre os dados - realmente o que você deseja imaginar.

Se o loop atingir a data final, você retornará seus novos st.

A vantagem dessa função é que você pode usar diferentes interpolações ou procedimentos de manipulação, dependendo dos comprimentos da lacuna e retornar uma série criada de forma limpa no formato de sua escolha. Uma vez escrito, permite obter ts limpos e agradáveis ​​a partir de qualquer tipo de dados tabulares. Espero que isso ajude você de alguma forma.

EU SOU UM
fonte
Obrigado, IMA, pela resposta útil! Então, o que estou fazendo agora: para valores ausentes discretos, uso a interpolação (bem como os "ajustes" fornecidos pelo usuário) para preencher os dados ausentes. IMA, sua resposta para melhorar ainda mais isso é muito útil. Para dados ausentes "regulares", como fim de semana, eu transformo meus dados em um segundo, "pseudo" ts apenas para fins de previsão e, em seguida, transforme o resultado novamente na série temporal "correta", para que também a previsão tenha valores ausentes nos fins de semana. Eu ainda ficaria grato por uma sugestão mais elegante sobre como lidar com "lacunas" regulares nos fins de semana.
entreprogreur
@entreprogreur, eu não respondi, o IMA respondeu. O crédito completo do IMA get aqui. Eu apenas aprimorei a formatação para que ela fosse exibida corretamente.
gung - Restabelece Monica
1

Você deve ter muito cuidado ao aplicar a interpolação antes de mais tratamento estatístico. A escolha que você faz para sua interpolação introduz um viés em seus dados. Isso é algo que você definitivamente deseja evitar, pois pode alterar a qualidade de suas previsões. Na minha opinião, para valores ausentes, como os que você mencionou, que são regularmente espaçados no tempo e que correspondem a uma parada nas atividades, pode ser mais correto deixar esses dias de fora do seu modelo. No pequeno mundo do seu call center (o modelo que você está construindo sobre ele), talvez seja melhor considerar que o tempo simplesmente parou quando ele é fechado, em vez de inventar medidas de uma atividade inexistente. Por outro lado, o modelo ARIMA foi estatisticamente construído com base no pressuposto de que os dados são igualmente espaçados. Tanto quanto sei, não há adaptação do ARIMA ao seu caso. Se você estiver faltando apenas algumas medidas nos dias úteis, poderá ser forçado a usar a interpolação.

Remi D
fonte
0

Eu não interpolaria os dados antes de estimar o modelo nesses dados, como observou @Remi. É uma má idéia. Um exemplo extremo: imagine que você tem dois pontos de dados em janeiro de 2013 e janeiro de 2014. Agora interpole 10 pontos mensais entre: fevereiro e dezembro de 2013 e execute a regressão na data mensal. Na realidade, não será tão ruim, mas é a mesma idéia: você estará inflando suas estatísticas na melhor das hipóteses.

O caminho a seguir é usar métodos de séries temporais que lidam com dados ausentes. Por exemplo, métodos de espaço de estado. Dê uma olhada no pacote astsa R. Ele vem com um excelente livro sobre análise de séries temporais. Isso manipulará bem os dados ausentes. O Matlab agora tem uma funcionalidade semelhante no pacote ssm . Você precisa aprender a converter seus modelos em forma de espaço de estado, mas precisa aprender isso de qualquer maneira, se quiser se afastar da auto.arima"mágica".

Aksakal
fonte