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

 
mytarmailS:


Quel est leproblème ? Aidez-moi.


Cela fonctionne comme suit :

test_vec <- numeric() # тут будем хранить показатели теста 


for(i in 151:ln){

print(i)

idx <- (i-150):i

#проводим линейную регрессию для определения правильного соотношения

x <- data[idx, ]

model <- lm(ri ~ si + 0, x)

#вычисляем разницу цен (спред)

spread <- x$ri - coef(model)[[1]] * x$si

#проводим тест Дики-Фуллера на стационарность

test <- adf.test(as.vector(spread), k = 0)

test_vec[i-150] <- test$p.value

}


plot(test_vec, type = 's')

 
Alexey Burnakov:

Premièrement, R^2 0,55 peut être atteint de manière réaliste en appliquant une petite transformation fonctionnelle à la "métafonction". De plus, la fonction s'avère être un peu compliquée dans sa forme.

Et une autre chose - essayez de prendre :

rowMeans(df[,1:10])

...

J'ai ajouté 10 nouvelles colonnes, cela n'a rien changé pour nnet, les résultats et les courbes d'apprentissage sont restés à peu près les mêmes, le modèle sélectionne les mêmes prédicteurs.

Mais l'arbre a soudainement donné de bien meilleurs résultats. La forêt s'est améliorée aussi, mais un arbre mène tout seul (pseudo r^2=0.39), voici les graphiques avec le hochet sur les nouvelles données.

L'arbre a uniquement choisi rowMeans[,1:50], en se souvenant de ses valeurs à partir des données d'apprentissage. Il existe donc une relation très étroite mais non linéaire entre rowMeans[,1:50], et la cible.

Cependant, si nous ne laissons que ces 10 nouveaux prédicteurs, alors nnet s'entraînera à r^2=0.22, également meilleur.

 
Dr. Trader:

J'ai ajouté 10 nouvelles colonnes, cela n'a rien changé pour nnet, les résultats et les courbes d'apprentissage sont à peu près les mêmes, le modèle sélectionne les mêmes prédicteurs.

Mais l'arbre a soudainement donné de bien meilleurs résultats. La forêt s'est améliorée aussi, mais un arbre mène par lui-même (pseudo r^2=0.39), voici les graphiques avec le hochet sur les nouvelles données.

L'arbre a uniquement choisi rowMeans[,1:50], en se souvenant de ses valeurs à partir des données d'apprentissage. Il existe donc une relation très étroite mais non linéaire entre rowMeans[,1:50], et la cible.

Cependant, si nous ne laissons que ces 10 nouveaux prédicteurs, alors nnet s'entraînera à r^2=0.22, également meilleur.



Exactement. moyenne(1:50). Bons résultats. Je vais maintenant essayer d'améliorer un peu l'approximation de la fonction. Si vous le voulez bien, postez le diagramme de dispersion de la solution trouvée par rapport à la sortie simulée. Pour NS ou pour une forêt aléatoire. Je posterai le mien après. Il devrait y avoir une non-linéarité.

 

Alexey Burnakov:

Il devrait y avoir une non-linéarité.

A en juger par le graphique, il y a une petite connexion. Mais les neurones et l'arbre ne détectent qu'une tendance générale. Et ce prédicteur seul ne peut évidemment pas être utilisé pour former le modèle, vous ne pouvez pas obtenir plus d'un arbre.

 
Dr. Trader:

A en juger par le graphique, il y a un peu de lien. Mais la neuronique et l'arbre ne produisent qu'une tendance générale. Et ce prédicteur seul n'aide évidemment pas à former le modèle, il est impossible d'obtenir davantage de l'arbre.

Merci, merci.

Oui, je suis d'accord.

Mes graphiques :

minimiser le rmse

une dépendance réelle :

modèle :

réel et modèle :

La conception originale est pure :

Comment le vrai s'est avéré compte tenu du bruit que vous avez déjà vu.


La meilleure qualité de modélisation possible :

 
Alexey Burnakov:

Ça marche :

Merci, je ne l'aurais pas compris...
 
Dr. Trader:

A en juger par le graphique, il y a un peu de lien. Mais les neurones et l'arbre ne montrent qu'une tendance générale. Et ce prédicteur seul n'est évidemment pas suffisant pour entraîner le modèle, il est impossible d'obtenir plus de l'arbre.

Nous devons résumer la tâche et écrire ce que nous avons compris.

Tout cela en partant du principe que dans la vie réelle, nous ne savons rien du type de dépendance.

