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

 
vladavd #:

A novidade, nesse caso, é um ziguezague e um canal ao longo dele, bem, essa é a vanguarda da engenharia.

Isso não é tudo o que você vê.

É apenas 5% do que é permitido.))

lynxntech #:

é como a última palavra e um hambúrguer).

você sempre tem que dar a si mesmo a chance de se justificar.

 

Olá, pessoal!

Talvez alguém possa me dar algum conselho. Estou tentando prever a direção de um par de moedas para o dia (para cima ou para baixo) usando o modelo "DecisionTreeClassifier".

Uso apenas 5 preditores para a previsão, e o resultado da previsão é uma tendência de alta (1) ou de baixa (-1). Tamanho do conjunto de dados: 999 linhas e 6 colunas (conjunto de dados anexado).

Mas encontrei um problema quando o aumento de "max_depth" aumenta o tempo todo a precisão nas amostras de treinamento e teste simultaneamente. A precisão na amostra de teste para de crescer e se torna constante em max_depth=22, igual a 0,780000. Resultados em diferentes valores de max_depth:


1) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=3)

Precisão no conjunto de treinamento: 0,539424 Precisão no conjunto de teste: 0,565000

2) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=5)

Acurácia no conjunto de treinamento: 0,579474 Acurácia no conjunto de teste: 0,585000

3) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=7)

Acurácia no conjunto de treinamento: 0,637046 Acurácia no conjunto de teste: 0,640000

4) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=9)

Acurácia no conjunto detreinamento: 0,667084 Acurácia no conjunto de teste: 0,700000

5) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=11)

Acurácia no conjunto de treinamento: 0,700876 Acurácia no conjunto de teste: 0,710000

6) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=13)

Acurácia no conjunto de treinamento: 0,720901 Acurácia no conjunto de teste: 0,720000

7) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=15)

Acurácia no conjunto de treinamento: 0,734668 Acurácia no conjunto de teste: 0,740000

8) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=17)

Acurácia no conjunto de treinamento: 0,747184 Acurácia no conjunto de teste: 0,760000

9) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=19)

Precisão no conjunto de treinamento: 0,755945 Precisão no conjunto de teste: 0,765000

10) clf_20=DecisionTreeClassifier(criterion='entropy', max_depth=22)

Acurácia no conjunto de treinamento: 0,760951 Acurácia no conjunto de teste: 0,780000


Estou extremamente confuso com essa situação, pois ouvi dizer que não se deve usar max_depth mais do que 3-4, porque é possível retreinar. Mas o modelo se comporta dessa forma quando retreinado, parece mais um modelo não treinado.

.

Não entendo, em tal situação, qual profundidade da árvore de decisão escolher ou qual modelo mesmo e, em geral, se vale a pena trabalhar mais nessa direção, talvez esteja faltando alguma coisa (mas, por exemplo, o conjunto de dados não tem 100 linhas), se é possível adicionar mais preditores e quantos mais podem ser adicionados em tal tamanho do conjunto de dados (eu adicionaria mais 2-5 partes).

O código é simples e também o anexei junto com o conjunto de dados:



Arquivos anexados:
 
Elvin Nasirov #:

Estou muito confuso com essa situação, pois ouvi dizer que não se deve usar max_depth mais do que 3-4, porque é possível retreinar. Mas é assim que o modelo se comporta quando retreinado, parece mais um modelo não treinado.

.

Não entendo, em tal situação, qual profundidade da árvore de decisão escolher ou qual modelo mesmo e, em geral, se vale a pena trabalhar mais nessa direção, talvez esteja faltando alguma coisa (mas, por exemplo, o conjunto de dados não tem 100 linhas), se é possível adicionar mais preditores e quantos mais podem ser adicionados em tal tamanho do conjunto de dados (eu adicionaria mais 2-5 partes).

O código é simples e também o anexei junto com o conjunto de dados:

Olá.

Mais número de divisões - mais memória = risco de aprender a amostra.

Não sou proficiente em python, mas:

1. Tente dividir a amostra sem misturar.

2. Ainda me parece que você está aprendendo com a amostra inteira, não com uma amostra reduzida.

 
Aleksey Vyazmikin #:

Olá.

Mais número de divisões - mais memória = risco de aprender uma amostra.

Não sou proficiente em python, mas:

1. Tente dividir a amostra sem misturar.

2. Parece-me que você está treinando com a amostra inteira, não com uma amostra reduzida.

Obrigado! Parece que você está certo.

Substituí "clf_20.fit(X, y)" por "clf_20.fit(X_train, y_train)" no código acima e a imagem mudou quase 50/50.

 
Elvin Nasirov #:

