Rétro-test ou validation croisée lorsque le processus de création de modèle était interactif

9

J'ai quelques modèles prédictifs dont je voudrais tester les performances (c.-à-d. Prendre mon jeu de données, le «rembobiner» à un point antérieur dans le temps et voir comment le modèle aurait fonctionné de manière prospective).

Le problème est que certains de mes modèles ont été construits via un processus interactif. Par exemple, en suivant les conseils des stratégies de modélisation de la régression de Frank Harrell , dans un modèle, j'ai utilisé des splines cubiques restreintes pour gérer les associations non linéaires possibles entre les caractéristiques et la réponse. J'ai attribué les degrés de liberté de chaque spline en fonction d'une combinaison de connaissances du domaine et de mesures univariées de la force de l'association. Mais les degrés de liberté que je veux accorder à mon modèle dépendent évidemment de la taille de l'ensemble de données, qui varie considérablement lors des contre-tests. Si je ne veux pas choisir séparément les degrés de liberté à chaque fois que le modèle est testé à nouveau, quelles sont mes autres options?

Pour un autre exemple, je travaille actuellement sur la détection des valeurs aberrantes via la recherche de points avec un effet de levier élevé. Si j'étais heureux de le faire à la main, je regardais simplement chaque point de données à fort effet de levier, vérifiais sainement que les données étaient propres et les filtrais ou les nettoyais à la main. Mais cela repose sur un tas de connaissances de domaine, donc je ne sais pas comment automatiser le processus.

J'apprécierais des conseils et des solutions à la fois (a) au problème général de l'automatisation des parties interactives du processus de construction de modèles, ou (b) des conseils spécifiques pour ces deux cas. Merci!

Ben Kuhn
la source

Réponses:

4

Pour info, cela pourrait être plus approprié pour SE.DataScience, mais pour le moment, je vais y répondre ici.

Il me semble que vous pourriez être dans une situation où vous n'aurez d'autre choix que d'écrire un script qui implémentera vos solutions. N'ayant jamais travaillé avec des splines, ma connaissance de celles-ci est strictement théorique, alors soyez indulgent et faites-moi savoir s'il y a quelque chose que je ne vois pas.

D'une manière générale, il semble que vous ayez quelques éléments différents que vous devrez résoudre pour mettre en œuvre cela.

1.) Déterminer les paramètres du modèle de manière dynamique. Vous avez mentionné précédemment que vous avez utilisé une combinaison de connaissances du domaine et de mesures univariées. Cela me semble être quelque chose que vous devriez pouvoir gérer heuristiquement. Vous devrez convenir dès le départ d'un ensemble de règles que votre programme mettra en œuvre. Cela peut ou non être une tâche triviale, car vous devrez réfléchir sérieusement aux implications potentielles de ces règles. Cela peut vous obliger à revisiter chaque étape de votre processus et à cataloguer non seulement les décisions, mais aussi les raisons de ces décisions.

