値の異常さを定量的に扱、異常値を算出する
閾値を設定して、ここから大幅にずれるものを異常とあつかう
閾値が7で11となったら異常
閾値が7で5となったら正常と扱う
閾値は数値ではなく割合で算出
正しいものを以上だと判断する事を誤報率と呼ぶ
誤報率は以下の手法で計算する
閾値thに対して異常度xが X > th の時に異常と判断する
1 2 3 4 5 6 7 8 9 |
import numpy as np # 異常度X、ラベルy、閾値threshold X = np.array([17, 2, 19, 7, 6, 19, 4, 8, 2, 1]) y = np.array([ 1, 0, 1, 1, 0, 1, 0, 0, 0, 0]) threshold = 2 # 誤報率の計算 err_rate = X[(X > threshold) & (y == 0)].size / X[X > threshold].size print(err_rate) |
>0.42857142857142855
まずXの配列の中から2を超えるものが以上なので9個中8個が該当
その8個の内Yのラベル(1が異常と判断され0が正常と判断された)が0であるものは
正常であると判断したにも拘わらず異常だったという事になる
この数は上記では5個になる
err_rateはXの配列の中から閾値である2を超えるものかつYが0であるものの個数を出し
それをXの配列の中から閾値である2を超えるもので割るという計算で
誤報率を計算する
コメントを残す