Авторы Марта Лагуна, Кашьяп Патель, Елена Жердева и Джейсон Ван

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

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

Деловая потребность

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

Кроме того, RAI Toolbox выиграл от крупных инвестиций и теперь объединяет несколько инструментов, которые лучше облегчают разработку ответственного ИИ и отладку моделей. (Для пояснения: ответственный ИИ выходит за рамки инструментов, но в этой статье мы сосредоточимся на инструментах и ​​еще больше сузим сферу охвата, чтобы охватить только некоторые из них.) В то же время одна из проблем, с которыми мы столкнулись как внутренние последователи потребность в масштабе из-за наших больших потребностей в данных. Поэтому мы разработали Анализ баланса данных и Интерпретируемость на Spark.

Описание сценария

В этой статье мы используем Набор данных для прогнозирования заболеваний сердца от Kaggle, чтобы лучше продемонстрировать функциональность без ущерба для наших внутренних сценариев. Однако мы ссылаемся на некоторые внутренние сценарии, чтобы лучше продемонстрировать масштаб, в котором были протестированы некоторые функции.

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

Цель. В этом сценарии мы хотим предсказать, есть ли у кого-то болезнь сердца или нет. Набор данных содержит 18 функций, включая столбец с надписью «HeartDisease» (Да/Нет).

categorical_features = ["Курение", "Употребление алкоголя", "Инсульт", "Ходинг", "Пол", "Возрастная категория", "Раса", "Диабет", "Физическая активность", "Общее здоровье", "Астма", "Болезнь почек" , "Рак кожи"]

numeric_features = ["ИМТ", "Физическое здоровье", "Психическое здоровье", "Время сна"]

Шаги

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

  1. Подготовка данных и исследовательский анализ данных. Получите общее представление о наших функциях и выполните дальнейшее преобразование данных по мере необходимости.
  2. Анализ баланса данных: запустите меры баланса функций, меры баланса распределения и совокупные меры баланса для соответствующих функций.
  3. Обучение модели: обучите GBTClassifier из библиотеки Spark ML, используя все функции. Основываясь на балансе меток, сделайте повторное взвешивание, чтобы еще больше повысить точность нашей модели.
  4. Оценка модели. Оцените производительность модели с помощью BinaryClassificationEvaluator.
  5. Интерпретация модели: запустите глобальную интерпретируемость модели, используя как PDP, так и ICE.
  6. Первоначальные выводы и предлагаемые следующие шаги.

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

Подготовка данных

Как упоминалось ранее, для этого сценария мы используем набор данных Heart Disease Prediction от Kaggle. Набор данных уже чист, поэтому мы не проводили дальнейших преобразований признаков. Классы из этого набора данных сильно несбалансированы и включают 18 признаков.

Примечание. Эта модель была разработана в Spark. Хотя этот набор данных из 320 000 строк по 18 столбцов не является «большими данными», мы ссылаемся на некоторые внутренние примеры, чтобы лучше проиллюстрировать преимущества масштабируемости, обеспечиваемые выполнением процесса в Spark.

Анализ баланса данных (от SynapseML)

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

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

Вред, связанный со справедливостью, включает:

  • Вред от распределения: когда система ИИ расширяет или удерживает возможности или ресурсы таким образом, что это негативно влияет на жизнь людей.
  • Ущерб качеству обслуживания: когда система ИИ работает не так хорошо для одной группы людей, как для другой.
  • Стереотипы вредят: система искусственного интеллекта делает несправедливые обобщения о группах людей и укрепляет негативные стереотипы.
  • Унижающий вред: когда система ИИ активно унижает или оскорбляет.
  • Вред от чрезмерного и недостаточного представительства: когда система ИИ чрезмерно или недостаточно представляет некоторые группы людей или даже может полностью стереть некоторые группы.

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

Анализ баланса данных состоит из комбинации трех групп мер, которые были интегрированы в библиотеку SynapseML: Показатели баланса признаков, Показатели баланса распределения и Показатели совокупного баланса.

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

  • Это снижает затраты на создание машинного обучения за счет раннего выявления пробелов в представлении данных, которые побуждают специалистов по данным искать меры по смягчению последствий (такие как сбор большего количества данных, следование определенному механизму выборки, создание синтетических данных и т. д.), прежде чем приступить к обучению своих моделей.
  • Он обеспечивает простую сквозную отладку систем машинного обучения в сочетании с RAI Toolbox, обеспечивая четкое представление о проблемах, связанных с моделями, и проблемах, связанных с данными.

Чтобы начать этот процесс, мы сначала определяем «интересующие особенности». Интересующей функцией может быть конфиденциальная функция (например, демографические параметры), функция, от которой, как вы знаете, будет сильно зависеть ваша модель (например, AgeCategory в этом сценарии), или любая другая функция, которую вы, возможно, захотите изучить дополнительно. Обратите внимание, что при желании вы можете запускать DBA (анализ баланса данных) для большогоколичества функций, а Spark может легко масштабировать вычисления, которые мы считаем чрезвычайно полезными для наших внутренних сценариев. которые имеют дело с большими входными данными.

