QQプロットで正規分布の確認

分布が正規分布かの確認をQQプロットで行う。



(1) そもそも、なぜ正規分布を確認するか?

多くの機械学習モデル(特に線形モデル)は、正規分布を仮定して出来ている。なので、各変数の分布が正規分布かどうか確認して、右に裾が長いときなど、対数変換で分布を正規分布に近づけたほうが、モデリングがうまくいく。

※ 正規分布の確認は、独立変数だけではなく、従属変数に対しても行う。



(2) QQプロットでの確認例

以下は、kaggle: House Pricesの'SalePrice'データ

  # SalePriceのヒストグラム

  sns.distplot(df_train['SalePrice'], fit=norm)

  fig = plt.figure()

  # QQプロットで正規分布に近いかを確認

  res = stats.probplot(df_train['SalePrice'], plot=plt)

・SalePriceのヒストグラム

・以下が、SalePriceのQQプロット

赤い直線に沿っていれば、正規分布だが、赤い直線に沿っていないので正規分布と言えない。

そこで、対数変換してみる。

# 対数変換(下では、np.log()でそのまま値を変換しているが、値に0がある時は、+1してlog0を避けること。 np.log(df[] + 1)  )

df_train['SalePrice'] = np.log(df_train['SalePrice'])

# 変換結果の可視化

sns.distplot(df_train['SalePrice'], fit=norm)

fig = plt.figure()

res = stats.probplot(df_train['SalePrice'], plot=plt)

ヒストグラムも正規分布に補正されており、QQプロットも直線になっている。



(3) 等分散性

各変数を正規分布に近づけることで、変数間の分散を揃えることができ、結果として等分散(homoscedasticity)に近づく。

・SalePriceとGrLivArea変数のどちらも正規分布に補正する前の散布図

 GrLivAreaの値が1000近辺はSalePriceの分布の広がりが狭いが、GrLivAreaの値が大きくなるにつれて、SalePriceの分布が広がっており、GrLivAreaの値ごとのSalePriceの分散は異なっていることがわかる。

・SalePriceとGrLivArea変数のどちらも対数変換かけて、正規分布に近づけた場合の散布図

分布が円錐から長方形になっており、等分散性がもたらされていることがわかる。なので、各変数を正規分布に近づけると、等分散性をもたらすことができる。

機械学習Tips保管庫

データ解析、機械学習のための学習内容の保管庫。復習用。

0コメント

  • 1000 / 1000