参考サイト:
■残差が以下の4つを満たしている必要がある。
- 正規性(残差自体が正規分布している->従属変数(の残差)が正規分布かどうか)
- 等分散性(独立変数にかかわらず分散が一定)
- 線形性(従属変数と独立変数の関係は直線で近似できるかどうか)
- 独立性(残差のそれぞれが独立かどうか)
残差:従属変数の実際の値と、回帰式で計算された予測値の差。
■確認方法:
- 正規性ー残差が正規分布かどうかは、従属変数が正規分布かどうかで確認。以下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. 独立性は、独立変数間に相関が高い変数を削除するなどで対応する。
0コメント