Skip to content

アプリケーション内で をクリックすると、お使いのDataRobotバージョンに関する全プラットフォームドキュメントにアクセスできます。

異常検知

DataRobotは、ラベルなしデータ(または部分的にラベル付けされたデータ)を処理して、異常検知モデルを構築します。異常検知(外れ値検知または新規性検知とも呼ばれます)は、教師なし学習の応用の一種です。教師あり学習モデルがターゲット特徴量を使用して学習データに基づく予測を作成する際、教師なし学習モデルはターゲットを持たず、学習データ内のパターンを検出します。

異常検知が使用されるのは、ネットワークとサイバーセキュリティ、保険の詐欺、クレジットカードの詐欺など、多くの通常のトランザクションと少量の異常トランザクションが存在する場合です。教師ありの手法は、このような少数の異常ケースの予測において優れていますが、関連するデータにラベルを設定するには費用と時間がかかります。

異常検知ワークフロー

ここでは、AutoMLと時系列プロジェクトの両方で機能する異常検知ワークフローの概要を示します。

  1. データをアップロードして、ターゲットなし? をクリックし異常を選択します。

  2. 時間認識モデルを使用する場合:

    • 時間認識モデルを設定をクリックします。
    • プライマリー日付/時刻特徴量を選択します。
    • 時系列モデルを設定します。
    • 異常検知のローリングウィンドウ(FDW)を設定します。
  3. モデリングモードを設定して、開始をクリックします。手動モードを選択した場合は、リポジトリに移動し、異常検知のブループリントを実行します。

  4. リーダーボードから、スコアを考慮してモデルを選択します。
  5. 時系列プロジェクトの場合、モデルを展開して時間経過に伴う異常または異常評価を選択します。この視覚化は、時間の経過に伴う異常を理解するのに役立ち、異常検出の設定でない場合の時系列の精度と同様に機能します。

  6. 特徴量のインパクトを計算します。

  7. 特徴量ごとの作用を計算します。
  8. 予測の説明を計算して、どの特徴量が外れ値の識別に寄与するかを理解します。
  9. 外れ値のしきい値を変更することを検討してください。
  10. 予測を作成します(または部分的にラベル付けされたデータを使用します)。

合成AUC指標

異常検知は教師なしモードで実行され、ターゲットを必要とせずにデータ内の外れ値が検出されます。ただし、ターゲットがない場合は、従来の指標を算出してモデルのパフォーマンスを推定することはできません。これに対処するために、DataRobotでは、合成AUC指標を使用してモデルが比較され、リーダーボードがソートされます。

教師なしモードが有効になると、デフォルトの指標として合成AUCが表示されます。この指標は、人工的に正常度の高いデータセットと異常度の高いデータセットの2つのデータセットを検定サンプルから生成することによって機能します。両方のデータセットに適切なラベルが付けられ、異常スコアをモデルで予測します。正解ラベルとして人工ラベルを使用して、各データセットの通常のROC AUC値が推定されます。モデルの合成AUCが0.9である場合、モデルがその期間の90%で正しいと解釈するのは正しくありません。このスコアは、単に合成AUCが0.9のモデルは合成AUCが0.6のモデルよりも優れている可能性が高いことなどを意味します。

外れ値のしきい値

異常検知モデルを実行した後、一部のブループリントでは、expected_outlier_fractionパラメーターを高度なチューニングタブで設定できます。

このパラメーターは、外れ値(予期される「汚染係数」)とみなすデータの割合を設定します。AutoMLでは、インサイトテーブル表示のコンテンツを定義するために使用されます。SVMモデルなどの特殊なケースでは、この値は決定関数のしきい値に影響を与えるnuパラメーターを設定します。デフォルトでは、expected_outlier_fractionは0.1(10%)です。

異常スコアの解釈

異常検知モデル以外のモデルと同様、DataRobotでは、モデルスコアがリーダーボードにレポートされます。しかし、スコアの意味は異なります。「良い」スコアは、データセット内の異常な行がターゲットのクラスに何らかの関連性があることを示します。「悪い」スコアは、異常値は存在しますがターゲットのクラスに関連性がないことを示します。つまりスコアは、モデルのパフォーマンスがどれだけ良好かを示すものではありません。教師なし学習モデルですので、スコアはノイズデータなどの要素に影響されます異常だと思ったものが異常ではないかもしれません。