2.) Mise en œuvre effective de votre programme. Afin de rendre vos tests de performances correctement dynamiques et faciles à maintenir et à modifier à l'avenir, vous devrez réfléchir à la façon dont vous allez les structurer. Vous souhaiterez probablement utiliser une sorte de boucle pour votre estimation prédictive des performances du modèle principal, de préférence avec une longueur définissable par l'utilisateur afin de permettre une plus grande flexibilité à l'avenir. Vous souhaiterez également probablement écrire des fonctions distinctes pour chaque action que vous souhaitez que votre programme entreprenne, car cela facilitera le test des fonctionnalités, ainsi que la maintenance et la modification de votre programme à l'avenir. Vous aurez, au minimum, probablement besoin de fonctions pour la sélection de l'ensemble de données (c'est-à-dire uniquement les périodes qui se sont «écoulées» au moment du contre-test), le nettoyage et la validation (auxquelles vous devrez vraiment penser,

Votre question sur la détection et la gestion des valeurs aberrantes relève également de ces deux préoccupations et je m'efforcerais de l'implémenter en écrivant des boucles plus petites dans votre boucle de programme principale qui continueraient à "nettoyer" et à réinstaller le modèle jusqu'à ce qu'il atteigne un point où vous seriez satisfait il (qui encore une fois, vous devrez vous définir).

Si cela semble être une grosse tâche, c'est parce que c'est; les gens ont écrit des bibliothèques de logiciels entières (parfois très lucratives) afin d'effectuer ce genre de tâche. Au-delà de cela, il est difficile d'offrir des conseils plus spécifiques sans en savoir plus sur vos processus, la structure des données et le langage de programmation dans lequel vous avez effectué votre travail jusqu'à présent.

Si tout cela vous est utile et que vous aimeriez que je développe sur tout cela, commentez, faites-le moi savoir, et je serais plus qu'heureux de le faire.

habu
la source
Je n'ai besoin d'aucune aide pour écrire le code, merci - notre infrastructure de backtesting est déjà en place et assez solide. Je m'intéresse simplement aux procédures statistiques que l' on pourrait utiliser. En ce qui concerne l'automatisation heuristique de la partie interactive de la modélisation: a-t-on écrit quelque chose à ce sujet? Je n'ai vu aucune mention de ce genre de processus dans la littérature. Vous mentionnez "les gens ont écrit des bibliothèques de logiciels entières" - avez-vous des références?
Ben Kuhn
@BenKuhn - Sur la base de votre commentaire, je ne suis pas certain des difficultés exactes que vous rencontrez; veuillez m'aider à obtenir un peu plus de clarté. L'utilisation de l'heuristique dans la construction de modèles automatisés est assez répandue; l'application la plus fondamentale à laquelle je puisse penser en ce moment est l'humble régression pas à pas. En l'absence des détails exacts de votre modèle, je ne peux pas pointer vers les documents exacts qui pourraient vous aider, mais une recherche rapide sur Google fait apparaître plusieurs articles explorant les méthodes de sélection automatique des paramètres, en particulier pour le lissage et les splines pénalisées. Voir mon prochain commentaire pour quelques liens
habu
@BenKuhn - que voulez-vous dire précisément lorsque vous dites des procédures statistiques que vous pourriez utiliser? À mon avis, le backtest pourrait être traité assez simplement en utilisant un échantillonnage de test de train avec une fenêtre de sélection de données mobile ou élargie. Toutes les données que vous avez acquises jusqu'au point du backtest seraient votre ensemble d'entraînement, tandis que les données que vous vous attendez à voir dans la prochaine période de temps, avant d'avoir la possibilité de réajuster votre modèle, seraient votre ensemble de test. Toutes les mesures habituelles de la performance prédictive et de la qualité de l'ajustement peuvent être utilisées pour effectuer l'évaluation réelle.
habu
@BenKuhn - Pour implémenter la partie réelle des connaissances métier, vous devez la codifier et vous assurer que les données nécessaires pour effectuer de telles déterminations sont disponibles en cas de besoin. En outre, j'utilise le terme "bibliothèque de logiciels" comme un terme général couvrant tout, des extensions aux bibliothèques de modélisation existantes qui sont destinées à automatiser la création de modèles pour certaines applications, jusqu'aux systèmes experts et d'aide à la décision de qualité industrielle.
habu
3

Plutôt que d'essayer de comprendre comment automatiser vos efforts de réglage manuel du modèle, je contournerais ce problème tous ensemble en examinant les apprenants à faible variance qui nécessitent beaucoup moins de réglage, même si cela a un coût d'augmentation du biais du modèle. Vous voulez avoir confiance en vos résultats de backtest qui se résument en grande partie à une faible variance d'échantillonnage dans vos prévisions, et l'introduction d'un processus de réglage automatisé au-dessus d'un apprenant qui a déjà une variance d'échantillonnage elle-même va à l'encontre de cet objectif. Il peut sembler que la queue remue le chien ici, mais tout ce qui nécessite un réglage minutieux (manuel ou automatisé) n'est pas un excellent candidat pour un environnement de backtest IMO vraiment honnête.

andrew
la source
Pourquoi le réglage automatisé (avec un réglage séparé exécuté à chaque point de backtest) ne serait-il pas un "environnement de backtest vraiment honnête"?
Ben Kuhn
La réduction de la variance en abandonnant les splines entraînerait malheureusement une perte inacceptable de puissance prédictive. Est-ce à cela que vous pensiez lorsque vous avez suggéré d'utiliser un apprenant à faible variance? Sinon, à quoi pensiez-vous?
Ben Kuhn
@BenKuhn - Je partage les préoccupations d'Andrew quant à savoir si un backtest serait un test vraiment "honnête" du pouvoir prédictif hors échantillon du modèle, si ce n'est pour une autre raison que le fait qu'il semble que vous ayez développé vos paramètres de réglage sur le ensemble de données complet à votre disposition; même si vous "remontez le temps" et reconstruisez votre modèle dynamiquement, la méthodologie par laquelle vous le ferez aura été développée en se référant à l'ensemble de données entier, de sorte qu'il existe un risque que le modèle soit toujours surajusté, même s'il est re-formé sur un sous-ensemble des données disponibles.
habu
1
tt
1
Et dans un domaine aussi bruyant que la finance, vous voulez vous assurer que si l'histoire s'était déroulée un peu différemment (mais toujours tirée d'une distribution sous-jacente), vous arriveriez toujours à un modèle similaire. Si vous êtes convaincu que votre processus est robuste à la variance d'échantillonnage, je pense que vous êtes bon. Mais d'après mon expérience, les procédures de réglage automatique peuvent être très sensibles à la variance d'échantillonnage.
andrew