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

 
Dr. Trader:

Muito disso você mesmo sabe e já fez, mas eu vou escrever mais completamente para excluir quaisquer suposições que falamos da mesma maneira, mas fazemos de maneira diferente.


Tudo isto a partir dos conselhos deste fórum, e da experiência.

Obrigado.

Vou responder ponto por ponto.

É necessário ter uma função de aptidão física cuidadosamente aperfeiçoada para estimar os parâmetros do modelo. Se a função avaliar parâmetros específicos do modelo e preditores selecionados com uma pontuação alta - deve haver bons resultados no teste com novos dados.
(Terei em mente para qualquer estimativa que quanto mais alto for, melhor é)

Existe tal função. Eu não preciso de R^2 (embora no início eu me propus a confirmar que o mercado é estupidamente previsível em termos de regressão). Eu uso uma função escrita para estimar o MO e a soma de pontos com o spread. Esta função funciona dentro do loop CV e seleciona os melhores parâmetros para treinar o modelo.

A função fitness deve repetir pelo menos 50 vezes em um ciclo:
1) dividir os dados em 2 partes, 50%/50%. Deve haver amostragem aleatória com amostra e amostragem sequencial (a peça para treino está algures no meio, e para validação o que a rodeia no início e no fim dos dados em bruto). Incluindo as versões extremas, onde o treinamento na primeira metade da tabela e a validação na última, e vice-versa. Acho importante ter tanto amostras sequenciais como amostras aleatórias para treinamento. Na figura você pode ver mais claramente alguns exemplos de partição aleatória e seqüencial, as linhas verdes são para treinamento, as amarelas são para validação.

Não é muito claro. Só não percebo a que repetições te referes.

Mais uma vez tenho 99 conjuntos de treino (10 anos cada). Cada conjunto é único em termos de exemplos, mas todos eles são retirados do mesmo período de tempo "antes".

Em cada conjunto corro um CV com 2 a 10 faltas (também as percorro em ciclo).

Mas eu tenho estritamente todas as faltas separadas pelo tempo. Acho que é um método inviolavelmente correcto.

Então 99 * número de combinações de parâmetros CV (centenas) = centenas de modelos treinados, que mostram a métrica de melhor qualidade em faltas de validação.

Depois há o mesmo número de amostras atrasadas retiradas do período "após" (que é de 5 anos). Eles também são únicos. Eu faço um CV aninhado: eu verifico cada modelo resultante para experiência de CV na amostra diferida. Eu recebo dois vetores de valores métricos de qualidade: no CV e na amostra diferida.

Pergunta para os conhecedores:

caso eu tenha dados constantes e um modelo (pacote) adequado, o que eu espero obter em amostras diferidas?

Resposta: a métrica de qualidade (QM) em amostras diferidas deve ser correlacionada com a métrica de qualidade em faltas de validação.

Na realidade, conseguir isto é um grande problema.

Porque é que preciso dele? Para que eu possa selecionar com confiança os melhores modelos, contando apenas com a minha validação cruzada. Uma vez que já verifiquei que dá resultados consistentes com o futuro.

As comissões e outros modelos de alto nível também precisam passar no teste de aptidão física daquela amostra diferida na qual não foram treinados de forma alguma.

 
Dr. Trader:


