Пока мы ловим приколы-юного-стартапера в виде «подбери платежный сервис и пойми, что не так», мы обновляем модули, и я enrich-y opensource. Сейчас на очереди был модуль про базовые эффекты объяснения: PDP, ICE, ALE и CP-профили. В сжатом формате: они позволяют оценить атрибуцию признака «шатая» его и смотря на картинку. И я собрала список либ (обновленный) и вот — несу для удобства.
Идеи каждого:
CP-профили (ceteris paribus) — берем объект, берем признак и меняем его по всему диапазону. Отвечает на вопрос: что будет с прогнозом вот этого x, если крутить один признак, а остальные держать неподвижно. Локальный ответ на «а если бы».
ICE — тот же расчёт, но по кривой на каждый объект.
PDP — берём один признак, прогоняем его по сетке значений для всех объектов сразу (остальные признаки не трогаем) и усредняем предсказания. Получается одна кривая: как модель реагирует на признак в среднем.
Если половина объектов реагирует вверх, а половина вниз, среднее будет плоским, поэтому PDP часто кладут на ICE.
ALE — продолжаем PDP — вместо усреднения по всей выборке считаем локальные приращения предсказания внутри узких интервалов признака и накапливаем их. Он — попытка бороться с корреляцией признаков и её влиянием на PDP.
Исторически эти методы R-центрированы. R — это язык программирования, если что (на нём когда-то писали лабы по статистике в универе и на курсах, если кто-то это делал — я с вами!). Причина скорее всего в том, что авторы методов писали на R.
Предостерегая вопрос «зачем нам методы из 2001» (сама им задавалась):
Во-первых, мы всё ещё работаем с табличными данными. Если (когда) возникает задача объяснения кому-то регулирующему, то эти варианты — очень human-friendly.
Во-вторых, семья методов — про функцию, про идеи. Мы эксплуатируем «вход, который можно покрутить, и выход, который можно измерить». Поэтому их можно, поняв, натянуть на LM-обвязку: как метрика качества зависит от числа retrieved документов, от длины промпта, от температуры, от количества few-shot примеров. Это прям PDP по гиперпараметру пайплайна, просто никто не называет это PDP.
В-третьих, механистическая интерпретируемость делает по сути то же самое. Activation patching — это «пошатать вход и посмотреть на выход», только шатают не признак, а скрытое состояние.
Здесь должна быть фраза про базу, я не придумала, так что посмотрим, что есть в Python:
scikit-learn — PDP, ICE и центрированный ICE из коробки (centered=True). Базовый минимум, как сейчас говорится, кажется.
effector — очень полный пакет по эффектам сегодня: PDP, ICE, ALE, RHALE, плюс региональные эффекты (ищет подгруппы, где эффект признака разный).
dalex — CP-профили (predict_profile), и PDP, и ALE.
alibi —PDP и оценка на основе PDP-based feature importance (PartialDependenceVariance).
PyALE / ALEPython — ALE второго порядка (взаимодействия). Умирающие, обновлялись два года назад.
Добавила в таблицу — теперь там 67 библиотек и фильтр по типу метода: Feature Effect / PDP / ICE / ALE / Regional Effects. Мёртвые лежат, под галочкой «show inactive», живых 44.
Табличка: xai-table.streamlit.app
И всем доброй ночи или отличного утра! 😌