Узнайте, как создавать информационные панели ответственного ИИ с помощью библиотек Python HolitisticAI и Streamlit.

Первоначально опубликовано в Блоге Holistic AI.

ИИ все больше вплетается в ткань нашей повседневной жизни. Поэтому крайне важно устранить потенциальный вред, связанный с предвзятостью в системах ИИ — это означает устранение алгоритмов, которые увековечивают дискриминацию, усиливают неравенство и приводят к несправедливым результатам.

В этой статье вы узнаете, как всего за пять простых шагов создать приложение для панели инструментов для измерения и смягчения предвзятости, используя Python вместе с библиотеками Holistic AI, sklearn и Streamlit.

Как создать информационную панель для измерения и смягчения предвзятости с помощью библиотеки с открытым исходным кодом Holistic AI

Целостная библиотека ИИ — это инструмент с открытым исходным кодом, используемый для оценки и повышения надежности систем ИИ. Текущая версия библиотеки предлагает набор методов, позволяющих легко измерять и устранять предвзятость в различных задачах, способствуя разработке честных, прозрачных и этичных систем искусственного интеллекта.

Мы рассмотрим проблему снижения предвзятости на примере показателей приема для двух разных групп абитуриентов — группы а (белые) и группы б (небелые).

Шаг 1 — Библиотеки Python и главная страница

Начальный шаг в проекте по науке о данных или машинному обучению обычно включает в себя импорт необходимых библиотек Python и настройку главной страницы или пользовательского интерфейса проекта.

То же самое относится и к нашей информационной панели для устранения предвзятости, как показано во фрагменте кода ниже.

# import libraries
import streamlit as st
import holisticai
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
from sklearn.metrics import RocCurveDisplay
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neural_network import MLPClassifier
from sklearn.ensemble import RandomForestClassifier

from holisticai.datasets import load_law_school
from holisticai.bias.plots import group_pie_plot, distribution_plot
from holisticai.bias.mitigation import Reweighing

# set up app title
st.markdown("# Classification with Machine Learning")

# set up sidebar text
st.sidebar.write(
    """This is a dashboard to measure and mitigate bias with 
        HolisticAI library."""
)

# load dataframe
df = load_law_school()['frame']

# create one tab for each step
step1, step2, step3, step4 = st.tabs(["Step 1: Data Description", 
                                      "Step 2: Training Model", 
                                      "Step 3: Bias Metrics", 
                                      "Step 4: Bias Mitigation"])

Шаг 2 — Визуализация данных

Для следующего шага создайте простую визуализацию данных с круговой диаграммой, чтобы представить процент белых и небелых людей в наборе данных, и дистрибутивом, чтобы представить распределение среднего балла студентов бакалавриата.

with step1:
    
    st.subheader("Descriptive Analysis")
    
    # protected attribute (race)
    p_attr = df['race1']
    
    # binary label vector
    y = df['bar']        

    fig1, ax = plt.subplots(1, 2, figsize=(10,3))
    
    # create a pie plot with protected attribute 
    group_pie_plot(p_attr, ax=ax[0]) 

    # create a distplot with target and gender variables
    distribution_plot(df['ugpagt3'], df['gender'], ax=ax[1])
    plt.tight_layout()
    
    # show fig1 in app
    st.pyplot(fig1)

Шаг 3 — Выбор модели и обучение

Далее мы выбираем модель и создаем кривую ROC. Кривая ROC создается путем построения графика истинно положительных показателей (TPR) в сравнении с показателями ложноположительных результатов (FPR) при различных пороговых значениях. Мы также вычисляем площадь под кривой ROC (AUC), которую используем в качестве метрики для количественной оценки общей производительности модели.

