mafs: Analisando a eficácia dos modelos preditivos usados no pacote
Posted on January 29, 2017
Lancei recentemente a versão 0.0.2 do pacote mafs tanto no CRAN como no Github. Adicionei dois novos recursos:
No data frame df_models criado, foi acrescentada uma variável referente ao tempo de execução (runtime) do modelo para a série temporal de input. Isso foi uma necessidade devido ao fato de alguns modelos levarem muito tempo para rodar. Esse dado será importante para ser levado em consideração no segundo recurso adicionado:
A função select_forecast() agora tem um argumento chamado dont_apply, no qual o usuário poderá inserir os modelos (em forma de vetor de caracteres) que não deverão ser usados na função para criar modelos preditivos. Esse recurso é muito útil para excluir da função os pacotes que demoram muito e que não costumam entregar bons resultados.
Neste post, farei uma demonstração da aplicação do pacote mafs em diversas séries temporais diferentes.
Os dados
As séries temporais usadas pertencem ao pacote fpp, que disponibiliza as séries temporais usadas no livro do Hyndman.
Vamos armazenar essas diversas séries em uma lista:
Será que todas essas séries são mensais? Podemos confirmar essa informação com a função frequency().
Temos então 8 séries anuais (frequência 1), 4 trimestrais e 5 mensais. Esse será um bom teste para o pacote mafs.
Modelagem
Para aplicar a função select_forecast() em todas as séries, é necessário um for loop:
Análise dos dados
Uma rápida visualização tabular dos resultados:
Vamos ver então quais modelos despontam como os mais rápidos e os mais eficientes.
Primeiro, um gráfico do tempo de execução por pacote
Percebe-se que os modelos tbats() e bats() são os mais computacionalmente custosos. Os mais rápidos são, sem surpresas, os modelos de previsão simples, como o da média simples e o modelo ingênuo.
Agora, um gráfico da acurácia dos modelos de acordo com a métrica MAPE:
Alguns modelos apresentaram outliers, o que distorceu o boxplot. Visto que esse gráfico não serviu para muita coisa, é melhor resumir a acurácia por meio da mediana simples do MAPE:
Vê-se que os modelos que obtiveram os melhores resultados foram os modelos stlm(), seja por arima ou por ets. Não vou entrar em detalhes estatísticos sobre o porquê desse resultado para não fugir do escopo do post.
Vamos então analisar a relação entre tempo de execução e eficácia dos modelos por meio de um gráfico de pontos.
É difícil visualizar alguma relação muito clara nesse gráfico. Ao invés de plotar todos os data points, vamos resumir os dados pela mediana do MAPE e do runtime para cada modelo.
Novamente, não é possível determinar que a acurácia do modelo influencia o seu tempo de execução.
Análise da influência da frequência da série
Influência no tempo de execução
Já que estamos trabalhando ao mesmo tempo com séries trimestrais, mensais e anuais, por que não analisar a influência da variável da frequência da série nos resultados obtidos com o pacote?
Primeiro, vamos criar um data frame com características sobre as séries analisadas
Para demosntrar a influência da frequência da série no tempo de execução dos modelos, uma boa opção de visualização é o gráfico de densidade:
É difícil tirar qualquer tipo de conclusão a partir do gráfico acima. Dá para afirmar que a probabilidade de um modelo ter um runtime muito curto (de até 0,25 segundos) é menor para séries mensais e trimestrais do que para mensais.
Um teste estatístico que pode ser usado para mensura essa relação é o ANOVA e o teste de Tukey:
O resultado do teste ANOVA aponta um valor significante (valor p menor que 0,05), o que indica que a hipótese nula de que a frequência da série não influencia o tempo de execução do ajuste pode ser rejeitado.
Já o teste de Tukey indica que apenas a hipótese nula só pode ser rejeitada para a comparação entre séries mensais e anuais. Para as outras duas comparações, o valor p é maior que 0,05.
Influência na acurácia
Conclusão
Uma próxima análise poderia incluir um número maior de séries e de frequências diferentes, como diárias e semanais.