Des fonctionnalités d'encodage comme le mois et l'heure sont catégorielles ou numériques?

23

Est-il préférable d'encoder des fonctionnalités comme le mois et l'heure en tant que facteur ou numérique dans un modèle d'apprentissage automatique?

D'une part, je pense que l'encodage numérique pourrait être raisonnable, car le temps est un processus progressif (le cinquième mois est suivi du sixième mois), mais d'autre part, je pense que l'encodage catégoriel pourrait être plus raisonnable en raison de la nature cyclique d'années et de jours (le 12e mois est suivi du premier).

Existe-t-il une solution ou une convention générale pour cela?

julien
la source
J'ai rencontré le même problème lors de la définition de la variable heure du jour (1 à 24) dans le modèle RF. Si je convertis la variable en catégorie, la fonction VarImp affiche une valeur d'importance pour chaque heure et elle semble très désorganisée. Je me demande simplement s'il est nécessaire de convertir une variable numérique de type «heure du jour» en variable catégorique?
Mahmudur Rahman

Réponses:

19

Avez-vous envisagé d'ajouter la transformation (sinus, cosinus) de la variable de l'heure de la journée? Cela garantira que les heures 0 et 23, par exemple, sont proches l'une de l'autre, permettant ainsi à la nature cyclique de la variable de transparaître.

( Plus d'infos )

Pablo O
la source
sorte de problème avec cela parce que si je le fais: sin (pi * X / 24) où X dans [0, 23] nous avons la même évaluation pour 6 heures et 18 heures que sin (pi * 6/24) == sin (pi * 18/24). mais ce sont des heures totalement différentes
Eran Moshe
Peut faire le cycle comme ceci: sin (pi * X / 12). Merci Eran:]
Eran Moshe
@EranMoshe fyi dans le post du lien ci-dessus, ils utilisent un facteur de 2 * pi à la place, donc ce serait du péché (2 * pi * X / 12) - ils donnent un raisonnement à ce sujet dans les commentaires
tsando
Et son (2 * pi X / 24) qui est (pi X / 12):] Comme vous le voyez, j'ai eu du mal avec le même problème que l'auteur de blog.davidkaleko.com/feature-engineering-cyclical-features.html a été aux prises avec. Et dans les commentaires, vous pouvez voir "Mariel G" le corriger exactement comme je m'en suis rendu compte: pi * X / 12 circulera pour l'heure de la journée. Ce que je viens aussi d'apprendre, c'est que vous devez prendre les composants cos et sin de cela pour définir une vraie période de 24 heures! (vous avez besoin d'un vrai cercle, et pas seulement d'une fonction périodique)
Eran Moshe
@EranMoshe ah oui, si vous voulez faire plus d'heures, alors il peut être réduit à piX / 12, mais si vous voulez faire des mois, alors ce serait 2piX / 12 c'est-à-dire pi / 6. Donc en général ce serait 2piX / période
tsando
9

La réponse dépend du type de relations que vous souhaitez représenter entre l'entité temporelle et la variable cible.

Si vous codez l'heure sous forme numérique, vous imposez certaines restrictions au modèle. Pour un modèle de régression linéaire, l'effet du temps est désormais monotone, la cible augmentera ou diminuera avec le temps. Pour les arbres de décision, les valeurs temporelles proches les unes des autres seront regroupées.

Le temps de codage catégorique donne au modèle plus de flexibilité, mais dans certains cas, le modèle peut ne pas avoir suffisamment de données pour bien apprendre. Une technique qui peut être utile consiste à regrouper les valeurs de temps en un certain nombre d'ensembles et à utiliser l'ensemble comme attribut catégorique.

Quelques exemples de regroupements:

  • Pour le mois, regroupez-les en trimestres ou en saisons, selon le cas d'utilisation. Par exemple: Jan-Mar, Apr-Jun, etc.
  • Pour les heures de la journée, regroupez-les en heures de la journée: matin, soir, etc.,
  • Pour le jour de la semaine, groupe en semaine, week-end.

Chacun des éléments ci-dessus peut également être utilisé directement en tant qu'attribut catégorique, avec suffisamment de données. En outre, des regroupements peuvent également être découverts par l'analyse des données, pour compléter une approche basée sur les connaissances du domaine.

raghu
la source
4

Je recommande d'utiliser des fonctionnalités numériques. L'utilisation de caractéristiques catégoriques signifie essentiellement que vous ne considérez pas la distance entre deux catégories comme pertinente (par exemple, la catégorie 1 est aussi proche de la catégorie 2 qu'elle l'est de la catégorie 3). Ce n'est définitivement pas le cas pendant des heures ou des mois.

Cependant, le problème que vous soulevez est que vous voulez représenter les heures et les mois d'une manière où 12 est aussi proche de 11 que de 1. Pour y parvenir, je recommande d'aller avec ce qui a été suggéré dans les commentaires et d'utiliser une fonction sinus / cosinus avant d'utiliser les heures / mois comme caractéristiques numériques.

Tanguy Coatalem
la source
3

Cela dépend de l'algorithme que vous utilisez.

Si vous utilisez des algorithmes arborescents comme la forêt aléatoire, passez simplement cette question. L'encodage catégorique n'est pas nécessaire pour les algorithmes basés sur des arbres.

Pour d'autres algorithmes comme le réseau neuronal, je suggère d'essayer les deux méthodes (continue et catégorique). L'effet diffère entre différentes situations.

Icyblade
la source
Cela dépend de l'implémentation basée sur l'arborescence. Les packages largement utilisés comme scikit-learn et xgboost ne reconnaissent pas les variables catégorielles. Vous devez les encoder à chaud.
Ricardo Cruz
De ce post: versdatascience.com/… vous ne devriez pas en utiliser un à chaud pour quoi que ce soit basé sur des arbres de décision, ce qui est à peu près ce que je découvre à la dure.
ashley
1

Étant donné que toutes les données dont vous disposez sont bien définies, je vous suggère un codage catégorique, qui est également plus facile à appliquer.

simonepi
la source
1

Pour reformuler la réponse fournie par @raghu . Une différence majeure entre les caractéristiques catégorielles et numériques est de savoir si l'ampleur des chiffres est comparable, c'est-à-dire que 2019 est plus grand que 2018 ou décembre (12) plus grand que mars (3)? Pas vraiment. Bien qu'il y ait un ordre séquentiel dans ces nombres, leur ampleur n'est pas comparable. Ainsi, la transformation en une valeur catégorielle peut avoir plus de sens.

CathyQian
la source