データを集めて学習させたら、テストではすごく精度が高いのに、実際に使うとまったく当たらんかった。何がおかしいん?
【疑問】データ集めの落とし穴、アノテーションのぶれとデータリーケージ、オープンデータセットとコーパス【G検定】
前提のおさらい。モデルの性能は、学習に使っていないデータ(ホールドアウトや交差検証で分けたデータ)で確かめる。学習とテストのデータは混ぜてはいけない
>>1
一番疑わしいのはデータリーケージ。本来は予測のときに使えない情報が、学習データに入りこんでること
例:病気を予測するモデルの入力に「治療薬を出したかどうか」が入ってた。薬は病気と分かってから出すから、これがあればよく当たるけど、予測したい時点ではまだ分からん
>>3
ほかにもある
同じ人の写真が学習とテストの両方に入ってて、人の顔を覚えただけで当たってた
時系列のデータをランダムに分けて、未来のデータで学習して過去を当ててた
全部のデータで平均や分散を計算して正規化してから、学習とテストに分けた
>>4
最後のやつもあかんの?平均を出しただけやん
>>5
テストのデータの情報が、平均と分散を通じて学習側に少し漏れてる。影響は小さいことが多いけど、正規化の計算も学習データだけでやって、それをテストに当てはめるのが正しい順番
アノテーションは、データに正解のラベルをつける作業。人がつけるから、人によってぶれる
2人で同じ画像にラベルをつけて、一致した割合が80%でも、たまたま一致する割合が50%なら、その分を引いた一致度(カッパ係数)は
>>7
ぶれを減らすには、ラベルのつけ方の基準を文書にして、迷う例を集めて、何人かでつけて食い違ったものを話し合う。ラベルがぶれてると、モデルの性能の上限もそこで決まってしまう
>>1
オープンデータセットは、誰でも使えるように公開されたデータ。画像のImageNet(1400万枚以上)、手書き数字のMNIST(7万枚)など
ことばのデータを大量に集めたものはコーパスと呼ぶ
>>9
公開されてても、何に使ってもええわけやない。商用での利用を禁じてるライセンスのものもあるし、集め方に偏りがあることもある。使う前に利用条件と中身を確かめる
管理人のひとこと
- データリーケージは、予測のときに使えない情報が学習データに入りこむこと。治療薬の有無、同じ人が学習とテストの両方にいる、未来で過去を当てる、全データで正規化してから分ける、など。
- 正規化の計算も学習データだけで行い、それをテストに当てはめる。
- アノテーションは人がラベルをつけるのでぶれる。一致80%、偶然の一致50%ならカッパ係数は0.6。基準の文書化と話し合いでぶれを減らす。
- オープンデータセット(ImageNet、MNISTなど)やコーパスは、ライセンス(商用の可否)と偏りを確かめて使う。