異常検出-統計的手法

1.統計-テール信頼性テスト

正規分布は、統計的テール信頼区間テストやその他の分野で幅広い用途があります。統計的テール信頼区間テストでは、データ値のセットの極値が正規分布に従って決定されます。正規分布の仮定は、現実の世界では非常に一般的です。これは、(前のセクションで説明したように)ランダムサンプルの合計として表される変数だけでなく、さまざまなランダムプロセスによって生成される多くの変数にも当てはまります。平均μと標準偏差σの正規分布の密度関数fx(x)は、次のように定義されます。
ここに画像の説明を挿入
場合によっては、モデル分布の平均μと標準偏差σが既知であると見なすことができます。これは、多数のデータサンプルを使用してμとσを正確に推定できる場合です。その他の場合、μとσはドメイン知識から取得できます。次に、観測値xiのz値ziは次のように計算できます。
ここに画像の説明を挿入
正規分布は(他のパラメーターなしで)z値の関数として直接表すことができるため、点xiのテール確率は次のように表すこともできます。 ziの関数。実際、z値は、スケールシフトのある正規確率変数、つまり、平均値が0で分散が1の標準正規分布に対応します。したがって、累積標準正規分布を直接使用して、ziの値でのテール確率の正確な値を決定できます。実用的な観点から、この分布は閉じた形で存在しないため、正規分布テーブルを使用して、さまざまなzi値と確率をマッピングします。これにより、統計的な有意水準が得られます。これは、データポイントが外れ値である確率として直接解釈できます。基本的な仮定は、データが正規分布によって生成されることです。

1.1t検定

前述の説明は、モデル分布の平均と標準偏差が多数のサンプルから非常に正確に推定できることを前提としています。ただし、実際には、使用可能なデータセットは小さい場合があります。たとえば、20個のデータポイントのサンプルの場合、平均と標準偏差を正確にモデル化することははるかに困難です。この場合、統計的有意性検定を正確に実行するにはどうすればよいですか?
スチューデントのt分布は、この状況での異常をモデル化する効果的な方法を提供します。この分布は、パラメーターによって定義された自由度νの数です。これは、厳密に定義された既存のサンプルサイズです。自由度が1000より大きい場合、t分布は正規分布に非常に近くなります。t分布が∞になる傾向がある場合、t分布は正規分布に収束します。自由度(またはサンプルサイズ)が少ない場合、t分布は正規分布と同様の釣鐘型の曲線になりますが、裾は重くなります。裾が重いと、小さいサンプルからモデル(正規)分布の平均と標準偏差を正確に推定できないために統計的有意性が失われるため、これは非常に直感的です。
t分布は、いくつかの独立した同一分布の標準正規分布の関数として表されます。自由度の数に対応するパラメータνがあります。これにより、この正規分布の数とそれが表す数が決まります。パラメータνはn-1に設定されます。ここで、nは有効なサンプルの総数です。u 0 ...uνをν+ 1とすると、平均と単位標準偏差がゼロの独立した同一分布の正規分布になります。この正規分布は、標準正規分布とも呼ばれます。次に、t分布の定義は
ここに画像の説明を挿入
次のとおりです。少数のサンプルx 1 ... xnを使用した極値検出のプロセスは次のとおりです。まず、サンプルの平均と標準偏差を推定します。次に、平均と標準偏差を使用して、サンプルから直接各データポイントのt値を計算します。t値の計算方法はz値の計算方法と同じです。(n-1)自由度t分布の累積密度関数に従って、各データポイントのテール確率を計算します。正規分布と同様に、この目的のために標準化されたテーブルがあります。実用的な観点から、1,000を超えるサンプルがある場合、t分布(少なくとも1,000自由度)は正規分布に非常に近いため、正規分布は非常に良い近似として使用できます。

1.2箱ひげ図で極値を視覚化する

一変量の極値を視覚化する興味深い方法は、箱ひげ図または箱ひげ図を使用することです。この方法は、ポイントに値する外れ値を視覚化する場合に特に役立ちます。箱ひげ図では、単変量分布の統計が5つの量に要約されています。これらの5つの量は、「最小/最大」(ひげ)、上位および下位の四分位数(ボックス)、および中央値(ボックスの中央の線)です。非標準的な方法で定義されているため、数量の見積もりを2つ添付します。上位四分位数と下位四分位数の間の距離は、四分位範囲(IQR)と呼ばれます。「最小」と「最大」は、ひげの位置を定義するための(非標準の)剪定方法で定義されます。上位四分位値(ボックスの上端)に1.5 IQRを超えるポイントがない場合は、上部ウィスカーが真の最大値です。それ以外の場合、上部ウィスカーはボックスの上端からIQRの1.5倍に設定されます。完全に同様のルールが下部ウィスカーにも適用され、ボックスの下端から1.5IQRに設定されます。正規分布データの特殊なケースでは、上位四分位数よりも大きい1.5 IQR値に対応する距離は、標準偏差の2.7倍です。したがって、ウィスカの位置は、正規分布の3σカットオフポイントとほぼ同じです。

