निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर
आप ऋण-स्वीकृति मॉडल में जनसांख्यिकीय समानता के अंतर और समान अवसर के अंतर को मापेंगे तथा पहचानेंगे कि क्या मॉडल संरक्षित समूहों के साथ नुकसानदेह भेदभाव करता है।
निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर, CoddyKit पर Machine Learning Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Machine Learning Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
ML में निष्पक्षता क्यों महत्त्वपूर्ण है
ऐतिहासिक डेटा पर प्रशिक्षित मशीन लर्निंग मॉडल मौजूदा सामाजिक पक्षपातों को बनाए रख सकते हैं और बढ़ा सकते हैं। पिछले ऋण अनुमोदनों पर प्रशिक्षित कोई ऋण स्वीकृति मॉडल संरक्षित समूहों को उनकी ऋण-योग्यता के कारण नहीं, बल्कि प्रशिक्षण डेटा में मौजूद भेदभावपूर्ण ऐतिहासिक पैटर्न के कारण व्यवस्थित रूप से ऋण देने से मना कर सकता है। निष्पक्षता के मापदंड यह मापते हैं कि कोई मॉडल अलग-अलग जनसांख्यिकीय समूहों के साथ कितनी अलग तरह से व्यवहार करता है, जिससे लेखा-परीक्षक और इंजीनियर भेदभावपूर्ण व्यवहार का पता लगाकर उसे सुधार सकते हैं।
संरक्षित विशेषताएँ और समूह
संरक्षित विशेषता ऐसी जनसांख्यिकीय विशेषता है जिसे महत्त्वपूर्ण निर्णयों को प्रभावित नहीं करना चाहिए—आमतौर पर जाति, लिंग, आयु, धर्म या दिव्यांगता की स्थिति। संरक्षित समूह उन उदाहरणों का उपसमुच्चय है जिनमें उस विशेषता का समान मान होता है (जैसे, महिला आवेदक)। निष्पक्षता विश्लेषण इन समूहों के बीच मॉडल के परिणामों की तुलना करता है। संरक्षित विशेषता को फीचर सेट से हटा देने पर भी प्रॉक्सी फीचर (जैसे पिन कोड) उसे अब भी कूटबद्ध कर सकते हैं।
import pandas as pd
import numpy as np
# Toy loan dataset
np.random.seed(42)
df = pd.DataFrame({
'income': np.random.normal(50000, 15000, 1000),
'credit_score': np.random.normal(650, 80, 1000),
'gender': np.random.choice(['M', 'F'], 1000),
'approved': np.random.choice([0, 1], 1000, p=[0.4, 0.6])
})
# Simulate a biased approval: female applicants approved 10% less
df.loc[df['gender'] == 'F', 'approved'] = (
df.loc[df['gender'] == 'F', 'approved'] * 0.85
).round().astype(int).clip(0, 1)
print(df.groupby('gender')['approved'].mean())जनसांख्यिकीय समानता
जनसांख्यिकीय समानता (जिसे सांख्यिकीय समानता भी कहा जाता है) के लिए आवश्यक है कि धनात्मक पूर्वानुमानों का अनुपात सभी जनसांख्यिकीय समूहों में समान हो। यदि कोई मॉडल 70% पुरुष आवेदकों को मंज़ूरी देता है, लेकिन केवल 55% महिला आवेदकों को, तो जनसांख्यिकीय समानता का उल्लंघन होता है। जनसांख्यिकीय समानता अंतर समूहों की धनात्मक पूर्वानुमान दरों के बीच का निरपेक्ष अंतर है; शून्य मान पूर्ण समानता दर्शाता है।
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
features = ['income', 'credit_score']
X = df[features].values
y = df['approved'].values
g = df['gender'].values
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = LogisticRegression()
model.fit(X_scaled, y)
y_pred = model.predict(X_scaled)
# Demographic parity difference
rate_M = y_pred[g == 'M'].mean()
rate_F = y_pred[g == 'F'].mean()
print(f'Approval rate M: {rate_M:.3f}')
print(f'Approval rate F: {rate_F:.3f}')
print(f'Demographic parity difference: {abs(rate_M - rate_F):.3f}')समान अवसर
समान अवसर के लिए आवश्यक है कि सच्ची सकारात्मक दर (रिकॉल) सभी समूहों में समान हो — दूसरे शब्दों में, हर समूह के योग्य आवेदकों के सही तरीके से स्वीकृत होने की संभावना समान होनी चाहिए। जनसांख्यिकीय समानता के विपरीत, समान अवसर वास्तविक लेबल पर आधारित होता है, इसलिए समानता हासिल करने के लिए अयोग्य आवेदकों को स्वीकृत करना आवश्यक नहीं होता। इसका विशेष लक्ष्य संरक्षित समूह के योग्य सदस्यों को नज़रअंदाज़ करने की त्रुटि को कम करना है।
from sklearn.metrics import recall_score
# True positive rate per group (recall among actually qualified)
mask_M = g == 'M'
mask_F = g == 'F'
tpr_M = recall_score(y[mask_M], y_pred[mask_M])
tpr_F = recall_score(y[mask_F], y_pred[mask_F])
print(f'True positive rate M (recall): {tpr_M:.3f}')
print(f'True positive rate F (recall): {tpr_F:.3f}')
print(f'Equal opportunity difference: {abs(tpr_M - tpr_F):.3f}')
# A value > 0.05 is often flagged as meaningful unfairnessEqualized Odds
Equalized odds एक अधिक कठोर मानदंड है, जिसके अनुसार सच्ची सकारात्मक दर AND झूठी सकारात्मक दर दोनों सभी समूहों में समान होनी चाहिए। इससे ऐसी स्थिति रोकी जाती है जिसमें मॉडल योग्य अल्पसंख्यक आवेदकों को कम स्वीकृत करता है (कम TPR) और साथ ही अयोग्य बहुसंख्यक आवेदकों को अधिक स्वीकृत करता है (अधिक FPR)। यह US Equal Credit Opportunity Act जैसे कानूनी संदर्भों में उपयोग किया जाने वाला मानक निष्पक्षता मानदंड है।
from sklearn.metrics import confusion_matrix
def false_positive_rate(y_true, y_pred):
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
return fp / (fp + tn) if (fp + tn) > 0 else 0.0
fpr_M = false_positive_rate(y[mask_M], y_pred[mask_M])
fpr_F = false_positive_rate(y[mask_F], y_pred[mask_F])
print(f'FPR M: {fpr_M:.3f} TPR M: {tpr_M:.3f}')
print(f'FPR F: {fpr_F:.3f} TPR F: {tpr_F:.3f}')
print(f'Equalized odds: TPR diff={abs(tpr_M-tpr_F):.3f}, FPR diff={abs(fpr_M-fpr_F):.3f}')निष्पक्षता-सटीकता के बीच समझौते
निष्पक्षता संबंधी बाधाओं को पूरा करने पर अक्सर समग्र सटीकता या लाभ की कुछ कीमत चुकानी पड़ती है। इसे निष्पक्षता-सटीकता के बीच समझौता कहा जाता है। असंभवता प्रमेय (Chouldechova 2017, Kleinberg 2016) दर्शाते हैं कि जब समूहों के आधारभूत अनुपात अलग-अलग हों, तब जनसांख्यिकीय समानता, समान अवसर और कैलिब्रेशन को एक साथ पूरा नहीं किया जा सकता। इसलिए किस निष्पक्षता मानदंड को अनुकूलित करना है, यह एक मूल्य-आधारित निर्णय है, जिसमें केवल डेटा वैज्ञानिकों ही नहीं, बल्कि विषय-विशेषज्ञों और प्रभावित समुदायों को भी शामिल किया जाना चाहिए।
# Visualise trade-off: adjust threshold per group
import numpy as np
proba = model.predict_proba(X_scaled)[:, 1]
# Without fairness: single 0.5 threshold
y_single = (proba >= 0.5).astype(int)
# With equal opportunity: lower threshold for F to equalise TPR
# Find threshold for F that gives same TPR as M
tpr_target = recall_score(y[mask_M], y_single[mask_M])
print(f'Target TPR from M group: {tpr_target:.3f}')
for thresh in np.arange(0.3, 0.7, 0.01):
y_adj = proba[mask_F] >= thresh
if recall_score(y[mask_F], y_adj) >= tpr_target:
print(f'Threshold for F to achieve equal opportunity: {thresh:.2f}')
breakfairlearn लाइब्रेरी
Microsoft की fairlearn लाइब्रेरी, scikit-learn के साथ संगत API में निष्पक्षता मेट्रिक्स और शमन एल्गोरिदम उपलब्ध कराती है। समूह के अनुसार विभाजित किसी भी मेट्रिक की गणना एक ही कॉल में करने के लिए MetricFrame का उपयोग करें। इससे मैन्युअल अनुक्रमण के बिना पूरे मेट्रिक समूह में मौजूद असमानताएँ दिखाई देती हैं। इसे pip install fairlearn से इंस्टॉल करें।
from fairlearn.metrics import MetricFrame, demographic_parity_difference
from fairlearn.metrics import equalized_odds_difference
from sklearn.metrics import accuracy_score, precision_score, recall_score
mf = MetricFrame(
metrics={
'accuracy': accuracy_score,
'precision': precision_score,
'recall': recall_score
},
y_true=y,
y_pred=y_pred,
sensitive_features=g
)
print(mf.by_group)
print('Demographic parity diff:', demographic_parity_difference(y, y_pred, sensitive_features=g))
print('Equalized odds diff:', equalized_odds_difference(y, y_pred, sensitive_features=g))समूहों के बीच कैलिब्रेशन
कैलिब्रेशन के लिए आवश्यक है कि X% की अनुमानित संभावना दिए गए सभी आवेदकों में लगभग X% वास्तव में सकारात्मक वर्ग से संबंधित हों — और यह शर्त प्रत्येक जनसांख्यिकीय समूह के भीतर अलग-अलग भी पूरी होनी चाहिए। समूहों का खराब कैलिब्रेशन दर्शाता है कि मॉडल किसी संरक्षित समूह के लिए व्यवस्थित रूप से जरूरत से अधिक या कम आत्मविश्वासी है, जिससे ऋण-स्कोरिंग जैसे जोखिम-आधारित निर्णय विकृत हो जाते हैं। इसकी जाँच के लिए प्रत्येक समूह पर विश्वसनीयता आरेख या sklearn.calibration.calibration_curve का उपयोग करें।
from sklearn.calibration import calibration_curve
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
for group in ['M', 'F']:
mask = g == group
prob_true, prob_pred = calibration_curve(
y[mask], proba[mask], n_bins=5
)
ax.plot(prob_pred, prob_true, marker='o', label=f'gender={group}')
ax.plot([0, 1], [0, 1], 'k--', label='Perfect calibration')
ax.set(xlabel='Mean predicted probability', ylabel='Fraction of positives')
ax.legend()
plt.title('Calibration curves by gender')
plt.tight_layout()
plt.savefig('calibration_by_group.png', dpi=150)अंतर्विभागीय निष्पक्षता
अंतर्विभागीय निष्पक्षता संरक्षित attributes के संयोजनों पर एक साथ विचार करती है। कोई मॉडल लिंग और नस्ल के लिए अलग-अलग जनसांख्यिकीय समानता हासिल कर सकता है, फिर भी एक उप-समूह के रूप में अश्वेत महिलाओं के साथ भेदभाव कर सकता है। जब आप कई संवेदनशील कॉलम को DataFrame के रूप में देते हैं, तो fairlearn का MetricFrame इसे अपने-आप संभालता है और हर (लिंग × नस्ल) संयोजन के लिए मेट्रिक्स की गणना करता है।
import pandas as pd
from fairlearn.metrics import MetricFrame
from sklearn.metrics import accuracy_score
# Add a second protected attribute
df['race'] = np.random.choice(['A', 'B'], len(df))
sensitive_df = df[['gender', 'race']]
mf_intersect = MetricFrame(
metrics={'accuracy': accuracy_score},
y_true=y,
y_pred=y_pred,
sensitive_features=sensitive_df
)
print(mf_intersect.by_group)
print('Worst accuracy subgroup:', mf_intersect.by_group.min())सही निष्पक्षता मानदंड चुनना
अलग-अलग अनुप्रयोगों के लिए अलग-अलग निष्पक्षता मानदंड आवश्यक होते हैं। पुनरपराध की भविष्यवाणी में समान अवसर सर्वोपरि है, यानी दोबारा अपराध न करने वालों के बीच रिकॉल समान होना चाहिए। भर्ती उपकरणों में जनसांख्यिकीय समानता प्रणालीगत रूप से कम प्रतिनिधित्व को रोकती है। चिकित्सीय जाँच में Equalized odds यह सुनिश्चित करता है कि किसी भी समूह के मामले असमान रूप से छूट न जाएँ। चुने गए मानदंड और उसके कारण का दस्तावेज़ीकरण जिम्मेदार AI अभ्यास और मॉडल कार्ड का महत्वपूर्ण हिस्सा है।
# Decision guide: which metric to use
criteria_guide = {
'hiring / college admission': 'Demographic parity — equal representation',
'medical screening': 'Equal opportunity — equalise recall (catch all sick patients)',
'fraud / recidivism': 'Equalized odds — control both FPR and TPR',
'credit scoring': 'Calibration — predicted risk reflects actual risk per group'
}
for use_case, criterion in criteria_guide.items():
print(f'{use_case}: {criterion}')निष्पक्षता मेट्रिक्स की सीमाएँ
निष्पक्षता मेट्रिक्स सांख्यिकीय असमानताओं को मापते हैं, मूल कारणों को नहीं। कोई मॉडल जनसांख्यिकीय समानता पूरी करते हुए भी सहसंबंधित प्रॉक्सी के माध्यम से संरक्षित attributes पर आधारित व्यक्तिगत निर्णय ले सकता है। इसके अतिरिक्त, ये सभी मेट्रिक्स द्विआधारी संवेदनशील attributes और द्विआधारी परिणाम मानते हैं; वास्तविक दुनिया में निष्पक्षता कहीं अधिक जटिल है। परिनियोजन से पहले मेट्रिक्स के साथ गुणात्मक विधियों — सामुदायिक सहभागिता, प्रक्रिया ऑडिट और प्रभाव आकलन — का भी उपयोग किया जाना चाहिए।
# Summary of limitations
limitations = [
'Proxy features (zip code, surname) can encode protected attributes even when removed',
'Satisfying one fairness criterion can violate another (impossibility theorem)',
'Metrics are group-level averages; individual unfairness can persist',
'Binary group splits may hide variation within groups',
'Historical data reflects past discrimination; fair training data is often unavailable'
]
for i, lim in enumerate(limitations, 1):
print(f'{i}. {lim}')त्वरित जाँच
इस पाठ में दिए गए Python के साथ मशीन लर्निंग के सिद्धांतों की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: जनसांख्यिकीय समानता के लिए समूहों में सकारात्मक भविष्यवाणी दर समान होना आवश्यक है, समान अवसर के लिए रिकॉल (सच्ची सकारात्मक दर) समान होना आवश्यक है, और Equalized odds के लिए इसके अतिरिक्त झूठी सकारात्मक दर भी समान होना आवश्यक है। आपने यह भी देखा कि आधारभूत अनुपात अलग होने पर इन सभी मानदंडों को एक साथ पूरा नहीं किया जा सकता, और fairlearn लाइब्रेरी समूह-स्तरीय मेट्रिक्स की गणना को सरल बनाती है। आगे हम इन मेट्रिक्स से सामने आने वाले पक्षपात को कम करने की ठोस रणनीतियाँ देखेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर” पाठ निःशुल्क है?
हाँ—“निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Machine Learning Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Machine Learning Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर” में मैं क्या सीखूँगा?
आप ऋण-स्वीकृति मॉडल में जनसांख्यिकीय समानता के अंतर और समान अवसर के अंतर को मापेंगे तथा पहचानेंगे कि क्या मॉडल संरक्षित समूहों के साथ नुकसानदेह भेदभाव करता है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Machine Learning Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Machine Learning Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Machine Learning Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Machine Learning Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Machine Learning Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- SHAP मान: वैश्विक और स्थानीय फीचर महत्त्व
- LIME: स्थानीय व्याख्यायोग्य मॉडल-अज्ञेय स्पष्टीकरण
- निष्पक्षता मेट्रिक्स: जनसांख्यिकीय समानता और समान अवसर
- पूर्वाग्रह कम करने की रणनीतियाँ: प्री-प्रोसेसिंग, इन-प्रोसेसिंग और पोस्ट-प्रोसेसिंग