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

 
Je me demande également comment le paquet foreca définit la relation entrée-sortie. Peut-être que c'est insignifiant, peut-être pas.
 
Alexey Burnakov:
Je me demande également comment le paquet foreca détermine la relation entrée-sortie. Peut-être que c'est banal ou peut-être pas.

Je viens de parcourir la ligne, permettez-moi d'être corrigé ou confirmé, mais d'après ce que j'ai compris, le paquet basé sur un algorithme interne évalue la capacité de prédiction d'une variable aléatoire particulière, c'est-à-dire la capacité d'extrapoler ses valeurs d'une variable aléatoire dans le futur. S'il s'agit d'un tracé de tendance, nous obtenons un, et s'il s'agit d'incréments de prix, nous obtenons 0,83 %, ce qui me semble assez évident. Et tout dépend de la méthode elle-même. Dans la pratique, c'est le contraire qui se produit, car les incréments sont beaucoup mieux prédits - ils sont beaucoup plus proches de la stationnarité que les tendances dans les séries chronologiques non stationnaires. Nous devons comprendre l'outil lui-même et appliquer l'outil aux objets auxquels il correspond.

En général, l'analyse des systèmes comporte des erreurs.

Erreur n° 1.

Appliquer la bonne méthode au mauvais problème.

Il est extrêmement courant dans les statistiques.

 
SanSanych Fomenko:

En général, je pense que l'objectif initial a été perdu. Pour moi, l'idée originale était que nous avons besoin de méthodes indépendantes du modèle pour déterminer la capacité de chacun des prédicteurs utilisés à prédire la variable cible.

Un exemple de sélection indépendante du modèle est le paquet vtreat. Il analyse en quelque sorte les données, puis les évalue par rapport aux valeurs cibles.

data(iris)
iris[,5] <- as.numeric(iris[,5]) #пакет  не умет факторы, их нужно сконвертировать в числа
iris_rand <- runif(nrow(iris)*10, min(iris[,1:4]), max(iris[,1:4])) #новых 10 предикторов со случайными значениями
dim(iris_rand) <- c(nrow(iris), 10)
colnames(iris_rand) <- paste0("rand_", c(1:10))
iris <- cbind(iris_rand, iris)
library(vtreat)
treatments <- designTreatmentsN(dframe = iris, varlist = colnames(iris)[1:(ncol(iris)-1)], outcomename = colnames(iris)[ncol(iris)], verbose = TRUE)
treatments
format(treatments)
significance <- treatments$scoreFrame[,"sig"]
names(significance) <- treatments$scoreFrame[,"origName"]
barplot(significance)

10 nouveaux prédicteurs avec des valeurs aléatoires sont créés pour la table de l'iris. designTreatmentsN notera chaque prédicteur, plus le score est faible, mieux c'est. Dans cet exemple, les 4 prédicteurs originaux (les derniers du graphique) se démarquent clairement, avec un score presque nul, ce qui est très bien. Lors de la sélection des prédicteurs, la première chose à éliminer est celle qui présente les valeurs les plus élevées.
S'il n'y a que 2 valeurs cibles (0/1, VRAI/FAUX, -1/1, facteur à 2 niveaux, etc...), il existe la fonction designTreatmentsC pour un tel cas.


Ce paquet est également utilisé dans y-aware pca. Le paquet vtreat met à l'échelle les prédicteurs en intervalles y-aware et les composants sont ensuite créés de manière presque habituelle (juste sans remise à l'échelle et centrage). Ainsi, si vous le souhaitez, vous pouvez faire des choses intéressantes comme la randomforest y-aware par exemple avec ce paquet.
Plus d'informations ici: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

 
Dr. Trader:

Un exemple de sélection indépendante du modèle est le paquet vtreat. Il analyse en quelque sorte les données et leur attribue une valeur cible.

10 nouveaux prédicteurs avec des valeurs aléatoires sont créés pour la table de l'iris. designTreatmentsN notera chaque prédicteur, plus le score est faible, mieux c'est. Dans cet exemple, les 4 prédicteurs originaux (les derniers du graphique) se détachent clairement, avec un score presque nul, ce qui est très bien. Lors de la sélection des prédicteurs, la première chose à éliminer est celle qui présente les valeurs les plus élevées.
S'il n'y a que 2 valeurs cibles (0/1, VRAI/FAUX, -1/1, facteur à 2 niveaux, etc...), il existe la fonction designTreatmentsC pour un tel cas.


