AIの偏りは、データの段階で入る
AIのバイアス(偏り)とは、モデルの結果が、特定のグループの人に不利になるよう傾くことです。偏りの多くは、モデルを作る前の、データを集める段階で入ります。
たとえば、ある信用組合が、過去の融資の記録でAIを作ったとします。記録に若い人がほとんどいなければ、AIは若い人の返済を正しく判断できません。
このレッスンのゴール
メモ
サンプル、ラベル、履歴データのどこに偏りが入るかを、見つけられる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| バイアス | 結果が特定のグループに不利に傾くこと | |
| サンプル | 全体から取り出した一部の記録 | |
| 代表性 | サンプルが全体の姿を映している度合い | |
| ラベル | 記録につけた正解の印 | 返済した |
| 履歴データ | 昔の決定が積み重なってできた記録 |
学生が入力するセルは、このプレビューでは空白です。
サンプルが偏ると、少数の人に弱くなる
サンプルは、全体から取り出した一部の記録です。サンプルにグループBの人が少ないと、モデルはBについてほとんど学べません。
そのため、新しい人に使ったとき、Bの人だけ間違いが増えます。サンプルが全体の姿を映している度合いを、代表性といいます。
例: 地域の人と、記録の人
| グループ | 地域の人数 | 地域での割合 | 記録の件数 | 記録での割合 |
|---|---|---|---|---|
| A | 700人 | 70% | 188件 | 94% |
| B | 300人 | 30% | 12件 | 6% |
| 合計 | 1000人 | 100% | 200件 | 100% |
学生が入力するセルは、このプレビューでは空白です。
Bの割合を数える
# 信用組合の記録200件のグループ名です。
records = ["A"] * 188 + ["B"] * 12
count_b = 0
for name in records:
if name == "B":
count_b = count_b + 1
print("Bの件数:", count_b)
print("Bの割合(%):", count_b * 100 // len(records))
# records を ["A"] * 150 + ["B"] * 50 に変えて、もう一度実行してください。
ラボで、偏ったサンプルを確かめる
ラボの自転車データで、サンプルの偏りを確かめます。1年365日の、1日あたりの平均台数と、最初の90日だけの平均を並べます。
最初の90日は、1月から3月までで、寒い日が多い期間です。そこだけを見ると、1年の姿をゆがめます。
1年の平均と、最初の90日の平均
docker exec jupyter python3 -c "import csv; r=list(csv.DictReader(open('hires.csv'))); a=[int(x['hires']) for x in r]; b=a[:90]; print(round(sum(a)/len(a),1), round(sum(b)/len(b),1))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
データの件数が多ければ、偏りはないと考えがちです。けれど、同じ種類の人ばかりが入っていれば、件数が多くても偏りは残ります。件数ではなく、誰が入っているかを確かめてください。
ラベルには、決めた人の癖が入る
ラベルは、記録につけた正解の印です。たとえば、採用の記録の「採用」は、その時の担当者が決めました。
担当者が特定の人を選びがちだったなら、その癖も正解として残ります。モデルは、その正解をそのまま学びます。
過去の記録は、昔の不公平を覚えている
昔の決定が不公平だったなら、その履歴データで学んだAIも、同じように決めます。
さらに、AIの決定は次の記録になります。偏った決定が偏った記録を生み、その記録でまた学ぶと、偏りが回り続けます。
さらに挑戦: 日数を数える
ラボの hires.csv で、天気ごとの日数を数えてください。晴れ、くもり、雨の日数は、同じくらいでしょうか。
そのうえで、このサンプルが偏っているかどうかを、一文で書きましょう。人の記録なら、何を数えるべきかも考えてください。