fundo
Estou trabalhando em um conjunto de dados de séries temporais de leituras de medidores de energia. A duração da série varia de acordo com o metro - para alguns, tenho vários anos, outros apenas alguns meses etc. Muitos exibem sazonalidade significativa e muitas vezes múltiplas camadas - dentro do dia, semana ou ano.
Uma das coisas em que tenho trabalhado é agrupar essas séries temporais. Meu trabalho é acadêmico no momento e, enquanto estou fazendo outras análises dos dados, tenho um objetivo específico de realizar alguns agrupamentos.
Fiz alguns trabalhos iniciais em que calculei vários recursos (porcentagem usada nos fins de semana versus dia da semana, porcentagem usada em diferentes intervalos de tempo etc.). Depois, passei a analisar o uso do Dynamic Time Warping (DTW) para obter a distância entre séries diferentes e o agrupamento com base nos valores das diferenças, e encontrei vários documentos relacionados a isso.
Questão
A sazonalidade de uma série específica alterada fará com que meu cluster esteja incorreto? E se sim, como faço para lidar com isso?
Minha preocupação é que as distâncias obtidas pela DTW possam ser enganosas nos casos em que o padrão em uma série temporal mudou. Isso pode levar ao armazenamento em cluster incorreto.
Caso o exposto acima não seja claro, considere estes exemplos:
Exemplo 1
Um medidor tem leituras baixas da meia-noite às 8h, as leituras aumentam acentuadamente durante a próxima hora e permanecem altas das 9h às 17h, depois diminuem acentuadamente durante a próxima hora e ficam baixas das 18h até meia-noite. O medidor continua esse padrão consistentemente todos os dias por vários meses, mas depois muda para um padrão em que as leituras simplesmente permanecem em um nível consistente ao longo do dia.
Exemplo 2
Um medidor mostra aproximadamente a mesma quantidade de energia consumida a cada mês. Após vários anos, ele muda para um padrão em que o uso de energia é maior durante os meses de verão, antes de retornar à quantidade usual.
Direções possíveis
- Gostaria de saber se posso continuar comparando séries temporais inteiras, mas dividi-las e considerá-las como uma série separada se o padrão mudar consideravelmente. No entanto, para fazer isso, eu precisaria ser capaz de detectar essas alterações. Além disso, simplesmente não sei se essa é uma maneira adequada ou se trabalha com os dados.
- Também considerei dividir os dados e considerá-los como muitas séries temporais separadas. Por exemplo, eu poderia considerar cada combinação dia / metro como uma série separada. No entanto, eu precisaria fazer o mesmo se quisesse considerar os padrões semanais / mensais / anuais. Eu acho que isso funcionaria, mas é potencialmente bastante oneroso e eu odiaria seguir esse caminho se houver uma maneira melhor que eu esteja perdendo.
Notas adicionais
Essas são coisas que surgiram nos comentários, ou coisas em que pensei devido a comentários, que podem ser relevantes. Estou colocando aqui para que as pessoas não precisem ler tudo para obter informações relevantes.
- Estou trabalhando em Python, mas tenho rpy para aqueles lugares onde R é mais adequado. No entanto, não estou necessariamente procurando uma resposta em Python - se alguém tiver uma resposta prática sobre o que deve ser feito, fico feliz em descobrir os detalhes da implementação.
- Tenho bastante código de "rascunho" funcional - fiz algumas execuções na DTW, fiz alguns tipos diferentes de clustering etc. Acho que compreendo amplamente a direção que estou tomando e o que devo fazer. Estou procurando realmente está relacionado a como eu processo meus dados antes de encontrar distâncias, executar agrupamentos, etc. Dado isso, suspeito que a resposta seria a mesma, independentemente de as distâncias entre séries serem calculadas por DTW ou por uma distância euclidiana mais simples (ED).
- Achei esses documentos especialmente informativos sobre séries temporais e DTW e podem ser úteis se for necessário algum conhecimento sobre a área de tópicos: http://www.cs.ucr.edu/~eamonn/selected_publications.htm