記事「ヒルベルト=シュミット独立性基準(HSIC)」についてのディスカッション

 

新しい記事「ヒルベルト=シュミット独立性基準(HSIC)」はパブリッシュされました:

データ内の線形および非線形依存関係を検出するために設計されたノンパラメトリック統計検定HSIC (Hilbert-Schmidt Independence Criterion)について解説します。MQL5言語におけるHSIC計算アルゴリズムとして、厳密な置換検定とガンマ近似の2つの実装を提案します。また、特徴量と目的変数の間の非線形関係をモデル化した合成データを用いて、本手法の有効性を示します。

金融商品の価格データを扱うトレーダーにとっての主な課題は、正の期待値を有する取引システム(EA)を構築することです。このようなシステムを設計する際には、学習および実運用に使用されるデータ内に隠れた依存関係が存在することを前提とする場合が一般的です。しかし、この仮定を統計的に検証するという問題が十分に検証されることはほとんどありません。一般には、アウトオブサンプルデータでのテスト結果を通じて間接的に答えが得られると考えられています。

一方で、特徴量と目的変数の間に関係が存在するかどうかという問いに対する統計的に妥当な結論は、極めて重要です。肯定的な結果は予測モデルの利用を支持しますが、否定的な結果は「アルゴリズムはいったい何を予測しようとしているのか」という疑問を生じさせます。

数理統計学において、確率変数間に確率的依存関係が存在するかどうかという問いには、独立性検定によって答えます。そのような基準の一つがHSIC統計検定であり、2005年に統計学者アーサー・グレットンによって提案された強力なノンパラメトリック手法です。

相関係数が線形関係しか検出できないのに対し、HSICは線形および非線形の両方の関係を検出することができます。この性質により、特徴選択、因果分析、その他の機械学習タスクで広く利用されています。本記事では、HSICの動作原理を分析し、MQL5環境で実装します。


作者: Evgeniy Chernish

 
ありがとう。
 
私のつまずきを説明してください。HSICは任意の古典関数Y=F(X1, X2, ...) に対して依存性を示すことがわかりますか?
 
fxsaber #:
私のつまずきの原因について説明してください。HSICはどのような古典関数Y=F(X1, X2, ...) に対しても依存性を示すことがわかりますか?
依存性が非常に弱く(例えば強いノイズのため)、それを捕らえないかもしれないからです。しかし一般的に、データに何か有意なものがあれば、検定はそれを検出します。
 
Evgeniy Chernish #:
なぜなら依存性が非常に弱く(例えば強いノイズのため)、それを検出できない可能性があるからである。しかし一般的には、データに何か有意なものがあれば、テストはそれを検出する。

私は異なる性質のデータを取りました。

// Yはシンボルのバー、X1はYの前のバー、X2は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));
} 


提案した並べ替えスクリプトでは、このような置換を行った。

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_);


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


次に、ランダム増分に基づいてカスタム・シンボルを作成し、それを実行した。

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


なぜ2番目のケースでは依存性があるのでしょうか?大雑把に言えば、確率変数の累積和である3つのベクトル間には依存性があると考えられる。

 
fxsaber #:
...

なぜ2番目の場合に従属性があるのか?大雑把に言えば、確率変数の累積和である3つのベクトル間には依存性があると考えられる。

なぜなら、かなり単純なPRNGが使われているからです(標準的なものを使っていると思いますが、例えばMersenne vortexで確認できます)。

もう一つの疑問は、依存性がどの程度強いのか、ということです。

削除済み  
fxsaber #:

異なる性質のデータを取った。


提案された再配置スクリプトでは、このように置き換えた。


EURUSDでの結果。


次に、ランダムな増分に基づいてカスタムシンボルを作成し、それを実行した。


なぜ2番目のケースでは依存関係があるのでしょうか?大雑把に言えば、ある確率変数の累積和である3つのベクトルの間には依存関係があると考えられる。

SBのACFは非定常であり、より大きなタイムラグを取る、つまり、例えばラグY - 50でXである。私の携帯電話からコードを正しく見た場合。ラグが大きくなるにつれて、依存性はべき乗則に従って弱くなる。
 
fxsaber #:

異なる性質のデータを取った。


提案された再配置スクリプトでは、このように置き換えた。


EURUSDでの結果。


次に、ランダムな増分に基づいてカスタムシンボルを作成し、それを実行した。


なぜ2番目のケースでは依存関係があるのでしょうか?大雑把に言えば、ある確率変数の累積和である3つのベクトルの間には依存関係があると考えられる。

HSICは非定常系列には使えません。価格ではなく、価格の増分を取る必要があります。ピアソン相関も同じ理由で「依存性」を示します。
 
Andrey Dik #:

かなり単純なPRNG(標準的なものを使っていると思うので、例えばMersenne's Vortexで確認できる)を使っているので、(依存性は)間違いなくある。

もう一つの疑問は、依存性がどの程度強いのか、ということです。

HSICは残念ながら依存性の強さを測定するものではなく、データ間の関係の有無のみを測定するものです。
削除済み  
興味深い記事だ。この方法については知らなかった。相互情報よりも優れている点はありますか?(相互情報)の方が一般的だったからです。

また、通常より遅いこれらの異なる基準よりも、依存関係を決定するために高速MOモデルを計算する方がより速いことが多いことにも気づきました。本来は逆であるべきですが :)
 
Maxim Dmitrievsky #:
興味深い記事だ。この方法については知らなかった。相互情報よりも優れている点はありますか?(相互情報)の方が一般的だったからです。
そこでは、明示的に分布を構築する必要があり、かなりコストがかかると思います。