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

 
Também estou me perguntando como o pacote de previsão define a relação de entrada/saída. Talvez seja trivial, talvez não.
 
Alexey Burnakov:
Também estou me perguntando como o pacote de previsão determina a relação input-output. Talvez lá seja trivial ou talvez não.

Eu acabei de olhar através da linha, deixe-me ser corrigido ou confirmado, mas de acordo com o meu entendimento o pacote baseado em algum algoritmo interno avalia a capacidade de previsão de uma variável aleatória em particular, ou seja, a capacidade de extrapolar seus valores de uma variável aleatória para o futuro. Se for uma trama de tendência, nós recebemos uma, e se for um aumento de preço, nós recebemos 0,83%, o que para mim é bastante óbvio. E tudo tem a ver com o método em si e na prática o contrário é verdade, pois os incrementos são previstos muito melhor - estão muito mais próximos da estacionaridade do que as tendências das séries temporais não estacionárias. Precisamos entender a ferramenta em si e aplicar a ferramenta aos objetos aos quais ela se encaixa.

Em geral, há erros na análise de sistemas.

Erro nº 1.

Aplicando o método certo ao problema errado.

É extremamente comum em estatísticas.

 
SanSanych Fomenko:

Em geral, acho que a mensagem original está perdida. Para mim, a ideia original era que precisamos de métodos que sejam independentes de modelos para determinar a capacidade de cada um dos preditores usados para prever a variável alvo.

Um exemplo de seleção independente de modelo é o pacote vtreat. De alguma forma, ele analisa os dados e depois os avalia em relação aos valores teóricos.

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 novos preditores com valores aleatórios são criados para a tabela da íris. designTreatmentsN pontuará cada preditor, quanto menor a pontuação, melhor. Neste exemplo, os 4 preditores originais (os últimos do gráfico) destacam-se claramente, têm pontuação quase zero, o que é muito bom. Ao selecionar os preditores, a primeira coisa a ser removida é a que tem os valores mais altos.
Se houver apenas 2 valores alvo (0/1, VERDADEIRO/FALSO, -1/1, fator com 2 níveis, etc...), existe a função DesignTreatmentsC para tal caso.


Este pacote também é usado no y-aware pca. O pacote vtreat escalona os preditores em intervalos de y-aware e os componentes são ainda criados de forma quase normal (apenas sem redimensionamento e centralização). Então, se você quiser, você pode fazer coisas tão interessantes como, por exemplo, "y-aware randomforest" com este pacote.
Leia mais aqui:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

 
Dr. Trader:

Um exemplo de seleção independente de modelo é o pacote vtreat. De alguma forma, analisa os dados e, em seguida, dá-lhe uma pontuação de valor-alvo.

10 novos preditores com valores aleatórios são criados para a tabela da íris. designTreatmentsN pontuará cada preditor, quanto menor a pontuação, melhor. Neste exemplo, os 4 preditores originais (os últimos do gráfico) destacam-se claramente, têm pontuação quase zero, o que é muito bom. Ao selecionar os preditores, a primeira coisa a ser removida é a que tem os valores mais altos.
Se houver apenas 2 valores alvo (0/1, VERDADEIRO/FALSO, -1/1, fator com 2 níveis, etc...), existe a função DesignTreatmentsC para tal caso.


Este pacote também é usado no y-aware pca. O pacote vtreat escalona os preditores em intervalos de y-aware e os componentes são ainda criados de forma quase normal (apenas sem redimensionamento e centralização). Então, se você quiser, você pode fazer coisas tão interessantes como, por exemplo, "y-aware randomforest" com este pacote.
Leia mais aqui:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Bem, lá vamos nós, de volta ao básico.

A seguir.

Usando quaisquer modelos SOMENTE depois de serem processados para eles por estes pacotes. A esperança é que os modelos, quando pré-processados desta forma, NÃO sofram de sobretreinamento.

 
SanSanych Fomenko:

Aplicando os métodos certos ao problema errado.

Eu não consegui entender a série temporal CaretFA, há muitas fórmulas na descrição. Eu peguei algo sobre a correlação de novos valores com os antigos, e análise do gráfico de freqüência após a transformação de Fourier, análise de como esse gráfico muda nos novos dados. Você precisa entender mais sobre radiofísica lá do que sobre forex :)

Há exemplos na descrição do pacote, onde é aplicado aos índices DAX, SMI, CAC, FTSE, são usados exatamente incrementos em D1, ou seja, tanto o pacote quanto as tarefas estão corretos.
Uma pequena nuance é que no exemplo a série temporal de preços é primeiro processada utilizando logaritmo de função logarítmica() e só depois disso é que os deltas são encontrados. diff(log(EuStockMarkets[c(100:200),]) * 100
Mas eu não notei nenhuma diferença se eu uso ou não uso log(), o resultado da estimativa não mudou, foi feito antes para uma exibição mais conveniente dos dados no gráfico.

 
Dr. Trader:

Eu não consegui entender a série temporal CaretFA, há muitas fórmulas na descrição. Eu peguei algo sobre a correlação de novos valores com os antigos, e análise do gráfico de freqüência após a transformação de Fourier, análise de como esse gráfico muda nos novos dados. Você precisa entender mais sobre radiofísica lá do que sobre forex :)

