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

 

Aqui está o código para encontrar os parâmetros arym, você pode encontrá-lo no post atacha no link. Eu corrigi um pouco esse primeiro post, substituí o primeiro exemplo mais mal sucedido por um exemplo normal.

  arimaModel <- auto.arima(y = ts(DT$value[trainIndexes],frequency=48),
                           seasonal.test = "ocsb",
                           trace=TRUE,
                           stepwise = FALSE,
                           max.q = 48, 
                           max.order = 48+5
                         )

A função auto.arima procura os parâmetros p d q P D Q adequados por si só
ts(DT$value[trainIndexes],frequência=48) # os dados são convertidos para algum formato do pacote de previsão, o principal é especificar a frequência, caso contrário a sazonal não será utilizada
seasonal.test = "ocsb" # google diz que é melhor, não tenho a certeza
stepwise = FALSE #false permite uma pesquisa mais abrangente. o valor padrão de verdadeiro significaria que a pesquisa provavelmente ficaria presa no mínimo local e pararia
max.q =48 #valor máximo de q ao pesquisar. valor padrão == 5, pois estes dados são baixos
max.order = 48+5 # soma máxima p+q+P+Q. valor por defeito == 5, não suficiente para estes dados

A função vai demorar muito tempo, mas deve eventualmente recuperar os mesmos parâmetros que eu usei, talvez até encontrar parâmetros ainda melhores.

Não esperei por esta função para encontrar tudo, apenas intuitivamente escolhi os parâmetros certos. Os dados têm tendência, portanto p = 1 e P = 1. E o gráfico mostra os períodos predominantes 24 e 48, portanto q = 24, e Q = 48 / frequência = 1
Eu não podia mais inserir o período 336 no arim, ele requer uma segunda sazonalidade, o pacote de previsão não sabe como fazer isso.

Arima com parâmetros já conhecidos p d q P D Q é criada desta forma:

Arima(y = ts(DT$value[trainIndexes],frequency=48), order = c(1, 0, 24), seasonal = c(1, 0, 1))

a sazonalidade não é na verdade (1,0,1), mas (1,0,48) porque o Q é meio que dominado por



SanSanych Fomenko:

Discutir arima sem analisar o resíduo na ARCH é um exercício totalmente vazio. Há algumas séries que têm um resíduo estacionário após uma simulação ARCH. Mas discutir o erro de previsão partindo do princípio de que é estacionário não é grave. Este resíduo é extremamente facetado.

Sim, eu concordo, é que esses dados são muito cíclicos e simples, então a arima funciona sem problemas. Se eu colar eurusd m30 no mesmo código, o modelo não entra em saltos de preço acentuados com os novos dados.
 
Dr. Trader:

Aqui está o código para encontrar os parâmetros arym, você pode encontrá-lo no post atacha no link. Eu corrigi um pouco esse primeiro post, substituí o primeiro exemplo mais mal sucedido por um exemplo normal.

a função auto.arima procura os parâmetros p d q P D Q adequados por si só
ts(DT$value[trainIndexes],frequência=48) # os dados são convertidos para algum formato do pacote de previsão, o principal é especificar a frequência, caso contrário a sazonal não será utilizada
seasonal.test = "ocsb" # google diz que é melhor, não tenho a certeza
stepwise = FALSE #false permite uma pesquisa mais abrangente. o valor padrão de verdadeiro significaria que a pesquisa provavelmente ficaria presa no mínimo local e pararia
max.q =48 #valor máximo de q na pesquisa. valor por defeito == 5, para estes dados é baixo
max.order = 48+5 # soma máxima p+q+P+Q. valor por defeito == 5, não suficiente para estes dados

A função vai demorar muito tempo, mas deve eventualmente recuperar os mesmos parâmetros que eu usei, talvez até encontrar parâmetros ainda melhores.

Não esperei por esta função para encontrar tudo, apenas intuitivamente escolhi os parâmetros certos. Os dados têm tendência, portanto p = 1 e P = 1. E o gráfico mostra os períodos predominantes 24 e 48, portanto q = 24, e Q = 48 / frequência = 1
Eu não podia mais inserir o período 336 no arim, para isso eu preciso da segunda sazonalidade, a previsão do pacote não pode fazer isso.

