J'utilise le paquet caret dans R pour créer des modèles prédictifs de classification et de régression. Caret fournit une interface unifiée permettant de régler les hyper-paramètres de modèle par validation croisée ou initialisation. Par exemple, si vous construisez un modèle simple de classification 'voisins les plus proches', combien de voisins devez-vous utiliser? 2? dix? 100? Caret vous aide à répondre à cette question en rééchantillonnant vos données, en essayant différents paramètres, puis en agrégeant les résultats pour déterminer lequel offre la meilleure précision prédictive.
J'aime cette approche car elle fournit une méthodologie robuste pour choisir les hyper-paramètres du modèle. Une fois que vous avez choisi les hyper-paramètres finaux, elle fournit une estimation croisée de la "qualité" du modèle, en utilisant la précision des modèles de classification. et RMSE pour les modèles de régression.
Je souhaite maintenant créer un modèle de régression pour certaines données chronologiques, en utilisant probablement une forêt aléatoire. Quelle est la bonne technique pour évaluer la précision prédictive de mon modèle, compte tenu de la nature des données? Si les forêts aléatoires ne s'appliquent pas vraiment aux données chronologiques, quel est le meilleur moyen de créer un modèle d'ensemble précis pour l'analyse des séries chronologiques?
Réponses:
La technique "classique" de validation croisée des temps k est basée sur le fait que chaque échantillon de l'ensemble de données disponibles est utilisé (k-1) fois pour former un modèle et un temps pour le tester. Comme il est très important de valider des modèles de séries chronologiques sur des données "futures", cette approche ne contribuera pas à la stabilité du modèle.
Une propriété importante de nombreuses séries chronologiques (la plupart?) Est la corrélation entre les valeurs adjacentes. Comme l'a souligné IrishStat, si vous utilisez les lectures précédentes comme variables indépendantes de votre candidat au modèle, cette corrélation (ou manque d'indépendance) joue un rôle important et constitue une autre raison pour laquelle la validation croisée à k-times n'est pas une bonne idée.
Une façon de surmonter ce problème consiste à "suréchantillonner" les données et à les décorréler. Si le processus de décorrélation est réussi, l’utilisation de la validation croisée sur les séries chronologiques devient alors moins problématique. Cependant, cela ne résoudra pas le problème de la validation du modèle à l'aide de données futures.
Des clarifications
en validant le modèle sur des données futures, je veux dire la construction du modèle, l'attente de nouvelles données qui n'étaient pas disponibles pendant la construction, les tests, le réglage précis, etc. et la validation sur ces nouvelles données.
en suréchantillonnant les données, je veux dire la collecte de données chronologiques à une fréquence beaucoup plus élevée que nécessaire. Par exemple: échantillonnage des cours boursiers toutes les 5 secondes, lorsque les modifications horaires vous intéressent vraiment. Ici, quand je dis "échantillonnage", je ne veux pas dire "interpoler", "estimer", etc. Si les données ne peuvent pas être mesurées à une fréquence plus élevée, cette technique n'a pas de sens.
la source
http://robjhyndman.com/researchtips/crossvalidation/ contient une astuce rapide pour la validation croisée de séries chronologiques. En ce qui concerne l’utilisation de forêts aléatoires pour les données de séries chronologiques, il n’est pas sûr, bien que cela semble un choix étrange étant donné que le modèle est ajusté à l’aide d’échantillons bootstrap. Il existe bien sûr des méthodes classiques de séries chronologiques (par exemple ARIMA), de même que des techniques de ML telles que Neural Nets (exemple, exemple pdf ). Certains experts en séries chronologiques peuvent peut-être commenter le fonctionnement des techniques ML par rapport aux algorithmes spécifiques à une série chronologique.
la source
Voici un exemple de code pour la validation croisée de modèles de séries chronologiques. J'ai développé ce code dans mon blog , en intégrant le paquetage foreach pour accélérer les choses et en permettant un éventuel terme xreg dans la validation croisée.
Voici une copie du code du blog de Rob Hyndman:
la source
Si vous disposez de données chronologiques, vous pourriez avoir un "problème de degrés de liberté". Par exemple, si vous avez 4 observations effectuées à des intervalles d'une heure et que vous décidez ensuite d'utiliser 241 observations à des intervalles d'une minute, vous avez 241 observations mais elles ne sont pas nécessairement indépendantes. Lorsque vous soumettez ces 241 valeurs / mesures à un package analytique, le package peut s'attendre à ce qu'il s'agisse de 241 valeurs indépendantes au fur et à mesure de l'exécution de sa magie particulière. Si vous disposez de données chronologiques, vous devrez peut-être mettre à jour vos analyses. Je ne connais pas le programme auquel vous faites référence, mais il est raisonnable de penser de ma part (je pourrais me tromper!) Que ses tests (tests F / tests T, etc.) ne s'appliquent probablement pas à votre problématique.
la source
Je peux vous recommander 2 articles intéressants à lire qui sont en ligne .
J'espère que ça vous clarifie un peu vos idées
la source