Для этого сценария мы выбрали расу и пол в качестве ключевых характеристик для оценки. Мы выбираем «Раса» и «Пол» в качестве интересующих нас характеристик, потому что они являются демографическими характеристиками, несбалансированность которых может привести к ущербу, связанному с справедливостью в модели.

В качестве справки, вот некоторые начальные сведения о функциях:

Вычисление показателей баланса функций

Измерения баланса функций позволяют нам увидеть, дает ли каждая комбинация наших чувствительных функций положительный результат (HeartDisease == 1) с одинаковой частотой.

Мы фокусируемся на статистическом паритете (также известном как демографический паритет, паритет уровня принятия и сравнительный анализ), показателе, который:

  1. Принимает два значения в пределах показателя, например, Race=="Hispanic" и Race=="Asian".
  2. Вычисляет их положительную долю: (количество строк с этим значением меры, которые имеют HeartDisease==1) / (количество строк с этим значением меры).
  3. Вычитает их положительные показатели, что является их статистической четностью.

В этом сценарии мы выбрали «Расу» и «Пол» в качестве интересующих нас функций (столбцов), но мы также демонстрируем «Общее здоровье» и «Диабет», чтобы получить лучшее представление о типах тепловых карт, которые мы можем получить.

ГОНКА

  • SP (американские индейцы, азиаты) = 0,07 показывает, что наблюдения за здоровьем американских индейцев чаще связаны с сердечными заболеваниями, чем наблюдения за здоровьем «азиатов».
  • SP (белые, азиаты) = 0,06 показывает, что наблюдения за здоровьем «белых» чаще связаны с сердечными заболеваниями, чем наблюдения за здоровьем «азиатов».

СЕКС

  • SP (женщина, мужчина) = -0,04 показывает, что наблюдения за женщинами реже связаны с сердечными заболеваниями, чем наблюдения за здоровьем мужчин.

ОБЩЕЕ ЗДОРОВЬЕ

  • SP (плохо, отлично) = 0,32 показывает, что «плохие» наблюдения за здоровьем чаще связаны с сердечными заболеваниями, чем «отличные» наблюдения за здоровьем.
  • SP (плохо, очень хорошо) = 0,29 показывает, что «плохие» наблюдения за здоровьем чаще связаны с сердечными заболеваниями, чем «очень хорошие» наблюдения за здоровьем.
  • SP(Удовлетворительное, Хорошее) = 0,1 показывает, что как «Удовлетворительное», так и «Хорошее» наблюдения за здоровьем почти в одинаковой степени связаны с сердечными заболеваниями. Это также верно для смежных категорий (например, «Хорошо» и «Очень хорошо»).

ДИАБЕТИК

  • SP(Да, Да-во время беременности) = 0,18 показывает, что наблюдения за состоянием здоровья «Диабетики (Да)» чаще связаны с сердечными заболеваниями, чем наблюдения за здоровьем «Диабетики (Да) во время беременности».
  • SP(Да, Нет) = 0,15 показывает, что наблюдения за состоянием здоровья «Диабетики (Да)» чаще связаны с сердечными заболеваниями, чем наблюдения за здоровьем «недиабетики (Нет)».

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

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

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

Вычисление показателей баланса распределения

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

Хотя существует множество мер расстояния, которые можно использовать, давайте пока сосредоточимся на расстоянии Дженсена-Шеннона. Мера JS Distance имеет диапазон [0, 1]. 0 означает, что наше распределение идеально сбалансировано по отношению к равномерному распределению.

Примечание. В будущем эта функция позволит вам создавать разовые дистрибутивы. Это важно, если вы хотите сравнить данные выборки с общей совокупностью (которая обычно неоднородна).

В этом сценарии в демонстрационных целях мы сосредоточимся на поле и расе (всего две функции), но в сценариях с более высокой кардинальностью функций вам потребуются инструменты, которые помогут вам и помогут подготовить данные для обучения и убедиться, что они репрезентативны для вашего населения. или «идеальное» население.

В этом примере, если мы, как специалисты по данным, должны были начать «смягчать» наши данные, имеет смысл начать с изучения расы, а не пола. Хотя эти две функции ясно показывают, какая из них более сбалансирована, чем другая, просто на основе стандартного исследования данных, если бы мы изучали более сложные функции, это могло бы быть не так просто.

Выполняя измерения Баланса Распределения, мы получаем количественные показатели, которые легко отслеживать и интегрировать как часть нашего пайплайна построения модели. Их можно использовать как индикаторы дрейфа или расстояния от определенной базовой линии (в данном случае это равномерное распределение).

Примечание. В следующей статье мы рассмотрим JS с неравномерным распределением.

