Main Content

DriftDetectionMethod

ドリフト検出法 (DDM) を使用するインクリメンタルなドリフト検出器

R2022a 以降

    説明

    DriftDetectionMethod モデル オブジェクトは、ドリフト検出法を使用するインクリメンタルな概念ドリフト検出器を表します[1]。オブジェクトの作成後、オブジェクト関数 detectdrift を使用して、統計の更新や概念データのドリフト (故障率や回帰損失など) のチェックを行うことができます。

    DriftDetectionMethod はインクリメンタルな概念ドリフト検出に適しています。生データにおけるドリフト検出については、バッチ ドリフト検出用の detectdrift を参照してください。

    作成

    DriftDetectionMethod は、incrementalConceptDriftDetector の呼び出しで引数 DetectionMethod"ddm" として指定することで作成できます。

    プロパティ

    すべて展開する

    ドリフト ステータスを判定する対立仮説のタイプ。'greater' または 'less' のいずれかとして指定されます。

    データ型: char

    この プロパティ は読み取り専用です。

    ソフトウェアでドリフトが検出されたかどうかを示すフラグ。1 または 0 のいずれかとして指定されます。値 1DriftStatus'Drift' であることを意味します。

    データ型: logical

    この プロパティ は読み取り専用です。

    現在のドリフト ステータス。'Stable''Warning'、または 'Drift' として指定されます。DriftStatusPreviousDriftStaus を比較することで、ドリフト ステータスの遷移を確認できます。

    データ型: char

    この プロパティ は読み取り専用です。

    ドリフトになるまでの標準偏差の数の制限。非負のスカラー値として指定します。これは、全体の検定統計が最適な検定統計から離れていると見なし、ソフトウェアが DriftStatus'Drift' に設定するまでの許容される標準偏差の数です。

    データ型: double

    この プロパティ は読み取り専用です。

    入力データのタイプ。'binary' または 'continuous' のいずれかとして指定されます。

    データ型: char

    この プロパティ は読み取り専用です。

    ウォームアップ期間が終了しているかどうかを示すフラグ。1 (true) または 0 (false) として指定されます。

    データ型: logical

    この プロパティ は読み取り専用です。

    ドリフト検出器の学習に使用されたすべての入力データの加重平均。数値として指定されます。

    データ型: double

    この プロパティ は読み取り専用です。

    ドリフト検出器の学習に使用された観測値の数。非負の整数値として指定されます。

    データ型: double

    detectdrift が最新のデータ点までに観測した最適な加重平均。数値として指定されます。

    detectdrift は、次のいずれかの条件で OptimalMeanOptimalStandardDeviation を更新します。

    • Alternative'greater' で、Mean + StandardDeviationOptimalMean + OptimalStandardDeviation 以下のとき。

    • Alternative'less' で、Mean - StandardDeviationOptimalMean - OptimalStandardDeviation 以上のとき。

    データ型: double

    この プロパティ は読み取り専用です。

    detectdrift が最新のデータ点までに観測した最適な加重標準偏差。数値として指定されます。

    detectdrift は、次のいずれかの条件で OptimalMeanOptimalStandardDeviation を更新します。

    • Alternative'greater' で、Mean + StandardDeviationOptimalMean + OptimalStandardDeviation 以下のとき。

    • Alternative'less' で、Mean - StandardDeviationOptimalMean - OptimalStandardDeviation 以上のとき。

    データ型: double

    この プロパティ は読み取り専用です。

    最新のデータのバッチを使用した最新の学習以前のドリフト ステータス。'Stable''Warning'、または 'Drift' として指定されます。DriftStatusPreviousDriftStaus を比較することで、ドリフト ステータスの遷移を確認できます。

    データ型: char

    この プロパティ は読み取り専用です。

    ドリフト検出器の学習に使用されたすべての入力データの加重標準偏差。数値として指定されます。

    データ型: double

    この プロパティ は読み取り専用です。

    ドリフト検出器のウォームアップのための観測値の数。非負の整数として指定されます。

    データ型: double

    この プロパティ は読み取り専用です。

    警告があるかどうかを示すフラグ。1 または 0 のいずれかとして指定されます。値 1DriftStatus'Warning' であることを意味します。

    データ型: logical

    この プロパティ は読み取り専用です。

    警告になるまでの標準偏差の数の制限。非負のスカラー値として指定します。これは、全体の検定統計が最適な検定統計から離れていると見なし、ソフトウェアが DriftStatus'Warning' に設定するまでの許容される標準偏差の数です。

    データ型: double

    オブジェクト関数

    detectdriftドリフト検出器の状態とドリフト ステータスを新しいデータで更新
    resetインクリメンタルな概念ドリフト検出器をリセット

    すべて折りたたむ

    ドリフト検出法 (DDM) を使用して概念ドリフト検出器を開始します。

    incCDDetector = incrementalConceptDriftDetector("ddm");

    最初の 1000 個の観測値は故障率が 0.1 で、1000 個の観測値をすぎると故障率が 0.6 に増加する乱数ストリームを作成します。

    rng(1234)  % For reproducibility
    numObservations = 3000;
    switchPeriod = 1000;
    
    for i = 1:numObservations
        if i <= switchPeriod
           failurerate = 0.1;
        else
           failurerate = 0.6;
        end
           X(i) = rand()<failurerate; % Value 1 represents failure
    end

    ドリフト ステータスを追跡する変数を事前に割り当てます。

    status = zeros(numObservations,1);
    statusname = strings(numObservations,1);

    ドリフト検出器にデータを継続的に供給し、インクリメンタルなドリフト検出を実行します。各反復で次を行います。

    • ドリフト検出器の統計量を更新し、detectdrift で新しいデータ点を使用してドリフトを監視する。(メモ: detectdrift はウォームアップ期間後にドリフトをチェック)

    • 可視化のためにドリフト ステータスを追跡して記録する。

    • ドリフトが検出されたら、reset を使用してインクリメンタルな概念ドリフト検出器をリセットする。

    for i = 1:numObservations     
        
        incCDDetector = detectdrift(incCDDetector,X(i));
        statusname(i) = string(incCDDetector.DriftStatus);
              
        if incCDDetector.DriftDetected
           status(i) = 2;
           incCDDetector = reset(incCDDetector); % If drift detected, reset the detector
           sprintf("Drift detected at Observation #%d. Detector reset.",i)
        elseif incCDDetector.WarningDetected
           status(i) = 1;
        else 
           status(i) = 0;
        end   
    end
    ans = 
    "Drift detected at Observation #1078. Detector reset."
    

    観測番号 1000 で故障率が変わった後、detectdrift は観測番号 1078 でシフトを検出します。

    ドリフト ステータスと観測番号の関係をプロットします。

    gscatter(1:numObservations,status,statusname,'gyr','*',4,'on',"Observation number","Drift status")

    Figure contains an axes object. The axes object with xlabel Observation number, ylabel Drift status contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Stable, Warning, Drift.

    ドリフト検出法 (DDM) を使用して概念ドリフト検出器を開始します。

    incCDDetector = incrementalConceptDriftDetector("ddm",Alternative="less",WarmupPeriod=100);

    最初の 1000 個の観測値は故障率が 0.4 で、1000 個をすぎると故障率が 0.1 に減少する乱数ストリームを作成します。

    rng(1234)  % For reproducibility
    numObservations = 3000;
    switchPeriod = 1000;
    for i = 1:numObservations
        if i <= switchPeriod
           failurerate = 0.4;
        else
           failurerate = 0.125;
        end
           X(i) = rand()<failurerate; % Value 1 represents failure
    end

    ドリフト ステータスと最適な平均値および最適な標準偏差値を追跡する変数を事前に割り当てます。

    optmean = zeros(numObservations,1);
    optstddev = zeros(numObservations,1);
    status = zeros(numObservations,1);
    statusname = strings(numObservations,1);

    ドリフト検出器にデータを継続的に供給し、潜在的な変化を監視します。可視化のためにドリフト ステータスを記録します。

    for i = 1:numObservations     
        
        incCDDetector = detectdrift(incCDDetector,X(i)); 
    
        statusname(i) = string(incCDDetector.DriftStatus);
        optmean(i) = incCDDetector.OptimalMean;
        optstddev(i) = incCDDetector.OptimalStandardDeviation;
    
        if incCDDetector.DriftDetected
           status(i) = 2;
           incCDDetector = reset(incCDDetector); % If drift detected, reset the detector
           sprintf("Drift detected at Observation #%d. Detector reset.",i)
        elseif incCDDetector.WarningDetected
           status(i) = 1;
        else 
           status(i) = 0;
        end   
    end
    ans = 
    "Drift detected at Observation #1107. Detector reset."
    

    観測番号 1000 で故障率が変わった後、detectdrift は観測番号 1096 でシフトを検出します。

    最適な平均と最適な標準偏差の変化をプロットします。

    tiledlayout(2,1);
    ax1 = nexttile;
    plot(ax1,1:numObservations,optmean)
    ax2 = nexttile;
    plot(ax2,1:numObservations,optstddev)

    Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

    ドリフト ステータスと観測番号の関係をプロットします。

    figure();
    gscatter(1:numObservations,status,statusname,'gyr','*',4,'on',"Observation number","Drift status")

    Figure contains an axes object. The axes object with xlabel Observation number, ylabel Drift status contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Stable, Warning, Drift.

    detectdrift は、複数の観測値を警告ステータスと結論付けてからドリフトと判定しています。

    参照

    [1] Gama, Joao, Pedro Medas, Gladys Castillo, and Pedro P. Rodrigues. “Learning with drift detection.“ In Brazilian symposium on artificial intelligence, pp. 286-295. Berlin, Heidelberg: Springer. 2004, September.

    バージョン履歴

    R2022a で導入