2.ヒストグラムに基づく技術

ヒストグラムは、密度ベースの要約に空間分割法を使用します。単変量データの最も単純なケースでは、データは最小値と最大値の間で等しい幅のボックスに離散化され、各ボックスの頻度が推定されます。非常に低い頻度のビンにあるデータポイントは、外れ値として報告されます。多変量データのコンテキストでは、この方法は2つの異なる方法で一般化できます。

  • 外れ値はディメンションごとに個別に計算され、スコアを集計できます。
  • 同時に、各次元の離散化が生成され、グリッド構造が構築されます。グリッド構造内のポイントの分布を使用して、まばらな領域をモデル化できます。これらのまばらな領域のデータポイントは外れ値です。
    場合によっては、ヒストグラムは(効率上の理由から)ポイントのサンプルのみに基づいていますが、すべてのポイントはポイントの場所の頻度に基づいてスコアリングされます。f 1 ... fbをb個の単変量または多変量ビンの(生の)頻度とします。これらの周波数は、これらのボックスの外れ値を表します。値が小さいほど、異常をより適切に示すことができます。場合によっては、データポイントの頻度カウント(スコア)を1つ減らすことによって調整されます。これは、カウント自体にデータポイントが含まれていると、極値分析中にその透明性が不明瞭になる可能性があるためです。この調整は、データサンプルを使用してヒストグラムを作成する場合に特に重要ですが、作成ヒストグラムの関連する単位の頻度を使用して、サンプル外のポイントをスコアリングします。この場合、サンプル内のポイントのスコアのみが1減少します。したがって、調整された周波数ポイントj(周波数fiの3番目のボックスに属する)の周波数fjは、次の式で与えられます。
    ここに画像の説明を挿入
    ここで、ij∈{0,1}は、j番目のポイントがサンプルポイントであるかどうかに応じて、インジケーター変数です。 。サンプルポイントを含むコンテナの頻度は常に少なくとも1であるため、fjは常に非負であることに注意してください。
    調整された頻度fjの対数が対数尤度スコアを表すことは注目に値します。これにより、スコアの極値分析により、変換をより適切にマークできます。正則化の目的で、j番目の点の外れ値スコアとしてlog 2(fj +α)を使用します。ここで、α> 0は正則化パラメーターです。スコアをバイナリラベルに変換するには、スチューデントのt分布または正規分布を使用して、極値分析を通じて異常に低いスコアを決定できます。これらのポイントは外れ値としてマークされます。ヒストグラムは、データの密な領域と疎な領域を要約して外れ値を計算するという点でクラスタリング手法と非常に似ています。主な違いは、クラスタリング手法がデータポイントを分割するのに対し、ヒストグラム手法はデータ空間を領域に分割する傾向があることです。同じサイズ。
    ヒストグラムベースの手法の主な課題は、最適なヒストグラム幅を決定することが難しい場合が多いことです。ヒストグラムが広すぎたり狭すぎたりすると、外れ値の最適な検出に必要な粒度のレベルに応じて度数分布モデルを確立できません。これらのボックスが狭すぎる場合、これらのボックスに分類される正規データポイントは外れ値として識別されます。一方、ボックスが広すぎると、異常なデータポイントが高周波ボックスに入る可能性があるため、外れ値として認識されません。この場合、ヒストグラムの幅を変更して、同じデータポイントに対して複数のスコアを取得することは理にかなっています。次に、これらの(対数尤度)スコアをさまざまな基本検出器で平均して、最終結果を取得します。クラスタリングと同様に、ヒストグラムベースの方法は、パラメーターの選択が異なるため、予測のばらつきが大きく、アンサンブル方法の理想的な候補になります。たとえば、RS-Hashメソッドは、グリッド領域の次元とサイズを変更し、スコアに基づいて外れ値を決定します。同様に、分離フォレストなどの最近の収集方法は、ランダムなヒストグラムと見なすことができます。このヒストグラムでは、さまざまなサイズと形状のグリッド領域が階層的かつランダムに作成されます。固定サイズのグリッド領域内のポイント数を測定する代わりに、単一のポイントを分離するために必要なグリッド領域の予想サイズの間接的な測定値が外れ値スコアとして報告されます。この方法により、固定グリッドサイズを事前に選択する問題を回避できます。
    ヒストグラムベースの手法を使用する際の2番目の課題は、それらの空間セグメンテーション方法により、クラスター異常の存在が見えなくなることです。多変量グリッドベースの方法では、グリッド構造の解像度を注意深く調整しない限り、孤立したデータポイントのセットを外れ値として分類できない場合があります。これは、グリッドの密度がその中のデータポイントにのみ依存し、表現の粒度が非常に高い場合、孤立したポイントのグループが人為的に密なグリッドユニットを作成する可能性があるためです。この問題は、グリッド幅と平均スコアを変更することでも部分的に解決できます。
    グリッド構造のスパース性と次元の増加により、ヒストグラム法は、慎重に選択された低次元の投影に従って外れ値が計算されない限り、高次元の状況ではうまく機能しません。たとえば、d次元空間には少なくとも2つのd番目の電力グリッドセルが含まれます。したがって、各セルを満たすデータポイントの数は、次元が増加するにつれて指数関数的に減少すると予想されます。回転バギングや部分空間ヒストグラムなどの一部の手法では、この問題を部分的に解決できます。ヒストグラムベースの手法には大きな可能性がありますが、最良の結果を得るには、高次元の部分空間統合と組み合わせて使用​​する必要があります。

