Classificação de séries temporais - resultados muito ruins

11

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.

user1893354
fonte
1
Para iniciantes, recomendo que você experimente variantes do seguinte. Agregue os dados de uso por horas / dias. 2. A partir dos seus dados de treinamento, sobreponha os gráficos dessas séries temporais para ver padrões dentro dos dois grupos. 3. Explore vários modelos de séries temporais / regressão que se ajustam bem aos seus dados. 4. Use os coeficientes do modelo como recursos para o seu classificador.
ramhiser
Eu gosto da sua técnica de extração de recursos. Eu vou tentar isso. Fiquei convencido de que meus dados são escassos demais para encontrar padrões, mas quem sabe. Obrigado!
user1893354

Respostas:

13

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

KNN e DTW

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 hclustvai garantir que você tenha séries temporais que representam uma ampla gama de características de séries temporais em seus dados.

Mark Regan
fonte
4
Você poderia atualizar o link para seu trabalho de pesquisa?
Tilaprimera 19/07/19
10

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:

  1. Modelo de série temporal dedicado: O algoritmo de aprendizado de máquina incorpora a série temporal diretamente. Conto o modelo KNN com DTW nesta categoria.
  2. Abordagem baseada em recursos: aqui as séries temporais são mapeadas para outra representação, possivelmente de menor dimensão. Isso significa que o algoritmo de extração de recursos calcula características como o valor médio ou máximo da série temporal. Os recursos são passados ​​como uma matriz de recursos para um aprendizado de máquina "normal", como uma rede neural, floresta aleatória ou máquina de vetores de suporte. Essa abordagem tem a vantagem de uma melhor explicabilidade dos resultados. Além disso, nos permite usar uma teoria bem desenvolvida de aprendizado de máquina supervisionado.

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 .

insira a descrição da imagem aqui

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.

MaxBenChrist
fonte
Muito obrigado pelo seu post maravilhoso. Eu tenho uma série temporal realmente pequena (por exemplo, 10 pontos de dados por série temporal). Nesse caso, você recomendaria usar tsfresh para meu conjunto de dados? Obrigado :)
EMJ