Ce paquet est également utilisé dans y-aware pca. Le paquet vtreat met à l'échelle les prédicteurs en intervalles y-aware et les composants sont ensuite créés de manière presque habituelle (juste sans remise à l'échelle et centrage). Ainsi, si vous le souhaitez, vous pouvez faire des choses intéressantes comme la randomforest y-aware par exemple avec ce paquet.
Plus d'informations ici: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Eh bien, nous y voilà, retour aux sources.

Suivant.

L'utilisation de tout modèle SEULEMENT après avoir été traité pour eux par ces paquets. L'espoir est que les modèles, une fois prétraités de cette manière, ne souffriront PAS de sur-entraînement.

 
SanSanych Fomenko:

Appliquer les bonnes méthodes au mauvais problème.

Je n'ai pas réussi à comprendre la série chronologique CaretFA, il y a beaucoup de formules dans la description. J'ai compris quelque chose à propos de la corrélation des nouvelles valeurs avec les anciennes, et de l'analyse du tracé de fréquence après la transformation de Fourier, l'analyse de la façon dont ce tracé change sur les nouvelles données. Vous devez en savoir plus sur la radiophysique que sur le forex :)

Il y a des exemples dans la description du paquet, où il est appliqué aux indices DAX, SMI, CAC, FTSE, exactement les incréments sur D1 sont utilisés, c'est-à-dire que le paquet et les tâches sont corrects.
Une petite nuance est que dans l'exemple, la série chronologique des prix est d'abord traitée à l'aide de la fonction logarithmique log() et ce n'est qu'ensuite que les deltas sont trouvés. diff(log(EuStockMarkets[c(100:200),]) * 100
Mais je n'ai pas remarqué de différence si j'utilise ou non log(), le résultat de l'estimation n'a pas changé, cela a été fait plutôt pour un affichage plus pratique des données sur le graphique.

 
Dr. Trader:

Je n'ai pas réussi à comprendre la série chronologique CaretFA, il y a beaucoup de formules dans la description. J'ai compris quelque chose à propos de la corrélation des nouvelles valeurs avec les anciennes, et de l'analyse du tracé de fréquence après la transformation de Fourier, l'analyse de la façon dont ce tracé change sur les nouvelles données. Vous devez en savoir plus sur la radiophysique que sur le forex :)

Il y a des exemples dans la description du paquet où il est appliqué aux indices DAX, SMI, CAC, FTSE, ce sont les incréments D1 qui sont utilisés, c'est-à-dire que le paquet et les objectifs sont corrects.
Une petite nuance est que dans l'exemple, la série chronologique des prix est d'abord traitée à l'aide de la fonction logarithmique log() et ce n'est qu'ensuite que les deltas sont trouvés. diff(log(EuStockMarkets[c(100:200),]) * 100
Mais je n'ai pas remarqué de différence si j'utilise ou non log(), le résultat de l'estimation n'a pas changé ; cela a été fait plutôt pour un affichage pratique des données sur le graphique.

En ce qui concerne ce paquet, la question est pour moi une question de principe :

  • donne le pouvoir prédictif du prédicteur individuel,
  • ou la capacité de prédiction de la variable cible à l'aide des prédicteurs ?

 
SanSanych Fomenko:

En ce qui concerne ce paquet, la question pour moi est une question de principe :

  • donne le pouvoir prédictif du prédicteur individuel,
  • ou la capacité de prédiction de la variable cible à l'aide des prédicteurs ?

Elle ne cherche pas à établir un lien entre la variable cible et les prédicteurs. L'auteur du paquet écrit sur deux applications -.

1) Évaluer une série temporelle pour voir si elle est prédictive (sur une échelle de 0% = "bruit blanc" à 100% = sinusoïdale) avec Omega(). Si le résultat est 0%, alors il n'est pas possible d'essayer de prédire le comportement de la série temporelle, quels que soient les prédicteurs utilisés.
2) Prenez quelques prédicteurs, évaluez-les avec la même fonction, créez de nouveaux prédicteurs similaires à pca afin que les nouveaux prédicteurs aient un résultat Omega() encore meilleur que les originaux. Que cela aide à mieux prédire les valeurs cibles ou non dépend de votre chance, le paquet n'est pas intéressé par ce que ces prédicteurs doivent prédire. Le fait est que si le prédicteur n'est pas un bruit, les modèles qui l'utilisent auront des prédictions plus stables.

 
Dr. Trader:

Elle ne recherche pas de liens entre la variable cible et les prédicteurs. L'auteur du paquet écrit à propos de deux applications -

1) Evaluez si la série temporelle est prévisible (sur une échelle de 0% = "bruit blanc" à 100% = sinusoïdale) avec Omega(). Si le résultat est 0%, alors il n'est pas possible d'essayer de prédire le comportement de la série temporelle, quels que soient les prédicteurs utilisés.
2) Prenez quelques prédicteurs, évaluez-les avec la même fonction, créez de nouveaux prédicteurs similaires à pca afin que les nouveaux prédicteurs aient un résultat Omega() encore meilleur que les originaux. Que cela aide à mieux prédire les valeurs cibles ou non dépend de votre chance, le paquet n'est pas intéressé par ce que ces prédicteurs doivent prédire. Le point est que si le prédicteur n'est pas du bruit - les modèles qui l'utilisent prédiront plus stable.

Vous avez largement confirmé mes soupçons.

Merci.

Je pense que le paquet est inutile pour la classification.

Mais pour une prédiction de type extrapolation, cela peut être utile.

Prenons par exemple le paquet de prévisions. Il décompose la série en trois composantes, puis extrapole vers l'avant et additionne. Il permet d'obtenir une prévision avec un pas ou plus d'avance.

La question est maintenant de savoir quelle paire de devises choisir. Nous prenonsCaretFA et l'utilisons pour calculer la capacité de prédiction de plusieurs paires de devises. Je soupçonne que dans une fenêtre limitée, cette capacité de prédiction change au fur et à mesure que la fenêtre se déplace. Nous choisissons une paire de devises, nous la prédisons (ou un autre paquet - il y en a beaucoup), nous l'échangeons, après avoir fermé toutes les positions nous choisissons à nouveau la paire de devises.

 
Dr. Trader:

Un exemple de sélection indépendante du modèle est le paquet vtreat. Il analyse en quelque sorte les données et les évalue ensuite par rapport aux valeurs cibles.

Pour la table de l'iris, 10 nouveaux prédicteurs sont créés avec des valeurs aléatoires. designTreatmentsN évaluera chaque prédicteur, plus le score est faible, mieux c'est. Dans cet exemple, les 4 prédicteurs originaux (les derniers du graphique) se démarquent clairement, avec un score presque nul, ce qui est très bien. Lors de la sélection des prédicteurs, la première chose à éliminer est celle qui présente les valeurs les plus élevées.
S'il n'y a que 2 valeurs cibles (0/1, VRAI/FAUX, -1/1, facteur à 2 niveaux, etc...), il existe la fonction designTreatmentsC pour un tel cas.


Ce paquet est également utilisé dans y-aware pca. Le paquet vtreat met à l'échelle les prédicteurs en intervalles y-aware et les composants sont ensuite créés de manière presque habituelle (juste sans remise à l'échelle et centrage). Ainsi, si vous le souhaitez, vous pouvez faire des choses intéressantes comme la randomforest y-aware par exemple avec ce paquet.
Plus d'informations ici: https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Je regarde ton code avec les iris et les prédicteurs aléatoires et je comprends que je ne sais pas du tout programmer, ce qui me prenait 10 lignes dans ton code tient en trois.....

Et cette sélection par vtreat, diffère-t-elle de la même importense intégrée dans RF ?

 
mytarmailS:

et cette élimination des traitements, est-elle différente de la même importance intégrée dans la RF ? en termes d'efficacité.

Vtreat est meilleur. Il évalue tout sur le plan statistique, à savoir la qualité globale du prédicteur pour prédire la variable cible, sans tenir compte d'un modèle de prédiction particulier. Il est recommandé d'utiliser des prédicteurs dont le score maximal est de 1/(nombre de prédicteurs). Par exemple, s'il y a 200 prédicteurs, vous pouvez n'en retenir que ceux dont l'évaluation est inférieure à 1/200. Il est possible d'estimer les prédicteurs et si toutes les estimations sont supérieures au seuil - au lieu d'essayer sans succès d'enseigner le modèle et de prédire de nouvelles données, il est préférable de commencer à chercher d'autres prédicteurs.

Il y a quelques inconvénients - le paquet travaille avec les prédicteurs un par un, et ne prend pas en compte leur interaction. Je n'aime pas non plus le fait que même avec des prédicteurs totalement identiques ou fortement corrélés, vtreat ne supprime pas les prédicteurs répétitifs, ce qui est parfois très ennuyeux.