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

 
Dr. Trader:

Je ne pense pas que cet ensemble soit suffisant pour construire un modèle capable de prédire la variable cible. Tout ce que j'ai trouvé dans l'aide est de construire un modèle PCA basé sur des prédicteurs, la variable cible n'est pas du tout là.


Bonjour, vous avez utilisé la mauvaise fonction, vous auriez dû utiliser"nlPca" comme indiqué sur le site que j'ai donné, mais c'est ma faute, j'aurais dû donner plus de détails...

Ici, au lieu de prédire - adapté, essayez, peut-être réussirez-vous.

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
data(helix)
helixNA <- helix
##  not a single complete observation
helixNA <- t(apply(helix, 1, function(x) { x[sample(1:3, 1)] <- NA; x}))
## 50 steps is not enough, for good estimation use 1000
helixNlPca <- pca(helixNA, nPcs=1, method="nlpca", maxSteps=50)
fittedData <- fitted(helixNlPca, helixNA)
plot(fittedData[which(is.na(helixNA))], helix[which(is.na(helixNA))])
		
 
Dr. Trader:

Je ne pense pas que cet ensemble soit suffisant pour construire un modèle capable de prédire la variable cible. Tout ce que j'ai trouvé dans l'aide est de construire un modèle PCA basé sur des prédicteurs, la variable cible n'est pas du tout là.

Cela créera un objet resNipals (Nonlinear Estimation by Iterative Partial Least Squares) avec 5 composants principaux pour analyser le tableau metaboliteDataComplete. Au lieu de metaboliteDataComplete, vous pouvez substituer votre propre tableau avec des prédicteurs. Il est important de ne pas alimenter la variable cible ici, elle sera utilisée plus tard.

Mais cela ne sera suffisant que pour analyser les relations entre les variables en examinant différents graphiques. Afin de créer un modèle prédictif, on construit ensuite un modèle de régression linéaire qui utilise les principales composantes PC1,PC2,PC3,PC4,PC5 comme variables d'entrée (x1,x2,x3,...). Et la variable cible Y est déjà introduite dans le modèle linéaire comme résultat souhaité. Le problème est que resNipals est un objet de la classe "pcaRes" du paquet pcaMethods. Je n'ai pas trouvé comment faire tout cela dans l'aide.

S'il s'agissait d'un modèle PCA du paquet caret, cela donnerait ceci :

Mais cela ne fonctionne pas avec resNipals, en théorie le paquet pcaMethods devrait avoir quelques fonctions propres pour travailler avec cet objet, mais je n'ai rien trouvé.

À l'origine, l'ACP a été conçue pour résoudre deux problèmes :

1. il y a un très grand nombre de prédicteurs avec un petit nombre d'observations. C'est courant en chimie organique, en génétique... Pour nous, il s'agit de l'utilisation de données macroéconomiques sur les grandes TF, par exemple annuelles.

2. Il existe des corrélations entre les prédicteurs.

Par conséquent, les algorithmes PCA résolvent ces deux problèmes principaux :

1. Réduire le nombre de prédicteurs originaux par un nouveau nombre de prédicteurs, souvent radicalement plus petit. Ce faisant, l'algorithme garantit que ce petit nombre peut expliquer un certain pourcentage de la variabilité de l'ensemble original de prédicteurs, par exemple 95 %. Cette valeur est choisie par le chercheur.

2. Le nouvel ensemble de prédicteurs a une corrélation ZERO les uns avec les autres.

Il s'ensuit que, pour nous, l'ACP est l'un des algorithmes permettant de préparer les données brutes pour la modélisation, mais elle ne peut remplacer la modélisation pour prédire la variable cible.

Il me semble que parmi les discussions sur les différents détails de l'APC, le sens de mes remarques sur ce point a été perdu. Je vous rappelle donc que j'ai fait référence à l'utilisation de l'ACP d'une manière qui non seulement réduit le nombre de prédicteurs originaux, mais élimine également les prédicteurs qui sont du bruit pour la variable cible. C'est ce dont il est question dans ce fil de discussion.

Je propose donc de revenir au problème du bruit parmi les prédicteurs, et à l'utilisation possible d'une idée très spécifique d'application de l'ACP pour résoudre ce problème.

 
Dr. Trader:

Cela créera l'objet resNipals (Nonlinear Estimation by Iterative Partial Least Squares) avec 5 composants principaux pour l'analyse du tableau metaboliteDataComplete. Au lieu de metaboliteDataComplete, vous pouvez substituer votre propre table ............

Celui que vous avez essayé est le Nipals, il est montré dans la deuxième image sur le site web, il n'est pas très séparable non plus, vous devriez prendre celui dans la troisième image réseau neuronal PCA

=========================

un peu hors sujet mais besoin d'aide avec le code....