異常スコアの範囲は0〜1で、スコアが大きいほど異常である可能性が高くなります。これらは、学習データセットの他の行と比較したときに、モデルがある行を異常値と認識する確率と解釈されるようにキャリブレーションされています。しかし、教師なしモードではターゲットが存在しないため、キャリブレーションは完全ではありません。校正されたスコアは、定量的な正確性ではなく、推定確率と考えてください。

異常スコアのインサイト

備考

このインサイトは時系列プロジェクトでは使用できません。

DataRobotの異常検知モデルは、すべての行に対して異常スコアを自動的に計算するので、予期された動作にそぐわない異常なパターンを識別できます。インサイトタブから表示できる画面には、最も高い異常スコアを含む上位100列までがリストされ、最大1000列および列あたり200文字が表示されます。テーブル表示にはエクスポートボタンがあります。このボタンを使用して、異常スコアの完全なリストを含むCSVをダウンロードできます。また、予測を計算予測の作成タブ)して、結果をダウンロードすることもできます。異常スコアは結果のPrediction列に表示されます。

異常値の結果のサマリーを見るには、インサイトタブの異常検知をクリックします。

DataRobotに、異常スコア(モデルの予測スコア)を基準に並べられた表が表示されます。表の各行は、元のデータセット内の1つの行を表します。この表で、検索をして元のデータの行を識別することや、モデルの予測(行IDが追加されます)をダウンロードすることができます。

表示される行の数は、expected_outlier_fractionパラメーターに依存します。表示できる最大行数は100行です(行あたり1000列および200文字)。つまり、表示には(expected_outlier_fraction * number of rows)または100の小さい方が含まれます。エクスポートボタンをクリックすることで、異常なテーブル全体をダウンロードできます。

別の異常検知モデルのインサイトを表示するには、モデル名バーのプルダウンをクリックして、新しいモデルを選択します。

時系列の異常検知

DataRobotの時系列異常検知では、データの異常を検知することができます。この機能を有効にするには、プロジェクト開始時にターゲット特徴量を指定しないことで、DataRobotが時系列データに対して教師なしモードを実行するようにします。「ターゲットなし?」をクリックして、教師なしモードを有効にします。

教師なしモードを有効にして、プライマリー日付/時刻特徴量を選択した後、時系列モデリングで通常行うように特徴量派生ウィンドウ(FDW)を調整できます。ただし、予測ウィンドウを指定する必要はありません。この理由はデータに異常が見られると、DataRobotがリアルタイムでそれを検出するためです。

例えば、予知保全のためにDataRobotの異常検知を使用する場合を考えてみます。さまざまなコンポーネントの圧力を測定するセンサーを備えたポンプがあるとします。DataRobotの時系列モデルを使用すると、それらのコンポーネントのいずれかの圧力が異常に高くなった場合に、警告することができます。その後、そのコンポーネントを調査して、ポンプが最終的に故障する前に、故障の疑いのある箇所を修理できます。

DataRobotでは、選りすぐりの異常検知のブループリントが使えることに加えて、アンサンブルモデルのブループリントを使うことができます。例えば、最大値アンサンブルモデルを使って、偽陽性率を高くし、異常に対する感度を向上させることができます。

時系列の異常検知では、DataRobotは合成AUCという新しい誤差指標を使用して、リーダーボードにおけるモデルのランキングを作ります。この誤差指標によって、ユースケースに最適なブループリントを決定することができます。AUCスコアを確認する場合は、部分的にラベル付けされたデータをアップロードして、既知の異常を指定する列を作成できます。DataRobotでは、その部分的にラベル付けされたデータセットを使用して、AUCスコアでリーダーボードのランク付けができます。部分的にラベル付けされたデータは、学習データセットの値のサンプルを取得し、実際に異常がある場合に「1」、異常がない場合に「0」のフラグを設定したデータです。

異常スコアを確率として解釈できるようにキャリブレーションが行われることがあります。これは、元の異常スコアを異常ラベルのプロキシとして使用するブループリントで発生します。学習データセットにおいて元のスコアが外れ値であったとき、キャリブレーションの目的で異常値と見なされます。この合成ターゲットは、元の異常スコアでPlattスケーリングを実行するために使用されます。キャリブレーションされたスコアは、学習データセットにおけるスコアの分布を考慮して、元のスコアが外れ値である確率として解釈されます。

時系列の異常検知を使用したデプロイは、その他のすべての時系列ブループリントのデプロイと同じように機能します。

