回帰分析の前提について

参考サイト:


■残差が以下の4つを満たしている必要がある。

  1. 正規性(残差自体が正規分布している->従属変数(の残差)が正規分布かどうか)
  2. 等分散性(独立変数にかかわらず分散が一定)
  3. 線形性(従属変数と独立変数の関係は直線で近似できるかどうか)
  4. 独立性(残差のそれぞれが独立かどうか)

  残差:従属変数の実際の値と、回帰式で計算された予測値の差。



■確認方法:

  1. 正規性ー残差が正規分布かどうかは、従属変数が正規分布かどうかで確認。以下2つの方法がある
      1. ヒストグラムから歪度と尖度をチェック
      2. 正規分布にどれだけ近いかを分布図でチェック

 分布が正規分布で無い時は、対数変換などで正規分布に近づける

以下例)House Prices: Advanced Regression Techniquesの従属変数(SalePrice)の分布

コード

以下の2グラフのコード

# SalePriceのヒストグラム

from scipy.stats import norm

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

fig = plt.figure()

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

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


グラフ

黒い線は比較用の正規分布。青い線は、実際の分布グラフ

qqプロットより正規分布でないことがわかる

次に、歪度と尖度を見てみる

print("歪度: ", df_train['SalePrice'].skew())

print("尖度: ", df_train['SalePrice'].kurt())

> 歪度: 1.8828757597682129  -> 正なので右に裾が伸びている

> 尖度: 6.536281860064529 -> 0よりはるかに大きいので尖っている


よって、対数変換により正規分布に近づける。

# 対数変換

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

対数変換結果後のグラフ

さらに、qqプロットを見ると直線に近づいているのがわかる。

また、重要な独立変数も正規分布か確認し、正規分布に近づける。

リビングエリア面積の分布

右に裾が長く、正規分布から幾分ずれている。また、以下のqqプロットも直線では無いので、正規分布と言えない。

以下は、対数変換後の分布

qqプロットでも直線に近づいているのがわかる。


2. 等分散性(独立変数にかかわらず分散が一定)

独立変数と従属変数の散布図で関係性を見ることで、等分散性かどうか確認できる。

以下は、住宅価格(SalePrice)とリビングエリアの面積(GrLivArea)の関係

分布が円錐型になっており、分散が均一で無いことがわかる

両変数を対数変換し、正規分布に近づけたことで、以下のように各GrLivArea値でのSalePriceの分布が均等に均されたことが以下の図よりわかる。

両者を対数変換した後の散布図

同じように、地下室のサイズ(TotalBsmtSF)とSalePriceをそれぞれ対数変換する前と後の分布

対数変換する前 (0値は除外している)

対数変換後(上記は、TotalBsmtSFの0値以外の値を対象に対数変換している。)のグラフ

分布が円錐型から円筒型に変わり、分散が均一になったのがわかる。



3. 線形性は省略

4. 独立性は、独立変数間に相関が高い変数を削除するなどで対応する。



■回帰分析に関する学習ノート

機械学習Tips保管庫

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

0コメント

  • 1000 / 1000