Existem exemplos na descrição do pacote onde é aplicado aos índices DAX, SMI, CAC, FTSE, são os incrementos D1 que são utilizados, ou seja, tanto o pacote como os objectivos estão correctos.
Uma pequena nuance é que no exemplo a série temporal de preços é primeiro processada utilizando logaritmo de função logarítmica() e só depois disso é que os deltas são encontrados. diff(log(EuStockMarkets[c(100:200),]) * 100
Mas eu não notei nenhuma diferença se eu usar ou não usar log(), o resultado da estimativa não mudou; foi feito antes para uma conveniente exibição de dados no gráfico.

No que diz respeito a este pacote, a questão para mim é uma questão de princípio:

  • dá o poder preditivo do preditor individual,
  • ou a capacidade de previsão da variável alvo usando os preditores?

 
SanSanych Fomenko:

Com respeito a este pacote, a questão para mim é uma questão de princípio:

  • dá o poder preditivo do preditor individual,
  • ou a capacidade de previsão da variável alvo usando os preditores?

Ele não procura uma ligação entre a variável alvo e os preditores. O autor do pacote escreve sobre duas aplicações -.

1) Para avaliar uma série temporal para ver se ela é preditiva (numa escala de 0% = "ruído branco" a 100% = sinusoidal) com Omega(). Se o resultado for 0%, então não é possível tentar prever o comportamento da série temporal, quaisquer que sejam os preditores utilizados.
2) Pegue alguns preditores, avalie-os com a mesma função, crie novos preditores semelhantes ao pca para que os novos preditores tenham um resultado Omega() ainda melhor do que os preditores originais. Se isso ajuda a prever melhor ou não os valores alvo está à sua disposição, o pacote não está interessado no que esses preditores precisam prever. A questão é se o preditor não é ruído - os modelos que o utilizam irão prever mais estabilidade.

 
Dr. Trader:

Ele não procura ligações entre a variável alvo e os preditores. O autor do pacote escreve sobre duas aplicações -

1) Avaliar se a série temporal é previsível (em uma escala de 0% = "ruído branco" a 100% = sinusoidal) com Omega(). Se o resultado for 0%, então não é possível tentar prever o comportamento da série temporal, quaisquer que sejam os preditores utilizados.
2) Pegue alguns preditores, avalie-os com a mesma função, crie novos preditores semelhantes ao pca para que os novos preditores tenham um resultado Omega() ainda melhor do que os preditores originais. Se isso ajuda a prever melhor ou não os valores alvo está à sua disposição, o pacote não está interessado no que esses preditores precisam prever. A questão é que se o preditor não for ruído - os modelos que o utilizam irão prever mais estabilidade.

Você confirmou substancialmente as minhas suspeitas.

Obrigado.

Acho que o pacote é inútil para a classificação.

Mas para a previsão do tipo de extrapolação pode ser útil.

Por exemplo, pegue o pacote de previsão. Ele decompõe a série em três componentes, em seguida extrapola para frente e soma. Recebe uma previsão um passo ou mais à frente.

Agora a questão é: que par de moedas tomar? Pegamos noCaretFA e usamo-lo para calcular a capacidade preditiva de vários pares de moedas. Suspeito que numa janela limitada, a capacidade de previsão muda à medida que a janela se move. Escolhemos um par de moedas, prevemos (ou outro pacote - há muitos), negociamo-lo, depois de fecharmos todas as posições escolhemos novamente o par de moedas.

 
Dr. Trader:

Um exemplo de seleção independente de modelo é o pacote vtreat. De alguma forma, ele analisa os dados e depois os avalia em relação aos valores-alvo.

Para a tabela da íris, 10 novos preditores são criados com valores aleatórios. designTreatmentsN avaliará cada preditor, quanto menor a pontuação, melhor. Neste exemplo, os 4 preditores originais (os últimos do gráfico) destacam-se claramente, têm pontuação quase zero, o que é muito bom. Ao selecionar os preditores, a primeira coisa a ser removida é a que tem os valores mais altos.
Se houver apenas 2 valores alvo (0/1, VERDADEIRO/FALSO, -1/1, fator com 2 níveis, etc...), existe a função DesignTreatmentsC para tal caso.


Este pacote também é usado no y-aware pca. O pacote vtreat escalona os preditores em intervalos de y-aware e os componentes são ainda criados de forma quase normal (apenas sem redimensionamento e centralização). Então, se você quiser, você pode fazer coisas tão interessantes como, por exemplo, "y-aware randomforest" com este pacote.
Leia mais aqui:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Eu olho para o seu código com íris e preditores aleatórios e entendo que não posso programar, o que me levou 10 linhas no seu código cabe em três....

E esta seleção de tratamento, ela difere da mesma importancia incorporada na RF?

 
mytarmailS:

esta seleção de tratamento é diferente do importantíssimo integrado na RF?

O Vtreat é melhor. Avalia tudo estatisticamente, o quão bom/mau o preditor é, em geral, para prever a variável alvo, sem se ajustar a um modelo de previsão particular. Recomenda-se a utilização de preditores com pontuação máxima de 1/(número de preditores). Por exemplo, se houver 200 preditores, você pode tirar deles apenas aqueles com avaliação inferior a 1/200. É possível estimar os preditores e se todas as estimativas forem superiores ao limiar - em vez de tentar ensinar o modelo e prever novos dados sem sucesso, é melhor começar a procurar outros preditores.

Existem algumas desvantagens - o pacote funciona com preditores um por um, e não leva em conta a interação entre eles. Eu também não gosto disso mesmo com preditores totalmente idênticos, ou altamente correlacionados - o vtreat não remove os repetitivos, às vezes isso é muito irritante.