時系列の異常検知特徴量セット

DataRobotは、ポイント異常値および異常ウィンドウ検出に役立つさまざまな時系列特徴量セットを生成します。最高のパフォーマンスを実現するために、DataRobotでは、通常、オートパイロットの実行時に「SHAPベースの削減済み特徴量」または「ロバストzスコアのみ」の特徴量セットが選択されます。

「SHAPベースの削減済み特徴量」または「ロバストzスコアのみ」の特徴量の両方で、利用可能な派生した特徴量すべてから選択された特徴量のセットが考慮されます。メニューから追加の機能リストを利用できます。

  • 「実測値とローリング統計量」
  • 「実測値のみ」
  • 「ローリング統計量のみ」
  • 時系列で有用な特徴量
  • 時系列で抽出された特徴量

「実績値とローリング統計」が「時系列で有用な特徴量」の複製である場合、DataRobotのメニューには「時系列で有用な特徴量」だけが表示されます。「時系列で有用な特徴量」には重複特徴量は含まれませんが、「時系列で抽出された特徴量」にはすべての時系列で派生した特徴量が含まれます。

特徴量セットの季節性検出

特徴量が周期性を持つ、および/またはトレンドがあるものの、実際には異常値がない場合があります。元の特徴量に適用された異常検知アルゴリズムでは、周期性やトレンドは考慮されません。これらのアルゴリズムでは、特徴量の振れ幅が大きい場合に偽陽性と識別される場合や、正常な信号の全体的な振幅と比較して小さい異常値がある場合に偽陰性と識別される場合があります。

異常は本質的に不規則なので、DataRobotでは、異常検知プロジェクトの自動モデリングで使用されるほとんどのデフォルトの特徴量セットから周期的な特徴量が除外されます。したがって、DataRobotは季節性検知ロジックをプロジェクトの数値特徴量に適用した後、デフォルトのセットが作成される前に、これらの特徴量を削除します。このロジックは、時系列で抽出された特徴量セットと時系列で有用な特徴量セットには適用されません(これらの特徴量セットからは削除されません)。以下に具体例を示します。

  • 特徴量に季節性がある場合、ロジックでは実測値とローリングZスコアも季節性があると想定され、実測値とローリングZスコアが削除されます。
  • ローリングウィンドウがその特徴量の期間よりも短い場合、ローリング統計は季節性があると見なされ、特徴量が削除されます。

これらの特徴量は引き続きプロジェクトで使用可能で、ユーザーが作成した特徴量セットに追加することでモデリングに使用できます。

部分的にラベル付けされたデータ

次に、部分的にラベル付けされたデータの使用についての概要を説明します。この機能は現在、時系列プロジェクトでのみ利用可能です。

  1. データをアップロードして教師なしモードを有効にし、DataRobotの教師なし学習モデルを介してラベルなしデータを実行します。

  2. 合成AUCによるモデルのランキングを考慮して最適なモデルを選択します。

  3. モデルによって非異常とフラグ付けされたデータと現実における異常データを比較します。

  4. 元のデータセットまたはラベル付けされたデータのコピーを取り、既知の現実の異常に基づいて、スコアを0または1(真の異常は「1」、異常なしは「0」)とラベル付けする「実際の値」列を作成します。この列にはユニークな名前が必要です(つまり、データセットの列名として使われているものは使用できません)。

  5. 部分的にラベル付けされた修正済みデータをアップロードして、AUCを検定し、このデータ用に構築されたリフトチャートおよびROC曲線チャートを使用して結果を評価し、モデルを選択します。

  6. モデルを運用環境にデプロイします。

異常検知のブループリント

DataRobotが実装する異常検知アルゴリズムを以下に示します。

