ML modellerinin eşitliğini değerlendirmek için Azure Machine Learning'i Fairlearn açık kaynak paketiyle kullanma (önizleme)
ŞUNLAR IÇIN GEÇERLIDIR:Python SDK azureml v1
Bu nasıl yapılır kılavuzunda, aşağıdaki görevleri gerçekleştirmek için Azure Machine Learning ile Fairlearn açık kaynak Python paketini kullanmayı öğreneceksiniz:
- Model tahminlerinizin eşitliğini değerlendirme. Makine öğrenmesinde eşitlik hakkında daha fazla bilgi edinmek için makine öğrenmesinde eşitlik makalesine bakın.
- eşitlik değerlendirmesi içgörülerini Azure Machine Learning stüdyosu karşıya yükleyin, listeleyin ve indirin.
- Modellerinizin eşitlik içgörüleriyle etkileşime geçmek için Azure Machine Learning stüdyosu'de bir eşitlik değerlendirmesi panosuna bakın.
Not
Eşitlik değerlendirmesi tamamen teknik bir alıştırma değildir. Bu paket, bir makine öğrenmesi modelinin eşitliğini değerlendirmenize yardımcı olabilir, ancak modelin performansıyla ilgili olarak yalnızca siz yapılandırabilir ve kararlar alabilirsiniz. Bu paket eşitliği değerlendirmek için nicel ölçümleri tanımlamaya yardımcı olsa da, makine öğrenmesi modellerinin geliştiricilerinin kendi modellerinin eşitliğini değerlendirmek için nitel bir analiz de gerçekleştirmesi gerekir.
Önemli
Bu özellik şu anda genel önizlemededir. Bu önizleme sürümü bir hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için bunu önermeyiz. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir.
Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
Azure Machine Learning Eşitlik SDK'sı
Azure Machine Learning Eşitlik SDK'sı, azureml-contrib-fairness
Açık kaynak Python paketi Fairlearn'ı Azure Machine Learning ile tümleştirir. Fairlearn'ın Azure Machine Learning ile tümleştirmesi hakkında daha fazla bilgi edinmek için bu örnek not defterlerine göz atın. Fairlearn hakkında daha fazla bilgi için örnek kılavuza ve örnek not defterlerine bakın.
ve fairlearn
paketlerini yüklemek azureml-contrib-fairness
için aşağıdaki komutları kullanın:
pip install azureml-contrib-fairness
pip install fairlearn==0.4.6
Fairlearn'in sonraki sürümleri aşağıdaki örnek kodda da çalışmalıdır.
Tek bir model için eşitlik içgörülerini karşıya yükleme
Aşağıdaki örnekte eşitlik paketinin nasıl kullanılacağı gösterilmektedir. Model eşitliği içgörülerini Azure Machine Learning'e yükleyeceğiz ve eşitlik değerlendirmesi panosunu Azure Machine Learning stüdyosu.
Jupyter Notebook'de örnek bir model eğitin.
Veri kümesi için, OpenML'den aldığımız tanınmış yetişkin sayım veri kümesini kullanırız. Bir kişinin önceki bir krediyi geri ödeyip ödemediğini belirten etiketle ilgili bir kredi kararı sorunumuz varmış gibi davranırız. Daha önce görünmeyen kişilerin krediyi geri ödeyip ödemeyeceğini tahmin etmek için bir model eğiteceğiz. Bu tür bir model, kredi kararları vermek için kullanılabilir.
import copy import numpy as np import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.datasets import fetch_openml from sklearn.impute import SimpleImputer from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import make_column_selector as selector from sklearn.pipeline import Pipeline from raiwidgets import FairnessDashboard # Load the census dataset data = fetch_openml(data_id=1590, as_frame=True) X_raw = data.data y = (data.target == ">50K") * 1 # (Optional) Separate the "sex" and "race" sensitive features out and drop them from the main data prior to training your model X_raw = data.data y = (data.target == ">50K") * 1 A = X_raw[["race", "sex"]] X = X_raw.drop(labels=['sex', 'race'],axis = 1) # Split the data in "train" and "test" sets (X_train, X_test, y_train, y_test, A_train, A_test) = train_test_split( X_raw, y, A, test_size=0.3, random_state=12345, stratify=y ) # Ensure indices are aligned between X, y and A, # after all the slicing and splitting of DataFrames # and Series X_train = X_train.reset_index(drop=True) X_test = X_test.reset_index(drop=True) y_train = y_train.reset_index(drop=True) y_test = y_test.reset_index(drop=True) A_train = A_train.reset_index(drop=True) A_test = A_test.reset_index(drop=True) # Define a processing pipeline. This happens after the split to avoid data leakage numeric_transformer = Pipeline( steps=[ ("impute", SimpleImputer()), ("scaler", StandardScaler()), ] ) categorical_transformer = Pipeline( [ ("impute", SimpleImputer(strategy="most_frequent")), ("ohe", OneHotEncoder(handle_unknown="ignore")), ] ) preprocessor = ColumnTransformer( transformers=[ ("num", numeric_transformer, selector(dtype_exclude="category")), ("cat", categorical_transformer, selector(dtype_include="category")), ] ) # Put an estimator onto the end of the pipeline lr_predictor = Pipeline( steps=[ ("preprocessor", copy.deepcopy(preprocessor)), ( "classifier", LogisticRegression(solver="liblinear", fit_intercept=True), ), ] ) # Train the model on the test data lr_predictor.fit(X_train, y_train) # (Optional) View this model in the fairness dashboard, and see the disparities which appear: from raiwidgets import FairnessDashboard FairnessDashboard(sensitive_features=A_test, y_true=y_test, y_pred={"lr_model": lr_predictor.predict(X_test)})
Azure Machine Learning'de oturum açın ve modelinizi kaydedin.
Eşitlik panosu kayıtlı veya kayıtlı olmayan modellerle tümleşebilir. Aşağıdaki adımlarla modelinizi Azure Machine Learning'e kaydedin:
from azureml.core import Workspace, Experiment, Model import joblib import os ws = Workspace.from_config() ws.get_details() os.makedirs('models', exist_ok=True) # Function to register models into Azure Machine Learning def register_model(name, model): print("Registering ", name) model_path = "models/{0}.pkl".format(name) joblib.dump(value=model, filename=model_path) registered_model = Model.register(model_path=model_path, model_name=name, workspace=ws) print("Registered ", registered_model.id) return registered_model.id # Call the register_model function lr_reg_id = register_model("fairness_logistic_regression", lr_predictor)
Eşitlik ölçümlerini önceden derleme.
Fairlearn'ın
metrics
paketini kullanarak bir pano sözlüğü oluşturun. Yöntemin_create_group_metric_set
Pano oluşturucusunun benzeri bağımsız değişkenleri vardır, ancak hassas özellikler sözlük olarak geçirilir (adların kullanılabilir olduğundan emin olmak için). Bu yöntemi çağırırken tahmin türünü (bu örnekte ikili sınıflandırma) da belirtmeliyiz.# Create a dictionary of model(s) you want to assess for fairness sf = { 'Race': A_test.race, 'Sex': A_test.sex} ys_pred = { lr_reg_id:lr_predictor.predict(X_test) } from fairlearn.metrics._group_metric_set import _create_group_metric_set dash_dict = _create_group_metric_set(y_true=y_test, predictions=ys_pred, sensitive_features=sf, prediction_type='binary_classification')
Önceden hesaplanmış eşitlik ölçümlerini karşıya yükleyin.
Şimdi karşıya yüklemeyi gerçekleştirmek için paketi içeri aktarın
azureml.contrib.fairness
:from azureml.contrib.fairness import upload_dashboard_dictionary, download_dashboard_by_upload_id
Bir Deneme oluşturun, ardından Bir Çalıştır oluşturun ve panoyu bu panoya yükleyin:
exp = Experiment(ws, "Test_Fairness_Census_Demo") print(exp) run = exp.start_logging() # Upload the dashboard to Azure Machine Learning try: dashboard_title = "Fairness insights of Logistic Regression Classifier" # Set validate_model_ids parameter of upload_dashboard_dictionary to False if you have not registered your model(s) upload_id = upload_dashboard_dictionary(run, dash_dict, dashboard_name=dashboard_title) print("\nUploaded to id: {0}\n".format(upload_id)) # To test the dashboard, you can download it back and ensure it contains the right information downloaded_dict = download_dashboard_by_upload_id(run, upload_id) finally: run.complete()
Azure Machine Learning stüdyosu eşitlik panosunu denetleyin
Önceki adımları tamamlarsanız (oluşturulan eşitlik içgörülerini Azure Machine Learning'e yüklerseniz) eşitlik panosunu Azure Machine Learning stüdyosu görüntüleyebilirsiniz. Bu pano, Fairlearn'da sağlanan görselleştirme panosuyla aynıdır ve hassas özelliğinizin alt grupları (örn. erkek ve kadın) arasındaki eşitsizlikleri analiz etmenizi sağlar. Azure Machine Learning stüdyosu görselleştirme panosuna erişmek için şu yollardan birini izleyin:
- İşler bölmesi (Önizleme)
- Azure Machine Learning'de çalıştırdığınız denemelerin listesini görmek için sol bölmede İşler'i seçin.
- Belirli bir denemeyi seçerek bu denemedeki tüm çalıştırmaları görüntüleyin.
- Bir çalıştırma seçin ve ardından Fairness sekmesinde açıklama görselleştirme panosuna gidin.
- Eşitlik sekmesine girdikten sonra sağ taraftaki menüden bir eşitlik kimliğine tıklayın.
- Eşitlik değerlendirmesi sayfasına inmek için hassas özniteliğinizi, performans ölçümünüzü ve ilgilendiğiniz eşitlik ölçümünü seçerek panonuzu yapılandırın.
- Hem ayırma zararlarını hem de hizmet zararlarının kalitesini gözlemlemek için grafik türünü bir birinden diğerine geçirin.
- Modeller bölmesi
- Önceki adımları izleyerek özgün modelinizi kaydettiyseniz sol bölmedeki Modeller'i seçerek görüntüleyebilirsiniz.
- Açıklama görselleştirme panosunu görüntülemek için bir model seçin ve ardından Eşitlik sekmesi.
Görselleştirme panosu ve ne içerdiği hakkında daha fazla bilgi edinmek için Fairlearn'ın kullanım kılavuzuna bakın.
Birden çok model için eşitlik içgörülerini karşıya yükleme
Birden çok modeli karşılaştırmak ve eşitlik değerlendirmelerinin nasıl farklılık gösterdiğini görmek için görselleştirme panosuna birden fazla model geçirebilir ve bunların performans eşitliği dengelerini karşılaştırabilirsiniz.
Modellerinizi eğitin:
Artık Destek Vektör Makinesi tahmin aracını temel alan ikinci bir sınıflandırıcı oluşturuyoruz ve Fairlearn'ın
metrics
paketini kullanarak bir eşitlik panosu sözlüğü yüklüyoruz. Daha önce eğitilen modelin hala kullanılabilir olduğunu varsayıyoruz.# Put an SVM predictor onto the preprocessing pipeline from sklearn import svm svm_predictor = Pipeline( steps=[ ("preprocessor", copy.deepcopy(preprocessor)), ( "classifier", svm.SVC(), ), ] ) # Train your second classification model svm_predictor.fit(X_train, y_train)
Modellerinizi kaydetme
Ardından her iki modeli de Azure Machine Learning'e kaydedin. Kolaylık sağlamak için, sonuçları kayıtlı modelin (biçimindeki bir dize) tahmin oluşturucunun kendisiyle eşleyen
id
bir sözlüktename:version
depolayın:model_dict = {} lr_reg_id = register_model("fairness_logistic_regression", lr_predictor) model_dict[lr_reg_id] = lr_predictor svm_reg_id = register_model("fairness_svm", svm_predictor) model_dict[svm_reg_id] = svm_predictor
Fairness panosunu yerel olarak yükleme
Eşitlik içgörülerini Azure Machine Learning'e yüklemeden önce bu tahminleri yerel olarak çağrılan bir Eşitlik panosunda inceleyebilirsiniz.
# Generate models' predictions and load the fairness dashboard locally ys_pred = {} for n, p in model_dict.items(): ys_pred[n] = p.predict(X_test) from raiwidgets import FairnessDashboard FairnessDashboard(sensitive_features=A_test, y_true=y_test.tolist(), y_pred=ys_pred)
Eşitlik ölçümlerini önceden derleme.
Fairlearn'ın
metrics
paketini kullanarak bir pano sözlüğü oluşturun.sf = { 'Race': A_test.race, 'Sex': A_test.sex } from fairlearn.metrics._group_metric_set import _create_group_metric_set dash_dict = _create_group_metric_set(y_true=Y_test, predictions=ys_pred, sensitive_features=sf, prediction_type='binary_classification')
Önceden hesaplanmış eşitlik ölçümlerini karşıya yükleyin.
Şimdi karşıya yüklemeyi gerçekleştirmek için paketi içeri aktarın
azureml.contrib.fairness
:from azureml.contrib.fairness import upload_dashboard_dictionary, download_dashboard_by_upload_id
Bir Deneme oluşturun, ardından Bir Çalıştır oluşturun ve panoyu bu panoya yükleyin:
exp = Experiment(ws, "Compare_Two_Models_Fairness_Census_Demo") print(exp) run = exp.start_logging() # Upload the dashboard to Azure Machine Learning try: dashboard_title = "Fairness Assessment of Logistic Regression and SVM Classifiers" # Set validate_model_ids parameter of upload_dashboard_dictionary to False if you have not registered your model(s) upload_id = upload_dashboard_dictionary(run, dash_dict, dashboard_name=dashboard_title) print("\nUploaded to id: {0}\n".format(upload_id)) # To test the dashboard, you can download it back and ensure it contains the right information downloaded_dict = download_dashboard_by_upload_id(run, upload_id) finally: run.complete()
Önceki bölüme benzer şekilde, görselleştirme panosuna erişmek ve iki modeli eşitlik ve performans açısından karşılaştırmak için Azure Machine Learning stüdyosu'da yukarıda açıklanan yollardan birini (Denemeler veya Modeller aracılığıyla) izleyebilirsiniz.
Aralıksız ve azaltılmış eşitlik içgörülerini karşıya yükleme
Fairlearn'ın risk azaltma algoritmalarını kullanabilir, oluşturulan azaltılmış modellerini özgün aralıksız modelle karşılaştırabilir ve karşılaştırılan modeller arasında performans/eşitlik dengelerinde gezinebilirsiniz.
Kılavuz Arama azaltma algoritmasının kullanımını gösteren bir örnek görmek için (farklı eşitlik ve performans dengelemelerine sahip azaltılmış modellerden oluşan bir koleksiyon oluşturur) bu örnek not defterine göz atın.
Tek bir Çalıştırmada birden çok modelin eşitlik içgörülerini karşıya yüklemek, modellerin eşitlik ve performans açısından karşılaştırılmasını sağlar. Belirli bir modelin ayrıntılı eşitlik içgörülerini görmek için model karşılaştırma grafiğinde görüntülenen modellerden herhangi birine tıklayabilirsiniz.
Sonraki adımlar
Model eşitliği hakkında daha fazla bilgi edinin
Azure Machine Learning Eşitlik örnek not defterlerine göz atın