D'après ce que j'ai compris :

1) tirer une dépendance d'un certain nombre de fics simples comme les retours de prix est difficile et de nombreuses méthodes ne fonctionnent pas bien. Mais selon les principes généraux, vous pouvez obtenir une solution approximative par convolution.

2) si vous générez beaucoup de caractéristiques à l'avance, il y a de bonnes chances que les méthodes conventionnelles fonctionnent bien.

3) la meilleure métrique de qualité sur les puces brutes, après la NS convolutive, est la NS conventionnelle, suivie des autres méthodes avec à peu près le même résultat.

4) sur un grand nombre de fiches générées potentiellement, la forêt, NS fonctionne bien.

5) La question de savoir s'il est préférable de laisser le NS convolutif collecter lui-même les puces, plutôt qu'un humain, reste ouverte. Trouver la bonne architecture de convolution représente probablement autant de travail que de générer un tas de caractéristiques à l'avance.

Que pouvez-vous ajouter, Dr. ?

 

J'ai essayé de générer des fics lorsque vous avez posté le problème pour la première fois, l'algorithme a passé en revue différentes combinaisons mathématiques toute la nuit, en sélectionnant les meilleurs nouveaux prédicteurs par l'estimation du traitement. Il n'y a pas eu de résultat positif, le modèle n'a même pas pu apprendre correctement des nouveaux prédicteurs. Donc, soit c'est aléatoire et on devine les bons prédicteurs et les opérations mathématiques sur eux, soit ce n'est pas le cas. Vous pouvez passer des jours à créer et à essayer des variantes, mais cela ne servira à rien. Puisque le réseau convolutif sur les prédicteurs originaux a obtenu de meilleurs résultats que le réseau habituel avec rowmeans, il est probablement préférable de s'en tenir au réseau convolutif.

 
Dr. Trader:

J'ai essayé de générer des fics lorsque vous avez posté le problème pour la première fois, l'algorithme a passé en revue différentes combinaisons mathématiques toute la nuit, en sélectionnant les meilleurs nouveaux prédicteurs par l'estimation du traitement. Il n'y a pas eu de résultat positif, le modèle n'a même pas pu apprendre correctement des nouveaux prédicteurs. Donc, soit c'est aléatoire et on devine les bons prédicteurs et les opérations mathématiques sur eux, soit ce n'est pas le cas. Vous pouvez passer des jours à créer et à essayer des variantes, mais cela ne servira à rien. Puisque le réseau convolutif sur les prédicteurs originaux a obtenu de meilleurs résultats que le réseau habituel avec rowmeans, je pense qu'il est préférable d'utiliser le réseau convolutif.

Merci, Dr !

Oui, c'est aussi un bon point. C'est juste que j'ai l'habitude de déduire des sommes avec une fenêtre d'augmentation glissante, ainsi que des différences avec un retard glissant et toutes autres choses glissantes dans le passé.

Je vois que j'ai cette notion que pour modéliser presque tout (presque !) il suffit de prendre des prédicteurs de la forme :

prix_courant - prix(lag1)

prix_courant - prix(lag2)

...

prix_courant - prix(lag_n)

On peut les traiter comme des sommes mobiles (qui se convertissent facilement en moyennes), et reproduire n'importe quelle configuration de la tendance : inflexions à différents endroits, vitesse, accélération.

En parlant du réseau convolutif, je suggère d'essayer de faire quelque chose de pratique sur le code que j'ai cité. Et se concentrer sur l'analyse des poids et des noyaux du réseau. Le noyau montrera le type de convolution. Les pondérations peuvent montrer l'importance et la non-linéarité.

Personnellement, je fais une pause dans mon expérience principale pour l'instant, bien qu'il y ait déjà quelques résultats tolérables. Je commence à m'ennuyer... J'ai décidé d'essayer de prévoir un instrument boursier avec un réseau de convolution. Les frais généraux sont assez faibles (un ordre de grandeur inférieur au spread du marché des changes) et l'on peut penser que cela va fonctionner. Je vous en parlerai plus tard.

Cours rapide sur CNN : http://cs231n.github.io/convolutional-networks/

 

Ces conférences vidéo se trouvaient également sur YouTube, puis elles ont été supprimées, mais elles restent dans archive.org - https://archive.org/details/cs231n-CNNs.

En anglais, mais très instructif et utile. Principalement sur la reconnaissance d'images par des réseaux convolutifs, mais il y a beaucoup d'informations utiles sur les neurones en général.