モデル 説明
Isolation Forest 特徴量をランダムに選択し、選択した特徴量の最大値と最小値の間の分割値をランダムに選択することによって、観測値を「分離」します。ランダムな分割によって、短いツリーパスを生成します。高次元データに適しています。
One Class SVM データセットの形状をキャプチャします。通常、新規性検知に使用されます。高次元データに適しています。
Local Outlier Factor(LOF) k近傍法に基づき、特定の行とそれと近い行の局所密度の偏差を測定します。あるものが、その周囲のものとどれくらい分離されているかが異常スコアに反映されるため、異常スコアは「局所性」とみなされます。
Double Median Absolute Deviation(MAD、中央値絶対偏差) 左端からの中央値(すべてのデータの中央値以下のすべてのポイントの中央値)と右端からの中央値(すべてのデータの中央値以上のすべてのポイントの中央値)の 2つの中央値を使用します。いずれかの中央値がしきい値より大きいかチェックします。ブーリアンおよびほぼ同じ値のデータには適していません。対称および非対称分布に適しています。
教師あり学習による異常検知(XGB) ベースモデルの平均スコアを使用し、あるパーセンテージを異常としてラベル付けし、残りを正常としてラベル付けします。異常とラベル付けされる割合は、callion_outlier_fractionパラメーターによって定義されます。ベースモデルはIsolation ForestとDouble MADで、メモリー使用の少ない高速処理が可能です。データセットにテキストが含まれる場合、リポジトリには2つのXGBoostモデルがあります。1つのモデルは、テキストからの特異値分解を使用します。もう1つのモデルは、テキストで最も頻繁に使用される語句を使用します。
マハラノビス距離 マハラノビス距離は、ポイント(P)と分布(D)の距離の測定値です。これは、分布の平均から、そのポイントが何標準偏差離れているかを測定するというアイデアを多次元で表現したものになります。このモデルには、データの列が1つ以上必要です。
時系列:ボリンジャーバンド 最新の値に対して大幅に逸脱している特徴量の値は、異常な動作を示している可能性があります。ボリンジャーバンドは、異常検知の基準としてロバストZスコア(修正Zスコアとも呼ばれます)値を参照します。ロバストZスコア値は、標本の中央値を使用して評価され、値が標本の中央値からどれだけ離れているかが示されます(Zスコアは似ていますが参照するのは標本平均です)。ボリンジャーバンドは、ロバストZスコアが指定したしきい値を超えるたびに、より高い異常スコアを示します。ボリンジャーバンドは、ロバストzスコアの計算のリファレンスとしてパーティション学習データの中央値を参照します。
時系列:ボリンジャーバンド(ローリング) 上記のボリンジャーバンドと異なり、ボリンジャーバンド(ローリング)はパーティション学習データ全体ではなく、特徴量派生ウィンドウの標本中央値のみを参照します。ボリンジャーバンド(ローリング)では、モデリングに「ロバストzスコアのみ」特徴量セットを使用する必要がありますが、これには、ローリング方式で派生したすべてのロバストZスコア値が含まれます。

DataRobotで選択されるモデルは、データセットのサイズに応じて異なります。例えば、一般的にIsolation Forestが選択されますが、非常に大きなデータセットの場合、オートパイロットではDouble MADが構築されます。DataRobotで構築されるモデルに関係なく、すべての異常検知モデルはリポジトリから実行できます。

使用例

異常検知のいくつかの使用例を以下に示します。

データにラベルが付けられている場合:

クレジットカードトランザクションの大量の行があり、そのごく少数が詐欺または詐欺以外とラベル付けされているとします。ラベル付けされている行では、ラベルにはノイズが含まれており、偽陽性と偽陰性が含まれることがわかっています。異常検知モデルによる「異常」とクレジットカードトランザクションの「詐欺」の関係性を評価し、異常検知モデルをファインチューニングして、ラベル付けされていない大量のデータの予測を信頼できるものにしたいと考えています。請求を調査するためのリソースが限られているため、適切な異常検知によって、不正の可能性が高いケースの優先順位付けを行うことができます。

または

多くがラベル付けされた大量のデータを保有するネットワークセキュリティ企業の場合を考えてみます。悪意のある行動が認識され、何らかの対策(システム進入のブロックなど)がとられたとしても、すぐにハッカーが行動を変え、新しい形でネットワークに侵入してきます。その場合、教師ありモデルを最新の状態に維持して、ハッカーの行動の変化を認識することは困難です。

異常検知モデルを使用して、新しいデータが異常であるかどうか(「通常」のアクセスであったりすでに知られている「不正」アクセスと異なっている)を予測します。変化を認識するために必要なデータははるかに少ないので、教師ありモデルのように異常検知モデルを頻繁に再学習する必要はありません。ラベルが付けられた既存のデータを使用して、現行の異常検知モデルをファインチューニングすることができます。

データにラベルが付けられていない場合:

特定の時点における機械のステータスに関して、機械のデータを保持する製造会社の例を考えてみます。異常検知を使用して、機械のログから異常な時点を識別して、機械の故障を防ぐために必要な保守をしたいと考えています。


更新しました May 19, 2022
Back to top