Arima com parâmetros já conhecidos p d q P D Q é criada desta forma:

A sazonalidade não é na verdade (1,0,1), mas (1,0,48) porque o Q é meio que dominado pela frequência



Sim, eu concordo, é que esses dados são muito cíclicos e simples, então a arima funciona sem problemas. Se eu colar eurusd m30 no mesmo código, o modelo não vai entrar em picos de preço com os novos dados.
Eu não estava interessado nestes parámetros "Óptimos", os parâmetros que coeficientes na equação de regressão - impressões após encaixe
 
summary(arimaModel)
Series: ts(DT$value[trainIndexes], frequency = period) 
ARIMA(1,0,24)(1,0,1)[48] with non-zero mean 

Coefficients:
         ar1     ma1     ma2     ma3     ma4     ma5     ma6     ma7     ma8     ma9    ma10    ma11    ma12    ma13    ma14    ma15    ma16    ma17    ma18
      0.8531  0.3469  0.3324  0.3512  0.3564  0.3176  0.2676  0.2223  0.1904  0.2015  0.2241  0.2529  0.2424  0.2383  0.2408  0.2507  0.2279  0.1701  0.1418
s.e.  0.0316  0.0350  0.0413  0.0462  0.0506  0.0542  0.0559  0.0554  0.0537  0.0514  0.0494  0.0481  0.0477  0.0469  0.0455  0.0451  0.0448  0.0439  0.0415
        ma19    ma20   ma21     ma22     ma23     ma24    sar1     sma1       mean
      0.0813  0.0525  0.028  -0.0152  -0.0226  -0.0159  0.9899  -0.4300  1816.9447
s.e.  0.0390  0.0358  0.032   0.0280   0.0224   0.0180  0.0015   0.0132   687.9652

sigma^2 estimated as 1442:  log likelihood=-23883.84
AIC=47825.68   AICc=47826.05   BIC=48012.95

Training set error measures:
                     ME     RMSE      MAE         MPE     MAPE      MASE         ACF1
Training set -0.1648644 37.86381 25.64976 -0.07217873 1.573367 0.1610166 0.0002493082
Arquivos anexados:
arimaModel.zip  140 kb
 
Dr. Trader:

É uma mesa estranha.

Não obstante.

Compare o valor do coeficiente com s.e. Com poucas exceções mais de 10%. Por alguma razão eu não vejo uma estimativa via t, mas de frente, que 10% significa:

Hipótese nula sobre a estimativa do coeficiente: probabilidade de que o coeficiente não seja significativo. Um desvio de mais de 10% diz que todos esses coeficientes NÃO são significativos, ou seja, você NÃO tem nenhuma equação de regressão.


PS.

Normalmente, os coeficientes que são significativos são marcados com asteriscos. Como os coeficientes NÃO são significativos, todos os outros números são apenas números.

hist(residuals(arimaModel), breaks= 100)


A razão pela qual os coeficientes NÃO são significativos é porque a cauda à esquerda é mais espessa do que a cauda à direita.

Existem testes que lhe permitem identificar os problemas quantitativamente, não a olho nu, e pegar nas ferramentas para resolvê-los.

Conclusão:

O modelo ARIMA não é aplicável às séries cronológicas utilizadas.

 
Maxim Dmitrievsky:

No mercado, qualquer classificador é requalificado porque o mercado não é estacionário. Se queremos que não se aprenda demais, temos de ensinar as NS para toda a história. Caso contrário, o ciclo do mercado será sempre alterado e o modelo será corrompido. A única abordagem sábia é o excesso de formação ou reciclagem no processo de negociação :) Não acreditamos em bobinas, que dão 1000% de lucro mensal sobre a história de 15 anos sem qualquer intervenção.

Em geral, eu ainda não vejo essa vantagem - o que faz NM sobre-treinado em forex. É quando não está a ganhar com uma amostra de teste? Não, não... não, não, não... é sobre a não-estacionariedade. Se você não sabe como verificá-lo, não é prático, não é realista.


Aqui você está absolutamente certo, como você pode falar sobre requalificação quando você não conhece o conceito em si???? O que queres dizer com NS?? Vamos atirar cada um como o vê, e eu vou primeiro.

