Udemyコースで教えてもらったLinear Regressionの基本の流れ データクリーニング
基本の流れは大きく2つのパートに分かれていました。
前半 データクリーニング
後半 予測
です。
予測はCoursera Machine Learningの内容に入っていましたが、
データクリーニングは入っていなかったので面白かったです。
前半のデータクリーニングは大まかに6Stepとなっていました。
Step1 一点一様のような予測に影響を与えなさそうなデータを削除する
4000のSampleがあって、1行に3500種類があるようなデータ
Step2 5%未満なら欠損値を削除する
Step3 各要素ごとに正規分布がどうか確認する
Step4 1%の外れ値を削る
Step5 最小二乗法の確認
Step6 カテゴリー変数の設定
How編
Step1 一点一様のような予測に影響を与えなさそうなデータを削除する
describe関数(include='all')で記述統計量のfreqをみる。
freq/データ数が9割を超えているので一点一様とみなせる
data.drop(["列名”],axis=1)で削除したデータが作れる
Step2 5%未満なら欠損値を削除する
isnull().sum()関数で欠損値の数を見る。
5%以下なら削除して前に進む。
data.dropna(axis=0)で欠損値を削除したデータが作れる
Step3 各要素ごとに正規分布がどうか確認する
sns.displot(data["列名"])でみる
記述統計量と見比べて外れ値の考察をする
Step4 1%の外れ値を削る
q=data["列名”].quantile(0.99)で99%の区切りの値を設定する
data[data["列名"]<q)]でqより小さい値だけが残る
=上位1%が外れて99%が残ったことになる
グラフでみるとこうなる
取り除く前
取り除いた後
qの実験。99%と98.9%と99.1%の比較
(参考)
外れ値を削除したらIndexをリセットする
リセット前
3867行なのにインデックスは4344までやっている
リセット後
Step5 最小二乗法の確認
確認項目は全部で5つある
1/5 線形の確認 散布図で確認。線形性がなければ対数変換。
対数変換
基データに足す
2/5 内在性の確認
予測結果とSampleに比例のような相関があるかないかの確認なので
結果が出るまで分からない
3/5 正規性と同分散性の確認
①正規性②平均0の確認、Udemyに実践はなかった。。。
③同分散性 値が高いところと値低いところで平均からの
離れ具合が同じかどうか
対数変換することで担保されているというあっさりしたコメントだった。
4/5 自己相関性 時系列を扱うデータにあてはまりやすい。
Udemyの練習データは時系列でなかったのであっさりスルー
StatsModelのサマリー表に出てくる
タービンワトソンで確認する方法があるという説明あり
5/5 -多重共線性 StatsModelのVIFで確認する
VIFで多重共線性があると見えるものは削除
Step6 カテゴリー変数の設定
pd.get_dummies(data,drop_first = True)で作成する
drop_firstは重要。Nカテゴリーであれば、N-1のダミー変数の作成の必要がある。
そうしないと多重共線性になってしまう。
なのでN-1のダミー変数を作成した後にVIFを再度確認する
Step1-6で削除する行が出てきた場合は
data.drop(["列名”,axis=1])で削除していく。
全部終了したら、yを先頭にして並べ替える
以上がUdemyのコースで教えてもらったデータクリーニングの流れでした。
次回Courseraのデータ例に当てはめてみたいと思います!