L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 101

 
Dr. Trader:

Une grande partie de tout cela, vous le savez vous-même et l'avez fait, mais j'écrirai plus en détail pour exclure toute hypothèse selon laquelle nous parlons de la même manière mais faisons différemment.


Tout cela à partir des conseils de ce forum et de l'expérience.

Merci.

Je vais répondre point par point.

Il est nécessaire de disposer d'une fonction de fitness soigneusement affinée pour estimer les paramètres du modèle. Si la fonction évalue les paramètres spécifiques du modèle et les prédicteurs sélectionnés avec un score élevé - il devrait y avoir de bons résultats dans le test sur les nouvelles données.
(Je garderai à l'esprit pour toute estimation que plus elle est élevée, meilleure elle est)

Cette fonction existe. Je n'ai pas besoin de R^2 (bien qu'au début, j'ai cherché à confirmer que le marché est stupidement prévisible en termes de régression). J'utilise une fonction écrite pour estimer le MO et la somme des points avec l'écart. Cette fonction s'exécute à l'intérieur de la boucle CV et sélectionne les meilleurs paramètres pour entraîner le modèle.

La fonction d'aptitude doit se répéter au moins 50 fois dans un cycle :
1) diviser les données en 2 parties, 50%/50%. Il devrait y avoir à la fois un échantillonnage aléatoire avec échantillon et un échantillonnage séquentiel (le morceau pour la formation se trouve quelque part au milieu, et pour la validation ce qui l'entoure au début et à la fin des données brutes). Y compris les versions extrêmes, où la formation porte sur la première moitié du tableau et la validation sur la dernière, et vice versa. Je pense qu'il est important d'avoir à la fois des échantillons échantillonnés séquentiellement et des échantillons aléatoires pour la formation. Dans l'image, vous pouvez voir plus clairement quelques exemples de partitionnement aléatoire et séquentiel, les lignes vertes sont pour la formation, les jaunes sont pour la validation.

Ce n'est pas très clair. Je ne comprends pas à quelles répétitions vous faites référence.

Là encore, je dispose de 99 ensembles d'entraînement (10 ans chacun). Chaque ensemble est unique en termes d'exemples, mais ils sont tous tirés de la même période "avant".

Sur chaque série, je lance un CV avec 2 à 10 fautes (je les passe également en revue).

Mais j'ai strictement toutes les fautes séparées par le temps. Je pense que c'est une méthode inviolablement correcte.

Donc 99 * nombre de combinaisons de paramètres CV (centaines) = des centaines de modèles entraînés, qui montrent la meilleure métrique de qualité sur les fautes de validation.

Ensuite, il y a le même nombre d'échantillons retardés prélevés dans la période "après" (qui est de 5 ans). Ils sont également uniques. Je fais un CV imbriqué : je vérifie chaque modèle résultant pour l'expérience du CV sur l'échantillon différé. J'obtiens deux vecteurs de valeurs de métriques de qualité : sur CV et sur échantillon différé.

Question pour les connaisseurs :

Si je dispose de données constantes et d'un modèle approprié (paquet), que puis-je espérer obtenir sur des échantillons différés ?

Réponse : la métrique de qualité (QM) sur les échantillons différés doit être corrélée avec la métrique de qualité sur les fautes de validation.

En réalité, y parvenir est un gros problème.

Pourquoi en ai-je besoin ? Ainsi, je peux sélectionner en toute confiance les meilleurs modèles en me fiant simplement à ma validation croisée. Puisque j'ai déjà vérifié qu'il donne des résultats cohérents avec l'avenir.

Les comités et autres modèles de haut niveau doivent également passer le test d'aptitude sur cet échantillon différé sur lequel ils n'ont été formés d'aucune manière.

 
Dr. Trader:


2) former le modèle sur l'échantillon de formation (les paramètres du modèle et les prédicteurs utilisés sont les mêmes tout au long du cycle, ceux que vous essayez d'estimer), puis prédire ces mêmes données avec ce modèle, et mettre un score sur la prédiction - précision, r^2, ou autre. Par exemple, j'arrondis le résultat de la régression aux classes, et j'utilise la fonction Kappa de Cohen pour l'estimation, elle vient de caret, je l'aime mieux que la précision de la classification ou la précision de la régression. Mais cela ne fonctionne que pour deux classes. Pour trois classes, je trouve difficile de suggérer quoi que ce soit, il est important que l'estimation prenne en compte la précision de chaque classe séparément, et donne une estimation globale sur cette base.
3) Appliquer un modèle entraîné pour prédire les données d'un échantillon de validation, estimer la prédiction avec la même fonction.
4) Les deux estimations (formation et validation) doivent être proches l'une de l'autre, et aussi élevées que possible. J'utilise ce code pour le score final - (min(score1,score2) - (max(score1,score2)-min(score1,score2)) - De la valeur min est soustrait leur delta.

À la fin de chaque itération, nous obtiendrons un certain score, qui, en raison du fractionnement aléatoire des données, peut varier de -1 à 1 (ou dans un autre intervalle, selon la fonction utilisée). Nous calculons leur valeur moyenne, et la renvoyons comme résultat de la fonction fitness. De plus, je soustrais un petit nombre (0,0001) de la valeur de fitness pour chaque prédicteur utilisé afin de pénaliser le modèle pour un trop grand ensemble de données requises.


