PCA ベースの異常検出 コンポーネント

この記事では Azure Machine Learning デザイナーの PCA ベースの異常検出コンポーネントを使用して、主成分分析 (PCA) に基づく異常検出モデルを作成する方法について説明します。

このコンポーネントは、有効なトランザクションなど、1 つのクラスからトレーニング データを簡単に取得できるが、対象となる異常の十分なサンプルを取得するのが困難なシナリオでモデルを構築するのに役立ちます。

たとえば、不正なトランザクションを検出する際に、トレーニングに必要なだけの不正の例がないことはよくあります。 それでも、適切なトランザクションの例は多数ある可能性があります。 PCA ベースの異常検出コンポーネントでは、"通常" クラスの構成内容を識別するために使用可能な特徴を分析することで問題を解決します。 さらに、距離メトリックを適用して、異常を表すケースを特定します。 このアプローチにより、既存の不均衡データを使用してモデルをトレーニングすることができます。

主成分分析の詳細

PCA は、機械学習において定評のある手法です。 データの内部構造を明らかにし、データの分散について説明できるため、探索的データ分析でよく使用されます。

PCA は、複数の変数を含むデータを分析することで機能します。 変数間の相関関係を探し、結果の違いを最もよく把握できる値の組み合わせを決定します。 これらの組み合わされた特徴値は、"主成分" と呼ばれる、よりコンパクトな特徴空間を作成するために使用されます。

異常検出では、新しい入力がそれぞれ分析されます。 正規化された再構築エラーと共に、固有ベクトルへの射影が、異常検出アルゴリズムによって計算されます。 正規化されたエラーは、異常スコアとして使用されます。 エラーのスコアが高いほど、より異常なインスタンスになります。

PCA のしくみ、および異常検出の実装に関する詳細については、これらのホワイトペーパーを参照してください。

PCA ベースの異常検出を構成する方法

  1. デザイナーで、PCA ベースの異常検出コンポーネントをパイプラインに追加します。 このコンポーネントは、 [異常検出] カテゴリにあります。

  2. コンポーネントの右側のパネルで、 [トレーニング モード] オプションを選択します。 特定のパラメーター セットを使用してモデルをトレーニングするか、パラメーター スイープを使用して最適なパラメーターを検索するかを指定します。

    モデルの構成方法が既にわかっている場合は、 [Single Parameter](単一パラメーター) オプションを選択し、特定の値のセットを引数として渡します。

  3. [Number of components to use in PCA](PCA で使用する成分数) に、出力特徴 (成分) の数を指定します。

    含める成分の数を決定することは、PCA を使用した実験設計の重要な部分です。 一般的なガイダンスは、変数と同じ数の PCA 成分を含めないようにすることです。 代わりに、少数の成分から始めて、ある程度基準が満たされるまでそれらを増やす必要があります。

    出力成分の数が、データセットで使用できる特徴列の数より小さい場合に、最適な結果が得られます。

  4. ランダム化された PCA トレーニング中に実行するオーバーサンプリングの量を指定します。 異常検出の問題の場合、不均衡データでは、標準の PCA 手法を適用することが困難になります。 オーバーサンプリングの量を指定することで、ターゲット インスタンスの数を増やすことができます。

    1 を指定した場合、オーバーサンプリングは実行されません。 1 より大きい値を指定すると、モデルのトレーニングに使用する追加のサンプルが生成されます。

    パラメーター スイープを使用するかどうかによって、次の 2 つのオプションがあります。

    • ランダム PCA のオーバーサンプリング パラメーター:通常クラスに対する少数派クラスのオーバーサンプリングの比率を表す、単一の整数を入力します (このオプションは、単一パラメーター トレーニング方法を使用する場合に使用できます)。

    Note

    オーバーサンプリングされたデータ セットを表示することはできません。 PCA でのオーバーサンプリングの使用方法の詳細については、「テクニカル ノート」を参照してください。

  5. すべての入力特徴を平均ゼロに正規化する場合は、 [Enable input feature mean normalization](入力特徴の平均正規化を有効にする) オプションを選択します。 PCA の目的は変数間の分散を最大化することであるため、一般に、PCA ではゼロへの正規化またはスケーリングをお勧めします。

    既定では、このオプションはオンになっています。 別の方法またはスケールを使用して値が既に正規化されている場合はオフにしてください。

  6. タグ付けされたトレーニング データセットと、次のいずれかのトレーニング コンポーネントを接続します。

    [Create trainer mode](トレーナー モードの作成) オプションを [Single Parameter](単一パラメーター) に設定した場合は、異常検出モデルのトレーニング コンポーネントを使用します。

  7. パイプラインを送信します。

結果

トレーニングが完了したら、トレーニング済みモデルを保存できます。 または、モデルのスコア付けコンポーネントに接続して、異常スコアを予測することもできます。

異常検出モデルの結果を評価するには、次の手順を実行します。

  1. 両方のデータセットでスコア列を確実に使用可能にします。

    異常検出モデルを評価してみたときに、"比較するスコア付きのデータセットにスコア列がありません" というエラーが表示された場合は、ラベル列を含むが、確率スコアを含まない一般的な評価データセットが使用されています。 異常検出モデルのスキーマ出力と一致するデータセットを選んでください。これには、 [スコア付けラベル] および [スコア付け確率] 列が含まれます。

  2. ラベル列が確実にマークされているようにします。

    ラベル列に関連付けられているメタデータが、パイプライン グラフで削除されることがあります。 この場合、モデルの評価コンポーネントを使用して 2 つの異常検出モデルの結果を比較すると、"スコア付きのデータセットにラベル列がありません" または "比較するスコア付きのデータセットにラベル列がありません" というエラーが表示されることがあります。

    モデルの評価コンポーネントの前にメタデータの編集コンポーネントを追加することで、これらのエラーを回避できます。 列セレクターを使用してクラス列を選び、 [フィールド] ボックスの一覧で [ラベル] を選択します。

  3. Python スクリプトの実行コンポーネントを使用して、ラベル列のカテゴリを 1 (正、通常) および 0 (負、異常) として調整します。

    label_column_name = 'XXX'
    anomaly_label_category = YY
    dataframe1[label_column_name] = dataframe1[label_column_name].apply(lambda x: 0 if x == anomaly_label_category else 1)
    

テクニカル ノート

このアルゴリズムでは、PCA を使用して、通常クラスを含む部分空間を概算します。 部分空間は、データ共分散行列の上位の固有値に関連付けられている固有ベクトルにまたがります。

異常検出機能では、新しい入力ごとに、まず、固有ベクトルへの射影を計算してから、正規化された再構築エラーを計算します。 このエラーが異常スコアです。 エラーのスコアが高いほど、より異常なインスタンスになります。 正規空間の計算方法について詳しくは、Wikipedia の「主成分分析」を参照してください

次のステップ

Azure Machine Learning で使用できる一連のコンポーネントを参照してください。

デザイナー コンポーネント固有のエラーの一覧については、「デザイナーの例外とエラー コード」を参照してください。