Является ли мера SHAP (или получение информации) результатом специфичного для функции порядка? - PullRequest
0 голосов
/ 21 октября 2019

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

Основной показатель в модели - MSE, относительно некоторой базовой модели. Пусть GAIN = 1 - MSE_model / MSE_base будет прирост производительности при использовании модели (или уменьшение MSE). Для сравнения я исправил наборы ГСЧ и параметров.

1) GAIN(LightGBM.train(X1=[x1, x2]))=20%,

2) GAIN(LightGBM.train(X2=[x1, x2, x3]))=30%,

3) GAIN(LightGBM.train(X3=[x1, x2, x4]))=60%,

4) GAIN(LightGBM.train(X4=[x1, x2, x3, x4]))=70%.

Следовательно, я могу сделать вывод, что x4 важнее, чем x3 (и чем x1, x2): он добавляет модели большей предсказуемости.

Однако, когда я вычисляю SHAP для 1), он возвращает SHAP(x3) > SHAP(x4). Что еще более удивительно, когда я использовал X в другом порядке, т.е. X5=[x4, x3, x2, x1], я получаю то же самое GAIN=70%, но SHAP в другом порядке: SHAP(x4) > SHAP(x3). Хуже того, SHAP(x1), SHAP(x2) > SHAP(x4).

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

(https://github.com/Microsoft/LightGBM/issues/1294 говорит, что LightGBM действительно зависит от порядка объектов: если 2 функции имеютПри таком же коэффициенте усиления будет выбрана функция с меньшим индексом, однако, даже если я использую другой порядок, значение GAIN существенно не изменится, поэтому я полагаю, что это не из-за LightGBM.train.)

НоНасколько мне известно, SHAP рассматривает комбинацию порядков элементов, поэтому она не должна зависеть от порядков элементов, которые я передаю.

Это потому, что я слишком ограничиваю параметры модели - скажем, max_depth или max_leaves?

  • Я ограничил tree_limit=100 (что является моим n_estimator из LightGBM) в explainer.shap_values(), значение по умолчанию которого None (б / с слишком долго безпредел). Может ли это быть причиной?

Или SHAP (или получение информации) согласован только в рамках данной модели, и я не должен судить о «важности функции» по уменьшению MSE (то есть заключение x4 важнее, чем x3, сравнивая 1) - 4) вводит в заблуждение)?

Если это зависит от порядка объектов, есть ли способы исправить это в LightGBM?


РЕДАКТИРОВАТЬ) Я попытался tree_limit>100, и получил SHAP(x4) > SHAP(x3). По мере увеличения tree_limit SHAP(x4) - SHAP(x3) увеличивается. Тем не менее, по-прежнему SHAP(x4) по-прежнему не самый большой, который должен быть. Это может быть наибольшее значение, если я предоставлю достаточно большое значение tree_limit, но время расчета линейно увеличивается на tree_limit, что я не могу увеличить больше некоторого порога. Есть ли способ для «хороших начальных значений»?

...