データの誤りを見逃さないためのデータ探索チェックリスト

Introduction

こんにちは、データサイエンティストの善之です。
本記事では私が日頃使っている、データの誤りを見逃さないためのデータ探索チェックリストをご紹介します。

データを分析するにあたり、良質なデータを用いることが非常に重要です。誤ったデータを分析しても誤った結果しか出てきません。
しかし、実際に業務で扱うデータは誤ったデータが含まれていることが多くあります。 特にデータをクライアントから受領する場合には、クライアントのデータ抽出過程にミスがあったり、 そもそもクライアントのデータベースに格納されているデータが何かしらの誤りを含んでいたりします。
そのような誤りにプロジェクトの途中で気づくと、それまでの分析が全てやり直しになってしまうケースも考えられます。 したがって、プロジェクトの初期の時点でデータの誤りを見抜いておくことが大事になってきます。 とはいえ、なんとなくデータを探索するだけではデータの誤りを見落としてしまう可能性が高いです。

そこで私がオススメするのは、確認すべき項目をチェックリストにして、データ分析を始める前に漏れなくチェックする方法です。
本記事では、私が日頃使っているチェックリストをご紹介したいと思います。

目次

全データカラム共通

まずは、データに含まれるカラム1つ1つを確認していきます。
後ほどカテゴリデータと数値データそれぞれに固有の確認事項をご紹介しますが、 その前にどちらのデータにも共通する確認事項として、欠損の確認をご紹介します。

欠損がないか

基本的な内容ですが、欠損がないかを確認します。もし欠損データがある場合は、次にその項目の生データを確認していきます。
生データを確認すると、欠損があっても問題がなかったと判明するかもしれません。そのような場合はスルーしても大丈夫です。(売上が0の商品データは購買顧客に関する詳細情報が欠損しているなど)
それ以外の場合は、念のためデータ提供元に原因を問い合わせます。原因が判明すれば欠損を無くせる場合もあります。

数値データカラム

次に、数値データカラムの確認事項をご紹介していきます。

ドメイン知識の範囲と異なるデータがないか

まずは数値データを持つカラム1つ1つについて最大値と最小値を確認し、ドメイン知識の範囲内に入っているかを確認します。
気温のデータに300が含まれるなどが、ドメイン知識から外れている例です。データが誤っているか、単位が摂氏ではない可能性があるので、データ提供元に確認します。
(実際に過去に私が扱った案件でこのような例がありました。その際は単位が摂氏ではなくケルビンでした)
他にも、湿度が100%を超えている、日射量がマイナスの値、などもドメイン知識から考えて不自然なデータの例として挙げられます。

ヒストグラムで不自然な値がないか

続いて、ヒストグラムを描いてみます。
そのうえで、極端に大きい/小さいデータがないか確認します。ヒストグラムの分布から大きく外れているようなデータです。
例として、商品の価格データの分布を考えます。
図のように、他の価格に比べ極端に価格の高い商品があれば、念のため生データを確認します。 本当に高価な商品であれば問題ないですが、データが誤っている可能性もあります。

また、極端に大きくなくても、分布の中で特異的な点があればそのデータを確認します。
たとえば、商品価格中で30,000円~31,000円のデータが極端に頻度が大きいとします。
その場合、何か特殊なケースにおいて一律30,000円などの同じ数値を入力している可能性も考えられます。

カテゴリデータカラム

ここでは、カテゴリデータカラムの確認事項をご紹介します。

ドメイン知識と異なるデータが含まれていないか

まずはユニークな項目を全て目視確認します。(項目数が多くチェックしきれない場合は、一部だけでも見てみます)
その際に想定していないデータがないかを確認します。
たとえば、曜日データに「月火水木木土日」の7種類以外のデータがないかなどです。(例えば、同じ土曜日でも表記揺れで「土曜」と「土曜日」に分かれているかもしれないです)

出現頻度でドメイン知識と異なる傾向を示す変数がないか

データに含まれる各カテゴリについて出現頻度のヒストグラムを描き、事前に把握しているドメイン知識と乖離がないかを確認します。
たとえば、データカラムに曜日がある場合を考えます。毎日取得しているデータであれば各曜日が均等に現れるはずです。
ここで分布が均等でないならば、データ取得に何らかの不備がある可能性があります。

