Значения Shapley для модели машинного обучения

Можно вычислить значения Шепли для модели машинного обучения с помощью shapley объект. Используйте значения для интерпретации вкладов отдельных функций в модели в предсказание для точки запроса. Существует два способа вычисления значений Шепли:

  • Создайте shapley объект для модели машинного обучения с заданной точкой запроса при помощи shapley функция. Функция вычисляет значения Shapley всех функций в модели для точки запроса.

  • Создайте shapley объект для модели машинного обучения при помощи shapley и затем вычислите значения Shapley для заданной точки запроса с помощью fit функция.

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

Что такое значение Шепли?

В теории игр значение Шепли игрока является средним предельным вкладом игрока в кооперативную игру. То есть, значения Шепли являются справедливыми распределениями, для отдельных игроков, из общего усиления, полученного от кооперативной игры. В контексте предсказания машинного обучения значение Шепли функции для точки запроса объясняет вклад функции в предсказание (ответ на регрессию или счет каждого класса для классификации) в заданной точке запроса. Значение Шепли соответствует отклонению предсказания для точки запроса от среднего предсказания из-за функции. Для каждой точки запроса сумма значений Shapley для всех функций соответствует общему отклонению предсказания от среднего значения.

Значение Shapley i-й функции для x точек запроса определяется функцией ценности v:

φi(vx)=1MS\{i}vx(S{i})vx(S)(M1)!|S|!(M|S|1)!(1)
  • M - это количество всех функций.

  • - набор всех функций.

  • |<reservedrangesplaceholder2>| - это величина заданного S или количество элементов в заданном S.

  • vx (S) является функцией ценности функций в наборе S для x точек запроса. Значение функции указывает на ожидаемый вклад функций в S в предсказание для x точки запроса.

Алгоритмы расчета значения Шепли

shapley предлагает два алгоритма: kernelSHAP [1], который использует интервенционные распределения для функции ценности, и расширение до kernelSHAP [2], которое использует условные распределения для функции ценности. Можно задать алгоритм, который будет использоваться, установив 'Method' аргумент имя-значение shapley функцию или fit функция.

Различие между этими двумя алгоритмами является определением функции ценности. Оба алгоритма определяют функцию ценности таким образом, что сумма значений Shapley точки запроса по всем функциям соответствует общему отклонению предсказания для точки запроса от среднего значения.

i=1Mφi(vx)=f(x)E[f(x)].

Поэтому функция ценности vx (S) должен соответствовать ожидаемому вкладу функций в S предсказания (f) для x точки запроса. Два алгоритма вычисляют ожидаемый вклад с помощью искусственных выборок, созданных из заданных данных (X). Вы должны предоставить X через модель машинного обучения входа или отдельный входной параметр данных, когда вы создаете shapley объект. В искусственных выборках значения функций в S поступают из точки запроса. Для остальных функций (функций в Sc, дополнение S), алгоритм kernelSHAP генерирует выборки с помощью интервенционных распределений, в то время как расширение алгоритма kernelSHAP генерирует выборки с помощью условных распределений.

KernelSHAP ('Method','interventional-kernel')

shapley использует алгоритм kernelSHAP по умолчанию.

Алгоритм kernelSHAP определяет функцию ценности функций в S в точке запроса x как ожидаемое предсказание относительно интервенционного D распределения, которое является совместным распределением функций в Sc:

vx(S)=ED[f(xS,XSc)],

где xS - значение точки запроса для функций в S и XSc являются функциями в Sc.

Чтобы вычислить функцию ценности vx (S) в x точки запроса с предположением, что функции не сильно коррелированы, shapley использует значения в X данных в качестве выборок интервенционного D распределения для функций в Sc:

vx(S)=ED[f(xS,XSc)]1Nj=1Nf(xS,(XSc)j),

где N - количество наблюдений, и (XSc) j содержит значения функций в Sc для j-го наблюдения.

Например, предположите, что у Вас есть три функции в X и четыре наблюдения: (x11, x12, x13), (x21, x22, x23), (x31, x32, x33), и (x41, x42, x43). Предположим, что S включает в себя первую функцию, и Sc rest. В этом случае функция ценности первого признака, оцененного в точке запроса (x41, x42, x43), является

vx(S)=14[f(x41,x12,x13)+f(x41,x22,x23)+f(x41,x32,x33)+f(x41,x42,x43)].

Алгоритм kernelSHAP в вычислительном отношении дешевле, чем расширение алгоритма kernelSHAP, поддерживает упорядоченные категориальные предикторы и может обрабатывать отсутствующие значения в X. Однако алгоритм требует функции предположения независимости и использует выборки вне распределения [3]. Искусственные выборки, созданные с помощью смеси точки запроса и X данных, могут содержать нереалистичные наблюдения. Для примера (x41, x12, x13) может быть выборкой, которая не происходит в полном совместном распределении трёх функций.

Расширение до KernelSHAP ('Method','conditional-kernel')

Задайте 'Method','conditional-kernel' использовать расширение алгоритма kernelSHAP.

расширение алгоритма kernelSHAP определяет функцию ценности функций в S в точке запроса x используя условное распределение XSc, учитывая, что XS имеет значения точек запроса:

vx(S)=EXSc|XS=xS[f(xS,XSc)].

