見出し画像

統計的な検定を用いた特徴量の選択

表題の内容について学習する上で参考にしたものをまとめます。

各変数についてEDAを行ない、以下のようなユースケースが発生したことを想定しています。yが目的変数、xが説明変数の一つです。

ここで説明変数 X (soldout) はyに対して、有意な特徴量なのかどうやって判断するねん!っていうのが主題です。 

検定の考え方を適用

統計的な考え方で、xの値によるyの差分が有意な差があるかどうかを判断します。ここで出てくるのが検定の考え方です。

2値検定の分類

下記のチャートのように、目的変数の分布によって適応する検定の方法が変わります。

適応する検定の判定チャート

使用する検定の判断方法

①正規分布かの判断方法

ヒストグラムを描く
左のグラフでは左右対称の分布をしており正規分布に近しい、右のグラフでは左に分布が偏っており、正規分布とは言えない。

X (soldout) と y のヒストグラムを描写。正規分布にしたがっているとは言えない。

正規性の検定を行う
より厳密に正規分布かをジャッジするときに活用(詳細は割愛)
コルモゴロフ=スミルノフ検定
・リリフォース検定
・シャピロ=ウィルク検定
・適合度の検定
などが知られている。

②等分散かの判断方法

F検定を行う

X (soldout) と y で等分散性の検定を行う

#soldoutの値ごとにyの値を格納
a = train[train['soldout'] == 0]['y']
b = train[train['soldout'] == 1]['y']

# 等分散性の検定を行う。
scipy.stats.bartlett(a,b)

BartlettResult(statistic=0.7938899092209073, pvalue=0.3729264880979565)

有意水準を5%とすると、p値が0.37より帰無仮説を棄却できない。等分散性の検定では、帰無仮説を二つの群の分散は等しい。と置いているので、分散が異なるとは言えない ( ≒ 等分散である )という結果が得られる。

差の検定の実施

③2標本のt検定

等分散を前提にしているため、equal_var = True

#ライブラリのimport
import scipy.stats as st
#t検定の実施
t, p = st.ttest_ind(a, b, equal_var=True)
#検定結果を出力
print('対応なしt検定')
print(f'p値 = {p:.3f}')
print(f't値 = {t:.2f}')

④welchのt検定

分散が違うことを前提にしているため、equal_var = False

#ライブラリのimport
import scipy.stats as st
#welchのt検定の実施
t, p = st.ttest_ind(a, b, equal_var=False)
#検定結果を出力
print('welchのt検定')
print(f'p値 = {p:.3f}')
print(f't値 = {t:.2f}')

⑤ノンパラメトリック法

・ウィルコクソンの順位和検定
・マンホイットニーのU検定(メディアン検定)

x(soldout)とyは正規分布にしたがわなかったため、今回はマンホイットニーのU検定を採用して、検定を行う。

#ライブラリのimport
import scipy.stats as st
#マンホイットニーのU検定を行う
st,p =  st.mannwhitneyu(a, b, alternative='two-sided')
#検定結果を出力
print('マンホイットニーのU検定')
print(f'p値 = {p:.3f}')

マンホイットニーのU検定
p値 = 0.056

有意水準を5%とすると、p > 0.05より帰無仮説(Xの値に対してyは同じである)を棄却できない。つまり、X(soldout)はyに対して、有意な特徴量ではない。という結論が導けた。

参考リンク

感想

モデリングのために、特徴量の選択するときに、それぞれの説明変数に対して、箱ひげ図とか書いて、差ありそう。差なさそう。を感で選んで、評価指標によって入れる外すを決めてたので、ちゃんとしたアプローチをしたく、まとめました。

ランダムフォレスト系なら全部突っ込んでも、問題なかったりするけど、重回帰、ロジ回帰あたりは影響出たりする印象があるので、参考になれば。
個人的には、統計でやってることがデータサイエンスの文脈で繋がってきておもしろかったです。

この記事が気に入ったらサポートをしてみませんか?