Classer les clients en fonction de 2 fonctionnalités ET d'une série d'événements chronologiques

12

J'ai besoin d'aide sur ce qui devrait être ma prochaine étape dans un algorithme que je conçois.

En raison des NDA, je ne peux pas divulguer grand-chose, mais je vais essayer d'être générique et compréhensible.

Fondamentalement, après plusieurs étapes dans les algorithmes, j'ai ceci:

Pour chaque client que j'ai, et les événements qu'ils font pendant un mois, au cours des premières étapes, j'ai regroupé les événements en plusieurs catégories (chaque client aura les événements séparés en catégories qui vont de 1 à x étant x entre 1 à 25, généralement les premières catégories ont plus de densité d'événements que les autres).

Pour chaque catégorie et client, j'ai créé une série chronologique agrégeant les événements du mois par heure (obtenant des modèles de quand ces événements sont en cours). J'utilise également quelques variables de normalisation basées sur le nombre de jours sur un mois (30 jours) pendant lesquels le gars effectue au moins un événement, et le nombre de jours avec au moins un événement sur le total des jours avec au moins un événement événement (agréger tous les clusters). Le premier me donne un ratio de l'activité du client au cours du mois, et le second pondère la catégorie par rapport aux autres.

La table finale ressemble à ceci

|*Identifier*|  *firstCat* | *feature1* | *feature2*  |   {      *(TIME SERIES)*   }

CustomerID  |  ClusterID |  DaysOver30 | DaysOverTotal | Events9AM Events10AM ... 

 xx | 1 | 0,69 |  0,72 |  0,2   0,13   ...

 xx | 2 | 0,11 |  0,28 |  0,1   0,45   ...

 xy | 1 | 0,23 |  0,88 |  0,00  0,60   ...

 xy | 2 | 0,11 |  0,08 |  1,00  0,00   ...

 xy | 3 | 0,10 |  0,04 |  0,40  0,60   ...

Les variables de série chronologique sont le pourcentage sur le total des événements par jour sur chaque catégorie spécifique (cela signifie que pour chaque ligne, l'addition de toutes les variables devrait être 1). La raison de le faire comme ça est parce que par exemple une série chronologique avec des événements 0 0 0 1 0et 1 1 1 2 1sont complètement différents, et une normalisation à la normale donnerait des résultats similaires. Et en raison de l'inclinaison élevée entre les différentes catégories, je vérifie les valeurs de la série temporelle indépendamment avec les autres.

Ce que je dois faire maintenant est d'identifier ces catégories (rappelez-vous, elles peuvent être de 1 à x étant x n'importe quel nombre de 1 à 25) en 3 balises: balise A, balise B et aucune d'entre elles. En regardant ces variables, je peux identifier manuellement à quelle balise elles appartiennent, et l'idée est d'identifier autant que possible manuellement et d'utiliser n'importe quel algorithme de classificateur pour en tirer des leçons et les identifier toutes.

Mon idée était d'utiliser plusieurs régressions logistiques sur la table, mais toutes les variables de la série chronologique sont corrélées (car elles sont une combinaison linéaire les unes des autres), j'ai donc pensé que je ferais mieux d'utiliser un algorithme de clustering uniquement sur la série chronologique en utilisant euclidienne. distance pour catégoriser les différents modèles et utiliser le résultat et les deux autres variables de normalisation dans la régression logistique.

L'autre préoccupation que j'ai est que cette approche prend chaque ligne indépendamment des autres, et en théorie, pour chaque client, il ne devrait y avoir que 0 ou 1 balise A, 0 ou 1 balise B et les autres doivent être Aucun (un autre l'astuce est que normalement les balises A et B sont entre les premières catégories, car elles dépendent fortement des caractéristiques de normalisation (si le nombre de jours sur le total est élevé, il est fort possible que la ligne soit A ou B, selon le modèle de série chronologique) .

Edit: Ce n'est plus un problème, je vais simplement effectuer deux régressions logistiques différentes, une pour le tag A ou autre et une autre pour le tag B ou un autre, avec les probabilités de résultat, je ne peux sélectionner que le meilleur de chacun.

L'ensemble de données est énorme et l'algorithme final doit être appliqué en utilisant SQL (sur Teradata), mais pour obtenir les coefficients de la régression logistique ou les centres du clustering, j'obtiens un échantillon et j'utilise R.

JusefPol
la source
Juste une suggestion :) ... Je ne sais pas si vous obtenez une bonne réponse tant que la question est aussi longue. Par exemple, vos tags sont exactement ma direction de recherche, mais je n'ai vraiment pas le temps et l'énergie de tout lire! Si vous pouvez mettre à jour une version plus courte, ce serait mieux pour vous Q et aussi pour vous-même car dans les rapports scientifiques, vous devez parler brièvement des choses.
Kasra Manshaei
Je vais essayer de réduire la question. C'est juste que d'habitude, si je ne m'explique pas, les gens confondent ce que je voulais. Quoi qu'il en soit, dès que j'aurai du temps sur mon travail je vais essayer de réduire la taille de la question, merci pour la recommandation
JusefPol
Quelle est votre question exacte? Je calculerais simplement les caractéristiques de la série chronologique et ajouterais ensuite ces caractéristiques aux caractéristiques des clients. Ensuite, vous aurez juste un clustering de base. Pour le choix des fonctionnalités de la série chronologique, une connaissance du domaine est requise.
Nikolas Rieble

Réponses:

2

Je sais que cela fait un certain temps que la question n'a pas été posée, mais pour les futurs lecteurs, je propose ici une autre solution au problème de la classification des séries chronologiques de données proportionnelles, c'est-à-dire des vecteurs de proportions.

Les modèles de Markov cachés (HMM) sont largement utilisés pour la classification des séries chronologiques. Les implémentations originales ont été développées pour des données discrètes et gaussiennes mais depuis lors, elles ont été étendues à davantage de distributions de probabilité.

Parmi eux, les distributions de Dirichlet, de Dirichlet généralisé et de Bêta-Liouville qui sont parfaitement adaptées pour travailler avec des données proportionnelles.

Habituellement, un modèle est formé pour chaque catégorie ("Tag" dans cette question) à partir de séries chronologiques pour lesquelles la catégorie est connue. Lorsqu'une nouvelle série chronologique doit être classée, sa probabilité par rapport à chaque modèle est calculée. La nouvelle série chronologique est généralement affectée à la catégorie conduisant à la probabilité la plus élevée.

Voici les documents de référence de ces modèles les présentant plus en profondeur et fournissant toutes les équations nécessaires à la mise en œuvre:

  • Dynamical Dirichlet Mixture Model, rapport de recherche de l'IDIAP, L. Chen, D. Barber, J.-M. Odobez, avril 2007
  • Modélisation proportionnelle des données avec des modèles de Markov cachés basés sur des mélanges de Dirichlet et Bêta-Liouville généralisés appliqués à la détection d'anomalies dans les espaces publics, E. Epaillard, N.Bouguila, Pattern Recognition 55, pp 125-136, 2016

Pour les deux autres caractéristiques mentionnées dans la question, des HMM pour les données mixtes ont également été développés dans le document de recherche suivant: Modèle hybride de Markov caché pour la modélisation mixte continue / continue et discrète / continue des données, E. Epaillard, N.Bouguila, MMSP, pp. 1-6, 2015.

Ces modèles sont plus lourds à déployer que les modèles de régression mais ont l'avantage d'être des modèles discriminants et génératifs et de pouvoir bien généraliser lorsqu'une certaine variabilité est présente dans les données traitées.

Eskapp
la source