Mundarija (28)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Etik masalalar xaritasi
- 2.2. Maxfiylik: shaxsiy ma'lumot va qayta identifikatsiya
- 2.3. k-anonimlik
- 2.4. Differensial maxfiylik (DP)
- 2.5. Algoritmik adolatlilik: tarafkashlik qayerdan keladi
- 2.6. Guruh adolatliligi metrikalari
- 2.7. "Belgini olib tashlash yetarli emas"
- 2.8. Metrikalar bir vaqtda bajarilmaydi
- 2.9. Yumshatish usullari va ularning bahsli tomonlari
- 2.10. Shaffoflik va tushuntirish
- 2.11. Mas'uliyat: inson nazorati va apellyatsiya
- 2.12. Huquqiy asos — umumiy g'oyalar
- 2.13. Etik tekshiruv ro'yxati
- 2.14. Tuzoqlar
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — k-anonimlik: noyob yozuvlar, bog'lash hujumi va umumlashtirish narxi
- Misol 2 — Differensial maxfiylik: farqlash hujumi, Laplace mexanizmi va byudjet
- Misol 3 — Adolatlilik metrikalari: tarixiy tarafkashlik va proksi orqali sizish
- Misol 4 — Metrikalar ziddiyati va yumshatish: qayta og'irlash, guruhga xos chegara
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
29.11-dars: Ma'lumot etikasi va adolatlilik
29-QISM — LOYIHALAR VA KARYERA · 11-dars
1. Kirish va motivatsiya
Oldingi darsda intervyuning texnik qismini — ML, SQL va case study savollarini ko'rdik. Ko'p intervyularda, ayniqsa bank, sug'urta, tibbiyot va davlat xizmatlari bilan bog'liq lavozimlarda, suhbat oxirida boshqa turdagi savol beriladi: "Modelingiz kimga zarar qilishi mumkin? Buni qanday tekshirasiz?" Bu savolga "biz jinsni modelga qo'shmadik" deb javob berish — eng keng tarqalgan va eng xavfli xato. Bu darsda nima uchun shunday ekanini raqam bilan ko'rsatamiz.
Kursning boshida 1.7-bob etika haqida umumiy tushuncha oldik: tarafkashlik, maxfiylik, shaffoflik, mas'uliyat. 7.11 da ma'lumot yig'ishning qonuniy va etik chegaralarini, 25.13 da LLM tizimlarida shaxsiy ma'lumotni niqoblashni, 26.9 da generativ modellarda yodlab olish va tarafkashlikning kuchayishini ko'rdik. Endi bu g'oyalarni o'lchanadigan qilamiz: anonimlik darajasini son bilan, maxfiylik kafolatini parametr bilan, adolatlilikni guruh metrikalari bilan — va har birining narxini (aniqlik yoki foydalilik yo'qotilishini) ham o'lchaymiz.
Real vaziyat (faraziy, lekin tipik). Bank kredit skoring modelini yangiladi. Jamoa ehtiyot bo'ldi: modelda jins, yosh va millat yo'q. Model tarixiy qarorlar ustida o'qitildi va validatsiyada tarixiy qarorlarga 79% mos keldi. Yarim yildan keyin ichki audit ayollarning arizalari erkaklarnikidan ancha kam tasdiqlanayotganini aniqladi, holbuki qaytarmaslik darajasi ikki guruhda deyarli bir xil edi. Sabab ikki qatlamli: (1) model o'rgangan tarixiy qarorlarning o'zida tarafkashlik bor edi; (2) modeldagi "ish sohasi" belgisi jins bilan kuchli bog'liq bo'lib, olib tashlangan belgining vazifasini bajarib qo'ydi. Bu darsning 3-misolida aynan shu vaziyatni sintetik ma'lumotda quramiz — haqiqat ma'lum bo'lgani uchun tarafkashlik qayerdan kelganini aniq o'lchay olamiz.
Ikkinchi vaziyat — maxfiylik. Tibbiyot markazi tadqiqotchilarga "anonimlashtirilgan" bemorlar bazasini berdi: ism va telefon o'chirilgan, yosh, jins, pochta indeksi va tashxis qoldirilgan. 1-misolda ko'ramizki, shunday bazada yozuvlarning 78% i shu uch belgi bo'yicha noyob, va ochiq ro'yxat bilan bog'langanda 1500 kishidan 1190 tasining tashxisi aniqlanadi.
Bu darsda etik masalalarni "yaxshi niyat" darajasidan o'lchov va qaror darajasiga olib chiqamiz.
Bu darsda:
- Etik masalalar xaritasi: maxfiylik, adolatlilik, shaffoflik, mas'uliyat
- Maxfiylik: rozilik, minimallashtirish, anonimlashtirish va qayta identifikatsiya
- k-anonimlik noldan: kvaziidentifikatorlar, umumlashtirish, o'chirish, foydalilik narxi
- Differensial maxfiylik: Laplace mexanizmi, epsilon, kompozitsiya va byudjet
- Guruh adolatliligi metrikalari: demografik paritet, teng imkoniyat, teng koeffitsiyentlar, kalibrlash
- "Belgini olib tashlash yetarli emas": yorliqdagi tarafkashlik va proksi belgilar
- Metrikalar ziddiyati: asosiy stavkalar farq qilganda
- Yumshatish: qayta og'irlash, guruhga xos chegara — va ularning bahsli tomonlari
- Shaffoflik, mas'uliyat, huquqiy asos (umumiy) va etik tekshiruv ro'yxati
- Tuzoqlar
ℹ Misollar real numpy/pandas/sklearn bilan (Python 3.14). fairlearn, aif360 va maxfiylik kutubxonalari bu muhitda yo'q — hamma metrika va mexanizm noldan yoziladi. Ma'lumot sintetik va haqiqat ma'lum — shuning uchun har usulning ta'sirini aniq o'lchaymiz.
2. Nazariya — chuqur tushuntirish
2.1. Etik masalalar xaritasi
MA'LUMOT HAYOT SIKLI 29.1-bob
yig'ish -> saqlash -> tahlil/model -> qaror -> monitoring -> o'chirish
| | | | |
MAXFIYLIK XAVFSIZLIK ADOLATLILIK MAS'ULIYAT SHAFFOFLIK
rozilik, kirish guruh inson model kartasi,
maqsad, huquqi, metrikalari, nazorati, datasheet,
minimal shifrlash, proksi, apellyatsiya, tushuntirish
hajm audit yumshatish javobgar shaxs
SAVOLLAR:
kimning ma'lumoti? ular rozimi? kerakdan ortiq yig'yapmizmi?
kim foyda ko'radi, kim zarar? xato qilsak - kim tuzatadi va qanday?Etika — alohida "yakuniy bosqich" emas: har qadamda bitta savol bor. Bu darsda eng ko'p o'lchanadigan ikkitasiga — maxfiylik va adolatlilik ga — chuqur kiramiz, qolganlari uchun amaliy vositalar (model kartasi, tekshiruv ro'yxati) beramiz.
2.2. Maxfiylik: shaxsiy ma'lumot va qayta identifikatsiya
BELGI TURLARI:
TO'G'RIDAN IDENTIFIKATOR ism, pasport raqami, telefon, email
-> o'chiriladi yoki psevdonim bilan almashtiriladi
KVAZIIDENTIFIKATOR (QI) yosh, jins, pochta indeksi, kasb, tug'ilgan sana
-> YOLG'IZ tanitmaydi, BIRGALIKDA - barmoq izi
SEZGIR ATRIBUT tashxis, daromad, qarz, sudlanganlik
-> himoya qilinadigan narsaning o'zi
PSEVDONIMLASHTIRISH != ANONIMLASHTIRISH
psevdonim: ism -> "bemor_0042" (kalit kimdadir saqlanadi, qaytarsa bo'ladi)
anonim: hech kim, hech qanday qo'shimcha ma'lumot bilan qaytara olmaydi
-> ko'p qonunchilikda psevdonimlashgan ma'lumot HALI HAM shaxsiy ma'lumot
BOG'LASH HUJUMI (linkage):
"anonim" baza: [yosh, jins, indeks, TASHXIS]
ochiq ro'yxat: [ISM, yosh, jins, indeks] (klub, saylov, ijtimoiy tarmoq)
-> QI bo'yicha JOIN: noyob moslik = ism + tashxisAsosiy tamoyillar — deyarli barcha zamonaviy ma'lumot himoyasi yondashuvlarida takrorlanadi:
- Qonuniy asos va rozilik: ma'lumot aniq maqsad uchun, odam bilgan va rozi bo'lgan (yoki boshqa qonuniy asos bor) holda yig'iladi.
- Maqsad cheklovi: kredit uchun yig'ilgan ma'lumot reklama modeliga "shunchaki" o'tkazilmaydi.
- Minimallashtirish: vazifa uchun kerakli minimal belgilar va minimal aniqlik. Tug'ilgan sana o'rniga yosh guruhi, to'liq manzil o'rniga tuman — ko'p tahlil uchun yetarli.
- Saqlash muddati: kerak bo'lmay qolgan ma'lumot o'chiriladi.
- Xavfsizlik: kirish huquqi, shifrlash, audit jurnali (25.13 2.9-bo'lim).
Minimallashtirish — eng arzon himoya. Yig'ilmagan ma'lumot sizib chiqmaydi, qayta identifikatsiya qilinmaydi va uni himoya qilishga xarajat ketmaydi.
2.3. k-anonimlik
EKVIVALENTLIK SINFI: QI qiymatlari bir xil bo'lgan yozuvlar guruhi
k-ANONIMLIK: har sinfda kamida k ta yozuv
-> hujumchi QI ni bilsa ham, odamni k tadan biriga toraytiradi xolos
UMUMLASHTIRISH IERARXIYALARI:
yosh: 37 -> 35-39 -> 30-39 -> 20-39 -> *
indeks: 100417 -> 10041* -> 1004** -> 100*** -> *
jins: erkak -> *
O'CHIRISH (suppression): k dan kichik sinflardagi kam sonli yozuvni tashlash
umumlashtirish bilan birga: "kichik darajada umumlashtir + ozgina o'chir"
FOYDALILIK NARXI (o'lchang!):
yosh MAE (oraliq o'rtasi va haqiqiy yosh farqi), hududlar soni,
tahliliy vazifa sifati (model AUC, kichik hudud statistikasi)
TANLOV QOIDASI: talab qilingan k ga yetadigan ENG KAM umumlashtirishk-anonimlikning cheklovlari:
1. BIR XILLIK HUJUMI: sinfda 7 kishi, hammasi "diabet"
-> k = 7, lekin tashxis baribir ochiq
yechim g'oyasi: l-xilma-xillik (har sinfda kamida l xil sezgir qiymat)
2. FON BILIM: "qo'shnim 60 yoshda, gipertoniya kam uchraydigan sinfda emas"
-> ehtimollar bo'yicha xulosa
yechim g'oyasi: t-yaqinlik (sinfdagi taqsimot umumiy taqsimotga yaqin)
3. KO'P O'LCHAM: QI soni oshganda deyarli har yozuv noyob
-> k ga yetish uchun shunchalik umumlashtirish kerakki, ma'lumot foydasiz
4. KO'P NASHR: bir bazaning ikki xil umumlashgan nusxasi birlashtirilsa
-> k buziladik-anonimlik — sintaktik xossa: ma'lumotning shakli haqida. U hujumchining bilimi va boshqa manbalar haqida hech narsa kafolatlamaydi. Kuchliroq, matematik kafolat — differensial maxfiylik.
2.4. Differensial maxfiylik (DP)
G'oya: e'lon qilingan natija har qanday bitta odam bazada bor-yo'qligiga deyarli bog'liq bo'lmasin. Shunda natijadan hech kim haqida ko'p narsa bilib bo'lmaydi — hujumchi qancha fon bilimga ega bo'lmasin.
TA'RIF (epsilon-DP): M mexanizm, D va D' - bitta odam bilan farq qiluvchi
bazalar. Har qanday natijalar to'plami S uchun:
P[M(D) in S] <= e^eps * P[M(D') in S]
eps kichik -> ikki olam deyarli ajralmaydi -> maxfiylik kuchli
SEZGIRLIK (sensitivity): bitta odam so'rov javobini ko'pi bilan qanchaga
o'zgartiradi
sanoq ("nechta diabet?") Delta = 1
chegaralangan o'rtacha, qiymat [a, b] Delta = (b - a) / n
yig'indi, qiymat [0, C] Delta = C
LAPLACE MEXANIZMI:
javob = haqiqiy + Laplace(0, Delta / eps)
o'rtacha absolyut xato = Delta / eps
eps = 0.1 -> sanoqda ~10 xato; eps = 1 -> ~1 xato
KOMPOZITSIYA: eps1 va eps2 li ikki so'rov birgalikda (eps1 + eps2)-DP
-> bir so'rovni 100 marta so'rab o'rtachalash shovqinni yo'qotadi,
lekin maxfiylik yo'qotilishi ham 100 barobar
-> MAXFIYLIK BYUDJETI: jami eps oldindan belgilanadi va sarflanadiAmaliy tomoni. DP statistik e'lonlarda (aholi ro'yxati jadvallari, mahsulot telemetriyasi) va model o'qitishda (DP-SGD — gradientlarni kesish va shovqin qo'shish) qo'llanadi. Narxi aniq: kichik guruhlar bo'yicha statistika eng ko'p zarar ko'radi (25 kishilik uchastkada 2 ta diabet sanog'iga eps = 0.1 da o'rtacha 5 barobar xato qo'shiladi — 2-misol). Qaysi eps "yetarli" ekani — texnik emas, siyosiy va huquqiy qaror; bitta universal javob yo'q, lekin eps ni oshkor qilish va byudjetni hisoblash — halollik talabi.
DP farqlash hujumini to'xtatadi: "hamma" va "X dan boshqa hamma" so'rovlari aniq javob bersa, ularning farqi X ning sezgir qiymatini aynan beradi. Shovqin bilan esa farq X haqida faqat cheklangan ma'lumot beradi (e^eps bilan chegaralangan).
2.5. Algoritmik adolatlilik: tarafkashlik qayerdan keladi
MANBA MISOL MODEL NIMA QILADI
TARIXIY o'tmishda ayollarga kredit kam tarixni "to'g'ri javob"
berilgan (inspektor tarafkashligi) deb o'rganadi va takrorlaydi
YORLIQ / O'LCHASH "yaxshi xodim" = rahbar bahosi; o'lchov xatosini haqiqat
"jinoyat" = hibsga olish (nazorat deb qabul qiladi
ko'p joyda ko'p hibs)
VAKILLIK (namuna) qishloq mijozlari ma'lumotda kam kam guruhda xato ko'p
AGREGATSIYA bitta model hamma guruhga, ko'pchilikka moslashadi
munosabatlar esa guruhda farqli
QAYTA ALOQA rad etilgan mijozning natijasi xato o'zini tasdiqlaydi
hech qachon kuzatilmaydi (selective labels)
PROKSI soha, tuman, xarid turi - himoyalangan olib tashlangan belgini
belgi bilan bog'liq "qayta tiklaydi"Himoyalangan belgi — jins, yosh, millat, din, nogironlik va shunga o'xshash, qonun yoki etika bo'yicha qaror asosi bo'lmasligi kerak bo'lgan belgilar. Aniq ro'yxat mamlakat va sohaga bog'liq.
2.6. Guruh adolatliligi metrikalari
Belgilash: d — model qarori (1 = tasdiq), y — haqiqiy natija (1 = qaytaradi), g — guruh.
DEMOGRAFIK PARITET (DP) P(d=1 | g=A) = P(d=1 | g=B)
"tasdiq ulushi teng" farq yoki nisbat (B/A) bilan o'lchanadi
y ga qaramaydi guruhlarda asosiy stavka farq qilsa - bahsli
TENG IMKONIYAT (equal opportunity)
TPR_A = TPR_B, TPR = P(d=1 | y=1, g)
"qaytaradiganlar orasida "munosib" odamga imkoniyat teng
tasdiqlanish teng"
TENG KOEFFITSIYENTLAR (equalized odds)
TPR_A = TPR_B va FPR_A = FPR_B
ikkala xato turi teng FPR = P(d=1 | y=0, g)
PREDIKTIV PARITET PPV_A = PPV_B, PPV = P(y=1 | d=1, g)
"tasdiqlanganlar orasida
qaytarish teng"
GURUH BO'YICHA KALIBRLASH P(y=1 | ball=s, g) = s har guruhda
"0.7 ball ikkala guruhda ham (14.10 dagi kalibrlash - endi guruh kesimida)
70% ni bildiradi"Muhim eslatma: TPR, FPR, PPV, kalibrlash — haqiqiy y ni talab qiladi. Real hayotda ko'pincha faqat tarixiy (ehtimol tarafkash) yorliq bor, rad etilganlar uchun esa natija umuman kuzatilmaydi. Shuning uchun sintetik tajriba, kichik tasodifiy sinov 27.13-bob yoki tashqi manba bilan tekshirish qimmatli.
Sezilarlilik. Metrika farqi ham baho — uning SE si bor. Kichik guruhda TPR farqi 0.05 tasodif bo'lishi mumkin. 11-qism va 18.10 dagi qoida shu yerda ham: bootstrap yoki bir necha urug' bilan SE, "2*SE dan katta bo'lsa sezilarli".
2.7. "Belgini olib tashlash yetarli emas"
"Adolat ko'rlik orqali" (fairness through unawareness):
modeldan g ni olib tashlaymiz -> model g ni "bilmaydi"
NEGA ISHLAMAYDI:
1. YORLIQ tarafkash: y_tarix = f(qobiliyat) - jarima * g
-> model qobiliyat bilan birga "jarima" ni ham o'rganishga intiladi
2. PROKSI: soha, tuman, ism, xarid turi g bilan bog'liq
-> model jarimani proksi orqali qayta tiklaydi
3. KO'P ZAIF PROKSI birgalikda kuchli proksi bo'ladi
PROKSI TEKSHIRUVI:
g ni qolgan belgilardan bashorat qiling -> AUC ~ 0.5 bo'lsa proksi kuchsiz,
AUC 0.8+ bo'lsa - belgilarda g haqida ko'p ma'lumot bor
PARADOKS: adolatlilikni O'LCHASH uchun g KERAK
-> g ni o'chirib tashlagan jamoa muammoni ko'rmaydi, lekin u yo'qolmaydi
-> g ni alohida, cheklangan kirish bilan, faqat audit uchun saqlash28.11 bilan bog'liqlik: proksi — "g → soha → qaror" yo'li. Qaysi yo'l "ruxsat etilgan" (masalan, daromad orqali) va qaysi biri "ruxsat etilmagan" (inspektor jarimasi) — bu ma'lumot emas, qadriyat va qonun masalasi. Sababiy grafik (DAG) bu munozarani aniq qiladi.
2.8. Metrikalar bir vaqtda bajarilmaydi
CHOULDECHOVA AYNIYATI (har guruh uchun, b - asosiy stavka P(y=1)):
FPR = b / (1 - b) * (1 - PPV) / PPV * TPR
AGAR b_A != b_B bo'lsa va model mukammal bo'lmasa:
PPV teng (prediktiv paritet) va TPR teng -> FPR TENG BO'LA OLMAYDI
kalibrlangan ball + bitta chegara -> TPR va FPR odatda farq qiladi
TPR ni guruhga xos chegara bilan tenglasak -> PPV va kalibrlash buziladi
XULOSA: "adolatli model" - bitta ta'rif emas; qaysi metrikani ustun
qo'yish - kontekst va qadriyat tanlovi, uni OSHKORA yozish kerak
kredit: noto'g'ri RAD (FNR) kimga tushadi? noto'g'ri TASDIQ narxi kimda?
tibbiy skrining: kasalni o'tkazib yuborish (TPR) - ustuvor
ishga olish: tasdiq ulushlari (DP) ko'pincha qonuniy tekshiruv mezoni4-misolning birinchi qismida bu ayniyatni raqam bilan tekshiramiz: formula ikkala guruhda o'lchangan FPR ni aynan beradi.
2.9. Yumshatish usullari va ularning bahsli tomonlari
BOSQICH USUL g QACHON KERAK BAHSLI TOMONI
OLDIN (pre) qayta og'irlash (reweighing) o'qitishda yorliqqa "tuzatish" -
w(g,y) = P(g) P(y) / P(g,y) tarixni qayta yozish
qayta namuna, yorliqni tuzatish
ICHIDA (in) adolatlilik cheklovli o'qitishda murakkab, izohlash
optimallash, jarima hadi qiyin
KEYIN (post) guruhga xos chegara QAROR paytida bir xil ball -> turli
(DP yoki TPR ni tenglash) qaror: ko'p huquqiy
tizimlarda to'g'ridan
kamsitish deb
qaralishi mumkin
MA'LUMOT proksini olib tashlash, tahlilda proksi ham qonuniy
yangi, xolis yorliq yig'ish signal bo'lishi mumkin;
yangi yorliq - qimmatHalol pozitsiya: har bir yumshatish usuli qaysidir qadriyatni boshqasidan ustun qo'yadi. Guruhga xos chegara DP ni aniq tenglaydi, lekin qarorda himoyalangan belgidan to'g'ridan foydalanadi — bu ba'zi huquqiy tizimlarda taqiqlangan, boshqalarida muayyan sharoitda ruxsat etilgan. Qayta og'irlash belgidan faqat o'qitishda foydalanadi, lekin farqni to'liq yo'qotmaydi. Qaysi yo'l tanlanishi — Data Scientist yolg'iz hal qiladigan masala emas: yuristlar, biznes egalari va ta'sirlangan guruhlar vakillari bilan birga, raqamlar ustida qabul qilinadi. Data Scientist ning vazifasi — har variantning narxi va ta'sirini o'lchab, aniq ko'rsatish.
Aniqlik va adolatlilik murosasi — qaysi aniqlik? Tarafkash yorliqqa nisbatan o'lchangan aniqlik adolatli modelni "jazolaydi": 4-misolda guruhga xos chegara tarixiy qarorlarga mosligini 0.020 ga pasaytirdi, lekin haqiqiy qaytarishga mosligini 0.019 ga oshirdi. Real hayotda ikkinchi raqam odatda ko'rinmaydi — shuning uchun "adolat aniqlikni pasaytirdi" degan xulosani yozishdan oldin, aniqlik qaysi yorliqqa nisbatan ekanini so'rang.
2.10. Shaffoflik va tushuntirish
MODEL KARTASI (26.9 2.8-bo'lim, 26.10, 29.3):
maqsad va qo'llanish chegarasi | o'quv ma'lumoti va davri
metrikalar - UMUMIY va GURUHLAR bo'yicha, SE bilan
ma'lum cheklovlar va tuzoqlar | qaysi qarorlarda ISHLATILMAYDI
adolatlilik tahlili: qaysi metrika, nega, natija
egasi, versiya, qayta ko'rib chiqish sanasi
DATASHEET (ma'lumot uchun):
kim, nima uchun, qachon yig'di | rozilik va qonuniy asos
kimlar vakili yetarli emas | yorliq qanday olingan (kim baholagan?)
ma'lum tarafkashliklar | saqlash muddati, kirish huquqi
TUSHUNTIRISH (rad etilgan mijoz uchun):
sabab kodlari: "qarz yuki yuqori", "kredit tarixi qisqa"
(13.3 koeffitsiyent talqini, 15.11 belgi muhimligi)
"nima o'zgarsa natija o'zgaradi" (kontrfaktual tushuntirish g'oyasi)2.11. Mas'uliyat: inson nazorati va apellyatsiya
INSON NAZORATI (human-in-the-loop):
yuqori ta'sirli qaror (kredit rad, tibbiy, ishdan bo'shatish) -> inson ko'radi
TUZOQ: avtomatlashtirish tarafkashligi - inson modelga ko'r-ko'rona ergashadi
-> inson qancha holatda modeldan farqli qaror qilganini o'lchang
APELLYATSIYA: rad etilgan odam qaror ustidan shikoyat qila oladi
-> kanal, muddat, javobgar shaxs; apellyatsiya natijalari - yangi yorliq manbai
AUDIT JURNALI 25.13-bob: qaysi model versiyasi, qaysi kirish, qanday qaror
MONITORING (27.11, 27.12): metrikalar guruhlar bo'yicha, har oy
-> guruh metrikasi chegaradan chiqsa - ogohlantirish, xuddi drift kabi
JAVOBGARLIK: har model uchun aniq egasi; "algoritm qaror qildi" - javob emas2.12. Huquqiy asos — umumiy g'oyalar
Ko'p mamlakatlarda shaxsiy ma'lumotlar haqida qonunlar bor, Yevropa Ittifoqining GDPR (umumiy ma'lumotlarni himoya qilish reglamenti) esa bu sohadagi eng ko'p tilga olinadigan namuna. Aniq talablar mamlakatga, sohaga va vaqtga qarab farq qiladi va o'zgarib turadi — joriy talablarni rasmiy manbalardan va yurist bilan tekshiring. Umumiy g'oyalar:
- qonuniy asos (rozilik, shartnoma, qonuniy majburiyat va boshqalar)
- maqsad cheklovi, minimallashtirish, saqlash muddati
- sub'ekt huquqlari: o'z ma'lumotini ko'rish, tuzatish, o'chirishni so'rash
- faqat avtomatlashtirilgan, jiddiy oqibatli qarorlarga nisbatan himoya
g'oyasi (inson ko'rib chiqishi, tushuntirish)
- yuqori xavfli qayta ishlashdan oldin ta'sirni baholash (DPIA g'oyasi)
- sizib chiqish holatida xabar berish majburiyati
- ma'lumotni chegaradan tashqariga uzatish cheklovlari
- kamsitishga qarshi qonunlar - himoyalangan belgilar va ta'sir tahlili2.13. Etik tekshiruv ro'yxati
MAQSAD [ ] qaror kimga ta'sir qiladi? xato narxi kimda?
[ ] model umuman kerakmi (oddiy qoida yetarlimi)?
MA'LUMOT [ ] qonuniy asos va rozilik bormi? maqsad mos keladimi?
[ ] minimallashtirish: har belgi nima uchun kerak?
[ ] kvaziidentifikatorlar: noyob yozuvlar ulushi, k
[ ] yorliq qanday olingan? unda tarafkashlik bo'lishi mumkinmi?
[ ] qaysi guruhlar vakili kam?
MODEL [ ] himoyalangan belgi faqat audit uchun, cheklangan kirish bilan
[ ] proksi tekshiruvi (g ni belgilardan bashorat qilish AUC)
[ ] guruh metrikalari: DP, TPR, FPR, PPV, kalibrlash + SE
[ ] qaysi metrika ustuvor va NEGA - yozma asoslash
[ ] yumshatish variantlari: har birining narxi o'lchangan
QAROR [ ] inson nazorati, apellyatsiya kanali, sabab kodlari
[ ] model kartasi va datasheet
ISHLAB CHIQ. [ ] guruh metrikalari monitoringi va chegaralari
[ ] audit jurnali, egasi, qayta ko'rib chiqish sanasi
[ ] saqlash muddati va o'chirish jarayoni2.14. Tuzoqlar
Asosiy tuzoqlar: ism va telefonni o'chirib, ma'lumotni "anonim" deb e'lon qilish; psevdonimni anonimlik deb hisoblash; k-anonimlikni bir xillik hujumisiz tekshirish; bitta bazaning bir necha umumlashgan nusxasini e'lon qilish; DP da eps ni oshkor qilmaslik va byudjetni hisoblamaslik; aniq javob beradigan so'rov interfeysini ochiq qo'yish (farqlash hujumi); himoyalangan belgini modeldan olib tashlab, masalani hal qilindi deb hisoblash; himoyalangan belgini butunlay o'chirib, adolatlilikni o'lchash imkonini yo'qotish; bitta metrikani tekshirib "model adolatli" deyish; metrika farqlarini SE siz talqin qilish; aniqlikni tarafkash yorliqqa nisbatan o'lchab, "adolat aniqlikni pasaytiradi" deyish; yumshatish usulini uning huquqiy va etik oqibatlarini aytmasdan tavsiya qilish; inson nazoratini rasmiyatchilikka aylantirish; guruh metrikalarini faqat deploy oldidan tekshirib, monitoringga qo'shmaslik.
3. Tez ma'lumotnoma
import numpy as np
import pandas as pd
# k-anonimlik: har yozuvning sinf hajmi
qi = ["yosh_g", "jins", "indeks_g"]
hajm = df.groupby(qi)["jins"].transform("size")
k = int(hajm.min())
noyob_ulush = float((hajm == 1).mean())
xavfli_ulush = float((hajm < 5).mean()) # k = 5 uchun o'chiriladigan
# umumlashtirish
def yosh_oraliq(yosh, w):
q = (yosh // w) * w
return q.astype(str) + "-" + (q + w - 1).astype(str)
indeks_g = df["indeks"].astype(str).str[:4] + "**"
# differensial maxfiylik: Laplace
rng = np.random.default_rng(0)
javob = haqiqiy_sanoq + rng.laplace(0.0, 1.0 / eps) # sezgirlik 1
orta = x.clip(a, b).mean() + rng.laplace(0.0, (b - a) / len(x) / eps)
# guruh metrikalari
def guruh_metrikalari(d, y, g):
r = {}
for gg in np.unique(g):
m = g == gg
r[gg] = {"tasdiq": d[m].mean(),
"TPR": d[m & (y == 1)].mean(),
"FPR": d[m & (y == 0)].mean(),
"PPV": y[m & (d == 1)].mean()}
return r
# qayta og'irlash (reweighing)
w = np.ones(len(y))
for gg in (0, 1):
for yy in (0, 1):
m = (g == gg) & (y == yy)
w[m] = (g == gg).mean() * (y == yy).mean() / m.mean()
# model.fit(X, y, sample_weight=w)
# guruhga xos chegara: B guruhida tasdiq ulushini A ga tenglash
ulush_a = (p[g == 0] >= 0.5).mean()
t_b = np.quantile(p[g == 1], 1 - ulush_a)
d = np.where(g == 1, p >= t_b, p >= 0.5)Qaysi metrika qachon (umumiy yo'l-yo'riq, qat'iy qoida emas)
| Kontekst | Ko'pincha ustuvor metrika | Nega |
|---|---|---|
| Ishga olish, ta'lim, uy-joy | Demografik paritet (tasdiq nisbati) | Ko'p qonuniy tekshiruvlar tasdiq ulushlariga qaraydi |
| Kredit, sug'urta | Guruh bo'yicha kalibrlash + TPR/FPR | Ball narxga aylanadi — u har guruhda bir xil ma'noli bo'lishi kerak |
| Tibbiy skrining | Teng imkoniyat (TPR) | Kasalni o'tkazib yuborish har guruhda bir xil kam bo'lishi kerak |
| Jazo va nazorat | Teng koeffitsiyentlar (FPR ayniqsa) | Nohaq "xavfli" deb belgilash og'ir oqibatli |
| Resurs taqsimoti | Ehtiyoj bo'yicha kalibrlash | Bir xil ehtiyojga bir xil ball |
Maxfiylik vositalari
| Vosita | Nimani kafolatlaydi | Narxi |
|---|---|---|
| To'g'ridan identifikatorni o'chirish | Hech narsani (faqat birinchi qadam) | Deyarli yo'q |
| Psevdonim | Tasodifiy ko'rishdan himoya | Kalitni himoya qilish kerak |
| k-anonimlik | QI bo'yicha kamida k ta "egizak" | Umumlashtirish, o'chirish; bir xillik hujumi |
| Differensial maxfiylik | Har odamning ta'siri e^eps bilan chegaralangan |
Shovqin, byudjet, kichik guruhlar |
| Sintetik ma'lumot | Mexanizmiga bog'liq (DP siz — kafolatsiz, 26.9) | Real munosabatlar buzilishi |
Etika xulosasi
minimal yig' -> QI ni tekshir (noyob ulush, k) -> umumlashtir + o'chir -> foydalilikni o'lcha
e'lon: DP, eps oshkor, byudjet; aniq so'rov interfeysi yo'q
adolat: g faqat audit uchun -> proksi AUC -> DP, TPR, FPR, PPV, kalibrlash + SE
belgini olib tashlash yetarli emas; metrikalar ziddiyatli - tanlovni yozing
yumshatish: narxini o'lchang, huquqiy tomonini ayting; inson nazorati va apellyatsiya4. Batafsil misollar
Misollar real numpy/pandas/sklearn bilan (Python 3.14). Har misol mustaqil ishlaydi; ma'lumot sintetik, urug' bilan yaratiladi va haqiqat ma'lum.
Misol 1 — k-anonimlik: noyob yozuvlar, bog'lash hujumi va umumlashtirish narxi
"""k-anonimlik noldan: kvaziidentifikatorlar, bog'lash hujumi, umumlashtirish."""
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
TASHXISLAR = ["sog'lom", "gipertoniya", "diabet", "astma", "depressiya"]
DARAJALAR = [ # (nom, yosh oralig'i, indeksdan yashiriladigan raqamlar)
("L0 xom", 1, 0),
("L1 yosh 5", 5, 0),
("L2 yosh 5, indeks 5 raqam", 5, 1),
("L3 yosh 10, indeks 4 raqam", 10, 2),
("L4 yosh 20, indeks 4 raqam", 20, 2),
("L5 yosh 20, indeks 3 raqam", 20, 3),
]
def yarat(seed=0, n=6000):
"""Tibbiy markaz bazasi: yosh, jins, pochta indeksi va tashxis."""
rng = np.random.default_rng(seed)
yosh = np.clip(rng.gamma(6.0, 7.0, n) + 12, 18, 90).astype(int)
jins = rng.choice(["erkak", "ayol"], n)
tuman = rng.choice(9, n, p=np.array([5, 4, 4, 3, 3, 2, 2, 1, 1]) / 25)
uchastka = rng.integers(0, 30, n)
indeks = 100000 + (tuman + 1) * 100 + uchastka
risk = np.column_stack([
np.full(n, 2.0),
-2.5 + 0.045 * yosh,
-4.0 + 0.05 * yosh,
np.full(n, -1.2),
np.full(n, -1.0),
])
p = np.exp(risk) / np.exp(risk).sum(1, keepdims=True)
tashxis = np.array([rng.choice(5, p=q) for q in p])
return pd.DataFrame({"yosh": yosh, "jins": jins, "indeks": indeks,
"tashxis": np.array(TASHXISLAR)[tashxis]})
def umumlashtir(df, oraliq, yashir):
"""Yoshni oraliqqa, indeksni oxirgi raqamlarini yulduzcha bilan almashtiradi."""
quyi = (df["yosh"] // oraliq) * oraliq
yosh_g = (quyi.astype(str) + "-" + (quyi + oraliq - 1).astype(str)
if oraliq > 1 else df["yosh"].astype(str))
s = df["indeks"].astype(str)
indeks_g = s.str[:6 - yashir] + "*" * yashir if yashir else s
return pd.DataFrame({"yosh_g": yosh_g, "jins": df["jins"], "indeks_g": indeks_g,
"orta_yosh": quyi + (oraliq - 1) / 2})
def main() -> None:
df = yarat()
qi = ["yosh_g", "jins", "indeks_g"]
print("=== 1. Baza: 6000 bemor, kvaziidentifikatorlar: yosh, jins, indeks ===")
print(f" noyob yosh {df.yosh.nunique()}, noyob indeks {df.indeks.nunique()}")
print(" tashxislar:", ", ".join(f"{k} {v:.3f}" for k, v in
df.tashxis.value_counts(normalize=True)
.sort_index().items()))
rng = np.random.default_rng(1)
ochiq_i = np.sort(rng.choice(len(df), 1500, replace=False))
ochiq = df.iloc[ochiq_i][["yosh", "jins", "indeks"]].copy()
ochiq["ism"] = [f"shaxs_{i:04d}" for i in range(len(ochiq))]
print(" ochiq ro'yxat (masalan, klub a'zolari): 1500 kishi - ism + yosh, "
"jins, indeks")
print("\n=== 2. Umumlashtirish darajalari: xavf va foydalilik ===")
print(f" {'daraja':<27} {'sinflar':>7} {'k':>3} {'noyob':>6} {'k<5':>6} "
f"{'bog_landi':>9} {'bir_xil':>7} {'hudud':>5} {'yosh_MAE':>8} {'AUC':>6}")
y_sur = df.tashxis.isin(["diabet", "gipertoniya"]).to_numpy().astype(int)
natijalar = []
for nom, oraliq, yashir in DARAJALAR:
g = umumlashtir(df, oraliq, yashir)
hajm = g.groupby(qi)["jins"].transform("size")
sinf_soni = g.groupby(qi).ngroups
noyob = float((hajm == 1).mean())
kichik = float((hajm < 5).mean())
# bog'lash hujumi: ochiq ro'yxatdagi odam umumlashgan bazada yolg'iz
og = umumlashtir(ochiq, oraliq, yashir)
kalit = g[qi].astype(str).agg("|".join, axis=1)
okalit = og[qi].astype(str).agg("|".join, axis=1)
sanoq = kalit.value_counts()
bog = int((okalit.map(sanoq).fillna(0) == 1).sum())
# bir xillik: k >= 5 bo'lsa ham sinfda bitta tashxis
tur = g.assign(t=df.tashxis).groupby(qi)["t"].transform("nunique")
bir_xil = float(((hajm >= 5) & (tur == 1)).mean())
mae = float(np.abs(g["orta_yosh"] - df["yosh"]).mean())
X = np.column_stack([g["orta_yosh"], g["orta_yosh"] ** 2 / 100,
(g["jins"] == "ayol").astype(float)])
yarim = len(df) // 2
m = LogisticRegression(max_iter=2000).fit(X[:yarim], y_sur[:yarim])
auc = roc_auc_score(y_sur[yarim:], m.predict_proba(X[yarim:])[:, 1])
k = int(hajm.min())
natijalar.append((nom, k, kichik, auc))
print(f" {nom:<27} {sinf_soni:>7} {k:>3} {noyob:>6.3f} {kichik:>6.3f} "
f"{bog:>9} {bir_xil:>7.3f} {g.indeks_g.nunique():>5} {mae:>8.2f} "
f"{auc:>6.3f}")
print("\n=== 3. k = 5 uchun: umumlashtirish + kichik sinflarni o'chirish ===")
tanlov = None
for nom, oraliq, yashir in DARAJALAR:
g = umumlashtir(df, oraliq, yashir)
hajm = g.groupby(qi)["jins"].transform("size")
ochir = float((hajm < 5).mean())
ok = ochir <= 0.02
holat = "yetarli (<= 2%)" if ok else "juda ko'p"
print(f" {nom:<27} o'chiriladigan ulush {ochir:.3f} {holat}")
if ok and tanlov is None:
tanlov = nom
print(f" eng kam umumlashtirish bilan k >= 5 (o'chirish <= 2%): {tanlov}")
oraliq, yashir = [(o, y) for n, o, y in DARAJALAR if n == tanlov][0]
g = umumlashtir(df, oraliq, yashir)
hajm = g.groupby(qi)["jins"].transform("size")
qoldi = g[hajm >= 5]
print(f" o'chirishdan keyin: {len(qoldi)} qator, k = "
f"{qoldi.groupby(qi).size().min()}, har yozuv kamida 5 kishi bilan "
f"bir xil ko'rinadi")
auc0 = natijalar[0][3]
auct = [a for n, _, _, a in natijalar if n == tanlov][0]
print(f" surunkali kasallik modeli AUC: xom {auc0:.3f} -> tanlangan {auct:.3f} "
f"(farq {auct - auc0:+.3f})")
print(" ⭐ Ismni o'chirish anonimlik emas: yosh + jins + indeks - barmoq izi")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Baza: 6000 bemor, kvaziidentifikatorlar: yosh, jins, indeks ===
noyob yosh 73, noyob indeks 270
tashxislar: astma 0.033, depressiya 0.038, diabet 0.034, gipertoniya 0.120, sog'lom 0.775
ochiq ro'yxat (masalan, klub a'zolari): 1500 kishi - ism + yosh, jins, indeks
=== 2. Umumlashtirish darajalari: xavf va foydalilik ===
daraja sinflar k noyob k<5 bog_landi bir_xil hudud yosh_MAE AUC
L0 xom 5319 1 0.782 1.000 1190 0.000 270 0.00 0.715
L1 yosh 5 3681 1 0.370 0.944 557 0.014 270 1.22 0.715
L2 yosh 5, indeks 5 raqam 761 1 0.013 0.120 19 0.075 27 1.22 0.715
L3 yosh 10, indeks 4 raqam 150 1 0.001 0.005 2 0.007 9 2.57 0.713
L4 yosh 20, indeks 4 raqam 78 1 0.001 0.001 2 0.003 9 4.85 0.707
L5 yosh 20, indeks 3 raqam 10 2 0.000 0.001 0 0.000 1 4.85 0.707
=== 3. k = 5 uchun: umumlashtirish + kichik sinflarni o'chirish ===
L0 xom o'chiriladigan ulush 1.000 juda ko'p
L1 yosh 5 o'chiriladigan ulush 0.944 juda ko'p
L2 yosh 5, indeks 5 raqam o'chiriladigan ulush 0.120 juda ko'p
L3 yosh 10, indeks 4 raqam o'chiriladigan ulush 0.005 yetarli (<= 2%)
L4 yosh 20, indeks 4 raqam o'chiriladigan ulush 0.001 yetarli (<= 2%)
L5 yosh 20, indeks 3 raqam o'chiriladigan ulush 0.001 yetarli (<= 2%)
eng kam umumlashtirish bilan k >= 5 (o'chirish <= 2%): L3 yosh 10, indeks 4 raqam
o'chirishdan keyin: 5967 qator, k = 5, har yozuv kamida 5 kishi bilan bir xil ko'rinadi
surunkali kasallik modeli AUC: xom 0.715 -> tanlangan 0.713 (farq -0.002)
⭐ Ismni o'chirish anonimlik emas: yosh + jins + indeks - barmoq iziNatija tahlili.
1-bo'lim — baza. 6000 bemor, 73 xil yosh, 270 xil pochta indeksi. Tashxislarning 77.5% i "sog'lom", qolganlari gipertoniya (12.0%), depressiya, diabet va astma. Ochiq ro'yxatda 1500 kishining ismi va o'sha uch belgisi bor — bunday ro'yxatlar (klub a'zolari, tadbir ishtirokchilari, ijtimoiy tarmoq profillari) amalda ko'p uchraydi.
2-bo'lim — xavf va foydalilik jadvali. Xom holatda (L0) 5319 ta sinf bor va yozuvlarning 78.2% i noyob: yosh, jins va indeks birgalikda odamni yolg'iz ajratadi. Bog'lash hujumi 1500 kishidan 1190 tasini aniq topdi — ya'ni ularning tashxisi ochildi, garchi bazada birorta ism bo'lmasa ham. Faqat yoshni 5 yillik oraliqqa aylantirish (L1) noyoblarni 37.0% ga, bog'langanlarni 557 ga tushiradi — hali ham juda ko'p. Indeksning oxirgi raqamini yashirish (L2) katta sakrash beradi: noyoblar 1.3%, bog'langanlar 19. L3 (yosh 10 yillik, indeks 4 raqam) da bog'langanlar 2 taga tushadi.
bir_xil ustuni — bir xillik hujumi: k >= 5 bo'lgan, lekin hammasida bitta tashxis bo'lgan sinflardagi yozuvlar ulushi. L2 da bu 7.5% — bunday sinflarning deyarli hammasi "sog'lom" sinflar, lekin prinsip bir xil: k-anonimlik sinfning "ichini" himoya qilmaydi. Hujumchi "qo'shnim shu sinfda" deb bilsa, uning tashxisini aniq biladi.
Foydalilik tomoni. Yoshning o'rtacha xatosi L3 da 2.57 yil, L4 da 4.85 yil; hududlar soni 270 dan 9 taga tushadi — uchastka darajasidagi har qanday tahlil endi mumkin emas. Surunkali kasallikni yosh va jins bo'yicha bashorat qiladigan model esa deyarli zarar ko'rmadi: AUC 0.715 dan 0.713 ga (L3) va 0.707 ga (L4). Bu muhim saboq: foydalilik yo'qotilishi vazifaga bog'liq. Yoshga silliq bog'liq risk modeli uchun 10 yillik oraliq yetarli; kichik hududlar bo'yicha epidemiologik xarita uchun esa bu umumlashtirish ma'lumotni yaroqsiz qiladi.
3-bo'lim — tanlov qoidasi. k = 5 talabi bilan har darajada nechta yozuvni o'chirish kerakligini hisobladik. L2 da 12.0% — juda ko'p (o'chirish ham tarafkashlik manbai: kichik sinflar ko'pincha keksalar yoki kam aholili hududlar). L3 da atigi 0.5% — shuning uchun qoida "talabga yetadigan eng kam umumlashtirish" L3 ni tanladi. O'chirishdan keyin 5967 qator qoldi va har yozuv kamida 5 kishi bilan bir xil ko'rinadi. Model AUC si 0.002 ga pasaydi — vazifa uchun bu narx arzimas; lekin bir xillik muammosi va boshqa nashrlar bilan bog'lash xavfi alohida tekshirilishi kerak.
Misol 2 — Differensial maxfiylik: farqlash hujumi, Laplace mexanizmi va byudjet
"""Differensial maxfiylik noldan: Laplace mexanizmi, epsilon va aniqlik murosasi."""
import numpy as np
EPSLAR = [0.01, 0.1, 0.5, 1.0, 2.0, 5.0]
def laplace(rng, qiymat, sezgirlik, eps, size=None):
"""Laplace mexanizmi: qiymat + Laplace(0, sezgirlik / eps)."""
return qiymat + rng.laplace(0.0, sezgirlik / eps, size)
def main() -> None:
rng = np.random.default_rng(0)
n = 6000
yosh = np.clip(rng.gamma(6.0, 7.0, n) + 12, 18, 90)
diabet = rng.random(n) < 1 / (1 + np.exp(-(-6.0 + 0.055 * yosh)))
uchastka = rng.integers(0, 270, n)
kichik = uchastka == 7
print("=== 1. Farqlash hujumi: aniq javob beradigan so'rov tizimi ===")
jami = int(diabet.sum())
print(f" so'rov A: 'bazadagi diabetlar soni' = {jami}")
nishonlar = rng.choice(n, 1000, replace=False)
togri = 0
for i in nishonlar:
b = jami - int(diabet[np.arange(n) != i].sum()) # 'i dan boshqa hammasi'
togri += int((b == 1) == diabet[i])
print(f" so'rov B: 'X dan boshqa hamma' -> A - B X ning tashxisi")
print(f" 1000 nishondan to'g'ri topilgani: {togri} ({togri / 10:.1f}%)")
print("\n=== 2. Laplace mexanizmi: sanoq (sezgirlik 1), 2000 takror ===")
print(f" haqiqiy: jami diabet {jami}, kichik uchastkada {int(diabet[kichik].sum())}"
f" ({int(kichik.sum())} kishi); o'rtacha yosh {yosh.mean():.2f}")
print(f" {'eps':>5} {'MAE':>8} {'1/eps':>8} {'jami nisbiy':>11} "
f"{'uchastka nisbiy':>15} {'orta yosh MAE':>13}")
sez_yosh = (90 - 18) / n # chegaralangan o'rtacha: bitta odam ta'siri
kich = int(diabet[kichik].sum())
for eps in EPSLAR:
s = laplace(rng, jami, 1.0, eps, 2000)
mae = np.abs(s - jami).mean()
u = laplace(rng, kich, 1.0, eps, 2000)
y = laplace(rng, yosh.mean(), sez_yosh, eps, 2000)
print(f" {eps:>5.2f} {mae:>8.2f} {1 / eps:>8.2f} {mae / jami:>11.4f} "
f"{np.abs(u - kich).mean() / max(kich, 1):>15.2f} "
f"{np.abs(y - yosh.mean()).mean():>13.4f}")
print("\n=== 3. Farqlash hujumi DP bilan (har so'rov eps, jami 2*eps) ===")
diab_i = np.flatnonzero(diabet)
sog_i = np.flatnonzero(~diabet)
nish = np.concatenate([rng.choice(diab_i, 300, replace=False),
rng.choice(sog_i, 300, replace=False)])
nish = np.repeat(nish, 10) # har nishonga 10 ta mustaqil urinish
print(" 600 nishon (300 diabet, 300 sog'lom) x 10 urinish")
print(f" {'eps':>5} {'hujum aniqligi':>14} {'nazariy chegara':>15}")
for eps in EPSLAR:
a = laplace(rng, jami, 1.0, eps, len(nish))
b = laplace(rng, jami - diabet[nish].astype(int), 1.0, eps, len(nish))
aniq = float(np.mean(((a - b) > 0.5) == diabet[nish]))
chegara = np.exp(2 * eps) / (1 + np.exp(2 * eps))
print(f" {eps:>5.2f} {aniq:>14.3f} {chegara:>15.3f}")
print("\n=== 4. Kompozitsiya: bir so'rovni m marta so'rash (har biri eps=0.1) ===")
print(f" {'m':>4} {'jami eps':>8} {'o_rtachaning MAE':>16}")
for m in [1, 10, 100]:
s = laplace(rng, jami, 1.0, 0.1, (2000, m)).mean(1)
print(f" {m:>4} {0.1 * m:>8.1f} {np.abs(s - jami).mean():>16.2f}")
print(" -> takroriy so'rovlar shovqinni o'rtachalab yo'qotadi: shuning uchun")
print(" jami maxfiylik 'byudjeti' hisoblanadi va cheklanadi")
print(" ⭐ Epsilon kichik - maxfiylik kuchli, aniqlik past; kichik guruhlar")
print(" birinchi bo'lib 'yo'qoladi'")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Farqlash hujumi: aniq javob beradigan so'rov tizimi ===
so'rov A: 'bazadagi diabetlar soni' = 399
so'rov B: 'X dan boshqa hamma' -> A - B X ning tashxisi
1000 nishondan to'g'ri topilgani: 1000 (100.0%)
=== 2. Laplace mexanizmi: sanoq (sezgirlik 1), 2000 takror ===
haqiqiy: jami diabet 399, kichik uchastkada 2 (25 kishi); o'rtacha yosh 53.90
eps MAE 1/eps jami nisbiy uchastka nisbiy orta yosh MAE
0.01 95.60 100.00 0.2396 49.97 1.2096
0.10 10.17 10.00 0.0255 5.00 0.1224
0.50 2.02 2.00 0.0051 0.99 0.0236
1.00 1.01 1.00 0.0025 0.51 0.0119
2.00 0.52 0.50 0.0013 0.25 0.0060
5.00 0.20 0.20 0.0005 0.10 0.0024
=== 3. Farqlash hujumi DP bilan (har so'rov eps, jami 2*eps) ===
600 nishon (300 diabet, 300 sog'lom) x 10 urinish
eps hujum aniqligi nazariy chegara
0.01 0.505 0.505
0.10 0.521 0.550
0.50 0.553 0.731
1.00 0.626 0.881
2.00 0.734 0.982
5.00 0.908 1.000
=== 4. Kompozitsiya: bir so'rovni m marta so'rash (har biri eps=0.1) ===
m jami eps o_rtachaning MAE
1 0.1 9.51
10 1.0 3.45
100 10.0 1.15
-> takroriy so'rovlar shovqinni o'rtachalab yo'qotadi: shuning uchun
jami maxfiylik 'byudjeti' hisoblanadi va cheklanadi
⭐ Epsilon kichik - maxfiylik kuchli, aniqlik past; kichik guruhlar
birinchi bo'lib 'yo'qoladi'Natija tahlili.
1-bo'lim — farqlash hujumi. Tizim faqat agregat so'rovlarga javob beradi — "shaxsiy ma'lumot bermaymiz" degan niyat bilan. Lekin "bazadagi diabetlar soni" (399) va "X dan boshqa hammadagi diabetlar soni" so'rovlarining farqi X ning tashxisini aynan beradi: 1000 nishondan 1000 tasi to'g'ri topildi (100.0%). Agregatsiya o'z-o'zidan maxfiylik emas.
2-bo'lim — Laplace mexanizmi. Sanoq so'rovining sezgirligi 1, shovqin masshtabi 1/eps. O'lchangan o'rtacha absolyut xato nazariyaga aynan mos: eps = 0.1 da 10.17 (nazariy 10.00), eps = 1 da 1.01, eps = 5 da 0.20. Jami sanoq (399) uchun bu kichik nisbiy xato: eps = 0.1 da 2.55%, eps = 1 da 0.25%. Lekin 25 kishilik uchastkadagi 2 ta diabet sanog'i uchun xuddi shu shovqin halokatli: eps = 0.1 da nisbiy xato 5.00 (500%), eps = 1 da ham 0.51. Kichik guruhlar birinchi bo'lib "yo'qoladi" — bu DP ning xatosi emas, balki maqsadi: kichik guruhda har bir odamning ta'siri katta, shuning uchun uni yashirish uchun ko'proq shovqin kerak. O'rtacha yosh (chegaralangan o'rtacha, sezgirlik 72/6000) esa eps = 0.1 da ham 0.12 yil aniqlikda — n katta bo'lsa, o'rtacha statistikalar DP ga yaxshi chidaydi.
3-bo'lim — farqlash hujumi DP bilan. Endi har bir so'rovga alohida shovqin qo'shiladi, hujumchi ikki javob farqini 0.5 bilan solishtiradi. 600 nishon (300 diabet, 300 sog'lom), har biriga 10 urinish: eps = 0.1 da hujum aniqligi 0.521 — tanga tashlashdan deyarli farqsiz; eps = 1 da 0.626; eps = 5 da 0.908 — deyarli himoyasiz. Nazariy chegara e^(2eps) / (1 + e^(2eps)) (ikki so'rov — jami 2*eps) har qatorda o'lchangan aniqlikdan yuqori: DP kafolati eng yomon hujumchi uchun, bizning oddiy hujumchimiz esa undan zaifroq.
4-bo'lim — kompozitsiya. Bir so'rovni eps = 0.1 bilan 100 marta so'rab o'rtachalash xatoni 9.51 dan 1.15 ga tushiradi — lekin jami maxfiylik yo'qotilishi eps = 10. Shuning uchun DP tizimlari so'rovlar sonini emas, jami eps ni (byudjetni) hisoblaydi va tugaganda javob berishni to'xtatadi.
Misol 3 — Adolatlilik metrikalari: tarixiy tarafkashlik va proksi orqali sizish
"""Adolatlilik metrikalari noldan: tarixiy tarafkashlik va proksi belgi orqali sizish."""
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
SOHALAR = ["talim", "tibbiyot", "savdo", "IT", "qurilish", "transport"]
SONLI = ["log_daromad", "kredit_tarixi", "qarz_yuki", "staj"]
def yarat(seed, n=16000):
"""Haqiqiy to'lov qobiliyati jinsga bog'liq EMAS; tarixiy qarorlar esa bog'liq."""
rng = np.random.default_rng(seed)
ayol = rng.random(n) < 0.5
p_soha = np.where(ayol[:, None], [0.4, 0.3, 0.15, 0.05, 0.05, 0.05],
[0.04, 0.04, 0.17, 0.2, 0.3, 0.25])
soha = np.array([rng.choice(6, p=q) for q in p_soha])
log_daromad = rng.normal(1.6, 0.45, n) # mln so'm, log
kredit_tarixi = rng.beta(4, 2, n)
qarz_yuki = rng.beta(2, 5, n)
staj = rng.gamma(2.0, 3.0, n)
ball = (-2.65 + 1.6 * log_daromad + 2.2 * kredit_tarixi - 3.0 * qarz_yuki
+ 0.08 * staj)
qaytaradi = rng.random(n) < 1 / (1 + np.exp(-ball)) # haqiqiy natija
# tarixiy inspektor: haqiqiy ballni shovqin bilan ko'radi + ayollarga jarima
tarixiy = (ball + rng.normal(0, 0.8, n) - 0.7 * ayol) > 0.3
df = pd.DataFrame({"ayol": ayol.astype(int), "soha": soha,
"log_daromad": log_daromad, "kredit_tarixi": kredit_tarixi,
"qarz_yuki": qarz_yuki, "staj": staj,
"tarixiy": tarixiy.astype(int),
"qaytaradi": qaytaradi.astype(int)})
return df
def belgilar(df, jins=False, soha=True):
X = df[SONLI].copy()
if soha:
for j, s in enumerate(SOHALAR):
X["soha_" + s] = (df["soha"] == j).astype(float)
if jins:
X["ayol"] = df["ayol"]
return X
def metrikalar(d, y_true, g):
"""Guruh metrikalari: d - qaror (1 = tasdiq), y_true - haqiqiy qaytarish."""
r = {}
for nom, m in [("erkak", g == 0), ("ayol", g == 1)]:
r[nom] = {
"tasdiq": d[m].mean(),
"TPR": d[m & (y_true == 1)].mean(),
"FPR": d[m & (y_true == 0)].mean(),
"PPV": y_true[m & (d == 1)].mean(),
}
return r
def main() -> None:
df = yarat(0)
oq, ts = df.iloc[:8000], df.iloc[8000:]
g = ts["ayol"].to_numpy()
y = ts["qaytaradi"].to_numpy()
print("=== 1. Ma'lumot: haqiqat va tarix ===")
for nom, m in [("erkak", df.ayol == 0), ("ayol", df.ayol == 1)]:
print(f" {nom:<6} haqiqiy qaytarish {df.qaytaradi[m].mean():.3f}, "
f"tarixiy tasdiq {df.tarixiy[m].mean():.3f}")
X_proksi = belgilar(df, jins=False, soha=True)
X_toza = belgilar(df, jins=False, soha=False)
for nom, X in [("soha bilan", X_proksi), ("sohasiz", X_toza)]:
m = LogisticRegression(max_iter=2000).fit(X.iloc[:8000], oq["ayol"])
auc = roc_auc_score(g, m.predict_proba(X.iloc[8000:])[:, 1])
print(f" jinsni boshqa belgilardan bashorat qilish ({nom}): AUC {auc:.3f}")
print("\n=== 2. Tarixiy qarorlarni o'rgangan modellar (test, chegara 0.5) ===")
variantlar = [("A: jins bilan", True, True), ("B: jinssiz, soha bor", False, True),
("C: jinssiz, sohasiz", False, False)]
print(f" {'model':<22} {'tarixga mos':>11} {'haqiqatga mos':>13} "
f"{'DP farq':>8} {'TPR farq':>8} {'FPR farq':>8} {'PPV farq':>8}")
for nom, jins, soha in variantlar:
X = belgilar(df, jins, soha)
m = LogisticRegression(max_iter=2000).fit(X.iloc[:8000], oq["tarixiy"])
d = (m.predict_proba(X.iloc[8000:])[:, 1] >= 0.5).astype(int)
r = metrikalar(d, y, g)
e, a = r["erkak"], r["ayol"]
print(f" {nom:<22} {np.mean(d == ts['tarixiy']):>11.3f} "
f"{np.mean(d == y):>13.3f} {a['tasdiq'] - e['tasdiq']:>+8.3f} "
f"{a['TPR'] - e['TPR']:>+8.3f} {a['FPR'] - e['FPR']:>+8.3f} "
f"{a['PPV'] - e['PPV']:>+8.3f}")
X = belgilar(df, False, True)
m = LogisticRegression(max_iter=2000).fit(X.iloc[:8000], oq["tarixiy"])
koef = dict(zip(X.columns, m.coef_[0]))
print(" B modelida soha koeffitsientlari: "
+ ", ".join(f"{s} {koef['soha_' + s]:+.2f}" for s in SOHALAR))
print("\n=== 3. Guruhlar bo'yicha kalibrlash (B modeli, haqiqiy qaytarish) ===")
p = m.predict_proba(X.iloc[8000:])[:, 1]
bins = np.array([0, 0.2, 0.4, 0.6, 0.8, 1.0])
print(f" {'ball oralig_i':<14} {'erkak: n, qaytardi':>20} {'ayol: n, qaytardi':>19}")
for lo, hi in zip(bins[:-1], bins[1:]):
qator = f" [{lo:.1f}, {hi:.1f}) "
for gg in [0, 1]:
s = (p >= lo) & (p < hi) & (g == gg)
qator += f" {int(s.sum()):>8} {y[s].mean() if s.sum() else float('nan'):>9.3f}"
print(qator)
print("\n=== 4. 10 urug': ayol - erkak farqlari (o'rtacha va SE) ===")
natija = {v[0]: {"DP": [], "TPR": []} for v in variantlar}
for seed in range(1, 11):
d_ = yarat(seed)
y_ = d_["qaytaradi"].to_numpy()[8000:]
g_ = d_["ayol"].to_numpy()[8000:]
for nom, jins, soha in variantlar:
X = belgilar(d_, jins, soha)
mm = LogisticRegression(max_iter=2000).fit(X.iloc[:8000],
d_["tarixiy"].iloc[:8000])
dd = (mm.predict_proba(X.iloc[8000:])[:, 1] >= 0.5).astype(int)
r = metrikalar(dd, y_, g_)
natija[nom]["DP"].append(r["ayol"]["tasdiq"] - r["erkak"]["tasdiq"])
natija[nom]["TPR"].append(r["ayol"]["TPR"] - r["erkak"]["TPR"])
for nom in natija:
dp, tpr = np.array(natija[nom]["DP"]), np.array(natija[nom]["TPR"])
print(f" {nom:<22} DP {dp.mean():+.3f} (SE {dp.std(ddof=1) / np.sqrt(10):.3f})"
f" TPR {tpr.mean():+.3f} (SE {tpr.std(ddof=1) / np.sqrt(10):.3f})")
a_ = np.array(natija["A: jins bilan"]["DP"])
b_ = np.array(natija["B: jinssiz, soha bor"]["DP"])
c_ = np.array(natija["C: jinssiz, sohasiz"]["DP"])
ulush = b_.mean() / a_.mean()
print(f" jinsni olib tashlash DP farqining {1 - ulush:.0%} ini yo'qotdi, "
f"{ulush:.0%} i proksi orqali qoldi")
f = c_ - b_
se = f.std(ddof=1) / np.sqrt(len(f))
print(f" sohani ham olib tashlash: DP farqi o'zgarishi {f.mean():+.3f} (SE {se:.3f})"
f", sezilarli: {abs(f.mean()) > 2 * se}")
print(" ⭐ Belgini olib tashlash yetarli emas: tarafkashlik YORLIQDA va proksida")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ma'lumot: haqiqat va tarix ===
erkak haqiqiy qaytarish 0.691, tarixiy tasdiq 0.712
ayol haqiqiy qaytarish 0.697, tarixiy tasdiq 0.505
jinsni boshqa belgilardan bashorat qilish (soha bilan): AUC 0.854
jinsni boshqa belgilardan bashorat qilish (sohasiz): AUC 0.496
=== 2. Tarixiy qarorlarni o'rgangan modellar (test, chegara 0.5) ===
model tarixga mos haqiqatga mos DP farq TPR farq FPR farq PPV farq
A: jins bilan 0.807 0.692 -0.265 -0.254 -0.298 +0.068
B: jinssiz, soha bor 0.794 0.700 -0.138 -0.137 -0.147 +0.033
C: jinssiz, sohasiz 0.781 0.701 -0.013 -0.021 +0.000 +0.000
B modelida soha koeffitsientlari: talim -0.66, tibbiyot -0.73, savdo -0.03, IT +0.41, qurilish +0.46, transport +0.53
=== 3. Guruhlar bo'yicha kalibrlash (B modeli, haqiqiy qaytarish) ===
ball oralig_i erkak: n, qaytardi ayol: n, qaytardi
[0.0, 0.2) 468 0.338 790 0.430
[0.2, 0.4) 450 0.507 627 0.609
[0.4, 0.6) 517 0.609 588 0.677
[0.6, 0.8) 764 0.715 719 0.762
[0.8, 1.0) 1835 0.851 1242 0.899
=== 4. 10 urug': ayol - erkak farqlari (o'rtacha va SE) ===
A: jins bilan DP -0.263 (SE 0.004) TPR -0.245 (SE 0.003)
B: jinssiz, soha bor DP -0.122 (SE 0.004) TPR -0.112 (SE 0.004)
C: jinssiz, sohasiz DP -0.006 (SE 0.003) TPR -0.004 (SE 0.003)
jinsni olib tashlash DP farqining 54% ini yo'qotdi, 46% i proksi orqali qoldi
sohani ham olib tashlash: DP farqi o'zgarishi +0.116 (SE 0.003), sezilarli: True
⭐ Belgini olib tashlash yetarli emas: tarafkashlik YORLIQDA va proksidaNatija tahlili.
1-bo'lim — haqiqat va tarix. Sintetik olamda haqiqiy qaytarish qobiliyati jinsga bog'liq emas: erkaklarda 0.691, ayollarda 0.697. Tarixiy inspektorlar esa ayollarning arizalarini ancha kam tasdiqlagan: 0.505 va 0.712. Bu — yorliqqa singgan tarafkashlik. Proksi tekshiruvi: jinsni qolgan belgilardan bashorat qilish soha bilan AUC 0.854, sohasiz 0.496 (tasodif). Demak "soha" belgisi jins haqida ko'p ma'lumot tashiydi.
2-bo'lim — uchta model tarixiy qarorlarni o'rgandi. "Ayol - erkak" farqlari:
- A (jins bilan): tasdiq ulushi farqi (DP)
-0.265, TPR farqi-0.254— qaytaradigan ayollar qaytaradigan erkaklarga nisbatan25punkt kam tasdiqlanadi. Model tarixiy jarimani to'liq o'rgangan. - B (jinssiz, soha bor): DP
-0.138, TPR-0.137. Jins modelda yo'q, lekin farqning taxminan yarmi qoldi. Koeffitsientlar sababni ko'rsatadi: "ta'lim"-0.66va "tibbiyot"-0.73(ayollar ko'p ishlaydigan sohalar), "qurilish"+0.46va "transport"+0.53. Haqiqiy qaytarishga soha umuman ta'sir qilmaydi — model jarimani soha orqali qayta tikladi. - C (jinssiz, sohasiz): DP
-0.013, TPR-0.021— farq deyarli yo'qoldi, chunki bu olamda boshqa proksi yo'q.
PPV farqi A da +0.068: tasdiqlangan ayollar tasdiqlangan erkaklarga qaraganda ko'proq qaytaradi — ayollar uchun "to'siq" balandroq bo'lgani uchun faqat eng ishonchlilari o'tadi. Bu — tarafkashlikning klassik belgisi. Aniqlikka qarang: tarixga moslik A dan C ga 0.807 → 0.781 pasaydi, haqiqatga moslik esa 0.692 → 0.701 oshdi. Tarafkash yorliq bilan o'lchasak, eng adolatli model eng "yomon" ko'rinadi.
3-bo'lim — guruh bo'yicha kalibrlash (B modeli, haqiqiy qaytarishga nisbatan). Har bir ball oralig'ida ayollar erkaklarga qaraganda ko'proq qaytaradi: [0.0, 0.2) da 0.430 va 0.338, [0.2, 0.4) da 0.609 va 0.507, [0.8, 1.0) da 0.899 va 0.851. Ya'ni bir xil ball ayol uchun kamroq xavfni bildiradi — model ayollarni tizimli ravishda past baholaydi. Real hayotda bu jadvalni faqat kredit berilganlar bo'yicha qurish mumkin (rad etilganlarning natijasi yo'q) — shunda ham ko'p hollarda shu belgi ko'rinadi.
4-bo'lim — 10 urug'. DP farqlari barqaror: A -0.263 (SE 0.004), B -0.122 (SE 0.004), C -0.006 (SE 0.003). Jinsni olib tashlash farqning 54% ini yo'qotdi, 46% i proksi orqali qoldi. Sohani ham olib tashlash DP ni yana +0.116 ga (SE 0.003) yaxshiladi — sezilarli. Muhim ogohlantirish: bu olamda soha faqat proksi, shuning uchun uni olib tashlash bepul. Real ma'lumotda proksi ko'pincha qonuniy signal ham tashiydi (masalan, daromad) va ko'p zaif proksilar birgalikda ishlaydi — "hamma proksini topib o'chiramiz" amalda kamdan-kam ishlaydi. Shuning uchun natija metrikalarini o'lchash kerak, belgilar ro'yxatiga qarab ishonish emas.
Misol 4 — Metrikalar ziddiyati va yumshatish: qayta og'irlash, guruhga xos chegara
"""Adolatlilik metrikalari ziddiyati va yumshatish: qayta og'irlash, guruhga xos chegara."""
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
SOHALAR = ["talim", "tibbiyot", "savdo", "IT", "qurilish", "transport"]
SONLI = ["log_daromad", "kredit_tarixi", "qarz_yuki", "staj"]
def yarat(seed, n=16000):
"""3-misoldagi kredit ma'lumoti (haqiqiy qobiliyat jinsga bog'liq emas)."""
rng = np.random.default_rng(seed)
ayol = rng.random(n) < 0.5
p_soha = np.where(ayol[:, None], [0.4, 0.3, 0.15, 0.05, 0.05, 0.05],
[0.04, 0.04, 0.17, 0.2, 0.3, 0.25])
soha = np.array([rng.choice(6, p=q) for q in p_soha])
log_daromad = rng.normal(1.6, 0.45, n)
kredit_tarixi = rng.beta(4, 2, n)
qarz_yuki = rng.beta(2, 5, n)
staj = rng.gamma(2.0, 3.0, n)
ball = (-2.65 + 1.6 * log_daromad + 2.2 * kredit_tarixi - 3.0 * qarz_yuki
+ 0.08 * staj)
qaytaradi = rng.random(n) < 1 / (1 + np.exp(-ball))
tarixiy = (ball + rng.normal(0, 0.8, n) - 0.7 * ayol) > 0.3
df = pd.DataFrame({"ayol": ayol.astype(int), "log_daromad": log_daromad,
"kredit_tarixi": kredit_tarixi, "qarz_yuki": qarz_yuki,
"staj": staj, "tarixiy": tarixiy.astype(int),
"qaytaradi": qaytaradi.astype(int)})
for j, s in enumerate(SOHALAR):
df["soha_" + s] = (soha == j).astype(float)
return df
def guruh(d, y, g):
"""Har guruh uchun tasdiq ulushi, TPR, FPR, PPV."""
out = []
for m in [g == 0, g == 1]:
out.append((d[m].mean(), d[m & (y == 1)].mean(), d[m & (y == 0)].mean(),
y[m & (d == 1)].mean()))
return out
def ziddiyat() -> None:
print("=== 1. Ziddiyat: kalibrlangan ball, asosiy stavkalar farqli ===")
rng = np.random.default_rng(0)
n = 40000
g = (rng.random(n) < 0.5).astype(int)
p = np.where(g == 0, rng.beta(7, 3, n), rng.beta(5, 5, n)) # haqiqiy ehtimol
y = (rng.random(n) < p).astype(int)
print(f" asosiy stavka: A {y[g == 0].mean():.3f}, B {y[g == 1].mean():.3f}")
print(" kalibrlash (o'rtacha ball / haqiqiy ulush):")
for lo, hi in [(0.3, 0.4), (0.5, 0.6), (0.7, 0.8)]:
s = (p >= lo) & (p < hi)
a, b = s & (g == 0), s & (g == 1)
print(f" ball [{lo:.1f}, {hi:.1f}): A {p[a].mean():.3f} / {y[a].mean():.3f}"
f", B {p[b].mean():.3f} / {y[b].mean():.3f}")
d = (p >= 0.6).astype(int)
(ta, tpra, fpra, ppva), (tb, tprb, fprb, ppvb) = guruh(d, y, g)
print(f" bitta chegara 0.6: aniqlik {np.mean(d == y):.3f}, "
f"tasdiqlangan qaytarmaydiganlar {int(((d == 1) & (y == 0)).sum())}")
print(f" {'':<4} {'tasdiq':>7} {'TPR':>6} {'FPR':>6} {'PPV':>6}")
print(f" {'A':<4} {ta:>7.3f} {tpra:>6.3f} {fpra:>6.3f} {ppva:>6.3f}")
print(f" {'B':<4} {tb:>7.3f} {tprb:>6.3f} {fprb:>6.3f} {ppvb:>6.3f}")
for nom, m, tpr, ppv, fpr in [("A", g == 0, tpra, ppva, fpra),
("B", g == 1, tprb, ppvb, fprb)]:
b = y[m].mean()
print(f" {nom}: FPR = b/(1-b) * (1-PPV)/PPV * TPR = "
f"{b / (1 - b) * (1 - ppv) / ppv * tpr:.3f} (o'lchangan {fpr:.3f})")
# B uchun TPR ni A ga tenglashtiradigan chegara
t_b = float(np.quantile(p[(g == 1) & (y == 1)], 1 - tpra))
d2 = np.where(g == 0, p >= 0.6, p >= t_b).astype(int)
(ta, tpra, fpra, ppva), (tb, tprb, fprb, ppvb) = guruh(d2, y, g)
print(f" guruhga xos chegara: A 0.60, B {t_b:.2f} (TPR tenglashtirildi): "
f"aniqlik {np.mean(d2 == y):.3f}, tasdiqlangan qaytarmaydiganlar "
f"{int(((d2 == 1) & (y == 0)).sum())}")
print(f" {'A':<4} {ta:>7.3f} {tpra:>6.3f} {fpra:>6.3f} {ppva:>6.3f}")
print(f" {'B':<4} {tb:>7.3f} {tprb:>6.3f} {fprb:>6.3f} {ppvb:>6.3f}")
print(f" ball {t_b + 0.01:.2f} li ikki ariza: A - rad, B - tasdiq "
f"(bir xil ehtimol, turli qaror)")
def yumshatish() -> None:
print("\n=== 2. Yumshatish: kredit ma'lumoti, 10 urug' (test 8000) ===")
usullar = ["asl (proksi bor)", "qayta og'irlash", "guruhga xos chegara",
"proksisiz (soha yo'q)"]
res = {u: {"tarix": [], "haqiqat": [], "DP": [], "TPR": []} for u in usullar}
for seed in range(1, 11):
df = yarat(seed)
oq, va, ts = df.iloc[:6000], df.iloc[6000:8000], df.iloc[8000:]
ust = SONLI + ["soha_" + s for s in SOHALAR]
g_oq, y_oq = oq["ayol"].to_numpy(), oq["tarixiy"].to_numpy()
g, y, yt = ts["ayol"].to_numpy(), ts["qaytaradi"].to_numpy(), ts["tarixiy"]
asl = LogisticRegression(max_iter=2000).fit(oq[ust], y_oq)
# qayta og'irlash: w(g, y) = P(g) P(y) / P(g, y)
w = np.ones(len(oq))
for gg in [0, 1]:
for yy in [0, 1]:
m = (g_oq == gg) & (y_oq == yy)
w[m] = (g_oq == gg).mean() * (y_oq == yy).mean() / m.mean()
rw = LogisticRegression(max_iter=2000).fit(oq[ust], y_oq, sample_weight=w)
# guruhga xos chegara: validatsiyada ayollar tasdiq ulushi = erkaklarniki
pv = asl.predict_proba(va[ust])[:, 1]
gv = va["ayol"].to_numpy()
erkak_ulush = (pv[gv == 0] >= 0.5).mean()
t_ayol = float(np.quantile(pv[gv == 1], 1 - erkak_ulush))
toza = [c for c in ust if not c.startswith("soha_")]
pr = LogisticRegression(max_iter=2000).fit(oq[toza], y_oq)
p_asl = asl.predict_proba(ts[ust])[:, 1]
qarorlar = {
usullar[0]: p_asl >= 0.5,
usullar[1]: rw.predict_proba(ts[ust])[:, 1] >= 0.5,
usullar[2]: np.where(g == 1, p_asl >= t_ayol, p_asl >= 0.5),
usullar[3]: pr.predict_proba(ts[toza])[:, 1] >= 0.5,
}
for u, d in qarorlar.items():
d = d.astype(int)
(te, tpre, _, _), (ta, tpra, _, _) = guruh(d, y, g)
res[u]["tarix"].append(np.mean(d == yt))
res[u]["haqiqat"].append(np.mean(d == y))
res[u]["DP"].append(ta - te)
res[u]["TPR"].append(tpra - tpre)
print(f" {'usul':<22} {'tarixga mos':>11} {'haqiqatga mos':>13} "
f"{'DP farq':>8} {'TPR farq':>8}")
for u in usullar:
r = {k: np.mean(v) for k, v in res[u].items()}
print(f" {u:<22} {r['tarix']:>11.3f} {r['haqiqat']:>13.3f} "
f"{r['DP']:>+8.3f} {r['TPR']:>+8.3f}")
print(" juftlashgan farq (usul - asl), 10 urug':")
for u in usullar[1:]:
qator = f" {u:<22}"
for k in ["tarix", "haqiqat"]:
f = np.array(res[u][k]) - np.array(res[usullar[0]][k])
se = f.std(ddof=1) / np.sqrt(len(f))
belgi = "sezilarli" if abs(f.mean()) > 2 * se else "sezilarsiz"
qator += f" {k} {f.mean():+.4f} (SE {se:.4f}, {belgi})"
print(qator)
print(" ⭐ 'Aniqlik' qaysi yorliqqa nisbatan o'lchanganini doim yozing")
def main() -> None:
ziddiyat()
yumshatish()
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ziddiyat: kalibrlangan ball, asosiy stavkalar farqli ===
asosiy stavka: A 0.696, B 0.499
kalibrlash (o'rtacha ball / haqiqiy ulush):
ball [0.3, 0.4): A 0.361 / 0.347, B 0.353 / 0.349
ball [0.5, 0.6): A 0.555 / 0.551, B 0.549 / 0.551
ball [0.7, 0.8): A 0.750 / 0.745, B 0.741 / 0.736
bitta chegara 0.6: aniqlik 0.646, tasdiqlangan qaytarmaydiganlar 5526
tasdiq TPR FPR PPV
A 0.771 0.834 0.625 0.753
B 0.268 0.366 0.171 0.680
A: FPR = b/(1-b) * (1-PPV)/PPV * TPR = 0.625 (o'lchangan 0.625)
B: FPR = b/(1-b) * (1-PPV)/PPV * TPR = 0.171 (o'lchangan 0.171)
guruhga xos chegara: A 0.60, B 0.40 (TPR tenglashtirildi): aniqlik 0.647, tasdiqlangan qaytarmaydiganlar 10174
A 0.771 0.834 0.625 0.753
B 0.735 0.834 0.637 0.566
ball 0.41 li ikki ariza: A - rad, B - tasdiq (bir xil ehtimol, turli qaror)
=== 2. Yumshatish: kredit ma'lumoti, 10 urug' (test 8000) ===
usul tarixga mos haqiqatga mos DP farq TPR farq
asl (proksi bor) 0.791 0.696 -0.123 -0.113
qayta og'irlash 0.787 0.700 -0.054 -0.048
guruhga xos chegara 0.771 0.715 +0.001 +0.003
proksisiz (soha yo'q) 0.781 0.703 -0.006 -0.004
juftlashgan farq (usul - asl), 10 urug':
qayta og'irlash tarix -0.0036 (SE 0.0006, sezilarli) haqiqat +0.0042 (SE 0.0007, sezilarli)
guruhga xos chegara tarix -0.0196 (SE 0.0017, sezilarli) haqiqat +0.0188 (SE 0.0007, sezilarli)
proksisiz (soha yo'q) tarix -0.0102 (SE 0.0008, sezilarli) haqiqat +0.0062 (SE 0.0009, sezilarli)
⭐ 'Aniqlik' qaysi yorliqqa nisbatan o'lchanganini doim yozingNatija tahlili.
1-bo'lim — ziddiyat. Bu olamda guruhlarning asosiy stavkalari haqiqatan farq qiladi: A 0.696, B 0.499, va ball — haqiqiy ehtimolning o'zi (ideal model). Kalibrlash ikkala guruhda mukammal: masalan [0.5, 0.6) oraliqda o'rtacha ball 0.555 va 0.549, haqiqiy ulush 0.551 va 0.551. Endi bitta chegara 0.6: A da tasdiq 0.771, B da 0.268; TPR 0.834 va 0.366; FPR 0.625 va 0.171; PPV 0.753 va 0.680. Model mukammal kalibrlangan va hech qanday "jarima" yo'q, lekin teng imkoniyat (TPR) keskin buzilgan — chunki B guruhida yuqori ballar kam. Chouldechova ayniyati ikkala guruhda o'lchangan FPR ni aynan beradi (0.625 va 0.171).
TPR ni guruhga xos chegara bilan tenglaymiz: B uchun 0.40. Endi TPR ikkalasida 0.834, FPR yaqinlashdi (0.625 va 0.637), lekin PPV farqi kattalashdi: 0.753 va 0.566. Qarorlar darajasida kalibrlash buzildi: ball 0.41 bo'lgan ikki ariza — biri rad, biri tasdiq, garchi ikkalasining qaytarish ehtimoli bir xil bo'lsa ham. Umumiy aniqlik deyarli o'zgarmadi (0.646 va 0.647), lekin tasdiqlangan qaytarmaydiganlar soni 5526 dan 10174 ga oshdi — bank zarari va B guruhidagi qarzdorlarning to'lay olmaydigan qarzi ham. Qaysi holat "adolatli" — bu raqamlar javob bermaydi; ular faqat narxni ko'rsatadi.
2-bo'lim — yumshatish, 3-misoldagi kredit olamida (bu yerda tasdiq farqi tarafkashlikdan kelgan, haqiqiy farqdan emas), 10 urug':
- Asl model (proksi bor): DP
-0.123, TPR-0.113. - Qayta og'irlash: DP
-0.054, TPR-0.048— farq taxminan yarmiga kamaydi, to'liq yo'qolmadi. Jins faqat o'qitishda (og'irlik uchun) ishlatildi. - Guruhga xos chegara: DP
+0.001, TPR+0.003— farq yo'qoldi (DP ni tenglash uchun qurilgan). Narxi: qaror paytida jinsdan to'g'ridan foydalanish. - Proksisiz: DP
-0.006— bu olamda eng toza yechim, lekin 3-misolda aytilganidek, real hayotda proksi kamdan-kam "sof".
Juftlashgan farqlar (usul - asl) hammasi sezilarli, va yo'nalishi ibratli: tarixga moslik har usulda pasaydi (qayta og'irlash -0.0036, guruhga xos chegara -0.0196, proksisiz -0.0102), haqiqatga moslik esa har usulda oshdi (+0.0042, +0.0188, +0.0062). Tarafkashlik yorliqda bo'lgan olamda "adolat va aniqlik murosasi" — ko'p hollarda o'lchov xatosi. 1-bo'lim esa aksini ko'rsatdi: farq haqiqiy bo'lsa, tenglashtirish haqiqiy narxga ega. Ikki olamni ma'lumotning o'zidan ajratish qiyin — shuning uchun yorliq qanday olinganini tushunish (datasheet) va imkon bo'lsa xolis yorliqli kichik namuna (masalan, tasodifiy tasdiqlash sinovi, 27.13) juda qimmatli.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Ism va telefonni o'chirdik — ma'lumot anonim" | Yosh + jins + indeks yozuvlarning 78% ini noyob qiladi (1-misol) |
| "Psevdonimlashtirilgan ma'lumot — anonim" | Kalit bor ekan — qaytarish mumkin; ko'p qonunchilikda u shaxsiy ma'lumot |
| "k = 5 — maxfiylik kafolatlangan" | Bir xillik hujumi, fon bilim, ko'p nashr — k ularni to'xtatmaydi |
| "Faqat agregat javob beramiz — xavfsiz" | Farqlash hujumi ikki agregatdan shaxsni aniqlaydi (100%, 2-misol) |
| "DP — ma'lumotni buzadi" | Katta guruh statistikasi deyarli buzilmaydi; kichik guruhlar — ha, bu maqsad |
| "Jins modelda yo'q — model adolatli" | Tarafkashlik yorliqda va proksida; farqning 46% i qoldi (3-misol) |
| "Adolatlilik — bitta metrika" | DP, TPR, FPR, PPV, kalibrlash — asosiy stavkalar farq qilsa bir vaqtda bajarilmaydi |
| "Adolat aniqlikni har doim pasaytiradi" | Tarafkash yorliqqa nisbatan — ha; haqiqatga nisbatan oshishi mumkin (4-misol) |
| "Guruhga xos chegara — muammoning yechimi" | DP ni tenglaydi, lekin qarorda belgidan foydalanadi — huquqiy va etik bahsli |
| "Himoyalangan belgini umuman saqlamaslik kerak" | Unsiz adolatlilikni o'lchab bo'lmaydi; audit uchun cheklangan kirish bilan saqlanadi |
6. Keng tarqalgan xatolar va yechimlari
1. "Anonimlashtirish" = identifikatorni o'chirish
df = df.drop(columns=["ism", "telefon"]) # ⚠️ QI qoldi
hajm = df.groupby(["yosh", "jins", "indeks"])["jins"].transform("size")
print((hajm == 1).mean()) # noyob ulush -> umumlashtir, o'chir, qayta tekshir # ✅2. Aniq agregat so'rov interfeysi
def sanoq(filtr): return int(df[filtr].diabet.sum()) # ⚠️ farqlash hujumi
def sanoq(filtr, eps): return df[filtr].diabet.sum() + rng.laplace(0, 1 / eps) # ✅ + byudjet3. Belgini olib tashlab, tekshirmaslik
X = df.drop(columns=["jins"]); model.fit(X, y_tarix) # ⚠️ "hal qilindi"
auc = roc_auc_score(jins_test, LogisticRegression().fit(X_oq, jins_oq)
.predict_proba(X_test)[:, 1]) # ✅ proksi tekshiruvi
# + guruh metrikalari: DP, TPR, FPR, PPV, kalibrlash, SE bilan4. Bitta metrika
print(d[g == 1].mean() - d[g == 0].mean()) # ⚠️ faqat DP
r = guruh_metrikalari(d, y, g) # tasdiq, TPR, FPR, PPV + kalibrlash jadvali # ✅5. Farqni SE siz talqin qilish
if tpr_farq < -0.05: print("adolatsiz") # ⚠️ 40 kishilik guruhda
# bootstrap yoki bir necha urug' bilan SE; |farq| > 2*SE bo'lsa sezilarli # ✅6. Aniqlikni faqat tarafkash yorliqqa nisbatan o'lchash
acc = (d == y_tarix).mean() # "adolat aniqlikni pasaytirdi" # ⚠️
# yorliq qanday olingan? xolis yorliqli namuna bormi? ikkalasini ham yozing # ✅7. Yumshatishni oqibatsiz tavsiya qilish
d = np.where(g == 1, p >= t_b, p >= 0.5) # jim-jit deployga # ⚠️
# model kartasida: usul, sabab, narx (o'lchangan), huquqiy maslahat natijasi # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 1.7, 7.11-darslar (o'tilgan): Etikaning umumiy tamoyillari, PII va anonimlashtirish — endi o'lchanadigan shaklda
- 12.7, 14.10-darslar (o'tilgan): TPR, FPR, PPV va kalibrlash — endi guruhlar kesimida
- 17.8-dars (o'tilgan): Leakage — proksi belgi "ruxsat etilmagan" ma'lumotni sizdirishning boshqa ko'rinishi
- 25.13-dars (o'tilgan): PII ni aniqlash va niqoblash, audit jurnali
- 26.9, 26.10-darslar (o'tilgan): Generativ modellarda tarafkashlikning kuchayishi, yodlab olish; model kartasi
- 27.11-27.13-darslar (o'tilgan): Monitoring, drift, A/B test — guruh metrikalari monitoringi va xolis yorliq uchun tasodifiy sinov
- 28.11-dars (o'tilgan): Sababiy xulosa — proksi yo'llar va "ruxsat etilgan yo'l" munozarasi
- 29.3, 29.4-darslar (o'tilgan): Loyiha baholashi va taqdimoti — model kartasiga adolatlilik bo'limi
- 29.10-dars (o'tilgan): Intervyu — "modelingiz kimga zarar qilishi mumkin?" savoliga raqamli javob
- 29.12-dars: Doimiy o'rganish — bu soha tez o'zgaradi: qonunlar, metrikalar va vositalar
8. Eng yaxshi amaliyotlar
Minimal yig'ing: har belgi uchun "nima uchun kerak?" savoliga yozma javob.
"Anonim" deyishdan oldin o'lchang: noyob yozuvlar ulushi, k, bir xil sinflar.
Umumlashtirishni vazifaga qarab tanlang va foydalilik yo'qotilishini raqam bilan yozing.
Statistika e'lon qilishda DP: eps ni oshkor qiling, byudjetni hisoblang, kichik guruhlarni alohida ko'rib chiqing.
Himoyalangan belgini audit uchun cheklangan kirish bilan saqlang; proksi tekshiruvini o'tkazing.
Bir nechta guruh metrikasini SE bilan hisoblang; qaysi biri ustuvorligini yozma asoslang.
Yumshatish variantlarining narxini o'lchang va huquqiy tomonini mutaxassis bilan hal qiling — Data Scientist yolg'iz emas.
Model kartasi, inson nazorati, apellyatsiya va guruh metrikalari monitoringi — deploy shartlari.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # yosh, jins, 6 xonali indeks - 6000 kishida noyob ulush katta yoki kichik?
2. # k = 7 bo'lgan sinfda hammasi bir xil tashxisli - maxfiylik bormi?
3. # "hamma" va "X dan boshqa hamma" agregatlari aniq - nima bo'ladi?
4. # eps = 0.1, sanoq so'rovi - o'rtacha absolyut xato qancha?
5. # 25 kishilik guruhdagi 2 ta holat sanog'i DP bilan - nima bo'ladi?
6. # eps = 0.1 li so'rovni 100 marta so'rash - jami eps?
7. # jins modelda yo'q, soha bor, tarixiy yorliq tarafkash - DP farqi?
8. # tasdiqlangan ayollar ko'proq qaytaradi (PPV yuqori) - bu nimaning belgisi?
9. # asosiy stavkalar farqli, ball mukammal kalibrlangan, bitta chegara - TPR teng?
10. # TPR ni guruhga xos chegara bilan tenglasak - PPV?
11. # qayta og'irlash DP farqini to'liq yo'qotadimi?
12. # tarafkash yorliqli olamda adolatli model tarixga mosligi va haqiqatga mosligi?Javoblar
- Katta —
78.2%noyob (1-misol) - Yo'q — bir xillik hujumi; l-xilma-xillik kerak
- Farqlash hujumi: X ning qiymati aynan ochiladi (
100%) - Taxminan
1/eps = 10(o'lchangan10.17) - Signal shovqinda yo'qoladi: nisbiy xato
5.00(eps = 0.1) 10— kompozitsiya- Qisman qoladi: 3-misolda
-0.122(jins bilan-0.263) - Ayollar uchun to'siq balandroq — tarafkashlik belgisi
- Yo'q:
0.834va0.366 - Farqi kattalashadi:
0.753va0.566 - Yo'q — taxminan yarmiga (
-0.123dan-0.054ga) - Tarixga moslik pasayadi, haqiqatga moslik oshadi (4-misol)
Vazifa 2: Xatolarni tuzating
1. df = df.drop(columns=["ism", "pasport"])
df.to_csv("ochiq_baza.csv") # yosh, jins, indeks, tashxis qoldi
2. @app.get("/sanoq")
def sanoq(tuman: str, yosh_min: int, yosh_max: int):
return int(df.query("...").diabet.sum())
3. X = df.drop(columns=["jins", "yosh"])
model.fit(X, df.tarixiy_qaror) # "endi model adolatli"
4. print("TPR farqi:", tpr_ayol - tpr_erkak) # 35 ta ayol arizasi
print("model adolatsiz")
5. d = np.where(ayol == 1, p >= 0.35, p >= 0.5) # deploy, izohsizJavoblar
1. # noyob ulush va k ni hisoblang; yosh -> 10 yillik, indeks -> 4 raqam,
# k < 5 sinflarni o'chiring; bir xil sinflarni tekshiring; foydalilikni o'lchang
2. # aniq javob o'rniga Laplace shovqini, har foydalanuvchiga eps byudjeti,
# juda kichik guruhlar uchun javob bermaslik yoki umumlashtirish
3. # proksi tekshiruvi (jinsni X dan bashorat qilish AUC), guruh metrikalari
# DP/TPR/FPR/PPV/kalibrlash; yorliq qanday olinganini datasheet ga yozing
4. # bootstrap SE: |farq| > 2*SE bo'lmasa - "sezilarsiz, ma'lumot yetarli emas",
# ko'proq ma'lumot yig'ish yoki uzoqroq monitoring
5. # model kartasida: nega, qaysi metrika, narx (o'lchangan), huquqiy xulosa;
# muqobillar (qayta og'irlash, xolis yorliq) bilan juftlashgan taqqoslashVazifa 3: k-anonimlik
Modellang (1-misol asosida):
- l-xilma-xillikni hisoblang: har sinfda kamida 2 xil tashxis talabi bilan qaysi daraja yetarli?
- QI ga "kasb" (10 xil) qo'shing — noyob ulush va kerakli umumlashtirish qanday o'zgaradi?
- Ikki nashr:
L2vaL3darajadagi ikki nusxa e'lon qilindi — ularni birlashtirib hujumchi nechta odamni aniqlaydi? - Foydalilik uchun boshqa vazifa: 27 ta kichik hudud bo'yicha gipertoniya ulushi —
L3da bu qanchalik yo'qoladi?
Vazifa 4: Differensial maxfiylik
Modellang (2-misol asosida):
- Gistogramma (yosh guruhlari bo'yicha sanoq) ni DP bilan e'lon qiling — nega har ustunga alohida eps kerak emas (parallel kompozitsiya)?
- DP o'rtacha uchun
clipchegaralarini noto'g'ri tanlang ([18, 60]) — siljish va shovqin qanday o'zgaradi? - Jami byudjet
eps = 1: 10 ta so'rovga qanday taqsimlaysiz, agar biri eng muhim bo'lsa? - Farqlash hujumini
eps = 0.5da 1, 10 va 100 ta takroriy so'rov bilan qiling — aniqlik qanday o'sadi?
Vazifa 5: Adolatlilik metrikalari
Modellang (3-misol asosida):
- Daromad ham jins bilan bog'liq bo'lsin (ayollarda o'rtacha pastroq) va haqiqiy qaytarishga ta'sir qilsin — endi sohani va daromadni olib tashlash nimaga olib keladi?
- Guruhlar hajmini 50/50 dan 90/10 ga o'zgartiring — kichik guruhda metrikalarning SE si qanday o'zgaradi?
- Kalibrlash jadvalini faqat tasdiqlanganlar bo'yicha quring (real hayotdagi kabi) — tarafkashlik belgisi ko'rinadimi?
- Tasdiq nisbati (ayol / erkak) ni hisoblang — 0.8 dan pastmi?
Vazifa 6: Yumshatish
Modellang (4-misol asosida):
- TPR ni tenglaydigan guruhga xos chegarani validatsiyada toping (sintetik olamda haqiqiy
ybilan) va DP bilan tenglashga solishtiring. - Qayta og'irlashni guruhga xos chegara bilan birlashtiring — chegara qanchalik kam siljishi kerak?
- 1-bo'limdagi olamda (haqiqiy farq) qayta og'irlashni qo'llang — haqiqatga moslik qanday o'zgaradi?
- Har usul uchun "tasdiqlangan qaytarmaydiganlar" sonini hisoblang — bank uchun narx.
Vazifa 7: O'ylash
Bank rahbari: "Audit ayollar arizalari kam tasdiqlanayotganini aniqladi. Men tezda hal qilishni xohlayman: ertadan boshlab ayollar uchun chegarani 0.5 dan 0.35 ga tushiring. Hammasi — bitta qator kod."
Javob
Qisqa javob: tez va bitta qator — ha; lekin bu qaror texnik emas, u huquqiy va biznes qaror, va uning narxini hali o'lchamadik. Taklif — ikki haftalik tahlil va mutaxassislar bilan qaror.
1. Avval — farq qayerdan kelgan? Ikki olam bor va ular turli davolanishni talab qiladi:
# A) tarafkashlik yorliqda (3-misol olami): haqiqiy qaytarish teng,
# tarixiy qarorlar teng emas -> tenglashtirish haqiqatga moslikni OSHIRADI
# (4-misol: guruhga xos chegara +0.019)
# B) haqiqiy farq (4-misol 1-bo'lim): asosiy stavkalar farqli
# -> tenglashtirish qaytarmaydiganlarga kredit berishni oshiradi
# (5526 -> 10174), bu qarz yuki mijozga ham zarar
# qaysi olamdamiz? -> kalibrlash jadvali guruhlar bo'yicha (tasdiqlanganlarda),
# imkon bo'lsa - kichik tasodifiy tasdiqlash sinovi (27.13)2. 0.35 qayerdan? Chegara o'zboshimchalik bilan emas, maqsadli metrikadan kelib chiqadi (DP yoki TPR tenglashuvi) va validatsiyada topiladi (4-misolda DP uchun). Qaysi metrika — biznes va huquq bilan kelishiladi.
3. Huquqiy tomon. Qarorda jinsdan to'g'ridan foydalanish ko'p huquqiy tizimlarda to'g'ridan kamsitish deb qaralishi mumkin — "ijobiy" yo'nalishda bo'lsa ham. Bu savolga yurist javob beradi, biz emas.
4. Muqobillar va ularning narxi (bizning ma'lumotda o'lchanadi):
- Proksini topish va olib tashlash (3-misol: soha) — jinssiz, lekin real proksilar kamdan-kam "sof".
- Qayta og'irlash — jins faqat o'qitishda; farqni taxminan yarmiga kamaytirdi.
- Yorliqni tuzatish: tarixiy qarorlar o'rniga haqiqiy qaytarish ma'lumoti bilan o'qitish (kredit berilganlar bo'yicha), rad etilganlar uchun kichik tasodifiy sinov.
5. Nima bo'lsa ham: model kartasiga adolatlilik bo'limi, guruh metrikalari monitoringi (har oy, SE bilan), rad etilganlar uchun sabab kodlari va apellyatsiya kanali.
Rahbarga javob: "Muammo haqiqiy va biz uni jiddiy qabul qilamiz. Lekin 'chegarani tushirish' ning ikkita xavfi bor: agar farq tarafkashlikdan emas, haqiqiy riskdan bo'lsa, biz odamlarga to'lay olmaydigan kredit beramiz; va qarorda jinsdan to'g'ridan foydalanish huquqiy muammo bo'lishi mumkin. Ikki hafta ichida uch variantni — chegara, qayta o'qitish va proksini olib tashlash — raqam bilan taqqoslab, yurist bilan birga qaror uchun tayyor jadval beramiz. Shu vaqt ichida rad etilgan arizalarni inson qayta ko'rib chiqishini taklif qilaman — bu darhol va xavfsiz."
Nimani mustahkamlaydi: 2.3, 2.4, 2.6, 2.7, 2.8, 2.9-bo'limlar.
Xulosa
Bu darsda ma'lumot etikasining ikki markaziy masalasini — maxfiylik va adolatlilikni — o'lchanadigan qildik va har bir himoya choraning narxini raqam bilan ko'rdik.
Eng muhim uch fikr:
Anonimlik — o'lchanadigan xossa, "ism o'chirildi" emas. 1-misolda yosh, jins va indeks yozuvlarning
78.2%ini noyob qildi va bog'lash hujumi 1500 kishidan1190tasining tashxisini ochdi. "Talabga yetadigan eng kam umumlashtirish" (L3)k = 5ga0.5%o'chirish bilan yetdi, model AUC si atigi0.002ga pasaydi — lekin hududiy aniqlik270dan9ga tushdi. 2-misolda aniq agregat so'rovlar farqlash hujumida100%shaxsni ochdi; Laplace mexanizmi xatoni aynan1/epsga teng qildi, hujum aniqliginieps = 0.1da0.521gacha tushirdi, kichik guruh statistikasi esa birinchi bo'lib "yo'qoldi"; takroriy so'rovlar byudjet zarurligini ko'rsatdi.Belgini olib tashlash yetarli emas. 3-misolda haqiqiy qaytarish guruhlarda teng edi, lekin tarixiy yorliq tarafkash edi: jins bilan model DP farqi
-0.263, jinssiz-0.122— farqning46%i "soha" proksisi orqali qoldi (jinsni bashorat qilish AUC0.854). Tasdiqlangan ayollar ko'proq qaytardi va har ball oralig'ida kalibrlash ayollar foydasiga siljigan edi — tarafkashlikning ikki belgisi.Metrikalar ziddiyatli, yumshatish esa qadriyat tanlovi. 4-misolda mukammal kalibrlangan model asosiy stavkalar farq qilganda TPR ni
0.834va0.366qildi; TPR ni tenglash PPV ni0.753va0.566ga ajratdi va qaytarmaydiganlarga tasdiqni deyarli ikki barobar oshirdi. Tarafkash yorliqli olamda esa qayta og'irlash farqni yarmiga, guruhga xos chegara nolga tushirdi, va har usul tarixga moslikni pasaytirib, haqiqatga moslikni oshirdi. Qaysi yo'l — texnik emas, huquqiy va etik qaror; Data Scientist ning vazifasi — narxni o'lchash, tanlovni oshkora yozish va inson nazorati bilan qo'llab-quvvatlash.
Keyingi darsda Doimiy o'rganish va kurs yakuni: butun kursning xaritasi va qismlar orasidagi bog'lanishlar, kurs davomida takrorlangan asosiy tamoyillar, maqolani tanqidiy o'qish va da'voni qayta ishlab chiqish, o'rganish rejasi va keyingi qadamlar.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!