J'ai des prédicteurs dans des colonnes, je veux compter la différence de tous les prédicteurs avec toutes ces combinaisons, je l'ai implémenté, le problème est que maintenant je dois nommer chaque combinaison de manière adéquate pour comprendre ce qui est quoi.

Disons que nous avons des colonnes avec des prédicteurs "A" , "Б" , "С"

Je fais des combinaisons de différences

1) A - B

2) A - C

3) C - B

question : comment donner à de nouvelles colonnes des noms comme "a_minus_b" ? , "a_minus_c"

Je suis en train de maîtriser R et la programmation en général, donc je ne suis pas familier avec de telles astuces.

Que dois-je ajouter à ce code ?

a <- 1:5
b <- 6:10
c <- 11:15
d <- 16:20
dt <- data.frame(a,b,c,d) 
dt

#  все комбинации индексов между двумя переменными
#  еще транспонирую(переворачиваю матрицу) мне так удобней воспринимать
combi <- t(  combn(1:ncol(dt),2)  )  
combi  

#  пустая фрейм куда буду записывать результат вычислений с комбинацыями
res.dt <- as.data.frame(  matrix(nrow = nrow(dt) , ncol = nrow(combi))   )
res.dt

for(i in 1:ncol(res.dt)){
  #  буду проводить вычитание одной перем из другой во всех комбинацыях
  #  и записывать в res.dt
  ii <- combi[i,1]
  jj <- combi[i,2]
  
  res.dt[,i] <- dt[,ii] - dt[,jj]
}
res.dt
 
mytarmailS:

Celui que vous avez essayé est le Nipals, il est montré dans la deuxième image sur le site web, il n'est pas très séparable non plus, vous devriez prendre celui dans la troisième image réseau neuronal PCA

=========================

un peu hors sujet mais besoin d'aide avec le code....

J'ai des prédicteurs dans des colonnes, je veux calculer la différence de tous les prédicteurs avec toutes ces combinaisons, je l'ai implémenté, le problème est que maintenant je dois nommer chaque combinaison de manière adéquate pour comprendre ce qui est quoi.

Disons que nous avons des colonnes avec des prédicteurs "A" , "Б" , "С"

Je fais des combinaisons de différences

1) A - B

2) A - C

3) C - B

question : comment donner à de nouvelles colonnes des noms comme "a_minus_b" ? , "a_minus_c"

Je suis en train de maîtriser R et la programmation en général, donc je ne suis pas familier avec de telles astuces.

Que dois-je ajouter à ce code ?

Ça ressemble à ça.

colnames() <- c(".", ".")

Il y a aussi des noms

Voir l'aide.

 
SanSanych Fomenko:

L'ACP a été conçu à l'origine pour résoudre deux problèmes :

L'ACP était à l'origine destinée à réduire la dimensionnalité des séries originales. C'est tout. L'utiliser pour sélectionner des prédicteurs est un non-sens.
 
SanSanych Fomenko:

A peu près comme ça.

colnames() <- c(".", ".")

Il y a aussi des noms

Voir la référence.

)) oui, je sais, mais s'il y a 1000 variables, pourquoi écrire manuellement chacune d'entre elles ?
 

Dr. Trader:

...

Les données sont prises à partir de eurusd d1, classe 0 ou 1 - baisse ou hausse du prix pour la prochaine barre. Si le modèle prédit correctement le résultat pour test.csv au moins dans 6 cas sur 10, alors vous pouvez essayer de trader avec lui dans le Forex, en principe, vous ne perdrez pas, mais ne vous attendez pas à un profit trop important. S'il prédit correctement dans 7 cas sur 10 (et plus) - c'est la bonne voie vers le graal, nous devons essayer de former et de tester le modèle sur d'autres années et mois, et si tout sera identique - alors très bien.

...


Plus précisément dans le fichier de rapport :

/**
* La qualité de la modélisation en dehors de l'échantillon :
*
* TruePositives : 182
* TrueNegatives : 181
* Faux positifs : 1
* Faux négatifs : 1
* Total des motifs dans les échantillons avec statistiques : 365
* Total des erreurs hors échantillon : 2
* Sensibilité de la capacité de généralisation : 99.4535519125683%.
* Spécificité de la capacité de généralisation : 99,45054945054946%.
* Capacité de généralisation : 98,90410136311776%.
* Indicateur de Reshetov : 8.852456238401455
*/


Il est temps de constituer une équipe et de créer un projet Open Source - système automatisé à cet effet sur mql5 et Java. Je vais montrer le code source du classificateur binaire en Java et le script MQL5, qui crée un échantillon pour l'entraînement des modèles.

