سوگیری و انصاف
جواب کوتاه
مدل یادگیری ماشین از دادهی گذشته یاد میگیره، و دادهی گذشته خیلی وقتها پر از تصمیمهای آدمهاست. اگه اون تصمیمها با یه گروه از آدمها ناعادلانه بوده، مدل همون الگو رو یاد میگیره و تکرارش میکنه؛ فقط سریعتر و برای هزاران نفر. سوگیری از سه جا میاد: برچسبهای ناعادلانه، نمونهی کم از یه گروه، و ستونهایی که بیصدا جای یه ویژگی حساس رو میگیرن. برای همین فقط حذف ستون جنسیت یا قومیت کافی نیست، و باید درستی مدل رو برای هر گروه جدا سنجید. انصاف هم یه تعریف نداره؛ چند تعریف داره که معمولا با هم جور درنمیان، و باید با آدمهایی که تصمیم روشون اثر داره، انتخابش کرد.
مدل آینهست
فرض کنید یه شرکت میخواد با یادگیری ماشین از بین رزومهها، بهترینها رو جدا کنه. دادهش چیه؟ رزومههای ده سال گذشته، و اینکه کدومها استخدام شدن.
حالا فرض کنید توی این ده سال، از یه گروه آدمها، که اینجا با دایره نشونشون دادیم، بیشتر استخدام شده و از یه گروه دیگه، مربعها، کمتر. شاید چون مدیرهای قبلی ناخودآگاه اینجوری تصمیم میگرفتن، شاید به هر دلیل دیگه. مدل چی یاد میگیره؟ دقیقا همین: «دایرهها رو قبول کن، مربعها رو نه».
مدل هیچ قصد بدی نداره. فقط کاری رو میکنه که یاد گرفته: الگوی داده رو پیدا میکنه و تکرار میکنه. ولی اگه اون الگو ناعادلانه بوده، حالا همون بیانصافی، با سرعت ماشین و برای هزاران نفر، تکرار میشه، و چون «کامپیوتر گفته»، خیلیها کمتر بهش شک میکنن.
به این میگن سوگیری مدل، و تلاش برای درست کردنش اسمش انصاف در یادگیری ماشینه. این موضوع وقتی واقعا مهمه که تصمیم مدل روی زندگی آدمها اثر داره: استخدام، وام، درمان، بیمه. برای پیشنهاد یه فیلم، اشتباه مدل یه شب بد درست میکنه؛ برای وام، شاید یه زندگی رو عوض کنه.
از کجا میاد
سوگیری معمولا از خود مدل نمیاد؛ از داده میاد. سه تا سرچشمهی اصلی داره:
برچسبهای ناعادلانه. وقتی جوابهای درستی که مدل ازشون یاد میگیره، خودشون تصمیم آدمها بودن، هر کجیای که توی اون تصمیمها بوده، توی برچسبها هم هست. مثل همون رزومهها: «استخدام شد» یعنی «مدیر قبلی پسندیده»، نه لزوما «بهترین بود».
نمونهی کم از یه گروه. اگه توی دادهی آموزش، از یه گروه خیلی کم نمونه باشه، مدل اون گروه رو خوب نمیشناسه و روشون بیشتر اشتباه میکنه. هیچکس هم عمدا این کار رو نکرده؛ فقط دادهای که جمع شده، بیشترش از یه گروه بوده.
ستون جانشین. این یکی از همه یواشکیتره و فصل بعد مفصل میگیمش. حتی وقتی ستون حساس رو به مدل نمیدیم، یه ستون دیگه میتونه همون رو لو بده.
یه چیز رو هم یادتون باشه: مدلهای زبانی هم همینطورن. چون از متنهایی که آدمها نوشتن یاد میگیرن، تصورهای قالبی همون متنها رو هم یاد میگیرن؛ مثلا پرستاری رو بیشتر به زنها نسبت میدن و مهندسی رو به مردها.
حذف ستون کافی نیست
اولین فکری که به ذهن هر کسی میرسه: خب ستون جنسیت یا قومیت یا هر ویژگی حساس دیگه رو به مدل ندیم! به این میگن «انصاف با ندیدن». سادهست و یه جورایی منطقی: دو نفر که فقط توی همون ویژگی فرق دارن، جواب یکسان میگیرن.
ولی یه ایراد بزرگ داره. ستونهای دیگه خیلی وقتها با اون ویژگی حساس ربط دارن. مثلا اگه آدمهای یه گروه بیشتر توی بعضی محلهها زندگی کنن، ستون «محله» تقریبا همون ستون حذفشده رو به مدل میگه. یا توی رزومه، اسم یه مدرسه، یه باشگاه یا یه سرگرمی. مدل، که کارش پیدا کردن همین ربطهاست، از راه این ستونها دوباره به همون الگو میرسه.
به این ستونها میگن جانشین. یعنی ستون حساس رو از در بیرون کردید و از پنجره برگشت. برای همین برای فهمیدن اینکه مدل منصفه یا نه، اتفاقا لازمه ویژگی حساس رو داشته باشید؛ نه برای اینکه مدل ازش استفاده کنه، برای اینکه بتونید بسنجید.
جانشین، با عدد
این رو با یه دادهی وام ساختگی امتحان کردیم. دو گروه داریم، دایرهها و مربعها؛ ۳۰ درصد مربعن. هر کس یه درآمد داره و توی یکی از دو محله زندگی میکنه، و محله با گروه گره خورده: ۸۰ درصد مربعها توی محلهی «ب» و ۸۰ درصد دایرهها توی محلهی «الف». برچسبها تصمیمهای قدیمیه، و تصمیمگیرندههای قبلی برای مربعها مرز درآمد رو بالاتر گذاشته بودن. بعد سه مدل ساده آموزش دادیم و درصد «آره» رو برای هر گروه حساب کردیم:
تصمیمهای قبلی به ۵۱ درصد دایرهها آره گفته بودن و به ۳۱ درصد مربعها. مدلی که ستون گروه رو داشت، دقیقا همین رو یاد گرفت: ۵۰ و ۳۱. ستون گروه رو برداشتیم ولی محله رو گذاشتیم؛ فاصله کم شد ولی نرفت: ۴۵ و ۴۰. مدل از راه محله، بخشی از همون الگو رو دوباره پیدا کرد. فقط وقتی محله رو هم برداشتیم و درآمد تنها موند، فاصله از بین رفت: ۴۴ و ۴۵.
یه قاعدهی سرانگشتی قدیمی هم هست که از راهنمای استخدام ایالات متحده در سال ۱۹۷۸ اومده و بهش قاعدهی چهارپنجم میگن: اگه نرخ «آره» برای یه گروه کمتر از چهار پنجم نرخ گروه دیگه باشه، یعنی کمتر از ۰٫۸ برابرش، باید جدی بررسی بشه. اینجا تصمیمهای قبلی ۳۱ به ۵۱ بود، حدود ۰٫۶۱؛ خیلی زیر مرز. مدل با محله حدود ۰٫۸۹ بود. این قاعده حکم نهایی نیست، ولی یه زنگ ساده و خوبه.
جدا بسنجید
مهمترین کار عملی این درس اینه: درستی مدل رو فقط برای همه با هم نسنجید؛ برای هر گروه جدا هم بسنجید.
فرض کنید یه مدل وام، روی کل آزمون ۹۰ درصد درسته. عالی به نظر میاد. حالا جدا حساب میکنیم: برای دایرهها ۹۴ درصد، برای مربعها ۷۰ درصد. چرا میانگین اینقدر خوب بود؟ چون مربعها توی داده کم بودن و توی میانگین کل، صداشون شنیده نمیشد.
این دقیقا همون دامیه که توی درس دقت و دامش دیدیم: یه عدد کلی میتونه یه مشکل بزرگ رو قایم کنه. فقط این بار مشکل یه دستهی نادر نیست، یه گروه از آدمهاست.
و فقط درستی کلی هم نه. نوع اشتباهها رو هم جدا بسنجید؛ همون جدول درستها و غلطها، برای هر گروه جدا. چون برای کسی که وام لازم داره، «به اشتباه رد شدن» با «به اشتباه قبول شدن» خیلی فرق داره.
سنجیدن جدا، با کد
سنجیدن جدا برای هر گروه کار سختی نیست؛ چند خط پایتونه. این همون حسابیه که توی آزمایشهای پایینتر کردیم، با اسمهای خواناتر:
for group in ("circle", "square"):
rows = [r for r in test if r.group == group]
said = [model(r) for r in rows]
right = sum(s == r.repaid for s, r in zip(said, rows)) / len(rows)
good = [s for s, r in zip(said, rows) if r.repaid]
refused = 1 - sum(good) / len(good)
print(group, f"right {right:.0%}", f"wrongly refused {refused:.0%}")circle right 85% wrongly refused 15% square right 72% wrongly refused 35%
برای هر گروه، ردیفهاش رو جدا میکنیم، جواب مدل رو میگیریم، و دو تا عدد حساب میکنیم: چند درصد درست گفته، و از کسایی که واقعا وامشون رو پس دادن، چند درصد رو رد کرده. همین دو خط خروجی، مشکلی رو نشون داد که عدد کلی پنهونش کرده بود. اگه گروهها بیشتر از دو تا باشن، همین حلقه برای همه کار میکنه؛ فقط حواستون باشه گروهی که خیلی کم نمونه داره، عددهاش خودشون شانسیان و باید با احتیاط خونده بشن.
انصاف یعنی چی
خب، مدل منصف دقیقا یعنی چی؟ اینجا کار سخت میشه، چون انصاف یه تعریف نداره. سه تا تعریف معروف گروهی هست:
به یه اندازه «آره». هر گروه به یه نسبت جواب مثبت بگیره؛ مثلا اگه ۳۰ درصد دایرهها وام میگیرن، ۳۰ درصد مربعها هم بگیرن. سادهست، ولی اگه واقعا وضعیت دو گروه فرق داشته باشه، مدل مجبوره به بعضیها که نباید، آره بگه.
به یه اندازه اشتباه. اشتباههای مدل برای هر گروه یکی باشه: از بین کسایی که واقعا وامشون رو پس میدن، سهم کسایی که به اشتباه رد میشن، توی هر دو گروه یکی باشه. و برعکسش هم همینطور.
یه امتیاز، یه معنی. اگه مدل به یه نفر امتیاز ۸۰ بده، این امتیاز برای هر گروهی همونقدر قابل اعتماد باشه. یعنی امتیاز ۸۰ برای دایرهها و مربعها، یه احتمال پس دادن وام رو نشون بده.
مشکل اینجاست که این تعریفها میتونن با هم تناقض داشته باشن؛ وقتی دو گروه از اول وضعیت متفاوتی دارن، معمولا نمیشه همهشون رو با هم داشت. یعنی انتخاب تعریف انصاف یه تصمیم فنی نیست؛ یه تصمیم انسانیه، که باید با کسایی که تصمیم روی زندگیشون اثر داره، و با قانون، گرفت. کار شما اینه که بدونید این انتخاب وجود داره و بیصدا یکیش رو جای بقیه نذارید.
چرا همهی تعریفها با هم نمیشن
سال ۲۰۱۶ جان کلاینبرگ، سندیل مولاینیتن و منیش راگاوان، و سال ۲۰۱۷ الکساندرا شولدچوا، جدا از هم نشون دادن که وقتی نرخ واقعی پس دادن وام توی دو گروه فرق داره، یه مدل نمیتونه همزمان هم امتیازش برای هر دو گروه به یه اندازه قابل اعتماد باشه، هم نرخ اشتباههاش برای هر دو یکی باشه؛ مگه اینکه مدل بینقص باشه، که هیچ مدلی نیست.
یه تصویر ساده: فرض کنید توی یه گروه ۶۰ درصد آدمها پس میدن و توی گروه دیگه ۴۰ درصد. اگه امتیاز ۷۰ برای هر دو گروه یعنی «۷۰ درصد احتمال پس دادن»، چون آدمهای گروه دوم کمتر به امتیازهای بالا میرسن، بیشترشون پایینتر از مرز میافتن، و بین خوشحسابهاشون هم سهم بیشتری به اشتباه رد میشن. برای اینکه اشتباهها برابر بشن، باید معنی امتیاز رو برای یکی از گروهها عوض کنید. پس یکی رو باید انتخاب کرد، و این انتخاب، همونطور که گفتیم، انسانیه.
کجا درستش کنیم
وقتی فهمیدید مدل با یه گروه منصف نیست، سه جا میشه دست به کار شد:
قبل از آموزش، توی داده. مثلا به نمونهها وزن بدید، طوری که گروهی که کم بوده یا کمتر جواب مثبت داشته، توی آموزش صدای بیشتری داشته باشه. خوبیش اینه که خود مدل لازم نیست عوض بشه و دادهی درستشده رو برای هر مدلی میشه استفاده کرد. بهترین کار البته جمع کردن دادهی بیشتر از گروهیه که کم بوده.
حین آموزش. یه شرط به هدف آموزش اضافه کنید؛ مثلا اینکه نرخ قبول اشتباه برای هر دو گروه یکی باشه. مدل حالا هم باید خطا رو کم کنه و هم این شرط رو نگه داره.
بعد از آموزش، توی تصمیم. مدل یه امتیاز میده و ما با یه مرز تصمیم میگیریم که از چه امتیازی به بالا «آره». با جابهجا کردن این مرز میشه نرخهای اشتباه رو تنظیم کرد، بدون اینکه به خود مدل دست بزنیم.
هیچکدوم جادو نیست، و ممکنه یه کم از درستی کلی کم بشه. ولی مدلی که برای همه ۹۰ درصد و برای یه گروه ۷۰ درصده، در واقع ۹۰ درصد نیست؛ فقط اشتباههاش رو روی یه گروه ریخته.
وزن دادن، با یه مثال
راه اول، درست کردن داده، یه شکل ساده داره که فیصل کامران و تون کالدرز سال ۲۰۱۲ نوشتن. فرض کنید ۱۰۰ ردیف داریم: ۷۰ دایره که ۴۰ تاشون آره گرفتن، و ۳۰ مربع که ۱۰ تاشون. یعنی دایرهها حدود ۵۷ درصد آره، مربعها حدود ۳۳ درصد، و کل داده ۵۰ درصد. حالا به هر ردیف یه وزن میدیم، جوری که اگه گروه و جواب به هم ربطی نداشتن، همینقدر میدیدیم.
حسابش اینه: وزن هر ردیف میشه «سهم گروهش ضرب در سهم جوابش» تقسیم بر «سهم واقعی اون جفت گروه و جواب». برای مربعهایی که آره گرفتن: ۰٫۳ ضرب در ۰٫۵، تقسیم بر ۰٫۱، میشه ۱٫۵. برای مربعهایی که رد شدن: ۰٫۱۵ تقسیم بر ۰٫۲، میشه ۰٫۷۵. برای دایرههای آرهگرفته: ۰٫۳۵ تقسیم بر ۰٫۴، میشه ۰٫۸۷۵؛ و دایرههای ردشده حدود ۱٫۱۷. حالا اگه بشمریم، ۱۰ مربع آرهگرفته با وزن ۱٫۵ میشن ۱۵ از ۳۰، یعنی ۵۰ درصد؛ و ۴۰ دایره با وزن ۰٫۸۷۵ میشن ۳۵ از ۷۰، یعنی باز ۵۰ درصد. مدل با این وزنها آموزش میبینه و دیگه از داده یاد نمیگیره که گروه با جواب ربط داره.
وقتی یه گروه کمه، با عدد
حالا سرچشمهی دوم: نمونهی کم. یه دادهی ساختگی دیگه ساختیم که برچسبش، این بار، جواب واقعیه: وام رو پس داده یا نه. فرقش اینه که مربعها، به هر دلیلی، با درآمد کمتری هم وامشون رو پس میدن. مدل فقط درآمد رو میبینه. یه بار با ۵ درصد مربع آموزشش دادیم، یه بار ۳۰ درصد، یه بار ۵۰ درصد، و هر بار پرسیدیم از کسایی که واقعا پس میدادن، چند درصد رد شدن:
با ۵ درصد مربع، ۳۵ درصد مربعهایی که پس میدادن رد شدن، در برابر ۱۵ درصد دایرهها؛ درستی مدل برای مربعها ۷۲ درصد بود و برای دایرهها ۸۵. مدل تقریبا فقط دایرهها رو دیده بود و قانون دایرهها رو روی همه پیاده کرد. با ۳۰ درصد مربع، ۲۶ درصد، و با ۵۰ درصد، ۲۱. بهتر شد، ولی هیچوقت به دایرهها نرسید؛ چون یه خط برای همه، نمیتونه همزمان قانون هر دو گروه باشه. پس دادهی بیشتر کمک میکنه، ولی همیشه کافی نیست.
مرز جدا، بعد از آموزش
راه سوم، که بالاتر گفتیم، دست زدن به مرز تصمیمه. همون مدلی که با ۵ درصد مربع آموزش دیده بود رو برداشتیم و بی اینکه خود مدل رو عوض کنیم، فقط مرز «آره» رو برای مربعها کمی پایین آوردیم:
با مرز یکسان، ۳۵ درصد مربعهای خوشحساب رد میشدن. مرز رو ۰٫۵ پایین آوردیم، ۲۸ درصد؛ ۱ پایینتر، ۲۱؛ و ۱٫۵ پایینتر، ۱۶ درصد، تقریبا هماندازهی دایرهها. درستی مدل برای مربعها هم از ۷۷ به ۸۵ رسید، و برای دایرهها هیچ چیزی عوض نشد. موریتز هارت، اریک پرایس و نیتن سربرو سال ۲۰۱۶ همین ایده رو به شکل یه روش کامل نوشتن: مرزها رو جوری تنظیم کن که بین کسایی که واقعا پس میدن، سهم «آره» برای همهی گروهها یکی باشه.
ولی دقت کنید اینجا برای اینکه مرز جدا بذاریم، باید بدونیم هر نفر توی کدوم گروهه؛ همون حرفی که گفتیم برای سنجیدن انصاف، اتفاقا ویژگی حساس لازمه. و اینکه آیا مرز جدا گذاشتن برای گروهها مجازه یا نه، توی هر جا و هر کار، به قانون همونجا بستگی داره؛ این باز یه تصمیم انسانیه، نه فنی.
نمونههای واقعی
اینها حرف کتابی نیست. چند تا نمونهی ثبتشده، بی اسم شرکتها.
یه شرکت بزرگ نرمافزاری برای بررسی رزومه داشت که رزومههایی رو که کلمهی «زنان» توشون بود، جریمه میکرد؛ همون آینهی ده سال استخدام. سال ۲۰۱۸ جوی بولاموینی و تیمنیت گبرو روی سه سامانهی تجاری تشخیص جنسیت از روی چهره نشون دادن هر سه روی مردهای روشنپوست دقیقترین و روی زنهای تیرهپوست بدترین بودن؛ همون نمونهی کم از یه گروه. و سال ۲۰۱۹ یه سامانهی تعیین سقف کارت اعتباری به مردها سقف خیلی بالاتری از زنها میداد، حتی برای زن و شوهرهایی که همهی مالشون مشترک بود.
از حدود سال ۲۰۱۶ پژوهش روی این موضوع خیلی بیشتر شد، و حالا خیلی از سازمانها ابزار و راهنما برای پیدا کردن و کم کردن سوگیری دارن. ولی هیچ ابزاری جای فکر کردن رو نمیگیره.
چند نکته
بپرسید داده از کجا اومده؛ برچسبها تصمیم کی بوده و از کدوم گروهها کم نمونه دارید. به حذف ستون دلخوش نکنید و دنبال ستونهای جانشین بگردید. برای هر گروه جدا بسنجید، هم درستی و هم نوع اشتباهها. تعریف انصاف رو آگاهانه، با کسایی که تصمیم روشون اثر داره، انتخاب کنید و بنویسیدش. بعد از تحویل هم بپایید، چون با رانش، انصاف مدل هم میتونه عوض بشه. و برای تصمیمهای مهم یه آدم رو توی حلقه نگه دارید؛ مدل پیشنهاد بده و آدم تصمیم بگیره.
آدمی که تصمیم روش اثر داره
یه بخش از انصاف اصلا توی مدل نیست، توی روند کاره. کسی که وامش رد شده، باید بتونه بفهمه چرا، و راهی برای اعتراض داشته باشه؛ یه آدم که پروندهش رو دوباره نگاه کنه. اینجوری اگه مدل جایی اشتباه کرده، که میکنه، اون اشتباه یه جا تموم میشه، نه اینکه بیصدا تکرار بشه. همین اعتراضها هم بعدا دادهی خیلی خوبیان: نشون میدن مدل کجاها بیشتر اشتباه میکنه.
و نوشتن. همون کارت مدلی که توی درس مراحل پروژه دیدیم، اینجا یه بخش مهم داره: مدل رو برای کدوم گروهها جدا سنجیدید، عددهای هر گروه چی بود، و کدوم تعریف انصاف رو انتخاب کردید و چرا. هر کس بعدا با مدل کار کنه، باید بتونه همین رو بخونه.
اشتباههای رایج
رایجترینش سنجیدن فقط درستی کلی؛ دیدیم مدلی که برای دایرهها ۸۵ درصد درسته، برای مربعها ۷۲ درصد بود. بعدی حذف ستون حساس و خیال راحت؛ محله همون رو برگردوند. بعدی فرض اینکه برچسبها حقیقتن، وقتی تصمیم آدمهای قبلی بودن. بعدی انتخاب بیصدای یه تعریف انصاف بی اینکه به کسی بگید. بعدی درست کردن یه بار و فراموش کردن، در حالی که با رانش همهچی دوباره عوض میشه. و آخری، پاک کردن ستون حساس از همهجا، که دیگه حتی نمیشه سنجید مدل منصفه یا نه.
از کجا اومد
این موضوع قدیمیتر از یادگیری ماشینه؛ یادگیری ماشین فقط سرعتش رو بیشتر کرد:
قاعدهی چهارپنجم سال ۱۹۷۸ برای استخدام نوشته شد. کامران و کالدرز سال ۲۰۱۲ وزن دادن رو دادن. سال ۲۰۱۶ هم هارت و همکارهاش مرز جدا رو نوشتن، هم کلاینبرگ و همکارهاش نشون دادن تعریفها با هم جمع نمیشن؛ و از همون سال پژوهش روی این موضوع خیلی تندتر شد. سال ۲۰۱۸ هم بررسی چهرهها نشون داد این مشکل توی سامانههای تجاری واقعی هم هست.
برای اینکه بفهمید مدل منصفه یا نه، خیلی وقتها لازمه بدونید چرا این جواب رو داده. درس بعد دربارهی همینه:توضیحپذیری.
جمعبندی. آنچه از این درس با خودتان میبرید.
- مدل الگوی داده رو تکرار میکنه؛ خوب یا بد.
- سه سرچشمه: برچسب کج، نمونهی کم، ستون جانشین.
- حذف ستون حساس کافی نیست.
- درستی رو برای هر گروه جدا بسنجید.
- انصاف چند معنی داره؛ باید انتخاب کرد.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.