2) treinar o modelo na amostra de treinamento (os parâmetros do modelo e os preditores usados são os mesmos durante todo o ciclo, os que você está tentando estimar), então prever esses mesmos dados com esse modelo, e colocar uma pontuação na previsão - precisão, r^2, ou algo mais. Eu, por exemplo, arredondo o resultado da regressão para as classes, e uso a função Kappa de Cohen para estimativa, é de carpete, eu gosto mais do que a precisão da classificação ou precisão da regressão. Mas só funciona para duas classes. Para três classes eu acho difícil sugerir qualquer coisa, é importante que a estimativa leve em conta a precisão de cada classe separadamente, e dê alguma estimativa geral com base nisso.
3) Aplicar um modelo treinado para prever os dados de uma amostra de validação, estimar a previsão com a mesma função.
4) Ambas as estimativas (treinamento e validação) devem estar próximas uma da outra, e o mais alto possível. Eu uso este código para a pontuação final - (min(pontuação1,pontuação2) - (max(pontuação1,pontuação2)-min(pontuação1,pontuação2)) - do valor mínimo é subtraído o delta deles.

No final de cada iteração vamos obter alguma pontuação, e devido à divisão aleatória dos dados pode variar de -1 a 1 (ou em outro intervalo, dependendo da função utilizada). Calculamos o seu valor médio, e devolvemo-lo como resultado da função fitness. Adicionalmente, subtraio um pequeno número (0,0001) do valor de fitness para cada preditor utilizado para penalizar o modelo por um conjunto demasiado grande de dados necessários.


Por favor, esclareça, a formação refere-se à avaliação das faltas de validação cruzada?

A proximidade da estimativa de treinamento e validação - isso significa a correlação do atraso na amostragem com o resultado da validação cruzada?

Se for esse o caso, então estamos mesmo perto.

 
Alexey Burnakov:

Por favor, esclareça, a formação refere-se à avaliação das faltas de validação cruzada?

A proximidade da estimativa de treinamento e validação - isso significa correlação da amostragem retardada com o resultado da validação cruzada?

Se for esse o caso, então estamos mesmo perto.

O que significa "correlação"? "+1"? "-1"? Com o quê?

Aqui estão 50 resultados da corrida que eu posso entender. A 50 resultados já é possível aplicar estatísticas, contar a média, os desvios e, mais importante, o intervalo de confiança....

 
mytarmailS:

Posso ver o resultado das negociações de ontem?

Ү Não perfeito, mas ainda 80% do modelo está generalizado....

 
SanSanych Fomenko:

O que significa "correlação"? "+1"? "-1"? Com o quê?

Aqui estão 50 resultados da corrida que eu posso entender. A 50 resultados já é possível aplicar estatísticas, contar a média, a variância e, mais importante, o intervalo de confiança....

Não, tu não percebeste, CC.

Correlação da métrica da qualidade na amostra diferida com a métrica da qualidade na validação cruzada (como uma amostra de teste que avalia o modelo treinado). Se tivermos centenas de modelos treinados, obtemos dois vetores de métricas de qualidade.

Exemplo: a precisão da classificação na validação cruzada é de 57%, na amostragem atrasada de 50%. E há centenas (milhares) de tais valores. Mas há centenas e milhares de modelos treinados. Então a questão surge.

 
Alexey Burnakov:

Por favor, esclareça, a formação refere-se à avaliação das faltas de validação cruzada?

A proximidade da estimativa de treinamento e validação - isso significa correlação da amostragem retardada com o resultado da validação cruzada?

Se for esse o caso, então estamos mesmo perto.

Em código é algo parecido com isto:

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
Elementos de aprendizagem da máquina foram aplicados na prática não para aprender com o histórico de negociação, mas com o histórico de utilização de um conjunto de sinais/opções dentro das próprias sessões de negociação do robô para correlacionar com o acionamento de padrões particulares no mercado "ao vivo" em configurações/condições/sinais particulares do mercado.
 
Dr. Trader:

Em código, é mais ou menos assim:

Sim, diga-me só por palavras, está a comparar que amostras? Há treino, há teste (treino múltiplo e teste = validação cruzada). Há validação (amostragem atrasada).

Eu tenho três colunas:

a treinar todos. ---- teste de validação cruzada de faltas. ----- observações pendentes

0,7 0,65 0,55

... ....

O fato do treinamento se correlacionar com o teste é um absurdo, pois o modelo escolhido, como resultado, é treinado em todo o conjunto, cujas partes foram incluídas no teste.

Mas o facto de as estimativas de teste estarem correlacionadas com estimativas adiadas é importante para mim.

 

Nos seus termos, estou a comparar treino e teste.
Eu não tenho uma amostra de validação (atrasada) ao treinar o modelo. A amostra atrasada serão os novos dados que o modelo irá trocar após o treinamento.

O facto de o treino estar correlacionado com o teste é um disparate.

É por isso que eu faço múltiplas partições de dados e múltiplos modelos de treino. Se os parâmetros do modelo não forem bem sucedidos, então o resultado médio nas amostras de teste será muito mais baixo do que o resultado médio nas amostras de treinamento

 
Dr. Trader:

Nos seus termos, estou a comparar treino e teste.
Eu não tenho validação (retardada) da amostragem quando treinar o modelo, acontece. Os novos dados com os quais o modelo será comercializado após o treinamento serão adiados por amostragem.

É por isso que eu faço o particionamento múltiplo dos dados e o treinamento múltiplo do modelo novamente. Se os parâmetros do modelo não forem bem sucedidos, então o resultado médio nas amostras de teste será muito mais baixo do que o resultado médio nas amostras de treinamento

Há zimus no que estás a fazer.

No entanto, você também deve tentar adiar a amostragem. Isto é um clássico. Trem, Teste, Validação.

E tornar o procedimento ainda mais complexo. Para cada modelo que funciona bem em termos de treinamento e testes, vamos chamar este modelo X, faça a validação dos dados atrasados. Assim você tem uma idéia se está escolhendo ou não o modelo certo, usando apenas treinamento e testes. Faça muitos modelos com parâmetros diferentes, escolha os melhores (10, 100, 1000). Falha. Você vai entender se a sua "melhor" métrica se reflete em dados futuros ou não. Só depois disso é que vais para a batalha.