Estou trabalhando em um problema de classificação de séries temporais em que a entrada são dados de uso de voz de séries temporais (em segundos) nos primeiros 21 dias de uma conta de telefone celular. A variável de destino correspondente é se essa conta foi cancelada ou não no período de 35 a 45 dias. Portanto, é um problema de classificação binária.
Estou obtendo resultados muito ruins de todos os métodos que tentei até agora (em vários graus). Primeiro, tentei a classificação k-NN (com várias modificações) e obtive resultados extremamente ruins. Isso me levou a extrair recursos da série temporal - ou seja, média, variância, max, min, total de zeros dias, total de zero dias seguidos, diferença entre a primeira metade da média e a segunda metade da média, etc. e os recursos mais preditivos pareciam ser totais zeros e total de zero dias (usando vários algoritmos de classificação). O desempenho foi o melhor, mas o desempenho ainda não foi muito bom.
Minha próxima estratégia era superestimar as instâncias negativas no meu conjunto de treinamento, uma vez que havia muito poucas. Isso resultou em uma previsão de cancelamento mais correta, mas à custa de mais falsos positivos.
Estou começando a pensar que talvez os dados de uso de séries temporais simplesmente não sejam muito preditivos (embora o senso comum diga que deveria ser). Talvez haja alguma variável latente que não estou considerando. Observar os dados também mostra um comportamento estranho. ou seja, alguns exemplos mostram muito pouco ou diminuem o uso (ou, às vezes, nenhum) e não cancelam, e alguns mostram um aumento no uso que cancela. Talvez esse comportamento contraditório não gere um limite de decisão muito claro para um classificador.
Outra fonte possível de erro é o fato de muitos exemplos de treinamento serem muito escassos (ou seja, muitos dias com 0 de uso). Uma ideia que ainda não tentei é dividir a série temporal em segmentos e gerar alguns recursos dessa maneira, mas não tenho grandes esperanças.
fonte
Respostas:
Eu tive um sucesso muito bom aplicando o KNN com distorção de tempo dinâmico como métrica de distância.
Minha pesquisa (pdf) sugere que essa abordagem é muito difícil de superar. O esquema abaixo é da minha implementação python do KNN e DTW no github . Ou visualize no IPython Notebook
Se você está treinando um conjunto de dados muito grande, sugiro executar um cluster hierárquico da matriz de distância. Em seguida, faça a amostragem dos clusters desejados para produzir seu conjunto de dados de treinamento menor. O
hclust
vai garantir que você tenha séries temporais que representam uma ampla gama de características de séries temporais em seus dados.fonte
As duas abordagens para classificação de séries temporais
Há duas maneiras de como lidar com entradas estruturadas temporais para tarefas de classificação:
Eu também estava implantando com sucesso o KNN com DTW com sucesso no passado. No entanto, eu quase sempre conseguia superar sua precisão com um modelo que usa recursos bem projetados. Além disso, KNN com DTW para classificações binárias escala com O (n_t · m_ {trem} · m_ {teste}), sendo n_t o comprimento da série temporal, mtrain e mtest o número de dispositivos no trem e no conjunto de testes, respectivamente . Isso significa que os cálculos demoram bastante.
Portanto, eu recomendaria seguir uma abordagem baseada em recursos.
tsfresh calcula um grande número de recursos
O pacote python tsfresh calcula um grande número desses recursos a partir de um pandas.DataFrame que contém a série temporal. Você pode encontrar sua documentação em http://tsfresh.readthedocs.io .
Você pode tentar calcular uma enorme quantidade de recursos. Mais tarde, você pode filtrar os recursos por seu significado e identificar candidatos promissores.
Isenção de responsabilidade: Eu sou um dos autores do tsfresh.
fonte