Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 137

 
mytarmailS:


Qual é o problema? Por favor, ajude.


Funciona assim:

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:

Primeiro, R^2 0,55 pode ser realisticamente alcançado aplicando alguma pequena transformação funcional à "metafunção". Outra coisa é que a função acaba por ser um pouco complicada na sua forma.

E outra coisa - tente levar:

rowMeans(df[,1:10])

...

Adicionei 10 novas colunas, não mudou nada para nnet, os resultados e curvas de aprendizagem permaneceram praticamente os mesmos, o modelo seleciona os mesmos preditores.

Mas a árvore de repente deu resultados muito melhores. A floresta também melhorou, mas uma árvore leva sozinha (pseudo r^2=0,39), aqui estão os gráficos com guizo sobre os novos dados.

A árvore escolheu apenas a linhaMeans[,1:50], lembrando seus valores a partir dos dados de treinamento. Portanto, há uma relação muito próxima, mas não linear entre a linhaMeans[,1:50], e o alvo.

Embora, se deixarmos apenas estes 10 novos preditores, então nnet irá treinar para r^2=0,22, também melhor.

 
Dr. Trader:

Adicionei 10 novas colunas, não mudou nada para nnet, os resultados e as curvas de aprendizagem são praticamente os mesmos, o modelo seleciona os mesmos preditores.

Mas a árvore de repente deu resultados muito melhores. A floresta também melhorou, mas uma árvore leva sozinha (pseudo r^2=0,39), aqui estão os gráficos com guizo sobre os novos dados.

A árvore escolheu apenas a linhaMeans[,1:50], lembrando seus valores a partir dos dados de treinamento. Portanto, há uma relação muito próxima, mas não linear entre a linhaMeans[,1:50], e o alvo.

Embora, se deixarmos apenas estes 10 novos preditores, então nnet irá treinar para r^2=0,22, também melhor.



Exatamente certo. média(1:50). Bons resultados. Vou agora tentar melhorar um pouco a aproximação da função. Se você não se importa, poste o gráfico de dispersão da saída encontrada vs. saída simulada. Para a NS ou para a floresta aleatória. Eu afixarei o meu depois. Deve haver uma não-linearidade.

 

Alexey Burnakov:

Deve haver ali uma não-linearidade.

A julgar pelo gráfico, há uma pequena ligação. Mas tanto a neurônica quanto a árvore só detectam alguma tendência geral. E este preditor sozinho obviamente não pode ser usado para treinar o modelo, você não pode obter mais de uma árvore.

 
Dr. Trader:

A julgar pelo gráfico, há um pouco de ligação. Mas tanto a neurônica quanto a árvore mostram apenas alguma tendência geral. E este preditor sozinho obviamente não ajuda a treinar o modelo, é impossível obter mais da árvore.

Obrigado, obrigado.

Sim, eu concordo.

Os meus gráficos:

rmse minimizadora

dependência real:

modelo:

real e modelo:

A concepção original é pura:

Como o verdadeiro acabou, considerando o ruído que você já viu.


A melhor qualidade de modelagem possível:

 
Alexey Burnakov:

Funciona:

Obrigado, eu não teria percebido...
 
Dr. Trader:

A julgar pelo gráfico, há um pouco de ligação. Mas tanto a neurônica quanto a árvore mostram apenas alguma tendência geral. E este preditor sozinho obviamente não ajuda a treinar o modelo, é impossível obter mais da árvore.

Devemos resumir a tarefa e escrever o que entendemos.

Tudo sob a suposição de que na vida real não sabemos nada sobre o tipo de dependência.

O meu entendimento é esse:

1) tirar uma dependência de uma série de ficções simples como o retorno de preços é difícil e muitos métodos não funcionam bem. Mas por princípios gerais você pode obter uma solução aproximada através da convolução.

2) se você gerar muitos recursos com antecedência, há uma boa chance de que os métodos convencionais funcionem bem.

3) a melhor métrica de qualidade em chips crus, após NS convolucionais, é a NS convencional, seguida por outros métodos com aproximadamente o mesmo resultado.

4) em um monte de fiches potenciais geradas, floresta, NS funciona bem.

5) Se é preferível deixar o NS convolutivo para recolher as fichas em si, em vez de um humano, ainda é uma questão em aberto. Encontrar a arquitetura de convolução correta é provavelmente tanto trabalho quanto gerar um monte de recursos com antecedência.

O que pode acrescentar, Dr.?

 

Eu tentei gerar ficções quando você postou o problema pela primeira vez, o algoritmo passou por diferentes combinações matemáticas durante toda a noite, selecionando os melhores novos preditores através da estimação do vtreat. Não houve resultado positivo, o modelo não pôde sequer aprender adequadamente com os novos preditores. Portanto, ou é aleatório e adivinha os preditores certos e as operações matemáticas sobre eles, ou não. Você pode passar dias gerando e experimentando variantes e ainda assim será inútil. Uma vez que a rede convolucional em preditores originais obteve melhores resultados do que a rede habitual com meios de remo, é provavelmente melhor manter a rede convolucional.

 
Dr. Trader:

Eu tentei gerar ficções quando você postou o problema pela primeira vez, o algoritmo passou por diferentes combinações matemáticas durante toda a noite, selecionando os melhores novos preditores através da estimação do vtreat. Não houve resultado positivo, o modelo não pôde sequer aprender adequadamente com os novos preditores. Portanto, ou é aleatório e adivinha os preditores certos e as operações matemáticas sobre eles, ou não. Você pode passar dias gerando e experimentando variantes e ainda assim será inútil. Uma vez que a rede convolucional em preditores originais tem resultados melhores do que a rede habitual com meios de remo, acho que é melhor usar a rede convolucional.

Obrigado, Dr!

Sim, isso também é um bom ponto. É que eu tenho o hábito de deduzir somas com uma janela de aumento deslizante, assim como diferenças com um desfasamento deslizante e todas as outras coisas deslizantes no passado.

Vejo que tenho esta noção de que para modelar quase tudo (quase!) é suficiente ter preditores da forma:

preço_actual - preço(lag1)

preço_actual - preço(lag2)

...

preço_actual - preço(lag_n)

Isto pode ser tratado como somas em movimento (que são facilmente convertidas em médias), e qualquer configuração da tendência pode ser reproduzida: inflexões em diferentes lugares, velocidade, aceleração.

Falando da rede convolucional, sugiro tentar fazer algo prático sobre o código que citei. E concentre-se na análise dos pesos e grãos da rede. O núcleo vai mostrar o tipo de convolução. Os pesos podem mostrar importância e não-linearidade.

Pessoalmente, estou fazendo uma pausa da minha experiência principal por enquanto, embora já existam alguns resultados toleráveis. Estou só a ficar aborrecido... Eu decidi tentar prever um instrumento de ações com uma rede de convolução. Há uma sobrecarga bastante baixa (uma ordem de magnitude menor que o spread cambial) e há uma fantasia de que vai funcionar. Depois conto-te mais sobre isso.

Curso rápido na CNN: http://cs231n.github.io/convolutional-networks/

 

Estas palestras em vídeo também costumavam estar no YouTube, depois foram removidas, mas permanecem em archive.org - https://archive.org/details/cs231n-CNNs

Em inglês, mas muito informativo e útil. Principalmente sobre reconhecimento de imagem por redes convolucionais, mas há muitas informações úteis sobre neurônios em geral.