Discusión sobre el artículo "Criterio de independencia de Hilbert-Schmidt (HSIC)"

 

Artículo publicado Criterio de independencia de Hilbert-Schmidt (HSIC):

El presente artículo analiza la prueba estadística no paramétrica HSIC (Criterio de Independencia de Hilbert-Schmidt) diseñada para identificar dependencias lineales y no lineales en los datos. Para el cálculo de HSIC en el lenguaje MQL5, se propone la implementación de dos algoritmos: la prueba de permutación exacta y la aproximación gamma. La eficacia de los métodos se demuestra en el modelado de datos sintéticos de una relación no lineal entre las características y la variable objetivo.

La tarea principal de un tráder al trabajar con cotizaciones de instrumentos financieros es crear un sistema comercial (asesor) con una esperanza matemática positiva. Al diseñar dichos sistemas, con frecuencia se supone que existen dependencias ocultas en los datos usados para el entrenamiento y el comercio posterior. Sin embargo, normalmente no se analiza la cuestión de la comprobación estadística de esta suposición. Se considera que es posible obtener una respuesta indirecta probando los resultados con datos fuera de la muestra.

Mientras tanto, una respuesta estadísticamente sólida a la pregunta sobre si existe una relación entre las características y la variable objetivo resulta de vital importancia. Una respuesta positiva da confianza en la utilidad de los modelos predictivos, mientras que una respuesta negativa hace que uno se pregunte: ¿qué es exactamente lo que trata de predecir el algoritmo?

En estadística matemática, la cuestión sobre la presencia o ausencia de una relación probabilística entre variables aleatorias se responde mediante criterios de independencia. Uno de estos criterios es la prueba estadística HSIC, un poderoso método no paramétrico desarrollado en 2005 por el estadístico Arthur Gretton.

A diferencia del coeficiente de correlación, que solo identifica relaciones lineales, el HSIC es capaz de detectar relaciones tanto lineales como no lineales. Debido a esto, se usa ampliamente en el aprendizaje automático para la selección de características, el análisis de causa y efecto y otras tareas. En este artículo, analizaremos el principio de funcionamiento del HSIC y lo implementaremos en el entorno MQL5.


Autor: Evgeniy Chernish

 
Gracias, muy interesante.
 
Por favor, explíqueme mi escollo. Resulta que HSIC mostrará dependencia para cualquier función clásica Y=F(X1, X2, ...)?
 
fxsaber #:
Por favor, explíqueme mi escollo. ¿Resulta que HSIC mostrará la dependencia para cualquier función clásica Y=F(X1, X2, ...)?
Probablemente no para ninguna, porque la dependencia puede ser muy débil (debido a un fuerte ruido, por ejemplo) y entonces puede que no la capte. Pero en general, si hay algo significativo en los datos, la prueba lo detecta.
 
Evgeniy Chernish #:
Probablemente no para ninguno de ellos, porque la dependencia puede ser muy débil (debido a un fuerte ruido, por ejemplo) y entonces puede que no la detecte. Pero en general, si hay algo significativo en los datos, la prueba lo detecta.

Tomé datos de naturaleza diferente.

// Y son las barras del símbolo, X1 son las barras anteriores a Y, X2 son las barras anteriores a 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));
} 


En el script de reordenación propuesto hice esta sustitución.

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

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

Fill(x1, x2, y, data_);


Los resultados son 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: Наблюдения зависимы


Después creé un símbolo personalizado sobre la base de incrementos aleatorios y lo ejecuté con él.

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 qué hay dependencia en el segundo caso? A grandes rasgos, se supone que hay dependencia entre tres vectores, que son sumas acumulativas de una variable aleatoria.

 
fxsaber #:
...

¿Por qué hay dependencia en el segundo caso? A grandes rasgos, se supone que existe una dependencia entre tres vectores que son sumas acumuladas de una variable aleatoria.

Definitivamente (la dependencia) está ahí, porque se utiliza un PRNG bastante simple (supongo que utilizas uno estándar, puedes comprobarlo con el vórtice de Mersenne, por ejemplo).

Otra cuestión es cómo de fuerte es la dependencia, no lo tengo claro, pido al autor que explique cómo interpretar correctamente las métricas obtenidas.

[Eliminado]  
fxsaber #:

Tomó datos de otra naturaleza.


En el script de reordenamiento propuesto hice esta sustitución.


Resultados en EURUSD.


A continuación, creé un símbolo personalizado basado en incrementos aleatorios y lo ejecuté en él.


¿Por qué hay dependencia en el segundo caso? A grandes rasgos, se supone que existe una dependencia entre tres vectores, que son sumas acumulativas de una variable aleatoria.

La ACF de la SB es no estacionaria, toma un desfase mayor, es decir X con desfase Y - 50, por ejemplo. Si he visto el código de mi teléfono correctamente. A medida que aumenta el retardo, la dependencia se hace más débil de acuerdo con la ley de potencia.
 
fxsaber #:

Tomó datos de otra naturaleza.


En el script de reordenamiento propuesto hice esta sustitución.


Resultados en EURUSD.


A continuación, creé un símbolo personalizado basado en incrementos aleatorios y lo ejecuté en él.


¿Por qué hay dependencia en el segundo caso? A grandes rasgos, se supone que existe una dependencia entre tres vectores, que son sumas acumulativas de una variable aleatoria.

El HSIC no puede utilizarse para series no estacionarias. Hay que tomar incrementos de precios, no precios. La correlación de Pearson indica "dependencia" por la misma razón.
 
Andrey Dik #:

Definitivamente (la dependencia) está ahí, ya que utiliza un PRNG bastante simple (supongo que utiliza uno estándar, puede comprobarlo en Mersenne's Vortex, por ejemplo).

Otra cuestión es cómo de fuerte es la dependencia, tengo alguna confusión con ello, pido al autor que explique cómo interpretar correctamente las métricas obtenidas.

El HSIC desgraciadamente no mide la fuerza de la dependencia, solo la presencia o ausencia de relación entre los datos.
[Eliminado]  
Interesante artículo, no conocía este método, gracias. ¿Hay alguna ventaja hipotética sobre la información mutua? (Información mutua), porque era más común.

También me he dado cuenta de que suele ser más rápido calcular modelos MO rápidos para determinar la dependencia que estos diferentes criterios, que suelen ser más lentos. Aunque debería ser al revés :)
 
Maxim Dmitrievsky #:
Interesante artículo, no conocía este método, gracias. ¿Hay alguna ventaja hipotética sobre la información mutua? (Información mutua), porque era más común.
Allí creo que es necesario construir explícitamente distribuciones, que es bastante caro.