Classification des séries chronologiques - très mauvais résultats

11

Je travaille sur un problème de classification de série chronologique où l'entrée est des données d'utilisation vocale de série chronologique (en secondes) pour les 21 premiers jours d'un compte de téléphone portable. La variable cible correspondante est de savoir si ce compte a été annulé dans la fourchette de 35 à 45 jours. C'est donc un problème de classification binaire.

J'obtiens de très mauvais résultats de toutes les méthodes que j'ai essayées jusqu'à présent (à des degrés divers). J'ai d'abord essayé la classification k-NN (avec diverses modifications) et j'ai obtenu des résultats extrêmement mauvais. Cela m'a amené à extraire des caractéristiques de la série chronologique - c'est-à-dire la moyenne, la variance, le maximum, le minimum, le nombre total de jours zéro, le total de zéro jour, la différence entre la moyenne de la première moitié et la moyenne de la deuxième moitié, etc. et les caractéristiques les plus prédictives semblaient être totales zéros jours et total des jours de fin zéro (en utilisant plusieurs algorithmes de classification). Cela a donné les meilleurs résultats, mais les performances n'étaient toujours pas très bonnes.

Ma prochaine stratégie consistait à suréchantillonner les instances négatives de mon ensemble d'entraînement car il y en avait si peu. Cela a abouti à une prédiction d'annulation plus correcte mais au détriment de plus de faux positifs.

Je commence à penser que les données d'utilisation des séries temporelles elles-mêmes ne sont peut-être tout simplement pas très prédictives (bien que le bon sens dise qu'elles devraient l'être). Il y a peut-être une variable latente que je ne considère pas. L'examen des données montre également un comportement étrange. c'est-à-dire que certains exemples montrent une utilisation très faible ou décroissante (ou parfois aucune) et n'annulent pas, et certains montrent une augmentation de l'utilisation qui annule. Ce comportement contradictoire ne génère peut-être pas une frontière de décision très claire pour un classificateur.

Une autre source d'erreur possible est le fait que de nombreux exemples de formation sont très rares (c'est-à-dire de nombreux jours avec 0 utilisation). Une idée que je n'ai pas encore essayée est de diviser la série chronologique en segments et de générer certaines fonctionnalités de cette façon, mais je n'ai pas de grands espoirs.

user1893354
la source
1
Pour commencer, je vous recommande d'essayer des variantes des éléments suivants. Agréger les données d'utilisation par heures / jours. 2. À partir de vos données d'entraînement, superposez des graphiques de ces séries chronologiques pour voir les tendances au sein des deux groupes. 3. Explorez différents modèles de séries chronologiques / de régression qui correspondent bien à vos données. 4. Utilisez les coefficients du modèle comme caractéristiques de votre classificateur.
ramhiser
J'aime votre technique d'extraction de fonctionnalités. Je vais essayer. Je suis devenu convaincu que mes données sont trop rares pour trouver des modèles, mais qui sait. Merci!
user1893354

Réponses:

13

J'ai eu un assez bon succès en appliquant KNN avec la déformation Dynamic Time comme métrique de distance.

Ma recherche (pdf) suggère que cette approche est très difficile à battre. Le schéma ci-dessous provient de mon implémentation python de KNN et DTW sur github . Ou afficher dans le bloc-notes IPython

KNN et DTW

Si vous vous entraînez, l'ensemble de données est très volumineux, je suggère d'effectuer un regroupement hiérarchique de la matrice de distance. Puis échantillonnez à partir des grappes souhaitées pour produire votre plus petit ensemble de données de formation. Le hclustveillera à ce que vous avez des séries chronologiques qui représentent un large éventail de caractéristiques de séries temporelles dans vos données.

Mark Regan
la source
4
Pourriez-vous mettre à jour le lien vers votre document de recherche?
tilaprimera
10

Les deux approches de la classification des séries chronologiques

Il existe deux façons de gérer les entrées structurées temporelles pour les tâches de classification:

  1. Modèle de série chronologique dédié: l'algorithme d'apprentissage automatique intègre directement la série chronologique. Je compte le modèle KNN avec DTW dans cette catégorie.
  2. Approche basée sur les caractéristiques: Ici, les séries chronologiques sont mappées à une autre représentation, éventuellement de dimension inférieure. Cela signifie que l'algorithme d'extraction d'entités calcule des caractéristiques telles que la valeur moyenne ou maximale de la série chronologique. Les caractéristiques sont ensuite transmises sous forme de matrice de caractéristiques à un apprentissage automatique "normal" tel qu'un réseau de neurones, une forêt aléatoire ou une machine à vecteur de support. Cette approche présente l'avantage d'une meilleure explicabilité des résultats. De plus, il nous permet d'utiliser une théorie bien développée de l'apprentissage automatique supervisé.

J'ai également réussi à déployer KNN avec DTW avec succès dans le passé. Cependant, j'ai presque toujours réussi à battre sa précision avec un modèle qui utilise des fonctionnalités bien conçues. De plus, KNN avec DTW pour les classifications binaires échelles avec O (n_t · m_ {train} · m_ {test}) avec n_t étant la longueur de la série chronologique, mtrain et mtest étant le nombre d'appareils dans le train et l'ensemble de test, respectivement . Cela signifie que les calculs prennent assez de temps ..

Par conséquent, je recommanderais de poursuivre une approche basée sur les fonctionnalités.

tsfresh calcule un grand nombre de fonctionnalités

Le package python tsfresh calcule un grand nombre de ces fonctionnalités à partir d'un pandas.DataFrame contenant la série temporelle. Vous pouvez trouver sa documentation sur http://tsfresh.readthedocs.io .

entrez la description de l'image ici

Vous pouvez l'essayer pour calculer une énorme quantité de fonctionnalités. Plus tard, vous pouvez filtrer les caractéristiques selon leur importance et identifier les candidats prometteurs.

Avertissement: je suis l'un des auteurs de tsfresh.

MaxBenChrist
la source
Merci beaucoup pour votre merveilleux article. J'ai une très petite série chronologique (par exemple, 10 points de données par série chronologique). Dans ce cas, recommanderiez-vous d'utiliser tsfresh pour mon jeu de données? Merci :)
EmJ