Discussão do artigo "Critério de Independência de Hilbert-Schmidt (HSIC)"

 

Novo artigo Critério de Independência de Hilbert-Schmidt (HSIC) foi publicado:

O artigo examina o teste estatístico não paramétrico HSIC (Hilbert-Schmidt Independence Criterion) destinado a identificar dependências lineares e não lineares nos dados. São propostas implementações de dois algoritmos para o cálculo do HSIC na linguagem MQL5: o teste exato por permutação e a aproximação gama. A eficácia do método é demonstrada em dados sintéticos que modelam uma relação não linear entre os atributos e a variável-alvo.

A principal tarefa do trader ao trabalhar com cotações de instrumentos financeiros é a criação de um sistema de negociação (EA) com expectativa matemática positiva. Ao projetar esses sistemas, frequentemente se assume que existem dependências ocultas nos dados utilizados para aprendizado e posterior negociação. No entanto, a questão da verificação estatística dessa suposição geralmente não é considerada. Acredita-se que uma resposta indireta possa ser obtida por meio dos resultados de testes em dados fora da amostra (out-of-sample).

Enquanto isso, uma resposta estatisticamente fundamentada à questão da existência de relação entre os atributos e a variável-alvo tem importância fundamental. Uma resposta positiva dá confiança na viabilidade do uso de modelos preditivos, enquanto uma resposta negativa leva a refletir: o que exatamente o algoritmo está tentando prever?

Na estatística matemática, a questão da existência ou ausência de ligação probabilística entre variáveis aleatórias é respondida pelos critérios de independência. Um desses critérios é o teste estatístico HSIC — um poderoso método não paramétrico desenvolvido em 2005 pelo estatístico Arthur Gretton.

Diferentemente do coeficiente de correlação, que identifica apenas relações lineares, o HSIC é capaz de detectar tanto dependências lineares quanto não lineares. Graças a isso, ele é amplamente utilizado em aprendizado de máquina para seleção de atributos, análise de relações de causa e efeito e outras tarefas. Neste artigo, vamos analisar o princípio de funcionamento do HSIC e implementá-lo no ambiente MQL5.


Autor: Evgeniy Chernish

 
Obrigado, muito interessante.
 
Por favor, explique meu obstáculo. Acontece que o HSIC mostrará a dependência de qualquer função clássica Y=F(X1, X2, ...)?
 
fxsaber #:
Por favor, explique meu obstáculo. Acontece que o HSIC mostrará a dependência para qualquer função clássica Y=F(X1, X2, ...)?
Provavelmente não para nenhuma delas, porque a dependência pode ser muito fraca (devido a um forte ruído, por exemplo) e, então, ela pode não ser detectada. Mas, em geral, se houver algo significativo nos dados, o teste o detectará.
 
Evgeniy Chernish #:
Provavelmente não para nenhum deles, porque a dependência pode ser muito fraca (devido a um forte ruído, por exemplo) e, portanto, pode não ser detectada. Mas, em geral, se houver algo significativo nos dados, o teste o detectará.

Peguei dados de uma natureza diferente.

// Y são as barras do símbolo, X1 são as barras antes de Y, X2 são as barras antes de X1.
bool Fill( double &X1[], double &X2[], double &Y[], const int Size = 1000,
          const datetime Time = 0, const string Symb = NULL )
{
  int Pos = iBarShift(Symb, PERIOD_CURRENT, Time ? Time : TimeCurrent());
  
  return((CopyClose(Symb, PERIOD_CURRENT, Pos, Size, Y) == Size) &&  
         (CopyClose(Symb, PERIOD_CURRENT, Pos += Size, Size, X1) == Size) &&  
         (CopyClose(Symb, PERIOD_CURRENT, Pos += Size, Size, X2) == Size));
} 


No script de reorganização proposto, fiz essa substituição.