データカラム間の関係

ここまではデータカラムの1つ1つを確認してきましたが、ここではデータカラムどうしの関係性を確認します。

相関がドメイン知識と一致しているか

ドメイン知識的に、相関があると分かっている項目については2軸でプロットして相関を確認します。
例えば、小売のとある店舗の全商品の売上合計個数と売上高はおよそ比例関係にあるはずです。 この傾向から極端に外れている点があれば、生データを確認した方がよいでしょう。

生データを確認のうえ、外れている理由が推察できないようであればデータ提供元に問い合わせます。

前提条件であるデータどうしの関係式が成立しているか

データどうしに前提条件の関係式がある場合は、その関係式が成立しているか確認します。
たとえば、「利益=売上-原価」などです。ここが崩れている場合、いずれかのデータが誤っている可能性が高いです。
他にも、「仕入れ数=売上数+廃棄数」などもデータどうしの関係式の例として挙げられます。

時間で集計

ここでは、データを集計してから確認する手法を紹介します。
まずは、時間で集計する手法です。

明らかに他と異なる傾向がないか

時間情報が含まれるデータの場合は、数値を時系列でプロットします。
たとえば、商品の売上高を日付ごとにプロットした際、ある日付だけ売上が極端に少ないとします。

もし完全にゼロの場合は、その日が休日だった可能性もあります。しかしゼロではなく少ない場合は、データの取得が不完全であった可能性があります。

ドメイン知識と異なる挙動をしていないか

プロットでのもう1つの確認事項として、ドメイン知識と異なる挙動をしていないかも確認します。
たとえばある設備を毎年少しずつ増設していると事前に把握していたとします。
にも関わらず、時系列でプロットした際に途中で急に設備数が増えている箇所があれば要注意です。

その年にたまたま多く増設された可能性もありますが、その時点を境にデータの取得方法が変わっている可能性もあります。

空間で集計

他の場所と明らかに異なる傾向を示す場所がないか

位置情報を持つデータの場合は、数値をヒートマップで地理的空間にプロットしてみます。
ここでは例として電力消費量を考えます。
電力消費量を地図上にヒートマップでプロットした際に、周辺には消費電力があるのに、ある領域だけ電力消費が極端に少ないとします。
山間部であれば問題ないのですが、もし都市部にも関わらずそのようなことが起きている場合は、その地域のデータの一部抽出漏れが疑われます。

ドメイン知識と異なる挙動をしている場所がないか

先ほどと同じく、プロット上でドメイン知識と異なる挙動をしている場所がないか確認します。
こちらも電力消費量を例に考えます。
たとえば海の上で電力消費がある、山間部の電力消費が都市部よりも多い、などの場合はデータの位置情報がずれている可能性が高いです。

関連データの活用

データ結合ができるか

データセットは1種類のみ提供されるわけではなく、複数種類のデータセットをもとに必要なデータを抽出して、最終的な分析用データを作成していく場合が多いかと思います。
そのようなデータを扱う場合は、まずデータ同士の結合が問題なく可能かを確認します。
結合できない項目があれば、データが漏れている可能性が高いです。

別途提供されている集計済データや一般公開されているデータと値が一致するか

可能な場合のみですが、念のため別途提供されている集計済データや一般公開されているデータと値が一致するかを確認します。
例えば、商品売上の商品ごとの生データとともに、全商品について売上を合算した後のサマリーデータも同時に受領している場合を考えます。
この場合、自分自身で商品売上の生データを合計した結果と、提供されたサマリーデータを比較します。 意外とずれる場合も多いかと思います。(生データの方に重複があるなどが考えられます)
また、一般公開されているデータとの照合も必要に応じて行います。 例えば、商品売上データの合計と公開されている有価証券報告書に記載の売上高に乖離がないかを確認する方法も考えられます。

まとめ

いかがだったでしょうか。
今回ご紹介した項目を調査すれば、データの誤りにあらかじめ気付ける可能性が高まるかと思います。
参考にしていただけると嬉しいです。