Раса имеет JS-расстояние 0,458, в то время как секс имеет JS-расстояние 0,0175.

Зная, что расстояние JS находится между [0, 1], где 0 означает идеально сбалансированное распределение, мы можем сказать, что:

  • В нашем наборе данных разница между разными расами больше, чем между полами.
  • Раса нигде не близка к идеально сбалансированному распределению (т. е. некоторые расы встречаются в нашем наборе данных гораздо чаще, чем другие).
  • Половое распределение близко к идеально сбалансированному.

Вычисление показателей совокупного баланса

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

Эти меры учитывают распределение записей по всем комбинациям конфиденциальных/выбранных столбцов. Например, если интерес представляют столбцы «Раса» и «Пол», то показатели совокупного баланса пытаются количественно оценить дисбаланс во всех комбинациях: (белый, мужчина), (латиноамериканец, женщина), (азиат, мужчина) и т. д.

Примером может служить индекс Аткинсона, который имеет диапазон [0, 1]. 0 означает полное равенство по интересующим столбцам, тогда как 1 означает максимальное неравенство. В нашем случае это доля записей для комбинаций интересующих нас столбцов.

Индекс Аткинсона, равный 0,6199, говорит нам о том, что необходимо отказаться от 61,99% точек данных, чтобы иметь более равную долю среди наших функций.

Это позволяет нам узнать, что наш набор данных в отношении расы и пола сильно несбалансирован, и мы должны предпринять действенные шаги для смягчения последствий (если применимо) путем:

  • Точки данных с повышением частоты дискретизации, где значение признака менее заметно.
  • Точки данных с пониженной выборкой, в которых значение признака превышает наблюдаемое.

Выводы анализа баланса данных

  • Эти меры помогают определить, когда набор данных не является «репрезентативным» для своих целей, позволяя пользователям изучить потенциальные меры по смягчению последствий перед использованием данных.
  • Пользователи могут использовать эти показатели для установки пороговых значений. Производственные конвейеры могут использовать эти показатели в качестве основы для моделей, требующих частого повторного обучения на новых данных, и использовать их для принятия решения о необходимости повторного обучения.
  • Производственные конвейеры могут использовать эти показатели в качестве базовых для моделей, требующих частого повторного обучения на новых данных.
  • Эти показатели также могут быть сохранены в качестве ключевых метаданных для модели или службы, созданы и добавлены как часть Карточек моделей или Примечаний о прозрачности и помогают обеспечить общую ответственность за созданную службу ML и ее производительность по различным демографическим или конфиденциальным атрибутам. в свою очередь, помогая управлять ответственными процессами ИИ.
  • С помощью общих визуализаций вы не можете сравнить распределение одной функции с распределением другой функции. Для HeartDisease==Да, вы видите, что функция встречается намного чаще, чем другие (раса==белая), но это не обязательно означает, что она несбалансированная.

Примечание. В следующей статье серии мы применим меры по снижению риска перед тем, как перейти к обучению. В этой статье мы продолжаем обучение с данными как есть, но также применяем некоторые веса к метке, чтобы повысить точность модели.

Обучение модели

Мы обучаем GBTClassifier прогнозировать болезни сердца. Сначала мы применяем StringIndexer и OneHotEncoder к категориальным функциям, а затем используем VectorAssebler для построения вектора как с категориальными, так и с числовыми функциями и передаем его нашему классификатору.

Мы знаем, что наши данные сильно несбалансированы, поэтому мы добавляем веса на основе нашего столбца меток, чтобы лучше распределить метки и повысить точность модели.

Мы подгоняем конвейер и теперь имеем нашу модель.

Оценка модели

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

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

Интерпретация модели

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

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

Для этого сценария мы будем выполнять глобальную интерпретацию (для описания среднего поведения модели), используя как графики частичной зависимости (PDP), так и индивидуальное условное ожидание (ICE).

После запуска важности функций на основе PDP в нашей модели мы видим, что функции с более высокой релевантностью включают ageCategory (что ожидается), Stroke, GenHealth и SleepTime.

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

Примечание. Когда у нас есть категориальные значения, мы представляем данные в виде гистограмм и в виде звездчатого графика по сравнению с линейными диаграммами, которые мы используем для числовых значений.

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

Для SleepTime мы видим, что более высокие прогнозы обусловлены небольшим количеством часов сна и что примерно через 15 часов средний прогноз модели выравнивается. Это говорит о том, что средняя производительность модели за 15+ часов не слишком сильно меняется.

Позже эта информация может быть использована для обеспечения большей прозрачности для пользователей нашей модели.

Примечание. Поскольку функциональность была разработана в Spark, вы можете запускать интерпретируемость больших данных. У нас есть внутренние сценарии, в которых он использовался с наборами данных из 55 миллионов и более чем 77 миллионов записей.

Заключение и следующие шаги

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

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

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

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