データを得たとき、最初にすべきことの1つが、データ理解です。
データ理解とは、「手元にあるデータがどのようなデータなのか理解する」ということです。
データ理解が不十分なまま、より高度な分析を実施したり、数理モデルを構築したりすることは、無謀なことです。
例えば、高精度な予測モデルの構築を焦るばかり、データ理解のないまま、高精度だが利用価値ゼロの予測モデルを作ってしまう、そのようなことも起こります。
そもそも、高精度な予測モデルを構築したいのなら、データ理解をする方が近道です。
では、データ理解をするために、何をすればいいのでしょうか?
それは、探索的データ分析(EDA、Exploratory Data analysis)をすればいいのです。
では、探索的データ分析は、どのようにすればいのでしょうか?
探索的データ分析のやり方は色々ありますが、鉄板というか最低限実施すべきことがあります。
今回は、「探索的データ分析(EDA)の初手」というお話しをします。
Contents
探索的データ分析(EDA)で最低限すべき4つのこと
探索的データ分析(EDA)は、視覚的アプローチと非視覚的アプローチの2つのアプローチで構成されます。
視覚的アプローチとは、グラフなどを作成し分析することです。
非視覚的アプローチとは、文字通り視覚的でないアプローチですが、さらに2種類あります。
それは、データで解決すべき課題の理解や状況理解などの定性的なものと、データに対し何かしらの処理を実施し、平均値を求めたり欠測値に対処したりデータを変換したりする定量的なものです。
以下、最低限すべき4つのことです。実施するであろう順番に並べています。
- 記述的分析
- 前処理
- 可視化
- データセット準備
とは言え、実際は行ったり来たりします。
そして、探索的データ分析(EDA)の目指すところは、より高度なデータ分析やモデル構築のために、データ理解をした上でデータセットを準備することです。
何はともあれ、それぞれについて簡単に説明していきます。
記述的分析
記述的分析は、一番最初に実施すべき探索的データ分析です。
3つほどあります。
- 解決すべき課題の理解する
- 入手したデータを眺める
- 変数の特徴を掴む
解決すべき課題の理解する
先ずすべきは、データで解決すべき課題の理解や状況理解などの定性的なことです。
客観的な「ファクト」(事実)と主観的な「思っていたこと」などを切り分けるとともに、今度どうしたいのかという「思い」やどうすべきかという「方針」を整理するという、気を張るプロセスになります。
最も怖いのは、事実誤認です。
事実誤認とは、ファクト(事実)と思われていたことが実は単なる感想や思い込みだったというものです。
事実誤認のままことが進むと、勘違いを前提にしているため、その後のデータ分析やモデル構築なども徒労に終わる可能性が高くなります。
入手したデータを眺める
次にすべきは、入手したデータを分析ツールなどに読み込み、PCなどに表示し眺めることです。
単に眺めるだけでなく、データで解決すべき課題の視点に立ち……
- どのような変数があり、
- どの変数が使えそうか、
- どのくらいのデータ量があり、
- どの変数のデータがまともそうか、
……などをデータ定義書(変数の説明や、変数のとりうる値の定義など)をもとに、意識的に眺めると、いいでしょう。
とは言え、最初は難しいことを考えずに、単に眺めるだけでも得られるものがあります。
変数の特徴を掴む
データを眺めたら、次に各変数の記述統計量などを求め、各変数の特徴を掴みます。
例えば、有効データ数、欠測数、平均値、中央値、最大値、最小値、標準偏差、分散などを求めたりします。
記述統計量を計算し求めたら、再度データそのものを眺める、さらにデータで解決すべき課題に思いを馳せるのがいいでしょう。
より高度なデータ理解と、データで解決すべき課題に対しどの程度貢献できそうかが見えてきます。
前処理
入手したてのデータの多くは、現実では起こりえない値が混じっていたり、データが欠測していたり、非常に汚いです。
汚いままのデータを利用するわけにはいきません。
汚いデータをクレンジングし、より高度なデータ分析やモデル構築などに耐えうるものに生まれ変わらせる必要があります。
以下は、よくあるクレンジングです。
- 不適切な値への対応
- 異常な値への対応
- 欠測値への対応
- レコード(行)や変数(列)の除去
不適切な値への対応
各変数のデータを眺めていると、不適切な値がところどころあることを発見することがあります。
例えば……
- 数値が入っているはずのことにテキストが入っていたり、
- 整数値が入っているはずのところに小数点のある実数値が入っていたり、
- 非負の値のはずなのに負の値が入っていたり、
……します。
たまに、「?」や「-」、「NA」などのシステムが自動入力したと思われる特殊な文字表現が入ったままのケースもあります。
そのような不適切な値を発見したら、何かしたの対処をする必要があります。
例えば、欠測値(値が入っていない)と見なしたり、別の値を代入(例:平均値や中央値などを代入)し対処したりします。
異常な値への対応
一見正しそうに見えて、ロジカルに考えるとあり得ないデータが入っていることもあります。
いわゆる、異常値です。
例えば……
- 顧客の生年月日が江戸時代
- 中学生の子どもを持つ年齢が1歳の父親
- 顧客開始時期が紀元前の法人
- 従業員10名の1日に200兆円超の発注をしている取引先
- 1日の売上が30円の小売店
……など、明らかに間違っていると思われるデータもあったりします。
一番難しいのが、あり得そうな異常値です。
ある小売チェーンの一日の売上高の平均が50万円でした。ある日だけ、100万円をちょっとだけ超えていました。
何はともあれ、異常値を見つけたら、何かしら対処する必要があります。
例えば、欠測値(値が入っていない)と見なしたり、別の値を代入(例:平均値や平均値+2×標準偏差などを代入)し対処したりします。
欠測値への対応
データの欠測は頭の痛い問題です。
元々、欠測ている場合もありますし、不適切な値や異常な値の対応として、あえて欠測させた場合もあります。
先ほどちょっと触れましたが、別の値を代入(例:平均値や中央値などを代入)し対処したりします。
別の値を代入(例:平均値や最大値などを代入)する欠測値処理は、色々なアプローチや手法があります。
平均値や中央値などの記述統計量を活用するものや、回帰モデルなどの教師付き機械学習を利用するもの、カーネルマッチングなどのマッチング理論を用いるもの、色々あります。
どれが正しく、どれが間違っているというよりも、実施するデータ分析やモデル構築上、悪影響を及ぼさないものを選択する、というちょっと厄介な検討が必要です。
レコード(行)や変数(列)の除去
役に立たないレコード(行)や変数(列)は除去した方がいいでしょう。
ここで言う除去とは、これからの実施する、より高度なデータ分析やモデル構築に利用しない、という意味ありです。
よくあるのは……
- 欠測値だらけのレコード(行)や変数(列)
- すべて同じ値の入っている変数
- 重複しているレコード(行)や変数(列)
……などです。
可視化
可視化とは、単にグラフやチャートなどで表現することでデータ理解を助けることです。データビジュアライゼーションとも言ったりします。
また、第三者にメッセージを伝えるときにも、よく利用されます。
基本的なものとして、次の3種類があります。
- 1変数の可視化
- 2変数の可視化
- 多変数の可視化
1変数の可視化
各変数の分布状況を確認するのに用いることが多いです。
例えば……
- ヒストグラム
- ボックスプロット(箱ひげ図)
- 単純集計のグラフ表現
……などです。
各変数の記述統計量(平均値や標準偏差、最大値、最小値など)と合わせて見ることが多いです。
2変数の可視化
各変数を可視化したら、次は変数同士の関係性の可視化です。
例えば、
- 散布図
- 相関ヒートマップ
- クロス集計のグラフ表現
……などです。
1変量の可視化したものを、ある変数で層別しグラフ表現した方法も、結果多用されます。
例えば、売上のヒストグラムを商品カテゴリーで層別し見比べたり、売上のボックスプロット(箱ひげ図)をエリアで層別し比較したりします。
多変数の可視化
変数同士の関係性を次いで掴んだら、次は3変数以上の関係性の把握です。
ここで急に難しくなります。
それは、多変量解析という手法を使うからです。
例えば……
- 主成分析
- 因子分析
- コレスポンデンス分析
- 選好回帰
- コンジョイント分析
- クラスター分析
- 重回帰分析
- 判別分析
- 決定木分析
……などです。
機械学習でも登場する手法が顔を出し始めます。
データセット準備
ここまでで、ある程度のデータ理解が進んだと思います。
データ理解が進んだら、より高度なデータ分析やモデル構築などのためのデータセットを準備する必要があります。
現実は、一発でより高度なデータ分析やモデル構築などに耐えうるデータセットを準備できることはありません。
そのため、より良いデータセットを作るために、このデータセットを使い、記述統計量を求めたり可視化したりとさらなるデータ理解を深め、より良いデータセットになるよう試行錯誤します。
データセットを準備するとき、例えば次の3つの処理を比較的よくします。
- スケーリング
- 変数変換
- エンコード
スケーリング
よく実施されるスケーリングは、正規化や標準化などと呼ばれるものです。
その中で特によく行われるのは、元のデータを平均値で引き標準偏差で割るスケーリングです。
他には、元のデータを最小値で引き、それを最大値と最小値の差で割るスケーリングも、よく実施されます。
もっとシンプルに、元のデータを平均値で割るスケーリングもあります。
変数変換
変数変換は、主に量的変数に用いられます。
例えば、対数変換やそれを一般化したBoxCox変換などです。
他にも、平方根を計算したり、主成分に変換したり、それこと多種多様です。
変数同士を四則演算し、新たな変数を求めるのも変数変換です。
三角関数を用いたフーリエ変換や、回帰問題や分類問題、多変量解析の結果をもとに変数変換することもあります。
要は、色々あるということです。
どのような変数変換をするのか、というのはデータ分析者の腕の見せ所です。
エンコード
エンコードは、主に質的変数に用いられます。
例えば、性別を表す変数が「1:男性、2:女性」のような場合に「0:男性、1:女性」のように0-1変数に変換したりします。
性別のラベルは2つですが、都道府県を表す変数などのラベルが複数になる場合には、北海道変数・青森変数・秋田変数などとラベルごとに0-1変数を作ります。
このようなエンコードを、ワンホットエンコーディングと言ったりします。
エンコードのやり方は、実は他にも色々あります。
量的変数にもエンコードを実施することがあります。
例えば、ある値以下を0とし、ある値を超えたら1とするなど、量的変数を質的変数に変換するエンコードです。
変数変換同様、エンコードもデータ分析者の腕の見せ所です。
今回のまとめ
今回は、「探索的データ分析(EDA)の初手」というお話しをしました。
データを得たとき、最初にすべきことの1つが、データ理解です。
データ理解とは、「手元にあるデータがどのようなデータなのか理解する」ということです。
データ理解が不十分なまま、より高度な分析を実施したり、数理モデルを構築したりすることは、無謀なことです。
例えば、高精度な予測モデルの構築を焦るばかり、データ理解のないまま、高精度だが利用価値ゼロの予測モデルを作ってしまう、そのようなことも起こります。
そもそも、高精度な予測モデルを構築したいのなら、データ理解をする方が近道です。
では、データ理解をするために、何をすればいいのでしょうか?
それは、探索的データ分析(EDA、Exploratory Data analysis)をすればいいのです。
では、探索的データ分析は、どのようにすればいのでしょうか?
以下、最低限すべき4つのことです。実施するであろう順番に並べています。
- 記述的分析
- 前処理
- 可視化
- データセット準備
記述的分析は、一番最初に実施すべき探索的データ分析です。
3つほどあります。
- 解決すべき課題の理解する
- 入手したデータを眺める
- 変数の特徴を掴む
前処理で次のようなクレンジングを実施します。
- 不適切な値への対応
- 異常な値への対応
- 欠測値への対応
- レコード(行)や変数(列)の除去
可視化には基本的なものとして、次の3種類があります。
- 1変数の可視化
- 2変数の可視化
- 多変数の可視化
ある程度のデータ理解が進んだら、より高度なデータ分析やモデル構築などのためのデータセットを準備するために、例えば、次の3つの処理を比較的よくします。
- スケーリング
- 変数変換
- エンコード
探索的データ分析(EDA)を実施するときに迷ったら、参考にしていただければと思います。