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 0
et 1 1 1 2 1
sont 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.