参考サイト:
https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/
上記サイトを訳しながら、データ前処理の基本ステップを学ぶ。
データ前処理のステップ
1. 変数の確認(特定)
2. 一変数の分析
3. 二変数の関係分析
4. 欠損値の扱い
5. 外れ値の扱い
6. 変数変換
7. 変数の創出
1. 変数の確認(特定)
まず、独立変数と従属変数を明確化。次に、各変数のタイプとカテゴリを確認する。
以下のデータを例にとり、変数の種類、データのタイプなどについて確認する。
(クリケットフラグは、クリケットをしているかしていないかのフラグ)
上記データを分類すると・・・
●変数の種類
・独立変数:「性別」、「テスト点数」、「身長」、「体重」
・従属変数:「クリケットフラグ」
●データタイプ
・文字型:「ID」、「性別」
・数値型:「クリケットフラグ」、「テスト点数」、「身長」、「体重」
●変数のカテゴリー
・カテゴリカル:「性別」、「クリケットフラグ」
・数量:「テスト点数」、「身長」、「体重」
2. 一変数の分析
ここでは、各変数を一つずつ分析する。分析方法は、変数がカテゴリカルか数量かで異なる。
●数量の変数
数量の場合、中央値の傾向や散らばり具合などを以下の統計的手法で把握する。
補:四分位範囲 ー 第1・第3四分位数の差は、四分位範囲(英: interquartile range, IQR)といい、分布のばらつきの代表値である。分布の代表値として平均値の代わりに中央値を使うときは、IQRを標準偏差や分散の代わりに使う。中央値同様、頑強で、外れ値や極端に広い裾野の影響を受けにくい。(wikiより)
●カテゴリカル変数
カテゴリカル変数の場合、度数分布表を用いて各カテゴリへの分布具合を調べる。また、各カテゴリの相対度数(全体を1とした時の各カテゴリの割合)なども利用する。可視化には棒グラフなどを利用する。
3. 二変数の関係分析
二変数分析では、それぞれの変数の関係性を分析する。まず、各変数間の関係をドメインナレッジ等を基に考え、重要性に当たりをつけてから、各変数間の関係性を調べていく。二変数の関係には、「カテゴリカルデータとカテゴリカルデータ」「カテゴリカルデータと数量データ」「数量データと数量データ」の3パターンあり、それぞれ分析手法が異なる。
●数量データと数量データ
主に散布図を用いて関係を分析する。散布図は二変数間の関係を教えてくれるが、どれくらい強い関係かは判断しずらい。そこで、散布図以外に、相関係数を用いて、関係の強さを数値化する。
・相関係数 = 変数xとyの共分散 / (xの標準偏差)(yの標準偏差)
・相関係数が1に近い:正の相関
・相関係数が0に近い:相関なし
・相関係数が−1に近い:負の相関
●カテゴリカルデータとカテゴリカルデータ
カテゴリカルデータ同士の場合は、以下の方法で関係性をみる
・クロス集計表
・積み上げ棒グラフ
・カイ二乗検定
二変数間に有意差があるかどうかで関係性を見る。
有意差がなければ、二変数間に関連はないと考えられる。
例えば、性別の変数と役職の変数の関連性を考えるとき、もし有意差があれば、性別変数の値が役職に影響を与えていると考えられるし、差が無ければ、性別と役職の数に関係はないと言える。
・カテゴリが名義尺度の場合、クラメールの連関係数
・カテゴリが順序尺度の場合、コクラン-マンテル-ヘンツェル検定
を利用する。
補足:
・名義尺度:男女、血液型のように分類にのみ意味があり順序には意味がない尺度
・順序尺度:1良い 2普通 3悪いのように順序に意味はあるがその間隔には意味がない尺度
●カテゴリカルデータ と数量データ
統計的手法としては以下の手法を用いる、
・Z検定・t検定
2つのグループの平均が異なるかどうかを統計的に評価。
例えば、男性の年収と女性の年収の平均値に有意差があるかどうかで、性別変数と所得変数の関係がわかる。
・ANOVA(分散分析、パラメトリック)またはクラスカル=ウォリス検定(ノンパラメトリック)
3グループ以上の平均値(ANOVA)または、中央値(クラスカス=ウォリス検定)が等しいかどうかについて統計的に評価
4. 欠損値の扱い
●『なぜ欠損値への対応が必要か?』
学習データ内の欠損値により他の変数との関係にバイアスがかかるため、モデルの力を弱めたり、モデルにバイアスがかかるため。結果、誤った予測や分類を導く可能性がある。
以下の例で確認すると、
左側の欠損値がある状態で集計をとると、男性と女性のクリケットをしている割合は等しいが、欠損値を修正した右側では、女性の方がクリケットをしている割合が高い結果となる。
●欠損値の種類(主なもの)
以下は、Missing Data AnalysisDARM勉強会より
・MAR(Missing At Random)
欠損の有無の確率(R)は、欠損値を含む変数(Y)の値とは関連せず、他の変数(X,Z)の値に観測値と関連する
例) X=人種、 Y=英語の読解テスト
ヒスパニック系よりも白人の方が読解テストで欠損データが増加
※欠損データのメカニズムがMARであるか検定する手法はない。
・MCAR(Missing Completely At Random)
欠損の有無の確率(R)は、欠損値を含む変数(Y)や他の観測した変数(X)の値とも関連しない。観測していない変数(Z)と関連する。
例) Y=テスト成績、X=学習方法、Z=風邪などの予定外の出来事
欠損データが生じる確率は、テスト成績や学習方法と関係しない
※欠損の有群と無群のYの比較により、MCARであるか確認可能
・MNAR(Missing Not At Random)
欠損の有無の確率(R)は、観測した他の変数(X)の値を統制しても欠損値を含む変数(Y)の値と関連する。
例)X=IQ、Y=読解テスト
読解スキルが低いとテストで回答できない項目が増加し、結果的にテスト成績も低くなる。
※MARと同様、MNARであることを確かめる方法は基本的にない。
※測定していない第3の変数が、YとRに影響している可能性もある。
※※※欠損値処理は、欠損値の種類により方法が異なってくるが、とりあえず、欠損値の一般的な対応方法を次で説明※※※
!!!後で、欠損値ごとの対応方法を整理すること!!!
●欠損値の処理方法
① 欠損値を削除する
削除方法には以下の2種類がある。
・リストワイズ削除
ー欠損値の含まれているレコードを丸ごと削除する。
簡単だがデータ数が減るのでモデリング力が落ちる。
・ペアワイズ削除
ー欠損値の含まれているデータをそのまま無視する。
欠損値の含まれている変数と、含まれていない変数でデータ数に違いが生じてしまう。
※上記の削除法は、MCARの時のみ使える。それ以外の時にはバイアスが発生するので注意!
② 平均値 / 中央値 / 最頻値 の挿入
欠損値を何らかの予測値で埋める方法。欠損値以外の値で平均値や中央値(量的データの時)、最頻値(質的データの時)を求め、欠損値に代入する。
以下の2つの代入方法がある。
・標準化法(Generalized Imputation)
平均値や中央値を欠損値以外の値で求めて、その中央値・平均値で欠損値を穴埋めする方法。上記の例では、"体力"項目の欠損値を欠損値以外で求めた平均値で穴埋めすると、入る値は「(25+33+25+29+26+32)/6=28.33」で、28.33を欠損値に入れる。
・Similar case Imputation
上記例で言うと、"性別"の男性・女性ごとに、"体力"の平均値を求め(男性の体力:29.75、女性の体力:25)その値を"体力"の欠損値に性別ごとに当てはめる。
③ 予測モデル
欠損値を、モデルを構築することで予測する手法。欠損値を含まないデータセットを学習データ、欠損値を含むデータセットをテストデータとしてモデルを構築し、欠損値を予測する。
モデルの構築は、回帰、ANOVA、ロジスティック回帰、他様々ある。
ただし、このアプローチは以下2つの欠点を持つ。
・予測値は実際の値よりもよく動きやすい。(過学習を引き起こす。)
・データセットにおいて欠損値のある変数と無い変数に何ら関係性が無ければ、正確な予測値は出てこない。
④ KNN法による欠損値穴埋め
KNN法により求めた近似値を欠損値に埋める。近似値はデータ間の距離で求める。
これには、以下のメリット、デメリットがある。
・メリット
> 質的データと量的データのどちらにも使える
> 欠損値を含む変数ごとに予測モデルを作る必要がない。
> 複数の変数が欠損値のレコードに対しても簡単に適用できる。
> データの相関性が考慮されている。
・デメリット
> 大規模データの場合、KNNの計算に時間がかかる。
> kの値を決めるのが難しい。kの値を大きく取ると違うデータも入りやすくなるし、kを小さくとりすぎると重要な属性を見逃しかねない。
※ KNN法による欠損値の穴埋めは後で、以下のサイトで学習すること!!!
The use of KNN for missing values
5. 外れ値の扱い
外れ値とは全体の分布から外れている値。
以下の例では、消費者の平均所得が$0.8millionだが、2人の所得が平均より遥かに高く$4millionと$4.2miliionとなっている。これら2人の平均所得は大多数よりはるかに高いので外れ値とみなせる。
●外れ値のタイプ
外れ値には、一変数のタイプと二変数以上により生じるタイプの2種類ある。
一変数のタイプは、先程見た所得(一変数)が全体よりはるかにズレているようなもの。このタイプの外れ値は、一変数の分布を見ると見つけられる。一方で二変数以上よりなる外れ値は、多次元空間において外れ値となる。二変数以上の外れ値を見つけるには、多次元での分布を調べる必要がある。
以下の例で確認すると、以下の図は、左2つの箱ひげ図が身長と体重の分布を表す。それら箱ひげ図を見ると身長、体重どちらも外れ値は見られない。しかし、右側の身長と体重の関係をプロットした散布図を見ると、2つの値が全体の分布から外れているのがわかる。
このように、変数一つ一つを見ると外れ値が見られなくとも、多次元においては外れ値となるデータが存在する場合がある。
●外れ値はどのように引き起こされるのか?
外れ値への対応方法は、外れ値の発生原因により異なる。そのため、まずは外れ値が発生する要因を知っておく必要がある。
外れ値の発生は、大きく分けて以下の二つのカテゴリに判別できる。
1)人為的(なミス)
2)非人為的発生
以下が詳細:
・データ入力エラー:ヒューマンエラーにより生じた外れ値。一桁0を多く入力してしまうなど。例えば、平均月収が20万円のデータ集合で、200万円のデータが出てきたら、0を一つ多く入れてしまったのではないかと推測できる。
・測定エラー:最もポピュラーな原因。主に測定装置の欠陥、誤作動による生じる。例えば、10台の体重計があり、そのうち9台は正常で1台が故障していたとする。すると、故障している1台で測定した体重は、他の9台のデータより値が高かったり低かったりする。この場合、故障した体重計が外れ値を引き起こしている。
・実験時エラー(Experimental Error):例えば、7人のランナーで100m競走をした時、一人のランナーが不注意でスタートの合図を聞き逃したことでスタートが遅れてしまったなど。この場合、このランナーのタイムは他よりも大分遅く、外れ値として出てくる可能性がある。
・意図的な外れ値:これは、センシティブな情報を自己申告に基づいて集めた時などに発生する。例えば、成人病の中高年にアルコールの飲酒状況を尋ねたら、実際の飲酒量よりも低く医者に報告するケースなど。
・データ加工時に生じるエラー:データマイニングするときは、様々なデータソースからデータを集めてくる。その際のデータ操作時にミスってデータセット内に外れ値を生じさせてしまうことがある。
・サンプリング時のミス:例えば、陸上競技選手の身長を測定するとき、誤って一人二人のバスケ選手の身長も混ぜてしまった場合。バスケ選手の身長は、陸上競技選手より総じて高いので、それらバスケ選手の身長は外れ値として生じてしまう。
・自然発生的な外れ値:人為的エラーから生じたものではない外れ値。例えば、この参考サイトの筆者が保険会社で働いていたとき、トップ50のファイナンシャルアドバイザーのパフォーマンスは他のアドバイザーよりはるかに高かったが、それは、人為的なミスによるものではなかった。このようなデータの場合は、それら外れ値を別セグメントとして切り分けて扱う。
●外れ値がデータセットに与える影響
外れ値は、データ分析の結果と統計モデリングに大きな影響を与える。以下が、外れ値のデータセットへの影響、
・エラーの分散を増加させ、統計テストのパワーを減少させる。
・外れ値がランダムに生じていない場合、結果に偏りが生じる。(decrease normality)
・実質的に関心を持っていた予測値にバイアスや影響を与える。
(They can bias or influence estimates that may be of substantive interest.)
・回帰、ANOVA、その他統計モデルの仮説に影響を与える。
(They can also impact the basic assumption of Regression, ANOVA and other statistical model assumptions.)
以下の例で、外れ値の実際の影響を確かめる。
外れ値が入ることで、平均が 5.45 → 30.00 へ、標準偏差が 1.04 → 85.03 と大きく異なる数値となっている。この結果、予測値は完全に変わってしまう。
●外れ値の検出方法
外れ値の検出方法として最もよく使われるのが可視化。可視化手法として、箱ひげ図、ヒストグラム、散布図などが主に使われる。また、数値から判断するために使われている一般的な基準が以下になる。
・四分位範囲(IQR)の下1.5倍、上1.5倍の値を超えるもの。
・データの5%以下の値、および、95%以上の値を外れ値と 見なす。
・標準偏差の3倍以上の値を超えるデータを外れ値と見なす。
・対象ビジネスの理解に基づきデータの外れ値を判断。
(これは、対象ビジネスへの理解がないと難しい。)
・2変量以上の多次元空間における外れ値は、てこ比(leverage)や、マハラノビス距離などのインデックスを用いて検出する。
主なインデックス
> マハラノビス距離
・教師なし学習による異常値検知: マハラノビス距離 (理論編)
> クックの距離
回帰分析などで、どの学習データが全体の回帰に外れ値として大きな影響を及ぼしているかを調べるときに使う。
> てこ比
回帰分析などで、どの学習データが全体の回帰に外れ値として大きな影響を及ぼしているかを調べるときに使う。
●外れ値の取り除き方
以下が、一般的な方法
・外れ値の削除
外れ値が、データ入力エラーやデータ加工時に生じるエラーにより発生したもので、外れ値の数も少ない場合は、その外れ値を削除する。また、最小値と最大値をトリミングした後で、その外れ値を削除するなども行う。
・変数変換
例えば、自然対数に変換することで極端な数値により発生する変動を減らせる。また、ビニング(カテゴリ分け)もよく使われる。(ビニングによりカテゴリ分けすることで、外れ値もカテゴリの中に含まれるので、外れ値がなくなる。)決定木は、ビニングを使うので外れ値なども扱える。また、異なる観測値に重みをつけることもよく行われる。
・他の代表値による置き換え
平均値、中央値、最頻値などで置き換える方法。置き換える前に、その外れ値が人為的なものか自然発生的なものか調べる必要がある。人為的な原因で発生した外れ値に対しては、平均値や中央値などでの置き換えが可能。また、平均値などで置き換えたデータを使って統計モデルを作成し、そのモデルにより外れ値の真の値を予測するなどの手法もある。
・外れ値のデータセットを分けて扱う
外れ値が大量にある場合、それらを別なデータセットして分けて分析を行う。外れ値のデータセットで作ったモデルとそれ以外のデータセットでモデルを作成し、最後にそれらを合体させる。
以上の各プロセスが『データの前処理』フェーズに当たる。次に、『特徴量エンジニアリング』フェーズとして、「6.変数変換」、「7.変数の創出」について学ぶ。
>>> 復習:確率変数の変数変換について
ー 特徴量エンジニアリング ー
●特徴量エンジニアリングとは
特徴量エンジニアリングは、既存のデータセットから、より有益な情報を得るための科学(芸術)。新しいデータを追加するのではなく、既存のデータをより有益な形に変える。
例えば、ショッピングモールの客数をデータから予測したいとき、月ベースの日毎のデータでは有用なインサイトは得られず、週ベースの日毎のデータにすることでパターン(平日と休日の動きの違いとか)を抽出できる。そのためには、月ごとの日別データを週ごとの比別データに変換する必要がある。
このように、意味のある情報を引き出せるようにデータを加工する作業が特徴量エンジニアリングと呼ばれる。
●特徴量エンジニアリングのプロセス
今まで、「1.変数の確認(特定)」、「2.一変数の分析」、3.二変数の関係分析、4.欠損値の扱い」、「5.外れ値の扱い」と見てきたが、特徴量エンジニアリングとして、以下の残りの作業を行う。
6. 変数変換
7. 変数の創出
6. 変数変換
データモデリングにおいては、変数をある関数で置き換えていく作業を変数変換という。例えば、変数Xの値をルートをかけた値や対数変換した値に置き換える作業などのことを指す。
言葉を変えると、変数変換とは変数間の関係や配置を変える作業とも言える。
●変数変換はどんな時にやるべきか?
以下が、変数変換が必要なシチュエーション
・変数をより理解しやすくするために、変数のスケールの変更(標準化など)をしたい時
当然、変数間のスケールが異なる(例えば、変数Aが気温℃で、変数Bが距離kmなど)時は変数変換が必要。この時、スケールを変えても形は変わらない。
・非線形関係を線形関係に変換できる時
非線形関係よりは、線形関係の方が変数間の関係を理解しやすい。また、散布図は2つの数量データの関係を理解するためによく使われる。さらに、対数変換もこういった時(非線形関係を線形関係にする)によく使われる。
ー 以下は、非線形回帰式を対数により線形回帰式に変えた例 ー
ー 以下は、散布図の例 ー
・分布が偏っている時
偏った分布よりは対称的な分布の方が推測しやすい。いくつかのモデリングは正規分布に則った変数を必要とする。そのため、偏った分布の時は、変数変換を行うことで、出来るだけ偏りを減らす。右に袖が長い時(right skewed distribution) は、二乗根をとったり、三乗根をとったり、対数変換したりする。左に袖が長い時(left skewed distribution)は、二乗根をとったり、三乗根をとったり、指数変換したりする。
ー 以下は、右に袖を引いているヒストグラムを対数変換した例 ー
・実装上の観点から行う変数変換
例えば営業マンのパフォーマンスについてプロジェクトを進めている時、年齢とパフォーマンスに大きな関係がある事を見つけたとする。年齢が高いほどパフォーマンスがいいらしい。そこで、年齢ごとのプログラムをローンチするにあたり、年齢を3つの層(30歳未満、31〜45歳、46歳以上)に分けて、層ごとに異なった戦略を組み立てた。このように、実装上の観点から、年齢をカテゴリカル変数に置き換えるなどの変換を行う事。(このようなカテゴリカル変数への変換はビニングと呼ばれる。)
●変数変換の主な手法
様々な手法があるが、以下が主なもの
・対数変換:
変数の対数をとるのは、プロットする時の分布形状を変えたいときなどによく使われる。主に、右袖の歪みを無くしたいときなどに使われるが、ゼロ値やマイナス値には利用できない。(対数の定義から、対数の中身は0より大きくなければならない。)
・二乗根、三乗根化:
変数の二乗根、三乗根は効果がありそうに見えるが、対数変換ほどの効果はない。ただし、三乗根はゼロを含むマイナス値も扱える利点を持つ。二乗根はゼロを含むプラス値に適用できる。
・ビニング:
カテゴリカル変数に変えるために使われる。変数をパーセンタイルや頻度に変換する事でカテゴリー化する。ビニングを使うかどうかは、該当ビジネスへの理解があるかどうかによる。
7. 変数の創出
変数創出とは、既存の変数をベースに新しく変数を作り出すプロセス。例えば、今、年月日(年-月-日)のデータがあるとする。その変数を分解して、日だけの変数、月だけの変数、年だけの変数、曜日の変数というように新しく変数を作ることができる。このように変数を分解することで、変数内での隠れた関係性を炙り出すことができる。
以下が、新しい変数を作る主な手法
・既存変数から別の変数の内容を推測する:
例えば、KaggleのTitanicデータセットにおいて年齢変数などには欠損値が見られるが、その欠損値を補うためにsalutation(Master, Mr, Miss, Mrs)などの変数を使い年齢を補ったりする。このような他の変数からある変数の中身を推測する手法は、その変数の関わるビジネスモデルへの理解により精度が大きく変わる。他にも、ログをとったり、ビニングしたりすることで新しい変数を作り出すことがよく行われる。(対数変換による新しい変数化は、変数変換を参照。)
・ダミー変数の作成:
ダミー変数の作成で最もポピュラーなのは、カテゴリカル変数(性別とかの名義尺度)を数値変数(0と1とか)に置き換える作業。ダミー変数は支持変数とも呼ばれている。この手法は、統計モデリングで、カテゴリカル変数を予測値(従属変数)として扱う時など役立つ。例えば、男性を表す変数(Var_男性)と女性を表す変数(Var_女性)を新しく作り"1","0"で置き換える。
以上の7ステップが、データ前処理の基本的なフロー
0コメント