with step2:
    
    # load machine learning models 
    lr = LogisticRegression()
    rf = RandomForestClassifier()
    mlp = MLPClassifier(hidden_layer_sizes = 10, max_iter=50)
    
    models = [lr, rf, mlp]
    
    # model selector
    model = st.selectbox("Select a Model", models)
    
    # simple preprocessing before training.
    df_enc = df.copy()
    df_enc['bar'] = df_enc['bar'].replace({'FALSE':0, 'TRUE':1})

    # split features and target, then train test split
    X = df_enc.drop(columns=['bar', 'ugpagt3'])
    y = df_enc['bar']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)   
    
    # StandarScaler transformation
    scaler = StandardScaler()
    X_train_t = scaler.fit_transform(X_train.drop(columns=['race1', 'gender']))
    X_test_t = scaler.transform(X_test.drop(columns=['race1', 'gender']))

    # fit model
    model.fit(X_train_t, y_train)

    # predictions
    y_pred = model.predict(X_test_t)

    # create ROC Curve image
    roc_disp = RocCurveDisplay.from_estimator(model, X_test_t, y_test)
    roc_disp.plot()
    st.pyplot()

Шаг 4 — Метрики предвзятости

На этом этапе мы вычисляем метрики смещения, чтобы оценить, есть ли какие-либо различия в производительности модели для разных подгрупп населения — белых и небелых заявителей в этом примере. Метрики предвзятости используются для измерения справедливости модели и выявления любых потенциальных источников смещения, которые могут присутствовать в данных или модели.

with step3:

    # set up groups, prediction array and true (aka target/label) array.
    group_a = X_test["race1"]=='non-white'  # non-white vector
    group_b = X_test["race1"]=='white'      # white vector
    y_true  = y_test                        # true vector
    
    # create a table with classification bias metrics
    bias_metrics = classification_bias_metrics(group_a, group_b, y_pred, y_test, metric_type='both')

    # show table with bias metrics in app
    st.table(bias_metrics)

Шаг 5 — Выбор митигатора

Наконец, мы используем стратегию повторного взвешивания для вычисления метрик смещения. Повторное взвешивание — это широко используемый метод машинного обучения для уменьшения систематической ошибки в наборах данных. Стратегия включает в себя присвоение разных весов разным образцам в наборе данных в зависимости от их принадлежности к группам, чтобы сбалансировать представление разных групп.

with step4:
    
    # load mitigator (Reweighing)
    reweighing_mitigator = Reweighing()
    
    # use mitigator in data
    reweighing_mitigator.fit(y_train, group_a, group_b)

    # access the new sample_weight
    sw = reweighing_mitigator.estimator_params["sample_weight"]
    
    # training the model
    model.fit(X_train_t, y_train, sample_weight=sw)

    # make predictions
    y_pred = model.predict(X_test_t)
    
    # create a table with bias metrics for mitigation strategy
    bias_metrics_mitigated = holisticai.bias.metrics.classification_bias_metrics(group_a, group_b, y_pred, y_test, metric_type='both')

    # show table with bias metrics in app
    st.table(bias_metrics_mitigated)

Полная реализация и ссылки

Вы можете получить доступ к полной реализации в этом репозитории GitHub.

И это все, что нужно сделать. Используя библиотеку Holistic AI и платформу Streamlit на Python, вы можете создать удобный интерфейс, позволяющий продемонстрировать результаты ваших усилий по снижению предвзятости в системах машинного обучения.

С быстрым распространением ИИ в обществе практические решения для уменьшения алгоритмической предвзятости как никогда важны.

Настраиваемая информационная панель с интуитивно понятным отображением визуализаций, таблиц и других данных — идеальный способ визуализировать данные и представить их заинтересованным сторонам.‍

Чтобы узнать больше о методах измерения и смягчения предвзятости, посетите библиотеку комплексного ИИ, ресурс с открытым исходным кодом, предназначенный для повышения надежности и прозрачности систем ИИ.



Открытый исходный код | Целостный ИИ
Нажимая «Принять
, вы соглашаетесь на сохранение файлов cookie на вашем устройстве для улучшения навигации по сайту, анализа сайта…www.holisticai.com»









Не стесняйтесь присылать любые вопросы об этой реализации на [email protected]