Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

detectdrift

並べ替え検定を使用してベースライン データとターゲット データの間のドリフトを検出

R2022a 以降

    説明

    DDiagnostics = detectdrift(Baseline,Target) は、並べ替え検定を実行して BaselineTarget のデータ セット間の各変数のドリフトを検出し、その結果を DDiagnostics で返します。

    DDiagnostics は、DriftDiagnostics オブジェクトです。

    DDiagnostics = detectdrift(Baseline,Target,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、変数に使用するメトリクスや順列の最大数を指定できます。

    すべて折りたたむ

    2 つの変数をもつベースライン データとターゲット データを生成します。ターゲット データで 2 つ目の変数の分布パラメーターを変化させます。

    rng('default') % For reproducibility
    baseline = [normrnd(0,1,100,1),wblrnd(1.1,1,100,1)];
    target = [normrnd(0,1,100,1),wblrnd(1.2,2,100,1)];

    2 つのデータ セットを比較してドリフトを調べます。

    DDiagnostics = detectdrift(baseline,target)
    DDiagnostics = 
      DriftDiagnostics
    
                  VariableNames: ["x1"    "x2"]
           CategoricalVariables: []
                    DriftStatus: ["Stable"    "Drift"]
                        PValues: [0.2850 0.0030]
            ConfidenceIntervals: [2x2 double]
        MultipleTestDriftStatus: "Drift"
                 DriftThreshold: 0.0500
               WarningThreshold: 0.1000
    
    
    

    DDiagnostics は DriftDiagnostics オブジェクトです。detectdrift により、いくつかのオブジェクト プロパティが表示されます。

    推定 "p" 値の信頼区間を表示します。

    DDiagnostics.ConfidenceIntervals
    ans = 2×2
    
        0.2572    0.0006
        0.3141    0.0087
    
    

    1 つ目の変数について、推定 "p" 値の信頼区間の下限が警告しきい値の 0.1 より大きくなっています。そのため、1 つ目の変数のターゲット データはベースライン データと比較して安定していると detectdrift で判定されています。2 つ目の変数については、推定 "p" 値の信頼区間の上限がドリフトしきい値の 0.05 より小さくなっています。そのため、この変数のドリフト ステータスは Drift になります。これは、分布パラメーターにおけるシフトが detectdrift で検出されたことを示します。

    detectdrift は、既定では多重仮説検定にボンフェローニの方法を使用します。関数は最初に警告しきい値とドリフトしきい値を "p" 値の数 (この例では 2) で除算します。その後、そのいずれかのしきい値よりも低い "p" 値があるかどうかを調べます。ここでは、2 つ目の "p" 値が修正後のドリフトしきい値よりも低いため、関数はデータ全体の MultipleTestDriftStatusDrift に設定しています。

    両方の変数について、順列の結果を可視化します。

    tiledlayout(2,1);
    ax1 = nexttile;
    plotPermutationResults(DDiagnostics,ax1,Variable="x1")
    ax2 = nexttile;
    plotPermutationResults(DDiagnostics,ax2,Variable="x2")

    Figure contains 2 axes objects. Axes object 1 with title Permutation Results for x1, xlabel Wasserstein Metric Values, ylabel Distribution (%) contains 3 objects of type histogram, constantline. These objects represent $<$ 0.22381, $\geq$ 0.22381. Axes object 2 with title Permutation Results for x2, xlabel Wasserstein Metric Values, ylabel Distribution (%) contains 3 objects of type histogram, constantline. These objects represent $<$ 0.36879, $\geq$ 0.36879.

    破線より右にあるバーは、しきい値を超えているメトリクス値を示しています。このしきい値は、ベースライン データとターゲット データを使用して detectdrift で計算される各変数の初期メトリクス値です。変数 x1 ではしきい値を超えているバーの数がはるかに多く、この変数についてはベースライン データとターゲット データの間に大きなドリフトがないことを示しています。

    標本データを読み込みます。

    load humanactivity

    データ セットの詳細については、コマンド ラインで Description を入力してください。

    最初の 250 個の観測値をベースライン データとして割り当て、次の 250 個をターゲット データとして割り当てます。

    baseline = feat(1:250,:);
    target = feat(251:500,:);

    警告しきい値 0.05 とドリフトしきい値 0.01 を使用して、5 番目から 10 番目までの変数についてドリフトを検定します。いずれも連続変数であるため、すべての変数にコルモゴロフ・スミルノフ メトリクスを使用します。多重検定補正として偽発見率法を指定します。

    DDiagnostics = detectdrift(baseline(:,5:10),target(:,5:10),WarningThreshold=0.05, ...
            DriftThreshold=0.01,ContinuousMetric="ks",MultipleTestCorrection="fdr")
    DDiagnostics = 
      DriftDiagnostics
    
                  VariableNames: ["x1"    "x2"    "x3"    "x4"    "x5"    "x6"]
           CategoricalVariables: []
                    DriftStatus: ["Drift"    "Drift"    "Drift"    "Stable"    "Warning"    "Drift"]
                        PValues: [1.0000e-03 1.0000e-03 1.0000e-03 0.8810 0.0110 1.0000e-03]
            ConfidenceIntervals: [2×6 double]
        MultipleTestDriftStatus: "Drift"
                 DriftThreshold: 0.0100
               WarningThreshold: 0.0500
    
    
      Properties, Methods
    
    

    推定 "p" 値の信頼区間を表示します。

    DDiagnostics.ConfidenceIntervals
    ans = 2×6
    
        0.0000    0.0000    0.0000    0.8593    0.0055    0.0000
        0.0056    0.0056    0.0056    0.9004    0.0196    0.0056
    
    

    8 番目の変数 (変数名 x4) について、"p" 値の信頼限界の下限が警告しきい値より大きくなっています。そのため、detectdrift はこの変数のドリフト ステータスを "Stable" と判定しています。9 番目の変数 (変数名 x5) については、"p" 値の信頼限界の上限がドリフトしきい値より大きくなっていますが、警告しきい値よりは低くなっています。そのため、detectdrift はこの変数のドリフト ステータスを "Warning" と判定しています。他のすべての変数については、信頼区間がドリフトしきい値より小さいため、ドリフト ステータスは "Drift" です。多重検定補正の偽発見率法に基づいて、関数はデータ全体についてのドリフト ステータスを "Drift" と判定しています。

    "p" 値と信頼区間を対応するドリフト ステータスと共に可視化します。

    plotDriftStatus(DDiagnostics)

    警告しきい値とドリフトしきい値に対する推定 "p" 値と信頼区間のプロットが表示されます。変数 x4 の推定 "p" 値とその信頼区間は警告しきい値より高くなっています。そのため、この変数のドリフト ステータスは "Stable" になります。x5 については、"p" 値の信頼限界の上限がドリフトしきい値より大きくなっていますが、警告しきい値よりは低くなっています。そのため、この変数のドリフト ステータスは "Warning" になります。他のすべての変数については、信頼区間がドリフトしきい値より小さいため、ドリフト ステータスは "Drift" です。

    データ セット NYCHousing2015 を読み込みます。

    load NYCHousing2015

    データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。

    外れ値を削除し、datetime 配列 (SALEDATE) を月番号に変換します。

    idx = isoutlier(NYCHousing2015.SALEPRICE);
    NYCHousing2015(idx,:) = [];
    NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);

    1 月と 7 月の売上に関する情報としてベースライン データとターゲット データをそれぞれ定義します。

    tbl = NYCHousing2015;
    baseline = tbl(tbl.SALEDATE==1,:);
    target = tbl(tbl.SALEDATE==7,:);

    データをシャッフルします。

    n = numel(baseline(:,1));
    rng(1); % For reproducibility
    idx = randsample(n,n);
    baseline = baseline(idx,:);
    n = numel(target(:,1));
    idx = randsample(n,n);
    target = target(idx,:);

    ベースライン データとターゲット データの間の潜在的なドリフトを検定します。カテゴリカル変数と各変数で使用するメトリクスを指定します。

    DDiagnostics = detectdrift(baseline(1:1500,:),target(1:1500,:), ...
        VariableNames=["BOROUGH","BUILDINGCLASSCATEGORY","LANDSQUAREFEET","GROSSSQUAREFEET","SALEPRICE"], ...
        CategoricalVariables=["BOROUGH","BUILDINGCLASSCATEGORY"], ...
        Metrics=["Hellinger","Hellinger","ad","ks","energy"])
    DDiagnostics = 
      DriftDiagnostics
    
                  VariableNames: ["BOROUGH"    "BUILDINGCLASSCATEGORY"    "LANDSQUAREFEET"    "GROSSSQUAREFEET"    "SALEPRICE"]
           CategoricalVariables: [1 2]
                    DriftStatus: ["Drift"    "Stable"    "Drift"    "Drift"    "Drift"]
                        PValues: [0.0260 0.1440 0.0070 0.0230 0.0110]
            ConfidenceIntervals: [2×5 double]
        MultipleTestDriftStatus: "Drift"
                 DriftThreshold: 0.0500
               WarningThreshold: 0.1000
    
    
      Properties, Methods
    
    

    detectdrift により、BUILDINGCLASSCATEGORY を除くすべての変数について、ベースライン データとターゲット データの間でドリフトが識別されています。

    推定 "p" 値の信頼区間を表示します。

    DDiagnostics.ConfidenceIntervals
    ans = 2×5
    
        0.0171    0.1228    0.0028    0.0146    0.0055
        0.0379    0.1673    0.0144    0.0343    0.0196
    
    

    SALEPRICE のヒストグラムをプロットします。

    plotHistogram(DDiagnostics,Variable="SALEPRICE")

    1 月と比較した 7 月の売価のシフトがヒストグラムに表示されます。

    SALEPRICE のベースライン データとターゲット データについての経験的累積分布関数をプロットします。

    plotEmpiricalCDF(DDiagnostics,Variable="SALEPRICE")

    SALEPRICE の順列の結果をプロットします。

    plotPermutationResults(DDiagnostics,Variable="SALEPRICE")

    3 つの変数をもつベースライン データとターゲット データを生成します。ターゲット データで 2 つ目と 3 つ目の変数の分布パラメーターを変化させます。

    rng('default') % For reproducibility
    baseline = [normrnd(0,1,100,1),wblrnd(1.1,1,100,1),betarnd(1,2,100,1)];
    target = [normrnd(0,1,100,1),wblrnd(1.2,2,100,1),betarnd(1.7,2.8,100,1)];

    "p" 値を推定せずに、ベースライン データとターゲット データの間ですべての変数の初期メトリクスを計算します。

    DDiagnostics = detectdrift(baseline,target,EstimatePValues=false)
    DDiagnostics = 
      DriftDiagnostics
    
               VariableNames: ["x1"    "x2"    "x3"]
        CategoricalVariables: []
                     Metrics: ["Wasserstein"    "Wasserstein"    "Wasserstein"]
                MetricValues: [0.2022 0.3468 0.0559]
    
    
      Properties, Methods
    
    

    detectdrift により、ベースライン データとターゲット データを使用して各変数の初期メトリクス値のみが計算されます。並べ替え検定および "p" 値の推定に関連付けられたプロパティについては、空になるか NaN が格納されます。

    summary(DDiagnostics)
              MetricValue       Metric    
              ___________    _____________
    
        x1      0.20215      "Wasserstein"
        x2      0.34676      "Wasserstein"
        x3     0.055922      "Wasserstein"
    

    関数 summary により、初期メトリクス値と指定した各変数に使用されるメトリクスのみが表示されます。

    plotDriftStatusplotPermutationResults では、"p" 値を推定せずにメトリクスを計算すると、プロットが生成されずに警告メッセージが返されます。plotEmpiricalCDFplotHistogram では、既定では 1 つ目の変数についての ecdf とヒストグラムがそれぞれプロットされます。どちらの場合も、"p" 値および変数に関連付けられているドリフト ステータスについては NaN が返されます。

    plotEmpiricalCDF(DDiagnostics)

    plotHistogram(DDiagnostics)

    入力引数

    すべて折りたたむ

    ベースライン データ。数値配列、categorical 配列、または table として指定します。BaselineTarget のデータは同じデータ型でなければなりません。入力データが categorical 配列である場合、detectdrift は各列を独立したカテゴリカル変数として扱います。

    データ型: single | double | categorical | table

    ターゲット データ。数値配列、categorical 配列、または table として指定します。BaselineTarget のデータは同じデータ型でなければなりません。入力データが categorical 配列である場合、detectdrift は各列を独立したカテゴリカル変数として扱います。

    データ型: single | double | categorical | table

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: detectdrift(Baseline,Target,WarningThreshold=0.05,DriftThreshold=0.01,VariableNames=["Weight","MPG"],ContinuousMetrics="ad") は、警告しきい値を 0.05、ドリフトしきい値を 0.01 に設定し、ドリフト検出用に検定する変数として Weight と MPG を指定し、すべての連続変数の検定に使用するメトリクスとしてアンダーソン・ダーリングを指定します。

    ドリフトを解析する変数。string、一意の string の配列、文字ベクトル、または文字ベクトルの cell 配列として指定します。

    例: VariableNames=["x1","x3"]

    データ型: string | char | cell

    カテゴリカル変数のリスト。"all"、string、一意の string の配列、文字ベクトル、一意の文字ベクトルの cell 配列、整数インデックスのベクトル、または logical インデックスのベクトルとして指定します。

    detectdrift は、ordinal データ型、nominal データ型、または順序インジケーターが true に設定された categorical データ型をカテゴリカル変数として扱います。

    例: CategoricalVariables="Zone"

    データ型: single | double | logical | string | cell

    ドリフト検出のしきい値。0 から 1 までのスカラー値として指定します。

    detectdrift は、ドリフトしきい値を警告しきい値と共に使用してドリフト ステータスを判定します。DriftThreshold の値は WarningThreshold の値より厳密に低くなければなりません。

    推定 p 値の信頼区間が (Lower,Upper) の場合、detectdrift はドリフト ステータスを次のように判定します。

    ドリフト ステータス条件
    DriftUpper < DriftThreshold
    WarningDriftThreshold < Lower < WarningThreshold または DriftThreshold < Upper < WarningThreshold
    StableLower > WarningThreshold

    例: DriftThreshold=0.01

    データ型: single | double

    潜在的なドリフトの警告のしきい値。0 から 1 までのスカラー値として指定します。

    detectdrift は、警告しきい値をドリフトしきい値と共に使用してドリフト ステータスを判定します。WarningThreshold の値は DriftThreshold の値より厳密に大きくなければなりません。

    推定 p 値の信頼区間が (Lower,Upper) の場合、detectdrift はドリフト ステータスを次のように判定します。

    ドリフト ステータス条件
    DriftUpper < DriftThreshold
    WarningDriftThreshold < Lower < WarningThreshold または DriftThreshold < Upper < WarningThreshold
    StableLower > WarningThreshold

    例: WarningThreshold=0.05

    データ型: single | double

    順列の最大数。正の整数値として指定します。detectdrift は、ドリフト ステータスを判定するか MaxNumPermutations に達するまで、ヒューリスティックなアルゴリズムに従って順列の試行回数を対数的に増やしていきます。順列の最大数に達してもドリフト ステータスを判定できない場合、detectdrift はドリフト ステータスを "Warning" に設定します。

    例: MaxNumPermutations=1500

    データ型: single | double

    各変数のドリフト検出に使用するメトリクス。次のいずれかとして指定します。

    • 1 つ以上の組み込みメトリクスを表す string、string ベクトル、文字ベクトル、または文字ベクトルの cell 配列。

      連続変数の組み込みメトリクス

      定義
      "wasserstein"ワッサースタイン
      "energy"エネルギー
      "ks"コルモゴロフ・スミルノフ
      "ad"アンダーソン・ダーリング

      カテゴリカル変数の組み込みメトリクス

      定義
      "tv"全変動
      "psi"母集団安定性指標
      "hellinger"ヘリンジャー
      "chi2"カイ二乗
      "bhattacharyya"バタチャリア
    • 関数ハンドルまたは関数ハンドルの cell 配列。関数ハンドル FUN をメトリクスとして指定する場合、detectdrift で次のように呼び出します。

      FUN(BaselineVariable,TargetVariable),

      ここで、BaselineVariableBaseline の変数、TargetVariableTarget の変数です。FUN の出力はメトリクス値を表すスカラーでなければなりません。

    • 構造体または構造体の cell 配列。各構造体に関数ハンドルを値とする単一のフィールドを含めます。構造体を渡す場合、detectdrift はフィールド名をメトリクス名として使用します。関数ハンドルが無名の場合、その名前が detectdrift'CustomMetric_i' と指定されます。ここで、i は Metrics における変数の位置です。

    Metrics には VariableNames の変数ごとに 1 つの値を格納する必要があり、サイズは VariableNames のサイズと等しくなければなりません。

    Metrics を使用してメトリクスを指定する場合、ContinuousMetric または CategoricalMetric を使用して指定することはできません。

    例: Metrics=["wasserstein","psi","hellinger"]

    データ型: string | cell | function_handle | struct

    連続変数のドリフト検出のメトリクス。次のいずれかとして指定します。

    • 1 つ以上の組み込みメトリクスを表す string または文字ベクトル。

      連続変数の組み込みメトリクス

      定義
      "wasserstein"ワッサースタイン
      "energy"エネルギー
      "ks"コルモゴロフ・スミルノフ
      "ad"アンダーソン・ダーリング
    • 関数ハンドル。次のように呼び出します。

      FUN(BaselineVariable,TargetVariable),

      ここで、BaselineVariableBaseline の変数、TargetVariableTarget の変数です。FUN の出力はメトリクス値を表すスカラーでなければなりません。

      関数ハンドルが無名でない場合、detectdrift は指定された関数ハンドルからメトリクス名を抽出します。関数ハンドルが無名である場合は、メトリクスの名前が 'CustomContinuousMetric' と指定されます。

    • 関数ハンドルを値とする単一のフィールドをもつ構造体。この場合、detectdrift はフィールド名をメトリクス名として使用します。

    ContinuousMetric を指定する場合、Metrics を使用して他のメトリクスを指定することはできません。

    例: ContinuousMetric="ks"

    データ型: string | char | function_handle | struct

    カテゴリカル変数のドリフト検出のメトリクス。次のいずれかとして指定します。

    • 1 つ以上の組み込みメトリクスを表す string または文字ベクトル。

      カテゴリカル変数の組み込みメトリクス

      定義
      "tv"全変動
      "psi"母集団安定性指標
      "hellinger"ヘリンジャー
      "chi2"カイ二乗
      "bhattacharyya"バタチャリア
    • 関数ハンドル。次のように呼び出します。

      FUN(BaselineVariable,TargetVariable),

      ここで、BaselineVariableBaseline の変数、TargetVariableTarget の変数です。FUN の出力はメトリクス値を表すスカラーでなければなりません。

      関数ハンドルが無名でない場合、detectdrift は指定された関数ハンドルからメトリクス名を抽出します。関数ハンドルが無名である場合は、メトリクスの名前が 'CustomCategoricalMetric' と指定されます。

    • 関数ハンドルを値とする単一のフィールドをもつ構造体。この場合、detectdrift はフィールド名をメトリクス名として使用します。

    CategoricalMetric を指定する場合、Metrics を使用して他のメトリクスを指定することはできません。

    例: CategoricalMetric="chi2"

    データ型: string | char | function_handle | struct

    多重仮説検定の補正方法。次のいずれかとして指定します。

    • "bonferroni" – ボンフェローニ補正。ドリフト検出用に k 個の変数が指定された場合、detectdrift は警告しきい値とドリフトしきい値のそれぞれを k で除算して修正します。その後、関数は修正後のしきい値よりも小さい p 値があるかどうかをチェックしてドリフト ステータスを判定します。

    • "fdr" – 偽発見率 (FDR) 法。detectdrift で Benjamini-Hochberg の手法を使用して偽発見率を計算します。ドリフト検出用に k 個の変数が指定された場合、FDR 法では次の手順で処理されます。

      1. 指定された変数に対応する p 値をランク付けします。

      2. ランク 1 から k までを変数の数 k で除算して Q = [1/k, 2/k, 3/k ,…, k/k] を取得します。

      3. 並べ替えられたそれぞれの p 値の警告しきい値とドリフトしきい値について、対応する q の値を警告しきい値とドリフトしきい値の初期値に乗算してそれぞれ修正します。たとえば、ランク 3 の修正後の警告しきい値は (WarningThreshold)*3/k です。

      4. 並べ替えられた p 値について、対応する修正後の警告しきい値またはドリフトしきい値よりも小さいものがあるかどうかをチェックしてドリフト ステータスを判定します。

    多重検定の補正方法は、多変数のドリフトの保守的な推定を提供します。

    例: MultipleTestCorrection="fdr"

    並列実行のフラグ。数値または logical の 1 (true) または 0 (false) として指定します。UseParallel=true を指定した場合、関数 detectdriftparfor を使用して for ループの反復を実行します。Parallel Computing Toolbox™ がある場合、ループが並列に実行されます。

    例: UseParallel=true

    並べ替え検定における p 値の推定のインジケーター。true または false として指定します。EstimatePValues=false を指定すると、detectdrift はメトリクスのみを計算します。

    例: EstimatePValues=false

    出力引数

    すべて折りたたむ

    ドリフト検出用の並べ替え検定の結果。DriftDiagnostics オブジェクトとして返されます。detectdrift で表示されるプロパティは次のとおりです。

    プロパティ名説明
    VariableNamesドリフト検出用に解析された変数
    CategoricalVariablesデータ内のカテゴリカル変数のインデックス
    DriftStatus各変数のドリフト ステータス
    PValues各変数の推定 p 値
    ConfidenceIntervals推定 p 値の 95% 信頼区間の範囲
    MultipleTestDriftStatusデータ全体のドリフト ステータス
    DriftThresholdドリフト ステータスを判定するしきい値
    WarningThreshold警告ステータスを判定するしきい値

    プロパティとその説明の完全な一覧については、DriftDiagnostics のリファレンス ページを参照してください。

    アルゴリズム

    すべて折りたたむ

    並べ替え検定

    detectdrift では、Baseline データの各変数と Target データの対応する変数のドリフト ステータスを並べ替え検定[1]を使用して判定します。並べ替え検定は、帰無仮説のもとでメトリクス (検定統計量) の分布を取得するノンパラメトリックな統計的有意性検定です。そのメトリクスの値を BaselineTarget におけるすべての可能な変数の並べ替えのもとで計算します。変数や観測値の数によっては、すべての可能な順列の試行が実行不可能な場合があります。そのため、detectdrift では、変数のメトリクスを適切に推定できる十分な数の順列を実行します。

    帰無仮説 (ドリフトなし) において、並べ替え検定で記録されるメトリクスの多くの値が初期検定統計量と同様に極端になることがあります。これは、ベースライン データとターゲット データで、指定した変数の観測値が同じ分布から派生する信頼度が十分に高いことを示しています。そのため、ドリフトの証拠は見つからず、detectdrift は帰無仮説を棄却できません。

    初期検定統計量が外れ値として識別されると、detectdrift は帰無仮説を棄却します。これは、ベースライン データとターゲット データで、指定した変数の観測値が異なる分布から派生する信頼度が十分に高いことを示しています。そのため、ドリフトが検出されます。

    detectdrift では、次の手順で並べ替え検定を実行します。

    • ベースライン データの観測値が m 個でターゲット データの観測値が n 個の指定された変数について、detectdrift は元のデータからメトリクスの初期値を計算します。

    • 次に、関数はベースライン データとターゲット データで変数の観測値を並べ替え、それらをサイズが m と n の 2 つのベクトルにそれぞれ分割します。その後、関数は同じメトリクス値を計算します。detectdrift は、この手順を MaxNumPermutations の回数だけ繰り返し、指定されたメトリクスの分布を取得します。

    • p 値の推定は p = x/perm です。ここで、x は順列から取得されたメトリクス値が初期メトリクス値の値よりも大きくなる回数、perm は順列の数です。x の二項分布の仮定により、detectdrift は p 値の 95% 信頼区間を [~,CI] = binofit(x,perm,0.05) を使用して推定します。

    p 値の信頼区間を (Lower, Upper) とすると、detectdrift は次の条件に基づいてドリフト ステータスを判定します。

    ドリフト ステータス条件
    DriftUpper < DriftThreshold
    WarningDriftThreshold < Lower < WarningThreshold または DriftThreshold < Upper < WarningThreshold
    StableLower > WarningThreshold

    メトリクス

    detectdrift では、ベースライン データとターゲット データの間のドリフトを検出するための並べ替え検定において、次のメトリクスを検定統計量として使用します。

    連続変数のメトリクス

    関数 detectdrift は、最初に以下を定義します。

    • 共通領域におけるベースライン データの経験累積分布関数 (ecdf) を表す Eb(x)

    • 共通領域におけるターゲット データの ecdf を表す Et(x)

    • すべてのデータの結合した ecdf を表す D(x) とビンのエッジ間の差異を表す w

    次に、detectdrift は連続変数のメトリクスを次のように計算します。

    • ワッサースタイン

      W=xw*|Eb(x)Et(x)|

    • エネルギー

      En=2*xw*|Eb(x)Et(x)|2

    • コルモゴロフ・スミルノフ

      KS=max|Eb(x)Et(x)|

    • アンダーソン・ダーリング

      AD=x(|Eb(x)Et(x)|(m+n)D(x)*(1D(x)))2

      m と n は、それぞれベースライン データとターゲット データの観測値の数です。

    カテゴリカル変数のメトリクス

    関数 detectdrift は、以下を定義します。

    • ベースライン データとターゲット データを結合 (それらが同じ領域にあると見なして結合) することで判定されるビン内のベースライン データの割合を表す Hb(x)

    • ベースライン データとターゲット データを結合することで判定されるビン内のターゲット データの割合を表す Ht(x)

    次に、detectdrift はカテゴリカル変数のメトリクスを次のように計算します。

    • 全変動

      TV=0.5*x|Hb(x)Ht(x)|

    • 母集団安定性指標

      PSI=max(0,xlog(Ht(x)Hb(x))(Ht(x)Hb(x)))

    • カイ二乗

      χ2=x(Ht(x)Hb(x))2Hb(x)

    • バタチャリア

      B=max(0,log(min(1,xHb(x)*Ht(x))))

    • ヘリンジャー

      H=max(0,1(min(1,xHb(x)*Ht(x))))

    detectdrift は、空のビン (カテゴリ) を処理するために各ビンのヒストグラムのビンのカウント数に 0.5 の補正係数を追加します。これは、パラメーター p (変数の値がそのカテゴリに含まれる確率) が事前分布 Beta(0.5,0.5) をもつという仮定 (分布パラメーターに関するジェフリーズ事前分布の仮定) と同等です。

    参照

    [1] Hesterbeg,Tim, David S. Moore, Shaun Monaghan, Ashley Clipson, and Rachel Epstein. "Bootstrap Methods and Permutation Tests" in Introduction to the Practice of Statistics. 7th ed, W.H. Freeman, pp. 1–57, 2010.

    [2] Benjamini, Yoav, and Yosef Hochberg. "Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing." Journal of the Royal Statistical Society, Series B (Methodological). Vol. 57, No. 1, pp. 289-300, 1995.

    [3] Villani, Cédric. Topics in Optimal Transportation. Graduate Studies in Mathematics. Vol. 58, American Mathematical Society, 2000.

    [4] Deza, Elena, and Michel Marie Deza. Encyclopedia of Distances, Springer Berlin Heidelberg, 2009.

    拡張機能

    バージョン履歴

    R2022a で導入