1. NS não funciona bem com novos dados. Por implicação não divide consistentemente os sinais, não importa o certo ou o errado, o que importa é a estabilidade de separar o mau do bom.... Ele pode drenar (inversão de modelo) de forma consistente, mas o próprio fato de separar o mau do bom está na cara dele.

2. O modelo teve um bom desempenho durante menos de metade do intervalo de treinamento. A implicação desta abordagem é que um modelo bem treinado deve correr 50% ou mais do intervalo de treinamento.

3.curva de equilíbrio em novos dados tem altos e baixos acentuados (modelo aleatório funciona em um período de tempo específico e resultou em rentabilidade devido a 1-2 grandes negócios, mas em geral o afundador)

E em relação à classificação, aqui está a minha resposta.

NOT STATIONARY é um valor que muda suavemente, assim que uma barra fecha, ela começa a se afastar lentamente. E quanto mais a barra ficar na história, mais este notório valor ESTACIONÁRIO (um símbolo de algum caos ou valor etéreo que muda o mercado em geral) se torna, portanto, se ensinarmos o modelo de classificação, conseguiremos que este valor dependa diretamente da qualidade do modelo. Quanto mais antigo o modelo, menor a qualidade do modelo, de acordo com a mudança deste muito NÃO ESTACIONÁRIO. O objetivo é construir tal modelo, que funcionaria o tempo suficiente, para que você pudesse tirar um par de pips dele :-)

 
Mihail Marchukajtes:

O que queres dizer com "requalificado" NS?

Dados para treinamento, especialmente em forex, são normalmente ruidosos, e treinando o modelo com 100% de precisão nós o ensinamos a reproduzir esse ruído junto com o resultado desejado. E precisamos que o treinamento pare no momento em que o NS começa a prever o resultado corretamente, mas não começa a memorizar as respostas corretas junto com o barulho. Nas minhas próprias palavras. Cientificamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Aqui está uma boa ilustração. Dois modelos,
o primeiro (a linha do corredor) aprendeu estes dados com 100% de precisão. A olho, podemos ver que muitos pontos no limite do espaço vermelho e azul são deslocados um pouco para o lado (ruído), e de facto o limite destes dois espaços não deve ser uma linha quebrada, mas algum tipo de linha média.
O primeiro modelo é requalificado.
E há um segundo modelo (linha preta) que ignora o ruído, e claramente pelo sentido divide o plano.

 
Dr. Trader:

Dados para treinamento, especialmente em forex, são normalmente ruidosos, e treinando o modelo com 100% de precisão nós o ensinamos a reproduzir esse ruído junto com o resultado desejado. E precisamos que o treinamento pare no momento em que o NS começa a prever o resultado corretamente, mas não começa a memorizar as respostas corretas junto com o barulho. Nas minhas próprias palavras. Cientificamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Aqui está uma ilustração muito boa. Dois padrões,
o primeiro (linha de corredor) aprendeu estes dados com 100% de precisão. A olho podemos ver que muitos dos pontos do limite dos espaços vermelho e azul são ligeiramente deslocados para o lado (ruído), e de facto o limite destes dois espaços não deve ser uma linha quebrada, mas uma espécie de média.
O primeiro modelo é requalificado.
E há um segundo modelo (linha preta) que ignora o ruído, e claramente pelo sentido divide o plano.

Às vezes o cérebro começa a avariar... sobre o barulho em forex, não é um sinal de rádio, certo? Por que haveria barulho no forex? Se o modelo de Michael fazia 30-50 negociações por mês, 1-2 por dia, era ruído de negociação ou o quê? De alguma forma, esta definição não se enquadra aqui :)

O sobre-aprendizado em forex é sobre padrões (temporais) mal classificados. Mas não há outros padrões em Forex, por isso qualquer padrão irá sobretreinar até um grau ou outro.

p.s. Então você precisa fazer a classificação de instrumentos e escolher os BPs mais persistentes no momento, como o aumento das ações ou índices

 

Tudo verdadeiro!!!! Mas o sobretreinamento também tem uma explicação matemática......

