LoginSignup
noname20220504
@noname20220504

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

異常検知におけるBox-Cox変換の要否条件・長所&短所について教えてください。

解決したいこと

異常検知におけるBox-Cox変換の要否条件、メリット・デメリット

発生している問題・エラー

ある物理量について、正常な範囲(基準値μ±2σを超えたら異常とみなす)を決めるプログラムを作っています。
元のデータが正規分布に従わない(=Shapiro-Wilkの検定でp>0.05になる)ため、
(1)Box-Cox変換により、一旦正規分布に従う分布に変換する。
(2)(1)で変換した標本集合について、μ±2σを求める。
(3)(2)で求めたμ±2σを逆変換して、基準値μ±2σを求める。
という手順で、正規性を考慮して基準値を求めています。

一方で、上記の手順で基準値を決めると、変換せずに基準値を決めた場合と比べて、実際には異常なのに正常と誤判定する割合が高くなってしまいます。

このように理由として、単に標本数が少ない(今回のケースでは、50~150程度)ことによるものなのか、Box-Cox変換がそもそも不要な事例なのか、判断がついていません。
Box-Cox変換の要否に関わる条件や同変換の長所・短所があったら、教えてください。

該当するソースコード

#Box-Cox変換(x:変換前の標本集合)
x_boxcox, fitted_lambda, alpha = boxcox(x, lmbda=None, alpha=0.05)

#Shapiro-Wilkの検定(x_boxcox:変換後の標本集合)
shapiro = stats.shapiro(x_boxcox)
print("p_value", shapiro[1]) #p値
print("lambda in Box-Cox", fitted_lambda) #Box-Cox変換の係数λ
nnn = 2 #信頼区間(ここでは95.4%を仮定)

#基準値を計算
threshold_boxcox = (x_boxcox.mean()+nnn*(x_boxcox.std()))
threshold = inv_boxcox(threshold_boxcox, fitted_lambda) #逆変換
print("threshold", threshold)

自分で試したこと

参考のためBox-Cox変換の前後での標本集合のヒストグラムの例を示します。
image.png

image.png

0

No Answers yet.

Your answer might help someone💌