#ml #shap #interpretabiity #mutualinformation
О, этот удивительный мир халатности и безответственности. А может, просто здорового пофигизма? Как общеизвестно, пакет SHAP раскладывает предсказание модели для каждой строки данных на линейную сумму "вкладов" каждого признака, по сути формируя матрицу NxM (строк данных на число признаков). На базе этой информации SHAP предлагает пользователю несколько основных визуализаций:
1) summary всех признаков, отсортированные по убыванию модуля средней значимости на всём рабочем датасете
идёт в 2 вкусах: плоский одноцветный bar plot, где построен только модуль среднего, и более продвинутый beeswarm plot, где напротив признака отображены значения Шэпли этого признака для все строк данных. Да ещё и раскрашены в цветовой шкале значений этой фичи. Тем самым по beeswarm можно понять, к примеру, что в среднем повышение/понижение какой-то фичи сподвигает модель прогнозировать более высокий/низкий таргет.
2) объяснение индивидуального прогноза
идёт в 3 фасонах: force plot, waterfall plot, decision plot. последний обладает широкой функциональностью: может отображать несколько примеров сразу, работает с мультиклассовой классификацией, позволяет кластеризовать "пути" в пространстве признаков, по которым модель приходит к решению;
3) объяснение вклада индивидуального признака: scatte plot, ранее dependence plot. По X значение признака, по Y значение кэфа Шэпли для этого примера. Похоже чем-то на PDP по виду (но разная суть). И вот тут автор SHAP, видимо, вдохновлённый тем, что PDP может быть не только одномерным, предлагает бесплатно из коробки киллер фичу: так как по Y на графике все равно уже есть вариабельность, SHAP вам автоматически раскрасит точки в цвета...другой наиболее влияющей фичи (на основную фичу вашего графика). Звучит шикарно, и я думал, что "наиболее влияющая" уж в пакете-то SHAP определяется хитрыми интеракциями теории игр... Полез в код, куда там... Во-первых, там просто np.corrcoeff, во-вторых, и то на максимум 10_000 точек. Так а как же квартет Энскомба? Нелинейность у нас отменили? Хочу попробовать заменить пирсоновский corrcoeff на хотя бы взаимную информацию.
UPD: на мой взгляд, MI куда чётче разделяет низкие и высокие прогнозы. Пример в аттаче. Надо бы замёрджить PR.
О, этот удивительный мир халатности и безответственности. А может, просто здорового пофигизма? Как общеизвестно, пакет SHAP раскладывает предсказание модели для каждой строки данных на линейную сумму "вкладов" каждого признака, по сути формируя матрицу NxM (строк данных на число признаков). На базе этой информации SHAP предлагает пользователю несколько основных визуализаций:
1) summary всех признаков, отсортированные по убыванию модуля средней значимости на всём рабочем датасете
идёт в 2 вкусах: плоский одноцветный bar plot, где построен только модуль среднего, и более продвинутый beeswarm plot, где напротив признака отображены значения Шэпли этого признака для все строк данных. Да ещё и раскрашены в цветовой шкале значений этой фичи. Тем самым по beeswarm можно понять, к примеру, что в среднем повышение/понижение какой-то фичи сподвигает модель прогнозировать более высокий/низкий таргет.
2) объяснение индивидуального прогноза
идёт в 3 фасонах: force plot, waterfall plot, decision plot. последний обладает широкой функциональностью: может отображать несколько примеров сразу, работает с мультиклассовой классификацией, позволяет кластеризовать "пути" в пространстве признаков, по которым модель приходит к решению;
3) объяснение вклада индивидуального признака: scatte plot, ранее dependence plot. По X значение признака, по Y значение кэфа Шэпли для этого примера. Похоже чем-то на PDP по виду (но разная суть). И вот тут автор SHAP, видимо, вдохновлённый тем, что PDP может быть не только одномерным, предлагает бесплатно из коробки киллер фичу: так как по Y на графике все равно уже есть вариабельность, SHAP вам автоматически раскрасит точки в цвета...другой наиболее влияющей фичи (на основную фичу вашего графика). Звучит шикарно, и я думал, что "наиболее влияющая" уж в пакете-то SHAP определяется хитрыми интеракциями теории игр... Полез в код, куда там... Во-первых, там просто np.corrcoeff, во-вторых, и то на максимум 10_000 точек. Так а как же квартет Энскомба? Нелинейность у нас отменили? Хочу попробовать заменить пирсоновский corrcoeff на хотя бы взаимную информацию.
UPD: на мой взгляд, MI куда чётче разделяет низкие и высокие прогнозы. Пример в аттаче. Надо бы замёрджить PR.
Wikipedia
Квартет Энскомба
Квартет Энскомба — четыре набора числовых данных, у которых простые статистические свойства идентичны, но их графики существенно отличаются. Каждый набор состоит из 11 пар чисел. Квартет был составлен в 1973 году английским математиком Ф. Дж. Энскомбом для…