Plan approximatif du fonctionnement du complexe :

  1. Pour chaque instrument financier, il existe des robots distincts sur les graphiques, qui sont déclenchés par les prix d'ouverture des barres et déversent les modèles dans des fichiers.
  2. L'application Java (classificateur binaire) télécharge les modèles pour chaque symbole et attend avec un intervalle de 1 seconde les fichiers créés par les robots de l'étape 1. Le fichier modèle est alors supprimé du disque. L'outil classe un signal de trading en fonction du modèle et l'enregistre dans le fichier.
  3. Un robot attend les fichiers de la couverture de l'étape 2. Dès que le fichier est trouvé, le robot lit l'instrument et le signal qu'il contient et ouvre ou inverse une transaction sur l'instrument en fonction du signal. Le fichier lu est supprimé.

Si vous êtes intéressé à rejoindre le projet et savez programmer en Java ou MQL5, veuillez vous abonner à ce fil de discussion.

 
mytarmailS:

Bonjour ! Vous avez utilisé la mauvaise fonction, vous auriez dû utiliser"nlPca" comme indiqué sur le site que j'ai donné, mais c'est ma faute, il faut plus de détails...

Ici, au lieu de prédire - adapté, essayez, peut-être que vous réussirez.

Cet exemple provient malheureusement d'un autre fil de discussion. Par exemple, dans le domaine du Forex, nous pouvons toujours obtenir 100% des données, mais dans d'autres domaines où les données sont acquises de manière expérimentale, il y aura toujours des valeurs manquantes. Dans cet exemple, l'ACP est utilisée pour reconstruire les valeurs manquantes dans les prédicteurs eux-mêmes. Dans l'exemple, ils effacent de manière aléatoire une valeur dans l'une des trois colonnes, créent un modèle ACP et l'utilisent pour reconstruire les valeurs manquantes.

Je n'ai jamais essayé, mais techniquement, vous pourriez aussi traiter la variable cible comme un prédicteur en l'incluant dans le modèle pca. Ensuite, dans les nouvelles données, sa valeur sera inconnue, donc pca peut remplir ces valeurs manquantes.

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
#trainData - таблица с обучающими примерами. Целевая переменная тоже должна быть в этойже таблице. Пример колонок: Close,Hour,MA30,target. (target - целевая переменная, со значениями например 0 или 1 обозначающими падение/рост цены)
## 50 steps is not enough, for good estimation use 1000
NlPca <- pca(trainData, nPcs=1, method="nlpca", maxSteps=50)
#newData - таблица с новыми данными, для проверки модели. Колонки должны быть теже Close,Hour,MA30,target
newData[,"target"] <- NA  #целевая  переменная на новых данных не должны быть известна модели, и в случае NA - функция fitted должна подставить туда подходящие значения
fittedNewData <- fitted(NlPca, newData)
fittedNewData[,"target"] #  ваш результат предсказания
Я не могу начать новую нормальную строку :/ В общем можно сделать как я написал выше, но это не предсказание а реконструкция. PCA модель может просто найти некие значения которые "подойдут". Гарантий никаких нет, я предполагаю что ошибка будет 50%
 
Combinateur:
L'ACP était à l'origine destinée à réduire la dimensionnalité des séries originales. C'est tout. L'utiliser pour sélectionner des prédicteurs est un non-sens.

Non, c'est bon. Puisque les prédicteurs utilisés pour chacune des composantes principales sont connus, nous pouvons éliminer sans risque les prédicteurs qui ne sont pas utilisés dans les composantes principales. Lisez ceci, j'ai aimé : http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ Il contient 5 bons prédicteurs et des dizaines de prédicteurs de bruit. Ils éliminent le bruit à l'aide d'une analyse. J'ai utilisé le même code pour d'autres exemples rencontrés dans ce fil, il fonctionne généralement. Mais le forex est plus compliqué, je n'ai pas de si belles images sur lui avec des indicateurs, je devrais penser à quelque chose de plus intelligent.

 
Dr. Trader:

Cet exemple est malheureusement tiré d'un autre sujet. Dans le domaine du Forex par exemple, nous pouvons toujours récupérer 100% des données, mais dans d'autres domaines où les données sont obtenues de manière expérimentale, il y aura toujours des lacunes, des valeurs manquantes. Dans cet exemple, l'ACP est utilisée pour reconstruire les valeurs manquantes dans les prédicteurs eux-mêmes. Dans l'exemple, ils effacent aléatoirement une valeur dans l'une des trois colonnes, créent un modèle ACP et l'utilisent pour reconstruire les valeurs manquantes.

Je n'ai jamais essayé, mais techniquement, vous pourriez aussi traiter la variable cible comme un prédicteur en l'incluant dans le modèle pca. Ensuite, dans les nouvelles données, sa valeur sera inconnue, donc pca peut remplir les valeurs manquantes.

Je me doutais que ce n'était pas un hasard si ces points "NA" étaient ajoutés à la date, mais j'ai lu le manuel, il est clairement question d'ACP avec un réseau neuronal, mais on ne sait toujours pas comment ce type de site a obtenu cette belle image avec une bonne répartition par classes.