[Eu publiquei essa pergunta no Stack Overflow aqui, mas não recebi nenhuma resposta, então pensei em tentar aqui. Desculpas se a publicação não for permitida.]
Eu tenho tentado usar esta implementação do algoritmo Holt-Winters para previsão de séries temporais em Python, mas encontrei um obstáculo ... basicamente, para algumas séries de entradas (positivas), às vezes ela prevê números negativos, o que deve claramente não seja o caso. Mesmo que as previsões não sejam negativas, às vezes são extremamente imprecisas - ordens de magnitude maiores / menores do que deveriam. Fornecer ao algoritmo mais períodos de dados para trabalhar não parece ajudar e, de fato, muitas vezes piora a previsão.
Os dados que estou usando têm as seguintes características, que podem ser problemas:
Amostragem com muita frequência (um ponto de dados a cada 15 minutos, em oposição aos dados mensais como o exemplo usa) - mas pelo que li, o algoritmo Holt-Winters não deve ter problemas com isso. Talvez isso indique um problema com a implementação?
Possui várias periodicidades - há picos diários (ou seja, a cada 96 pontos de dados), além de um ciclo semanal de dados de fim de semana ser significativamente menor que os dados dos dias da semana - por exemplo, os dias da semana podem atingir o pico em torno de 4000, mas o pico nos fins de semana em 1000 - mas mesmo quando eu dou apenas nos dados do dia da semana, encontro o problema do número negativo.
Há algo que me falta na implementação ou no uso do algoritmo Holt-Winters em geral? Como não sou um estatístico, estou usando os valores 'padrão' de alfa, beta e gama indicados no link acima - é provável que esse seja o problema? Qual é a melhor maneira de calcular esses valores?
Ou ... existe um algoritmo melhor para usar aqui do que Holt-Winters? Por fim, só quero criar previsões sensatas a partir de dados históricos aqui. Eu tentei a suavização exponencial única e dupla, mas (tanto quanto eu entendi) nem suporta periodicidade nos dados.
Também procurei usar o pacote de previsão R por meio do rpy2 - isso me daria melhores resultados? Eu imagino que ainda precisaria calcular os parâmetros e assim por diante, então seria apenas uma boa idéia se meu problema atual residir na implementação do algoritmo ...?
Qualquer ajuda / entrada seria muito apreciada!