BoxCox変換

Box-Cox変換とは、数値データを正規分布に近づける変換手法のひとつです。負の値が含まれるデータには適用ができない点、また正規分布と比較して分布が異なりすぎている場合は適用しても有効な結果を得られない点に注意してください。

以下のような変換を数値に対して適用して、分布の形を正規分布に近づけます。 $ y = \begin{cases} \displaystyle \frac{x^\lambda - 1}{\lambda} & \lambda \neq 0\ \log x & \lambda = 0\end{cases} $

式の形から、この変換を数値データに適用するには、$x$は必ず非負の値を取る必要があります。負の値が含まれる場合には、全てを0より大きくするために定数を足すかYeoJonson変換を使用することが考えられます。

from scipy import stats
import matplotlib.pyplot as plt

x = stats.loggamma.rvs(1, size=1000) + 10
plt.hist(x)
plt.show()

png

import numpy as np
from scipy.stats import boxcox

plt.hist(boxcox(x))
plt.show()

png