Obrigado! Acho que você está certo.

Substituí "clf_20.fit(X, y)" por "clf_20.fit(X_train, y_train)" no código acima e a imagem mudou quase 50/50.

É normal ter esse resultado - um resultado bom demais é sempre um motivo para começar a procurar um bug no código.

 
Aleksey Vyazmikin #:

É normal ter esse resultado - um resultado bom demais é sempre um motivo para começar a procurar um bug no código.

Tenho outra pergunta, se me permite.

Acontece que o melhor resultado é obtido com max_depth=1 e tem a seguinte aparência:

Acurácia no conjunto de treinamento: 0,515021 Acurácia no conjunto de teste: 0,503333

Parece ser extremamente ruim e igual à probabilidade de jogar uma moeda. Ou podemos considerar esse resultado bom e concluir que encontramos uma formalização que nos permite nivelar a probabilidade do movimento do câmbio e a probabilidade do resultado com o lançamento de uma moeda?

Ou seja, a situação é tal que, para cada combinação de preditores, há duas variantes equivalentes de movimento do mercado: para cima ou para baixo e, portanto, é necessário complementar o conjunto de dados com algo que possa especificar a combinação atual ainda para cima ou para baixo.

 
Elvin Nasirov #:

Outra pergunta surgiu, se me permite.

Verificou-se que o melhor resultado é obtido com max_depth=1 e tem a seguinte aparência:

Acurácia no conjunto de treinamento: 0,515021 Acurácia no conjunto de teste: 0,503333

Parece ser extremamente ruim e igual à probabilidade de jogar uma moeda. Ou podemos considerar esse resultado bom e concluir que encontramos uma formalização que nos permite nivelar a probabilidade de um movimento cambial e a probabilidade de jogar uma moeda?

Ou seja, a situação é tal que, para cada combinação de preditores, há duas variantes equivalentes de movimento do mercado: para cima ou para baixo e, portanto, é necessário complementar o conjunto de dados com algo que possa especificar a combinação atual ainda para cima ou para baixo.

Primeiro, leia sobre outras métricas para avaliar os resultados do treinamento - Recall (completude) e Precision (precisão), que são especialmente relevantes para a amostragem desequilibrada. A estratégia pode ser produzir um resultado financeiro positivo para a classificação com a mesma chance de resultados corretos e incorretos.

Considere uma marcação de meta mais complexa, porém lógica. Determinar como um dia fechará em sua abertura é mais difícil do que determinar a probabilidade de um aumento e uma queda em alguma porcentagem da abertura do dia - há uma probabilidade de identificar um padrão intradiário.

Para mim, a amostra é muito pequena.

Pense em criar indicadores que possam descrever o mercado. Na minha opinião, a partir dos indicadores dos indicadores de previsão, deve ser possível restaurar a situação no gráfico sem olhar para ele.

Recomendo que experimente o CatBoost para treinamento - ele cria modelos rapidamente e a questão da transferência de modelos para o código para trabalhar no MT5 sem muletas está resolvida.

 
Elvin Nasirov #:

Acontece que o melhor resultado é obtido quando max_depth=1 e tem a seguinte aparência:

Acurácia no conjunto de treinamento: 0,515021 Acurácia no conjunto de teste: 0,503333

Também vejo com frequência que o melhor resultado está em depth=1, o que significa que foi feita apenas uma divisão em um dos recursos. Outras divisões da árvore levam ao excesso de treinamento no treinamento e a resultados piores no teste.

 
elibrarius #:

Também vejo com frequência que o melhor resultado está na profundidade = 1, o que significa que foi feita apenas uma divisão em um dos recursos. Outras divisões da árvore levam ao retreinamento na linha e à piora dos resultados no teste.

Verifiquei os resultados ontem e descobri que o modelo para todos os casos deu uma previsão de "1", em média, e, portanto, 50/50. Você pode passar sem o modelo - o tempo todo dizendo "para cima".

 
Negociando como um profissional pro trader
h ttps://youtu.be/RS9jRVmW1j4

Isso é o que são os níveis de suporte e resistência em meu entendimento.....

Nem todos entenderão, mas se entenderem, parabéns para eles....

EARNING SEASON KICKS OFF - Trading Futures Live
EARNING SEASON KICKS OFF - Trading Futures Live
  • 2023.01.13
  • www.youtube.com
Join our FREE Discord community https://discord.gg/zhvUwUUhFirst 5 days of January bullish were followed by Full-year gains 83% of the time since 1950.Earnin...