Quando treinamos com um professor, tentamos reduzir o erro da rede no conjunto de treinamento. E esta redução de erros pode ser infinita se lidarmos com números reais. Mas chega um momento em que a redução do erro leva à degradação do modelo, mesmo no conjunto de teste. A partir daí, podemos tirar a seguinte conclusão!

Teoricamente para cada conjunto de dados existe uma aprendizagem absoluta, esta é uma certa linha na escala de erro onde o modelo 0,000000000000000000000001 não é retrabalhado e 0,0000000000000000009 é retrabalhado, uma espécie de "zero absoluto", para colocá-lo em termos físicos. Todos os modelos cujos erros estão à direita deste ponto são considerados iletrados, aqueles à esquerda são correspondentemente iletrados em excesso. Deixe-me lembrar que isto é apenas uma teoria da minha compreensão pessoal.

Este é algum tipo de modelo ideal para um conjunto de dados em particular.

A tarefa de qualquer IA é chegar o mais perto possível do ponto de aprendizagem absoluto, mas não ultrapassá-lo. IMHO.


Esta teoria assume que não é um ponto, mas um domínio de modelos totalmente treinados e sobretreinados. Uma área mista, não de tamanho suficiente. Apenas... imagine...... Porquê??? Isto eu identifiquei a partir da observação.

De qualquer forma, a primeira coisa que a IA tem de fazer é certificar-se de que ela atinge esta área de transição. Mas eis a questão......

Se você dividir a amostra estacionária então é provável que seja algum valor específico do limite de sobretreinamento (o mais provável), se a amostra for dividida aleatoriamente cada vez, então é OVER.... transitória.... IMHO

Se a IA não vem para aquela região garantida, então não é feito correctamente. A outra coisa é que modelo vai parar aqui!!!!

Consegui tudo isto com o JPrediction.

Começando a treinar o mesmo ficheiro, tendo em conta a amostragem aleatória, obtive 10 resultados de treino diferentes, o pior foi 75%, o melhor 85% de generalização (agora estamos a tomar os números do optimizador, certo ou errado não importa, agora...como exemplo....) Assim, podemos assumir que temos uma área entre 75 e 85, que contém um número infinito de variantes do modelo, uma rede neural. Como regra, eu escolho uma média em torno de 80-82 e então você pode se deparar com um modelo assim, que no OOS será fraco. Porque determinar o último polinómio não é uma questão simples.

Aqui está um vídeo e veja a partir de 35 minutos, aí ele fala sobre isso....

https://www.youtube.com/watch?v=qLBkB4sMztk

001. Вводная лекция - К.В. Воронцов
001. Вводная лекция - К.В. Воронцов
  • 2014.12.22
  • www.youtube.com
Курс "Машинное обучение" является одним из основных курсов Школы, поэтому он является обязательным для всех студентов ШАД. Лектор: Константин Вячеславович Во...
 
Mihail Marchukajtes:

Aqui está o vídeo e veja desde o 35º minuto, ele fala sobre isso....

https://www.youtube.com/watch?v=qLBkB4sMztk


Sim, já vi este tipo antes, vou vê-lo outra vez, thx).

Se você não entende o sentido matemático, mas o sentido real - o supertreinamento em Forex tem um significado completamente diferente, e não há como fugir desse supertreinamento :) É por isso que ou a triagem rígida e a procura de instrumentos de tendência ou a permanente reconversão adaptativa NS, mas de acordo com que critérios - esta é uma questão criativa.

 
Maxim Dmitrievsky:

Sim, já vi esse tipo antes, vou vê-lo de novo, obrigado.)

O significado matemático é claro, mas o significado real - que há uma NS sobretreinada no Forex tem um outro significado, e não há como fugir de tal sobretreinamento :) Esta é a razão pela qual precisamos ou de uma triagem rigorosa e procura de instrumentos de tendência ou de NS adaptativos permanentemente recondicionados, mas de acordo com que critérios - é uma questão criativa aqui.


A verdadeira questão, no entanto, é esta. Se houver uma má divisão na seção de teste, não importa se a divisão está correta ou não, o fato de que a divisão é fraca. E o modelo não funcionou mais do que 50% do intervalo de treinamento, então tal modelo é considerado super treinado.... IMHO