Comment former le modèle LSTM sur plusieurs données de séries chronologiques?

14

Comment former le modèle LSTM sur plusieurs données de séries chronologiques?

Cas d'utilisation: J'ai des ventes hebdomadaires de 20 000 agents depuis 5 ans. Besoin de prévoir les ventes hebdomadaires à venir pour chaque agent.

Dois-je suivre une technique de traitement par lots - prendre un agent à la fois, former le modèle LSTM puis prévoir? De meilleures façons?

Aljo Jose
la source
avez-vous compris cela? Je regarde un problème similaire.
vishnu viswanath
@vishnuviswanath nous travaillons sur le développement d'un réseau neuronal (RNN) qui peut être un modèle unique pour tous les agents.
Aljo Jose
Merci. comment formez-vous le modèle pour plusieurs agents? formez-vous un agent par lot.
vishnu viswanath
nous sommes encore en phase de construction. kaggle.com/c/web-traffic-time-series-forecasting/discussion/… peut vous aider.
Aljo Jose

Réponses:

12

Faites de l'identité de l'agent l'une des fonctionnalités et entraînez-vous sur toutes les données. Entraînez-vous probablement sur un mini-lot de 128 agents par exemple à la fois: parcourez la série chronologique du début à la fin pour ces 128 agents, puis sélectionnez un nouveau mini-lot d'agents. Pour chaque mini-lot, exécutez une tranche de disons 50 pas de temps, puis backprop. Gardez les états finaux de cette tranche et exécutez les 50 pas de temps suivants, à partir de ces états finaux. Rincez et répétez jusqu'à la fin des pas de temps, pour ce mini-lot de ~ 128 agents.

En plaçant l'identité de chaque agent comme l'une des fonctionnalités, vous permettez au réseau de:

  • apprendre de toutes vos données, maximisant ainsi l'utilisation de vos données, et
  • apprendre les caractéristiques uniques de chaque agent, de sorte qu'il ne se contente pas de faire la moyenne de tous les agents ensemble
  • lorsque vous prédisez l'avenir d'un agent spécifique, assurez-vous d'utiliser les fonctionnalités d'ID d'agent correspondantes et le réseau ajustera les prévisions en conséquence.

Edit: Alpo Jose a écrit:

ok, dois-je utiliser un encodage à chaud pour faire l'identité de l'agent?

Oooh, c'est vrai. Il y en a 20 000. C'est beaucoup. Je pense que ce que vous voudrez peut-être faire est de les «intégrer». Avoir une couche de recherche, qui prend un identifiant d'agent (exprimé sous la forme d'un entier, d'un index) et génère un vecteur de grande dimension, comme quelque chose comme un vecteur de longueur 50-300, probablement un vecteur dont la longueur correspond approximativement à la taille cachée de votre LSTM.

Mathématiquement, une table de recherche, également appelée «couche d'intégration», équivaut à transformer les ID d'agent en vecteurs uniques, puis à passer par une couche linéaire (entièrement connectée). Cependant, les exigences en mémoire sont très réduites pour la couche d'intégration.

En termes de ce que la couche d'intégration apprendra, au fur et à mesure que vous l'entraînerez, la couche d'intégration formera une sorte de représentation latente de chaque agent. La représentation latente ne sera probablement pas lisible / interprétable en aucune façon, mais permettra au modèle d'apprendre des choses comme «ok cet agent, 1524, est relativement efficace, mais pas le week-end; où comme 1526 est grand chaque jour; etc ....'. Les dimensions latentes du vecteur d'intégration pourraient en fait signifier des choses, mais personne n'essaie jamais de comprendre ce qu'elles signifient (je pense que ce serait difficile / impossible). Cependant, les incorporations par agent de grande dimension permettent au modèle d'apprendre quelque chose sur le comportement de chaque agent et de le modéliser dans les prédictions de séries chronologiques.

Hugh Perkins
la source
ok, dois-je utiliser un encodage à chaud pour faire l'identité de l'agent?
Aljo Jose
@AljoJose a mis à jour la réponse pour prendre en compte cette question
Hugh Perkins
Je comprends maintenant, je vais essayer. merci Hugh.
Aljo Jose
J'ai un problème similaire, mais contrairement aux agents ici, j'ai plusieurs séries chronologiques comme instances du même processus, mais chacune de longueur variable. Je n'ai donc pas besoin de l'agent (processus, dans mon cas) comme fonctionnalité. Des suggestions sur la façon de gérer cela?
Anakin