Чтобы вычислить функцию ценности vx (S) в x точек запроса, shapley использует ближайшие соседи точки запроса, которые соответствуют 10% наблюдений в X данных. Этот подход использует более реалистичные выборки, чем алгоритм kernelSHAP, и не требует предположения независимости функций. Однако этот алгоритм является в вычислительном отношении более дорогим, не поддерживает упорядоченные категориальные предикторы и не может обрабатывать NaNs в непрерывных функциях. Кроме того, алгоритм может назначить ненулевое значение Шепли фиктивной функции, который не способствует предсказанию, если фиктивная функция коррелирует с важной функцией [3].

Задайте алгоритм расчета значения Шепли

Этот пример обучает линейную модель классификации и вычисляет значения Шепли, используя оба алгоритма 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 с интервенционным распределением

Вычислите значения Шепли для первого наблюдения с помощью алгоритма kernelSHAP, который использует интервенционное распределение для оценки функции ценности. Вы не должны указывать 'Method' значение из-за 'interventional-kernel' является значением по умолчанию.

queryPoint = X(1,:);
explainer1 = shapley(Mdl,X,'QueryPoint',queryPoint); 

Для классификационной модели shapley вычисляет значения Шепли, используя предсказанный счет класса для каждого класса. Постройте график значений Шепли для предсказанного класса с помощью plot функция.

plot(explainer1)

Figure contains an axes. The axes contains an object of type bar. This object represents g.

Горизонтальный столбчатый график показывает значения Шепли для 10 наиболее важных переменных, отсортированных по их абсолютным значениям. Каждое значение Шепли объясняет отклонение счета для точки запроса от среднего счета предсказанного класса из-за соответствующей переменной.

Для линейной модели, где вы предполагаете, что функции независимы друг от друга, можно вычислить интервенционные значения Шепли для положительного класса (или второго класса в Mdl.ClassNames, 'g') из предполагаемых коэффициентов (Mdl.Beta) [1].

linearSHAPValues = (Mdl.Beta'.*(queryPoint-mean(X)))';

Составьте таблицу, содержащую значения Шепли, вычисленные из алгоритма 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 с условным распределением

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

explainer2 = shapley(Mdl,X,'QueryPoint',queryPoint,'Method','conditional-kernel');

Постройте график значений Шепли.

plot(explainer2)

Figure contains an axes. The axes contains an object of type bar. This object represents g.

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

Комплексность вычислений значений Shapley

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

Большое количество наблюдений

Вычисление функции ценности (v) может быть вычислительно дорогим, если у вас есть большое количество наблюдений, для примера - более 1000. Для более быстрых расчетов используйте меньшую выборку наблюдений, когда вы создаете shapley объект, или вычислить значения Шепли параллельно путем определения 'UseParallel' как true при вычислении значений с помощью shapley или fit функция. Для параллельных вычислений требуется Parallel Computing Toolbox™.

Большое количество функций

Вычисление суммирования в Уравнении 1 для всех доступных подмножеств S может быть вычислительно дорогим, когда M (количество функций) большое. Общее количество подмножеств, которые нужно учесть, составляет 2M. Вместо вычисления суммирования для всех подмножеств можно задать максимальное количество подмножеств для расчета значения Шепли при помощи 'MaxNumSubsets' аргумент имя-значение. shapley выбирает подмножества для использования на основе их значений веса. Вес подмножества пропорционален 1/( знаменатель суммирования), что соответствует 1 по биномиальному коэффициенту :1/(M1|S|). Поэтому подмножество с высоким или низким значением кардинальности имеет большое значение веса. shapley сначала включает подмножества с наивысшим весом, а затем включает другие подмножества в порядке убывания на основе их значений веса.

Снижение вычислительных затрат

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

Обучите регрессионный ансамбль

Загрузите набор выборочных данных NYCHousing2015.

load NYCHousing2015

Набор данных включает 55 246 наблюдений 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует эти переменные для анализа продажных цен (SALEPRICE).

Предварительно обработайте набор данных. Преобразуйте datetime массив (SALEDATE) к номерам месяцев.

NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);

Обучите регрессионный ансамбль.

Mdl = fitrensemble(NYCHousing2015,'SALEPRICE');

Вычисление значений 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 предоставляет несколько опций, чтобы уменьшить вычислительные затраты, когда у вас есть большое количество наблюдений или функций.

  • Большое количество наблюдений - используйте меньшую выборку обучающих данных и вычислите значения Шепли параллельно путем определения 'UseParallel' как true.

  • Большое количество функций - Задайте 'MaxNumSubsets' аргумент имя-значение, чтобы ограничить количество подмножеств, включенных в расчет.

Снова вычислите значения Шепли с помощью меньшей выборки обучающих данных и опции параллельных вычислений. Кроме того, задайте максимальное количество подмножеств как 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.

Установка дополнительных опций сокращает время, необходимое для вычисления значений Шепли.

Ссылки

[1] Лундберг, Скотт М. и С. Ли. «Единый подход к интерпретации модельных Предсказаний». Усовершенствования в нейронных системах обработки информации 30 (2017): 4765-774.

[2] Аас, Кьерсти, Мартин. Джуллум и Андерс Лёланд. «Объяснение индивидуальных предсказаний, когда функции зависимы: более точные приближения к значениям Шепли». arXiv:1903.10464 (2019).

[3] Kumar, I. Elizabeth, Suresh Venkatasubramanian, Carlos Scheidegger, and Sorelle Friedler. «Проблемы с объяснениями, основанными на Шепли-ценности, как меры важности функций». arXiv:2002.11097 (2020).

См. также

| |