クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

データの偏りはどこから来るのか

このレッスンのあとで: サンプル、ラベル、履歴データのどこに偏りが入るかを、見つけられる。

50分のレッスンコマンド1件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

AIの偏りは、データの段階で入る

AIのバイアス(偏り)とは、モデルの結果が、特定のグループの人に不利になるよう傾くことです。偏りの多くは、モデルを作る前の、データを集める段階で入ります。

たとえば、ある信用組合が、過去の融資の記録でAIを作ったとします。記録に若い人がほとんどいなければ、AIは若い人の返済を正しく判断できません。

このレッスンのゴール

メモ

サンプル、ラベル、履歴データのどこに偏りが入るかを、見つけられる。

キーワード

ことばいみれい
バイアス結果が特定のグループに不利に傾くこと
サンプル全体から取り出した一部の記録
代表性サンプルが全体の姿を映している度合い
ラベル記録につけた正解の印返済した
履歴データ昔の決定が積み重なってできた記録

学生が入力するセルは、このプレビューでは空白です。

サンプルが偏ると、少数の人に弱くなる

サンプルは、全体から取り出した一部の記録です。サンプルにグループBの人が少ないと、モデルはBについてほとんど学べません。

そのため、新しい人に使ったとき、Bの人だけ間違いが増えます。サンプルが全体の姿を映している度合いを、代表性といいます。

例: 地域の人と、記録の人

グループ地域の人数地域での割合記録の件数記録での割合
A700人70%188件94%
B300人30%12件6%
合計1000人100%200件100%

学生が入力するセルは、このプレビューでは空白です。

Bの割合を数える

コード: python
# 信用組合の記録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 で、天気ごとの日数を数えてください。晴れ、くもり、雨の日数は、同じくらいでしょうか。

そのうえで、このサンプルが偏っているかどうかを、一文で書きましょう。人の記録なら、何を数えるべきかも考えてください。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。