Можно вычислить значения Shapley для модели машинного обучения с помощью shapley объект. Используйте значения для интерпретации вклада отдельных элементов в модели в прогноз точки запроса. Существует два способа вычисления значений Shapley:
Создать shapley для модели машинного обучения с указанной точкой запроса с помощью shapley функция. Функция вычисляет значения Shapley всех элементов в модели для точки запроса.
Создать shapley для модели машинного обучения с помощью shapley и затем вычислить значения Shapley для указанной точки запроса с помощью fit функция.
Этот раздел определяет значения Shapley, описывает два доступных алгоритма для вычисления значений Shapley, предоставляет примеры для каждого и показывает, как снизить стоимость вычисления значений Shapley.
В теории игр значение Шапли игрока является средним предельным вкладом игрока в кооперативную игру. То есть значения Шепли - это справедливые распределения, отдельным игрокам, общего выигрыша, полученного в результате совместной игры. В контексте предсказания машинного обучения значение Shapley признака для точки запроса объясняет вклад признака в предсказание (ответ на регрессию или оценку каждого класса для классификации) в указанной точке запроса. Значение Шепли соответствует отклонению прогноза для точки запроса от среднего прогноза из-за признака. Для каждой точки запроса сумма значений Шепли для всех признаков соответствует общему отклонению прогноза от среднего значения.
Значение Shapley i-го признака для точки запроса x определяется функцией значения v:
| S |! (M − | S | − 1)! | (1) |
M - количество всех функций.
- это набор всех функций.
| S | - кардинальность множества S или количество элементов в множестве S.
vx (S) - функция значений признаков в наборе S для точки запроса x. Значение функции указывает ожидаемый вклад признаков в S в прогноз для точки запроса x.
shapley предлагает два алгоритма: kernelSHAP [1], использующий интервенционные распределения для функции значения, и расширение на kernelSHAP [2], использующее условные распределения для функции значения. Можно указать алгоритм, который будет использоваться, задав 'Method' аргумент «имя-значение» shapley функции или fit функция.
Разница между этими двумя алгоритмами заключается в определении функции значения. Оба алгоритма определяют функцию значения таким образом, что сумма значений Шапли точки запроса по всем признакам соответствует общему отклонению прогноза для точки запроса от среднего значения.
[f (x)].
Поэтому функция vx (S) значений должна соответствовать ожидаемому вкладу признаков в S в предсказание (f) для точки запроса x. Два алгоритма вычисляют ожидаемый вклад, используя искусственные выборки, созданные из указанных данных (X). Необходимо предоставитьX посредством ввода модели машинного обучения или отдельного аргумента ввода данных при создании shapley объект. В искусственных выборках значения для элементов в S поступают из точки запроса. Для остальных функций (функций в Sc, дополнение S) алгоритм kernelSHAP генерирует выборки с использованием интервенционных распределений, тогда как расширение алгоритма kernelSHAP генерирует выборки с использованием условных распределений.
'Method','interventional-kernel')shapley по умолчанию использует алгоритм kernelSHAP.
Алгоритм kernelSHAP определяет функцию значений признаков в S в точке запроса x как ожидаемое предсказание относительно интервенционного распределения D, которое является совместным распределением признаков в Sc:
XSc)],
где xS - значение точки запроса для элементов в S, а XSc - для элементов в Sc.
Чтобы оценить значение функции vx (S) в точке запроса x, предполагая, что характеристики не сильно коррелированы ,shapley использует значения в данных X в качестве выборок интервенционного распределения D для признаков в Sc:
(XSc) j),
где N - количество наблюдений, и (XSc) j содержит значения признаков в Sc для j-го наблюдения.
Например, предположим, что у вас есть три функции в X и четыре наблюдения: (x11, x12, x13), (x21, x22, x23), (x31, x32, x33) и (x41, x42, x43). Предположим, что S включает в себя первую функцию, а Sc включает в себя восстановление. В этом случае функция значения первой функции, оцениваемой в точке запроса (x41, x42, x43), равна
+ f (x41, x42, x43)].
Алгоритм kernelSHAP является вычислительно менее дорогостоящим, чем расширение алгоритма kernelSHAP, поддерживает упорядоченные категориальные предикторы и может обрабатывать отсутствующие значения в X. Однако алгоритм требует предположения о независимости функции и использует выборки из-за отсутствия распределения [3]. Искусственные образцы, созданные с использованием комбинации точки запроса и данных X, могут содержать нереалистичные наблюдения. Например, (x41, x12, x13) может быть образцом, который не встречается при полном совместном распределении трех признаков.
'Method','conditional-kernel')Определить 'Method','conditional-kernel' для использования расширения к алгоритму kernelSHAP.
расширение алгоритма kernelSHAP определяет функцию значения функций в S в точке запроса x, используя условное распределение XSc, учитывая, что XS имеет значения точки запроса:
, XSc)].
Чтобы вычислить значение функции vx (S) в точке запроса x ,shapley использует ближайшие соседи точки запроса, которые соответствуют 10% наблюдений в данных X. Этот подход использует более реалистичные выборки, чем алгоритм kernelSHAP и не требует предположения о независимости функции. Однако этот алгоритм вычислительно дороже, не поддерживает упорядоченные категориальные предикторы и не может обрабатывать NaNs в непрерывных элементах. Кроме того, алгоритм может назначить ненулевое значение Shapley фиктивной функции, которое не способствует прогнозированию, если фиктивная функция коррелирует с важной функцией [3].
В этом примере изучается модель линейной классификации и вычисляются значения Shapley с использованием обоих алгоритмов kernelSHAP ('Method','interventional-kernel'и расширение алгоритма kernelSHAP ('Method','conditional-kernel').
Модель линейной классификации поездов
Загрузить ionosphere набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный отклик для радарных возвращений, либо плохой ('b') или хорошо ('g').
load ionosphereОбучение модели линейной классификации. Укажите метод минимизации целевой функции ('Solver' аргумент «имя-значение») в качестве алгоритма Бройдена-Флетчера-Гольдфарба-Шанно квази-Ньютона с ограниченной памятью ('lbfgs') для повышения точности линейных коэффициентов.
Mdl = fitclinear(X,Y,'Solver','lbfgs')
Mdl =
ClassificationLinear
ResponseName: 'Y'
ClassNames: {'b' 'g'}
ScoreTransform: 'none'
Beta: [34x1 double]
Bias: -3.7100
Lambda: 0.0028
Learner: 'svm'
Properties, Methods
Значения Shapley с интервенционным распределением
Вычислите значения Shapley для первого наблюдения с помощью алгоритма kernelSHAP, который использует интервенционное распределение для оценки функции значения. Нет необходимости указывать 'Method' значение, потому что 'interventional-kernel' является значением по умолчанию.
queryPoint = X(1,:);
explainer1 = shapley(Mdl,X,'QueryPoint',queryPoint); Для классификационной модели: shapley вычисляет значения Shapley, используя прогнозируемый балл класса для каждого класса. Постройте график значений Shapley для прогнозируемого класса с помощью plot функция.
plot(explainer1)

Горизонтальная гистограмма показывает значения Шепли для 10 наиболее важных переменных, отсортированные по их абсолютным значениям. Каждое значение Шепли объясняет отклонение оценки для точки запроса от средней оценки прогнозируемого класса из-за соответствующей переменной.
Для линейной модели, где предполагается, что элементы независимы друг от друга, можно вычислить интервенционные значения Шапли для положительного класса (или второго класса в Mdl.ClassNames, 'g') из расчетных коэффициентов (Mdl.Beta) [1].
linearSHAPValues = (Mdl.Beta'.*(queryPoint-mean(X)))';
Создайте таблицу, содержащую значения Shapley, вычисленные из алгоритма kernelSHAP, и значения из коэффициентов.
t = table(explainer1.ShapleyValues.Predictor,explainer1.ShapleyValues.g,linearSHAPValues, ... 'VariableNames',{'Predictor','KernelSHAP Value','LinearSHAP Value'})
t=34×3 table
Predictor KernelSHAP Value LinearSHAP Value
_________ ________________ ________________
"x1" 0.28789 0.28789
"x2" -3.5258e-16 0
"x3" 0.20822 0.20822
"x4" -0.01998 -0.01998
"x5" 0.20872 0.20872
"x6" -0.076991 -0.076991
"x7" 0.19188 0.19188
"x8" -0.64386 -0.64386
"x9" 0.42348 0.42348
"x10" -0.030049 -0.030049
"x11" -0.23132 -0.23132
"x12" 0.1422 0.1422
"x13" -0.045973 -0.045973
"x14" -0.29022 -0.29022
"x15" 0.21051 0.21051
"x16" 0.13382 0.13382
⋮
Значения Shapley с условным распределением
Вычислите значения Shapley для первого наблюдения с помощью расширения к алгоритму kernelSHAP, использующему условное распределение для вычисления функции значения.
explainer2 = shapley(Mdl,X,'QueryPoint',queryPoint,'Method','conditional-kernel');
Постройте график значений Шепли.
plot(explainer2)

Два алгоритма определяют различные наборы для 10 наиболее важных переменных. Только две переменные x8 и x22 являются общими для обоих наборов.
Вычислительные затраты для значений Шепли увеличиваются, если количество наблюдений или элементов велико.
Вычисление функции значения (v) может быть вычислительно дорогостоящим, если имеется большое количество наблюдений, например, более 1000. Для ускорения вычислений используйте меньший образец наблюдений при создании shapley объект или вычислить значения Shapley параллельно, указав 'UseParallel' как true при вычислении значений с помощью shapley или fit функция. Параллельные вычисления требуют Toolbox™ параллельных вычислений.
Вычисление суммы в уравнении 1 для всех доступных подмножеств S может быть вычислительно дорогостоящим, когда M (количество признаков) является большим. Общее число рассматриваемых подмножеств равно 2M. Вместо вычисления суммирования для всех подмножеств можно указать максимальное количество подмножеств для вычисления значения Shapley с помощью 'MaxNumSubsets' аргумент «имя-значение». shapley выбирает подмножества для использования на основе их весовых значений. Вес подмножества пропорционален 1/( знаменателю суммы), что соответствует 1 над биномиальным коэффициентом: | S |). Следовательно, подмножество с высоким или низким значением кардинальности имеет большое значение веса .shapley включает сначала подмножества с самым высоким весом, а затем включает другие подмножества в порядке убывания на основе их значений веса.
В этом примере показано, как уменьшить вычислительные затраты для значений Shapley при большом количестве наблюдений и элементов.
Ансамбль регрессии поездов
Загрузить набор данных образца NYCHousing2015.
load NYCHousing2015Набор данных включает 55 246 наблюдений 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. В этом примере эти переменные используются для анализа продажных цен (SALEPRICE).
Выполните предварительную обработку набора данных. Преобразовать datetime массив (SALEDATE) к числам месяца.
NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);
Тренируйте регрессионный ансамбль.
Mdl = fitrensemble(NYCHousing2015,'SALEPRICE');Вычислить значения Shapley с опциями по умолчанию
Вычислите значения Шапли всех переменных предиктора для первого наблюдения. Измерьте время, необходимое для вычисления значений Shapley с помощью tic и toc.
tic
explainer1 = shapley(Mdl,'QueryPoint',NYCHousing2015(1,:));Warning: Computation can be slow because the predictor data has over 1000 observations. Use a smaller sample of the training set or specify 'UseParallel' as true for faster computation.
toc
Elapsed time is 492.365307 seconds.
Как указывает предупреждающее сообщение, вычисление может быть медленным, поскольку данные предиктора содержат более 1000 наблюдений.
Укажите параметры для снижения вычислительных затрат
shapley предоставляет несколько опций для снижения вычислительных затрат при наличии большого количества наблюдений или элементов.
Большое количество наблюдений - используйте меньшую выборку обучающих данных и вычисляйте значения Shapley параллельно, указывая 'UseParallel' как true.
Большое количество элементов - укажите 'MaxNumSubsets' аргумент name-value для ограничения числа подмножеств, включенных в вычисление.
Вычислите значения Shapley снова, используя меньшую выборку обучающих данных и опцию параллельных вычислений. Также укажите максимальное количество подмножеств как 2^5.
NumSamples = 5e2; Tbl = datasample(NYCHousing2015,NumSamples,'Replace',false); tic explainer2 = shapley(Mdl,Tbl,'QueryPoint',NYCHousing2015(1,:), ... 'UseParallel',true,'MaxNumSubsets',2^5);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
toc
Elapsed time is 52.183287 seconds.
Указание дополнительных опций сокращает время, необходимое для вычисления значений Shapley.
[3] Кумар, И. Елизавета, Суреш Венкатасубраманян, Карлос Шейдеггер и Сорелле Фридлер. «Проблемы с основанными на стоимости объяснениями Шейпли как показателями важности признаков». arXiv:2002.11097 (2020).