3、HBOS

HBOSのフルネーム:ヒストグラムベースの外れ値スコア。これは単変量法の組み合わせであり、特徴間の依存関係をモデル化することはできませんが、計算速度が速く、大規模なデータセットに適しています。基本的な仮定は、データセットの各次元が相互に排他的であるということです。次に、各ディメンションをビンに分割します。ビンの密度が高いほど、異常スコアは低くなります。
HBOSアルゴリズムフロー:
1。各データディメンションのデータヒストグラムを作成します。カテゴリデータの各値の頻度をカウントし、相対頻度を計算します。異なる分布による数値データには、次の2つの方法が使用されます。
(1)静的幅ヒストグラム:標準のヒストグラム作成方法では、値の範囲内でk個の等幅ボックスが使用されます。各バケットに分類されるサンプルの頻度(相対数)は、密度(ボックスの高さ)の推定値として使用されます。
時間計算量:O(n)
(2)動的幅ヒストグラム:最初にすべての値を並べ替え、次に固定数のN / k連続値がボックスにパックされます。ここで、Nはインスタンスの総数、kはインスタンスの総数です。ボックスの数。ヒストグラムのボックス積は、インスタンスの数を表します。ボックスの幅はボックスの最初の値と最後の値によって決定されるため、すべてのボックスの寸法が同じであるため、各ボックスの高さを計算できます。これは、スパンが大きいボックスの高さが低い、つまり密度が低いことを意味します。例外は1つだけです。N/ kを超える数は同じです。現時点では、N / kを超える値です。同じボックスに入れることができます。
時間計算量:O(n×log(n))
2。次元ごとに一意のヒストグラムが計算されます。ここで、各ボックスの高さは密度の推定値を表します。次に、最大の高さを1にするために(各特徴の重みと異常値が等しくなるようにするため)、ヒストグラムが正規化されます。最後に、各インスタンスの
HBOS値は、次の式で計算されます。
ここに画像の説明を挿入
派生プロセス:
ここに画像の説明を挿入

4.まとめ

1.異常検出の統計的手法では、データ学習モデルを使用して、正常なデータオブジェクトと異常なポイントを区別します。統計的手法を使用する利点の1つは、異常検出が統計的に一貫していない可能性があることです。もちろん、それは、データに対して行われた統計的仮定が実際の制約を満たしている場合にのみ当てはまります。
2. HBOSは、グローバルな異常検出の問題に対しては十分に機能しますが、ローカルな異常を検出することはできません。ただし、HBOSは、特に大規模なデータセットでは、標準のアルゴリズムよりもはるかに高速です。

5. PyODライブラリを使用しておもちゃの例を作成し、HBOSを呼び出します

pyod.models.hbosからHBOSをインポートします

import numpy as np
import
pandas as pd import matplotlib as plt

pyod.utils.dataからimportgenerate_data、pyod.utils.exampleからevaluate_print import
Visualize

「基本パラメータ」
汚染= 0.1
n_train = 10000
n_test = 500

'このおもちゃの例
データセット' X_train、y_train、X_test、y_test = generate_data(n_train = n_train、n_test = n_test、constitution =汚染)

clf_name = 'HBOS'
clf = HBOS()
clf.fit(X_train)

'获取X_train的スコアとラベル'
y_train_pred = clf.labels_
y_train_scores = clf.decision_scores_

'获取X_test的スコアとラベル'
y_test_pred = clf.predict(X_test)
y_test_scores = clf.decision_function(X_test)

'出力結果'
print( "トレーニング結果:")
evaluate_print(clf_name、y_train、y_train_scores)
print( "テスト結果:")
evaluate_print(clf_name、y_test、y_test_scores)

トレーニング結果:
HBOS ROC:0.9892、精度@ランクn:0.9752
テスト結果:
HBOS ROC:0.9957、精度@ランクn:0.913

Visualize(clf_name、X_train、y_train、X_test、y_test、y_train_pred、y_test_pred、show_figure = True、save_figure = False)

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43595036/article/details/112548118