PCA ベースの異常検出
重要
Machine Learning Studio (クラシック) のサポートは、2024 年 8 月 31 日に終了します。 その日までに、Azure Machine Learning に切り替えすることをお勧めします。
2021 年 12 月 1 日以降、新しい Machine Learning Studio (クラシック) リソースは作成できません。 2024 年 8 月 31 日まで、既存の Machine Learning Studio (クラシック) リソースを引き続き使用できます。
- ML Studio (クラシック) から Azure Machine Learning への機械学習プロジェクトの移動に関する情報を参照してください。
- Azure Machine Learning についての詳細を参照してください。
ML Studio (クラシック) のドキュメントは廃止予定であり、今後更新されない可能性があります。
主成分分析を使用して、異常検出モデルを作成します
カテゴリ: 異常検出
注意
適用対象: Machine Learning Studio (クラシック) のみ
類似のドラッグ アンド ドロップ モジュールは Azure Machine Learning デザイナーで使用できます。
モジュールの概要
この記事では、Machine Learning Studio (クラシック) の PCA ベースの異常検出モジュールを使用して、プリンシパル コンポーネント分析 (PCA) に基づいて異常検出モデルを作成する方法について説明します。
このモジュールは、有効なトランザクションなど、1 つのクラスからトレーニング データを簡単に取得できるが、対象となる異常の十分なサンプルを取得するのが困難なシナリオでモデルを構築するのに役立ちます。
たとえば、不正なトランザクションを検出するには、多くの場合、トレーニングを行うのに十分な不正行為の例はないが、優れたトランザクションの例が多数含まれる。 PCA ベースの異常検出モジュールでは、使用可能な特徴を分析して "通常" クラスを構成するものを特定し、距離メトリックを適用して異常を表すケースを特定することで、問題を解決します。 これにより、既存の不均衡なデータを使用してモデルをトレーニングできます。
主成分分析の詳細
多くの場合、PCA と略されるプリンシパル コンポーネント分析は、機械学習で確立された手法です。 PCA を使用してデータの内部構造を明らかにし、データの偏差を分析できるため、探索データの分析で頻繁に使用されます。
PCA は、複数の変数を含むデータを分析することで機能します。 変数間の相関関係を探し、結果の違いを最もよく把握できる値の組み合わせを決定します。 これらの組み合わされた特徴値は、"主成分" と呼ばれる、よりコンパクトな特徴空間を作成するために使用されます。
異常検出では、新しい各入力が分析され、異常検出アルゴリズムは、正規化された再構築エラーと共に固有ベクトルに対する射影を計算します。 正規化されたエラーは、異常スコアとして使用されます。 エラーのスコアが高いほど、より異常なインスタンスになります。
PCA のしくみと異常検出の実装の詳細については、次の論文を参照してください。
プリンシパル コンポーネント分析用のランダム化されたアルゴリズム。 Rokhlin、Szlan および Tygert
ランダム性を持つ構造の検索: 近似行列分解を構築するための Probabilistic Algorithms (PDF ダウンロード) Halko、Martinsson および Tropp。
PCA 異常検出を構成する方法
PCA ベースの異常検出モジュールを Studio (クラシック) の実験に追加します。 このモジュールは、[異常検出] Machine Learningの [モデルの初期化] の下に表示されます。
PCA ベースの異常検出モジュールの [プロパティ] ウィンドウで、[トレーニング モード] オプションをクリックし、特定のパラメーター セットを使用してモデルをトレーニングするか、パラメーター スイープを使用して最適なパラメーターを見つけるかを指定します。
Single Parameter (単一パラメーター) : モデルの構成方法を決めている場合はこのオプションを選択し、特定の値のセットを引数として渡します。
[パラメーターの範囲]: 最適なパラメーターが確認できない場合に、モデルハイパーパラメーターの調整モジュールを使用してパラメーター スイープを使用する場合は、このオプション を選択 します。 トレーナーは、指定したさまざまな設定を反復処理し、最適な結果を生成する設定の組み合わせを決定します。
PCA で使用するコンポーネントの数、 PCA コンポーネントの数の範囲: 出力する出力機能またはコンポーネントの数を指定します。
含めるコンポーネントの数の決定は、PCA を使用した実験設計の重要な部分です。 一般的なガイダンスは、変数と同じ数の PCA 成分を含めないようにすることです。 代わりに、少ない数のコンポーネントから始めて、いくつかの条件が満たされるまでコンポーネントを増やす必要があります。
最適な値が不明な場合は、 [パラメーター範囲] オプションを使用して異常検出モデル をトレーニングすることをお勧 めします。
出力成分の数が、データセットで使用できる特徴列の数より小さい場合に、最適な結果が得られます。
ランダム化された PCA トレーニング中に実行するオーバーサンプリングの量を指定します。 異常検出の問題の場合、不均衡データでは、標準の PCA 手法を適用することが困難になります。 オーバーサンプリングの量を指定することで、ターゲット インスタンスの数を増やすことができます。
1 を指定した場合、オーバーサンプリングは実行されません。 1 より大きい値を指定すると、モデルのトレーニングに使用する追加のサンプルが生成されます。
パラメーター スイープを使用するかどうかに応じて、次の 2 つのオプションがあります。
- ランダム PCA のオーバーサンプリング パラメーター:通常クラスに対する少数派クラスのオーバーサンプリングの比率を表す、単一の整数を入力します (単一パラメータートレーニングメソッド を使用する 場合に使用できます)。
- ランダム化された PCA で使用されるオーバーサンプリング パラメーターの範囲: 試してみる一連の数値を入力するか、範囲ビルダーを使用してスライダーを使用して値を選択します。 (パラメーター範囲トレーニングメソッド を使用する場合 にのみ使用できます)。
注意
オーバーサンプリングされたデータ セットは表示できません。 PCA でオーバーサンプリングを使用する方法の詳細については、「テクニカル ノート」 を参照してください。
[入力機能の平均正規化を有効にする]: すべての入力特徴を平均 0 に正規化するには、このオプションを選択します。 PCA の目的は変数間の分散を最大化することであるため、一般に、PCA ではゼロへの正規化またはスケーリングをお勧めします。
既定では、このオプションはオンになっています。 別のメソッドまたはスケールを使用して値が既に正規化されている場合は、このオプションをオフにします。
Connect付けられたトレーニング データセットと、トレーニング モジュールの 1 つを作成します。
- [Create trainer mode]\(トレーナー モードの作成\) オプションを [Single Parameter]\(単一パラメーター\) に設定した場合は、異常検出モデルのトレーニング モジュールを使用します。
- [トレーナー モードの 作成] オプションを [パラメーターの範囲] に設定した場合は、モデルハイパーパラメーターの調整 モジュールを使用 します。
注意
異常検出モデルのトレーニングにパラメーター範囲を渡す場合、パラメーター範囲リストの最初の値だけが使用されます。
単一のパラメーター値のセットを Tune Model Hyperparameters モジュールに渡した場合、各パラメーターの設定範囲が必要な場合、その値は無視され、学習器の既定値が使用されます。
[パラメーター 範囲] オプション を選択し、任意のパラメーターに 1 つの値を入力した場合、他のパラメーターが値の範囲にわたって変更された場合でも、その 1 つの値がスイープ全体で使用されます。
実験を実行するか、モジュールを選択して [選択した 実行] をクリックします。
結果
トレーニングが完了したら、トレーニング済みのモデルを保存するか、モデルのスコア付けモジュールに接続して異常スコアを予測できます。
異常検出モデルの結果を評価するには、いくつかの追加の手順が必要です。
両方のデータセットでスコア列を使用できる
異常検出モデルを評価し、"比較するスコア付けされたデータセットにスコア列はありません" というエラーが表示される場合は、ラベル列を含むが確率スコアを含む一般的な評価データセットを使用しています。 異常検出モデルのスキーマ出力に一致するデータセットを選択する必要があります。これには、スコア付けラベルとスコア付け確率列が含まれます。
ラベル列がマーク済みである
実験グラフでは、ラベル列に関連付けられているメタデータが削除される場合があります。 この場合、モデルの評価モジュールを使用して 2 つの異常検出モデルの結果を比較すると、"スコア付けされたデータセットにラベル列はありません" または "比較するスコア付けされたデータセットにラベル列はありません" というエラーが表示される場合があります。
このエラーは、モデルの評価モジュールの 前にメタデータの編集 モジュール を追加することで回避 できます。 列セレクターを使用してクラス列を選択し、[フィールド] ドロップダウン リストで [ラベル] を選択します。
さまざまなモデルの種類からスコアを正規化する
PCA 異常検出モデルからの予測は、常に [0,1] の範囲内です。 これに対し、 One-Class SVM モジュールからの出力は、リバウンドされていない可能性がある未調整スコアです。
したがって、異なるアルゴリズムに基づいてモデルを比較する場合は、常にスコアを正規化する必要があります。 さまざまな異常検出モデル間の正規化Azure AI Gallery例については、次の例を参照してください。
例
異常検出で PCA がどのように使用されるのかの例については、次のAzure AI Gallery。
- 異常検出: 信用リスク: データの外れ値を見つける方法を示します。 この例では、パラメーター スイープを使用して最適なモデルを検索します。 その後、そのモデルを新しいデータに適用して、不正行為を表す可能性のある危険なトランザクションを特定し、2 つの異なる異常検出モデルを比較します。
テクニカル ノート
このアルゴリズムでは、PCA を使用して、通常のクラスを含むサブスペースを近似します。 部分空間は、データ共分散行列の上位の固有値に関連付けられている固有ベクトルにまたがります。 異常検出機能では、新しい入力ごとに、まず、固有ベクトルへの射影を計算してから、正規化された再構築エラーを計算します。 このエラーが異常スコアです。 エラーのスコアが高いほど、より異常なインスタンスになります。 通常の空間の計算方法の詳細については、Wikipedia: プリンシパル コンポーネント分析に関する ページを参照してください。
モジュールのパラメーター
名前 | 種類 | Range | 省略可能 | 説明 | Default |
---|---|---|---|---|---|
トレーニング モード | CreateLearnerMode | List:Single Parameter|Parameter Range | 必須 | 単一パラメーター | 学習器オプションを指定します。 手動ですべての値を指定するには、SingleParameter オプションを使用します。 調整可能なパラメーターをスイープするには、ParameterRange オプションを使用します。 |
PCA で使用する成分数 | Integer | mode:Single Parameter | 2 | PCA で使用する成分数を指定します。 | |
ランダム PCA のオーバーサンプリング パラメーター | Integer | mode:Single Parameter | 2 | ランダム PCA トレーニングの精度パラメーターを指定します。 | |
特徴の平均正規化の入力を有効にします | ロジックの種類 | 一覧: True|False | 必須 | False | 入力データが 0 平均に正規化されているかどうかを指定します。 |
PCA の成分数の範囲 | ParameterRangeSettings | [1;100] | mode:Parameter Range | 2;4;6;8;10 | PCA で使用する成分数の範囲を指定します。 |
ランダム PCA で使用するオーバーサンプリング パラメーターの範囲 | ParameterRangeSettings | [1;100] | mode:Parameter Range | 2;4;6;8;10 | ランダム PCA トレーニングで使用する精度パラメーターの範囲を指定します。 |
出力
名前 | 型 | 説明 |
---|---|---|
未トレーニング モデル | ILearner インターフェイス | トレーニングされていない PCA ベースの異常検出モデル |
例外
例外 | 説明 |
---|---|
エラー 0017 | 指定した 1 つ以上の列の型が現在のモジュールでサポートされていない場合に、例外が発生します。 |
エラー 0062 | 学習器の種類が異なる 2 つのモデルを比較しようとすると、例外が発生します。 |
エラー 0047 | モジュールに渡された一部のデータセットの特徴列の数が少なすぎる場合、例外が発生します。 |
Studio (クラシック) モジュールに固有のエラーの一覧については、「エラー コードMachine Learning参照してください。
API の例外の一覧については、「エラー コードMachine Learning REST API参照してください。