if (SData == Nonlinear_dependence){
/*
double x1 [];
MathRandomUniform(-5,5,data_,x1);
double x2 [];
MathRandomUniform(-5,5,data_,x2);
double NormD[];
MathRandomNormal(0,0.1,data_,NormD);
double y[];
ArrayResize(y,data_);
for (int i=0;i<data_;i++){
y[i] = pow(x1[i],2)*cos(M_PI*x2[i]) + NormD[i]; // Y = X1^2 * cos(pi*X2) + Noise
}
*/

double x1[], x2[], y[];

Fill(x1, x2, y, data_);


Os resultados são para EURUSD.

Test6 (EURUSD,M1)       Коэффициент корреляции (X1, Y) = 0.3757
Test6 (EURUSD,M1)       Коэффициент корреляции (X2, Y) = -0.4280
Test6 (EURUSD,M1)       ----------------Nonlinear_dependence-------------
Test6 (EURUSD,M1)       Время выполнения: 12.688 seconds
Test6 (EURUSD,M1)       -----------------------------------
Test6 (EURUSD,M1)       Number observations 1000
Test6 (EURUSD,M1)       HSIC: 0.01050641
Test6 (EURUSD,M1)       p-value: 0.0000
Test6 (EURUSD,M1)       Critical value: 0.0010
Test6 (EURUSD,M1)       Отвергаем H0: Наблюдения зависимы


Em seguida, criei um símbolo personalizado com base em incrementos aleatórios e o executei nele.

Test6 (RANDOM_EURUSD,M1)        Коэффициент корреляции (X1, Y) = -0.6103
Test6 (RANDOM_EURUSD,M1)        Коэффициент корреляции (X2, Y) = -0.4954
Test6 (RANDOM_EURUSD,M1)        ----------------Nonlinear_dependence-------------
Test6 (RANDOM_EURUSD,M1)        Время выполнения: 12.656 seconds
Test6 (RANDOM_EURUSD,M1)        -----------------------------------
Test6 (RANDOM_EURUSD,M1)        Number observations 1000
Test6 (RANDOM_EURUSD,M1)        HSIC: 0.00900188
Test6 (RANDOM_EURUSD,M1)        p-value: 0.0000
Test6 (RANDOM_EURUSD,M1)        Critical value: 0.0009
Test6 (RANDOM_EURUSD,M1)        Отвергаем H0: Наблюдения зависимы


Por que há dependência no segundo caso? Em termos gerais, supostamente há uma dependência entre três vetores, que são somas cumulativas de uma variável aleatória.

 
fxsaber #:
...

Por que há uma dependência no segundo caso? Em termos gerais, supostamente há uma dependência entre três vetores que são somas cumulativas de uma variável aleatória.

Ela (a dependência) está definitivamente presente, porque um PRNG bastante simples é usado (presumo que você use um padrão, você pode verificar isso com o vórtice de Mersenne, por exemplo).

Outra questão é quão forte é a dependência. Não tenho certeza disso e peço ao autor que explique como interpretar corretamente as métricas obtidas.

[Excluído]  
fxsaber #:

Obteve dados de uma natureza diferente.


No script de rearranjo proposto, fiz essa substituição.


Resultados em EURUSD.


Em seguida, criei um símbolo personalizado com base em incrementos aleatórios e o executei.


Por que há uma dependência no segundo caso? Em termos gerais, supostamente há uma dependência entre três vetores, que são somas cumulativas de uma variável aleatória.

A ACF do SB é não-estacionária, com uma defasagem de tempo maior, ou seja, X com defasagem Y - 50, por exemplo. Se eu vi o código do meu celular corretamente. À medida que a defasagem aumenta, a dependência fica mais fraca de acordo com a lei de potência.
 
fxsaber #:

Obteve dados de uma natureza diferente.


No script de rearranjo proposto, fiz essa substituição.


Resultados em EURUSD.


Em seguida, criei um símbolo personalizado com base em incrementos aleatórios e o executei.


Por que há uma dependência no segundo caso? Em termos gerais, supostamente há uma dependência entre três vetores, que são somas cumulativas de uma variável aleatória.

O HSIC não pode ser usado para séries não estacionárias. Você precisa considerar os incrementos de preços, não os preços. A correlação de Pearson indica "dependência" pelo mesmo motivo.
 
Andrey Dik #:

Definitivamente, ela (a dependência) existe, pois usa um PRNG bastante simples (presumo que você use um padrão, você pode verificar isso no Mersenne's Vortex, por exemplo).

Outra questão é a intensidade da dependência. Estou um pouco confuso com isso e peço ao autor que explique como interpretar corretamente as métricas obtidas.

Infelizmente, o HSIC não mede a intensidade da dependência, apenas a presença ou ausência de relação entre os dados.
[Excluído]  
Artigo interessante, não conhecia esse método, obrigado. Há alguma vantagem hipotética em relação à informação mútua? (Informação mútua), porque era mais comum.

Também notei que, com mais frequência, é mais rápido calcular modelos MO rápidos para determinar a dependência do que esses critérios diferentes, que geralmente são mais lentos. Embora devesse ser o contrário :)
 
Maxim Dmitrievsky #:
Artigo interessante, não conhecia esse método, obrigado. Há alguma vantagem hipotética em relação à informação mútua? (Informação mútua), porque era mais comum.
Nesse caso, acho que é necessário criar distribuições explicitamente, o que é bastante caro.