あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

Pythonでbox-cox変換をしたい

正規分布していなやつを、正規分布の形に近づける操作を一般化しているbox-cox変換のやりかたです。

社会事象は正規分布しておらず、対数変換などで強引に近い形にすることもあると思われます。
もちろん正規分布が仮定されないモデルを使うというてもありますが、この変換を一般化したbox-cox変換のやり方も覚えておくことにします。

コード

sklearnのPowerTransformerとscipyのboxcoxがあります。前者はちょっと制約がキツかったので、まず後者だけ試します。

この記事でつかったワイブル分布で生成したデータをbox-cox変換します。 esu-ko.hatenablog.com

#データの生成
import numpy as np

a = 1.5
s = np.random.weibull(a, 1000000)

#可視化
import matplotlib.pyplot as plt
plt.hist(s)


#boxcox変換
from scipy.stats import boxcox
d = boxcox(s)
plt.hist(d)
f:id:esu-ko:20200726151034p:plainf:id:esu-ko:20200726151041p:plain

左から右に変換されました。