rohaniのブログ

ゆるっと自然言語処理奴。ときどき工作系バイト。

データの観察と前処理について読んだのでまとめる(3)

教材にするKernel

COMPREHENSIVE DATA EXPLORATION WITH PYTHON
Pedro Marcelino - February 2017

データからターゲットを取り出す前の段階、すなわち「データをよく見る」段階について解説している。

ノート

4.Basic cleaning

Outliers の処理

Outliers(外れ値)は、モデルや貴重な情報源に著しく悪影響を与える可能性がある。

一変数について見る

ある確率変数に着目し、その分布における外れ値を見つける。

  1. データを平均0,標準偏差1になるようStandardization(標準化)する。
  2. 標準化したデータを小さい順・大きい順に見る。
  3. その値は平均0/他のサンプルからどれだけ離れているか?
  4. 外れ値を決定する閾値を決める。いつでも外れ値があるとは限らない。

Python tips...

  • sklearn.preprocessing.StandardScaler().fit_transform(data)
    • { x^{(i)}_{std} = \frac{x^{(i)}-{\mu}}{\sigma} }
    • dataからパラメータ {\mu, \sigma}を求める
    • dataを標準化する

二変数について見る

ある二つの変数の関係の中における外れ値を見つける。

  1. 散布図を描く
  2. 一つだけ外れているようなサンプルはないか?

5.Test assumptions

そのデータを多変量解析するための、統計的な前提条件が満されているかを確認する。

Hair et al. (2013) によると、確認すべきは以下の4項目である。

Normality

そのデータは正規分布に従っているか?

従属変数(1変数)についてのみ確かめるのが効率的。
統計的検定法などのいくつかは、データが正規分布に従うことを仮定しているので、これが成り立たないとそれらの検定ができない。
一般的に、データ数が多い時はNormalityはあまり大きな問題にならない(らしい。データ数が多いと正規分布に従うことが多いからかな)。

  • Histogramの尖度と歪度に着目
  • 正規分布を表す線を表示し、データがそれに近いか見る
  • scipy.stats.probplot()を用いると、probability plotを描画できる。
    これは、データがある確率分布(default=normal distribution)に従っているかどうかを見ることができるもの。

正規分布に従っていないときでも、 例えば正の歪度がある場合にはlogをとることで解決する場合が多い。
このとき、欠損値があるとlogがとれないので、欠損値を取り除く処理が必要になる。

Homoscedasticity(等分散性)

従属変数と独立変数の系列について、その全ての範囲での分散が等しいという性質。ふたつの群の分布が同じということ。

等分散性検定と調べると色々と出てくるが、単純に散布図を描くと見た目で分かる。
重回帰分析・分散分析では等分散性を仮定するので、これが成り立たないと困る。
ちなみに、全確率変数がNormalityを持っていればHomoscedasticityも持っている。

散布図を描くと、 分散不均一な場合には、円錐型(一端では分散が小さく、反対の端では分散が大きくなる)やダイアモンド型(中央の分散が大きくなる)などが表れる。

Linearity(線形性)

散布図を見て確かめるのが速い。
線形でない場合はデータ変換を検討する価値がある。

Absence of correlated errors

(相関エラーの欠落)???

質的変数をダミー変数に置換

質的変数を計算機で扱うときには、"女性","男性" → 1,0 という変換をする必要がある。
pandas.get_dummies() を使うと非常に簡単に実現できる。

参考

メモ

これで、教材Kernel "COMPREHENSIVE DATA EXPLORATION WITH PYTHON
Pedro Marcelino - February 2017" は終了。

データの観察と前処理について、実際にコードを走らせながら、可視化したデータを眺めながら学ぶことができた。
原文は、dance floor で気になる girl を見つけ、dinner に誘う前に戦略を立てる...という愉快な比喩表現でストーリー化されていて、非常に面白い。
Pedroさんすごい大感謝。

このKernelは「データを見る」ことを解説したものであって、参加タスクの目的「データから予測する」はこの先にある。
次は「予測」に取り組んでいるKernelを読んでいきたいな。

今日も勉強おつかーれさんでした。
f:id:ojho0318:20180719230739p:plain
ダ鳥獣戯画の兎さん