データを確かめる(1):どこから来た、どんなデータか
モデルを作る前に、データそのものを確かめます。ここでの見落としは、後でどんなに良いモデルを使っても取り戻せません。「ゴミを入れれば、ゴミが出てくる」(Garbage in, garbage out)と言われるほどです。
出典と、使ってよいか
この章のデータは、運営が作った架空のデータなので、ライセンスや同意の問題はありません。実際のデータでは、ここで使えないと分かることもあります。
データは、現実の一部しか映していない
データを集めた方法によって、現実とずれることがあります。
- 集め方の偏り: 例えば、アンケートに答えてくれた人だけのデータは、「アンケートに答える人」に偏っている。ネットの調査なら、ネットを使わない人がいない
- 時期の違い: 去年のデータで作ったモデルが、今年も同じように当たるとは限らない(利用者の年代が変わった、講座の内容が変わった、など)
- 記録の仕方: 同じ「学習時間」でも、「画面を開いていた時間」か「問題を解いていた時間」かで、意味が違う。列の意味を、データを作った人に確かめる
この章のデータの列
3000人分、11列のデータです。次のスライドで、Python を使って中身を確かめます。
データを確かめる(2):欠損・分布・おかしな値
まず、数と形を見る
import pandas as pd
df = pd.read_csv("/data/course-completion.csv") # 演習の中では、このファイルが用意されている
print(df.shape) # → (3000, 11)
print(df.head()) # 最初の5行
print(df.isna().sum()) # 列ごとの欠損(空欄)の数
欠損の数は、次のとおりでした(0の列は省略)。
「修了証までの日数」の欠損は、何を表しているか
「修了証までの日数」が空欄の人を、正解ごとに数えました。
空欄の人は全員「途中でやめた」、値がある人は全員「最後まで続いた」でした。修了証は、最後まで続いた人にしか発行されないからです。この列を使えば、どんなモデルでも正解率1.0になります。しかし、予測を使う「最初の1週間が終わった時点」では、修了証が出るかはまだ分かりません。レッスン1で見た、使ってはいけない列(データリーク) です。
このように、「欠損しているかどうか」が正解と強く結び付いている列は、リークを疑う手がかりになります。
分布を見る:平均と中央値が大きく違う
print(df["最初の週の学習時間"].describe())
中央値は98分なのに、平均は660.3分と、6倍以上になっています。最大の99999分は、約69日分です。1週間は 7 × 24 × 60 = 10080分 なので、これはありえない値(入力の誤り)です。このような値が15件あり、平均を大きく引き上げていました。取り除くと、平均は117.1分になります。
平均と中央値が大きく違うときや、最大・最小がありえない値のときは、入力の誤りや、特別な意味の値(例えば「不明」を 99999 で表している)を疑います。
グループごとに見る
全体では61.4%の人が途中でやめていました。タブレットの人は315人と少なく、グループごとの評価(レッスン6)では、結果のぶれが大きくなりやすいことを覚えておきます。
データの点検のまとめ、よくある誤解と振り返り
データの点検表
モデルを作る前に、毎回この順で確かめます。
- 出典・ライセンス・同意: 使ってよいデータか
- 個人情報: 予測に必要のない個人情報を取り除いたか
- 形: 行と列の数、各列の意味と単位
- 欠損: 列ごとの欠損の数。欠損が正解と結び付いていないか(リークの手がかり)
- 分布: 平均・中央値・最小・最大。ありえない値や、特別な意味の値がないか
- 正解の割合: 全体と、グループごと。不均衡か、数の少ないグループはないか
- 使える時点: 各列は、予測を使う時点で手に入るか
現実のデータで、ほかによくあること
この章のデータは架空なので、きれいに整っています。現実のデータでは、次のようなことも起こります。
- 同じ人の記録が、何行も重複している(第9章のリーク)
- 「東京都」「東京」「とうきょう」のように、同じものの書き方がばらばら
- 途中で記録の仕方が変わり、ある日から単位が「分」から「秒」になっている
- 日付の書き方が、行によって違う
よくある誤解
- 「欠損している行は、全部消せばよい」: 学習時間の欠損は約8%でしたが、ほかの列も欠損していれば、消すたびにデータが減ります。また、欠損していることに意味がある場合もあります(修了証の例)。次のレッスンで、埋め方を学びます
- 「平均を見れば、データの様子が分かる」: ありえない値が15件あるだけで、平均は117.1分から660.3分にふくらみました。中央値や最大・最小も一緒に見ます
- 「データが多ければ、偏っていても問題ない」: 集め方が偏っていれば、どれだけ多くても、偏りはなくなりません
振り返り
- データの出典・ライセンス・同意・個人情報を、最初に確かめる
- 欠損の数と、欠損が正解と結び付いていないかを確かめる。空欄かどうかだけで正解が分かる列は、リークを疑う
- 平均と中央値、最小と最大を比べて、ありえない値を見つける
- 正解の割合を、全体とグループごとに確かめる