Veuillez préciser, la formation fait-elle référence à l'évaluation sur les fautes de validation croisée ?

La proximité de l'estimation de formation et de validation - signifie-t-elle une corrélation entre l'échantillonnage retardé et le résultat de la validation croisée ?

Si c'est le cas, alors nous sommes tout près.

 
Alexey Burnakov:

Veuillez préciser, la formation fait-elle référence à l'évaluation sur les fautes de validation croisée ?

La proximité de l'estimation de formation et de validation - signifie-t-elle une corrélation entre l'échantillonnage retardé et le résultat de la validation croisée ?

Si c'est le cas, alors nous sommes tout près.

Que signifie "corrélation" ? "+1" ? "-1" ? Quoi avec quoi ?

Voici 50 résultats de la course que je peux comprendre. À 50 résultats, vous pouvez déjà appliquer les statistiques, compter la moyenne, les écarts et surtout l'intervalle de confiance.....

 
mytarmailS:

Puis-je voir le résultat des transactions d'hier ?

Ү Pas parfait, mais quand même 80% du modèle est généralisé....

 
SanSanych Fomenko:

Que signifie "corrélation" ? "+1" ? "-1" ? Quoi avec quoi ?

Voici 50 résultats de la course que je peux comprendre. À 50 résultats, vous pouvez déjà appliquer les statistiques, compter la moyenne, la variance et surtout l'intervalle de confiance.....

Nan, tu n'as pas compris, CC.

Corrélation de la métrique de qualité sur l'échantillon différé avec la métrique de qualité sur la validation croisée (comme, un échantillon de test qui évalue le modèle entraîné). Si nous disposons de centaines de modèles formés, nous obtenons deux vecteurs de mesures de qualité.

Exemple : la précision de la classification en validation croisée est de 57%, en échantillonnage différé de 50%. Et il existe des centaines (milliers) de ces valeurs. Mais il existe des centaines et des milliers de modèles formés. La question se pose donc.

 
Alexey Burnakov:

Veuillez préciser, la formation fait-elle référence à l'évaluation sur les fautes de validation croisée ?

La proximité de l'estimation de formation et de validation - signifie-t-elle une corrélation entre l'échantillonnage retardé et le résultat de la validation croisée ?

Si c'est le cas, alors nous sommes tout près.

En code, c'est quelque chose comme ça :

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
Des éléments d'apprentissage automatique ont été appliqués dans la pratique, non pas pour apprendre à partir de l'historique des transactions, mais à partir de l'historique de l'utilisation d'un ensemble de signaux/options dans les propres sessions de trading du robot pour établir une corrélation avec le déclenchement de modèles particuliers sur le marché "en direct" dans des configurations/conditions de marché/signaux particuliers.
 
Dr. Trader:

En code, ça donne quelque chose comme ça :

Oui, dites-moi simplement en mots, vous comparez quels échantillons ? Il y a la formation, il y a le test (formation et test multiples = validation croisée). Il y a une validation (échantillonnage retardé).

J'ai trois colonnes :

la formation de tous. ---- test fouille la validation croisée. ----- observations en attente

0,7 0,65 0,55

... .... ....

Le fait que la formation soit en corrélation avec le test n'a pas de sens, car le modèle choisi, par conséquent, est formé sur l'ensemble du jeu, dont les parties ont été incluses dans le test.

Mais le fait que les estimations du test soient en corrélation avec les estimations reportées est important pour moi.

 

Dans vos termes, je compare l'entraînement et le test.
Je ne dispose pas d'un échantillon de validation (retardé) lors de la formation du modèle. L'échantillon différé sera les nouvelles données que le modèle négociera après la formation.

Le fait que la formation soit en corrélation avec le test n'a aucun sens.

C'est pourquoi je procède à un partitionnement multiple des données et à un réentraînement multiple des modèles. Si les paramètres du modèle échouent, alors le résultat moyen sur les échantillons de test sera beaucoup plus faible que le résultat moyen sur les échantillons d'entraînement.

 
Dr. Trader:

Dans vos termes, je compare la formation et le test.
Il s'avère que je n'ai pas d'échantillonnage de validation (retardé) lors de la formation du modèle. Les nouvelles données avec lesquelles le modèle va échanger après l'entraînement seront un échantillonnage différé.

C'est pourquoi je procède à un partitionnement multiple des données et à un entraînement multiple du modèle, encore et encore. Si les paramètres du modèle échouent, alors le résultat moyen sur les échantillons de test sera beaucoup plus faible que le résultat moyen sur les échantillons d'entraînement.

Il y a du zimus dans ce que vous faites.

Cependant, vous devriez également essayer l'échantillonnage différé. C'est un classique. Former, tester, valider.

Et rendre la procédure encore plus complexe. Pour chaque modèle qui fonctionne bien en termes de formation et de test, appelons-le modèle X, faites une validation sur les données différées. Vous pouvez ainsi savoir si vous choisissez le bon modèle, en utilisant uniquement la formation et les tests. Faites plusieurs modèles avec différents paramètres, choisissez les meilleurs (10, 100, 1000). Échec. Vous comprendrez si votre "meilleure" métrique se reflète dans les données futures ou non. Ce n'est qu'après que vous vous lancez dans la bataille.

Raison: