4.1. Графики частичной зависимости и индивидуального условного ожидания¶
Графики частичной зависимости (Partial dependence plots - PDP) и индивидуального условного ожидания (individual conditional expectation - ICE) могут быть использованы для визуализации и анализа взаимодействия между целевым ответом [p1] и набором интересующих входных признаков.
Как PDP [H2009], так и ICE [G2015] предполагают, что интересующие входные признаки независимы от дополняющих их признаков, а на практике это предположение часто нарушается. Таким образом, в случае коррелированных признаков мы будем создавать абсурдные точки данных для вычисления PDP/ICE [M2019].
4.1.1. Графики частичной зависимости (Partial dependence plots - PDP)¶
Графики частичной зависимости (PDP) показывают зависимость между целевым ответом и набором интересующих входных признаков, маргинализируя значения всех остальных входных признаков (“дополняющих” признаков). Интуитивно мы можем интерпретировать частичную зависимость как ожидаемый целевой ответ как функцию интересующих нас входных признаков.
Из-за ограничений человеческого восприятия размер набора интересующих входных признаков должен быть небольшим (обычно один или два), поэтому интересующие входные признаки обычно выбираются среди наиболее важных признаков.
На рисунке ниже показаны два односторонних и один двусторонний графики частичной зависимости для набора данных о совместном использовании велосипедов с HistGradientBoostingRegressor
:
Односторонние PDP говорят нам о взаимодействии между целевым ответом и интересующим нас входным признаком (например, линейным, нелинейным). Левый график на рисунке выше показывает влияние температуры на количество прокатов велосипедов; мы ясно видим, что более высокая температура связана с большим количеством прокатов велосипедов. Аналогичным образом можно проанализировать влияние влажности на количество прокатов велосипедов (средний график). Таким образом, эти интерпретации являются предельными, если рассматривать по одному признаку за раз.
PDP с двумя входными признаками, представляющими интерес, показывают взаимодействие между двумя признаками. Например, двухпеременная PDP на рисунке выше показывает зависимость количества прокатов велосипедов от совместных значений температуры и влажности. Мы четко видим взаимодействие между двумя признаками: при температуре выше 20 градусов Цельсия на количество прокатов велосипедов сильно влияет в основном влажность. При более низких температурах и температура, и влажность влияют на количество прокатов велосипедов.
Модуль sklearn.inspection
предоставляет удобную функцию from_estimator
для создания графиков односторонней и двусторонней частичной зависимости.
В примере ниже показано, как создать сетку графиков частичной зависимости: два односторонних PDP для признаков 0
и 1
и двусторонний PDP между этими двумя признаками:
>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> from sklearn.inspection import PartialDependenceDisplay
>>> X, y = make_hastie_10_2(random_state=0)
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
... max_depth=1, random_state=0).fit(X, y)
>>> features = [0, 1, (0, 1)]
>>> PartialDependenceDisplay.from_estimator(clf, X, features)
<...>
Вы можете получить доступ к вновь созданным объектам figure и Axes с помощью plt.gcf()
и plt.gca()
.
Чтобы построить график частичной зависимости с категориальными признаками, необходимо указать, какие признаки являются категориальными, с помощью параметра categorical_features
.
Этот параметр принимает список индексов, имен категориальных признаков или булеву маску.
Графическое представление частичной зависимости для категориальных признаков представляет собой гистограмму или двухмерную тепловую карту.
Для многоклассовой классификации необходимо задать метку класса, для которого должны быть созданы PDP, с помощью аргумента Этот же параметр
PDP для многоклассовой классификации.
Click for more details
¶
target
:>>> from sklearn.datasets import load_iris
>>> iris = load_iris()
>>> mc_clf = GradientBoostingClassifier(n_estimators=10,
... max_depth=1).fit(iris.data, iris.target)
>>> features = [3, 2, (3, 2)]
>>> PartialDependenceDisplay.from_estimator(mc_clf, X, features, target=0)
<...>
target
используется для задания цели в настройках многовыборочной регрессии.
Если вам нужны необработанные значения функции частичной зависимости, а не графики, вы можете использовать функцию sklearn.inspection.partial_dependence
:
>>> from sklearn.inspection import partial_dependence
>>> results = partial_dependence(clf, X, [0])
>>> results["average"]
array([[ 2.466..., 2.466..., ...
>>> results["values"]
[array([-1.624..., -1.592..., ...
Значения, при которых должна оцениваться частичная зависимость, генерируются непосредственно из X
.
Для двусторонней частичной зависимости генерируется 2D-сетка значений.
Поле values
, возвращаемое sklearn.inspection.partial_dependence
, дает фактические значения, используемые в сетке для каждого интересующего входного признака.
Они также соответствуют осям графиков.
4.1.2. График индивидуального условного ожидания (Individual conditional expectation - ICE)¶
Подобно PDP, график индивидуального условного ожидания (Individual conditional expectation - ICE) показывает зависимость между целевой функцией и интересующим входным признаком. Однако в отличие от PDP, который показывает среднее влияние входного признака, график ICE визуализирует зависимость прогноза от признака для каждого образца отдельно, по одной линии на образец. Из-за ограничений человеческого восприятия для графиков ICE поддерживается только один интересующий входной признак.
На рисунках ниже показаны два ICE-графика для набора данных по совместному использованию велосипедов с HistGradientBoostingRegressor
. На рисунках соответствующая линия PD наложена на линии ICE.
Хотя PDP хорошо показывают среднее влияние целевых признаков, они могут затушевать неоднородные отношения, созданные взаимодействием.
При наличии взаимодействий график ICE дает гораздо больше информации.
Например, мы видим, что ICE для температурной характеристики дает нам некоторую дополнительную информацию: Некоторые линии ICE ровные, в то время как некоторые другие показывают уменьшение зависимости для температуры выше 35 градусов Цельсия. Аналогичная картина наблюдается и для характеристики влажности: некоторые линии ICE показывают резкое снижение при влажности выше 80%.
Удобная функция PartialDependenceDisplay.from_estimator
модуля sklearn.inspection
может быть использована для создания ICE-графиков, если задать kind='individual'
. В примере ниже мы покажем, как создать сетку ICE-графиков:
>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> from sklearn.inspection import PartialDependenceDisplay
>>> X, y = make_hastie_10_2(random_state=0)
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
... max_depth=1, random_state=0).fit(X, y)
>>> features = [0, 1]
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='individual')
<...>
На ICE-графиках может быть нелегко увидеть средний эффект от интересующего входного признака.
Поэтому рекомендуется использовать ICE-графики вместе с PDP.
Их можно строить вместе с параметром kind='both'
.
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='both')
<...>
Если на графике ICE слишком много линий, может быть трудно увидеть различия между отдельными выборками и интерпретировать модель.
Если центрировать ICE на первом значении по оси x, получаются графики центрированного индивидуального условного ожидания (cICE) [G2015].
При этом акцент делается на расхождении индивидуальных условных ожиданий со средней линией, что облегчает изучение неоднородных связей. Графики cICE можно построить, установив centered=True
:
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='both', centered=True)
<...>
4.1.3. Математическое определение¶
Пусть \(X_S\) - набор входных признаков, представляющих интерес (т.е. параметр features
), а \(X_C\) - его дополнение.
Частичная зависимость отклика \(f\) в точке \(x_S\) определяется как:
где \(f(x_S, x_C)\) - функция отклика (predict, predict_proba или decision_function) для данной выборки, значения которой определяются \(x_S\) для признаков в \(X_S\), и \(x_C\) для признаков в \(X_C\). Обратите внимание, что \(x_S\) и \(x_C\) могут быть кортежами.
Вычисление этого интеграла для различных значений \(x_S\) дает график PDP, как указано выше. Линия ICE определяется как одиночная \(f(x_{S}, x_{C}^{(i)})\), оцененная в \(x_{S}\).
4.1.4. Методы вычислений¶
Существует два основных метода аппроксимации интеграла выше, а именно “грубый” и “рекурсионный” методы.
Параметр method
управляет тем, какой метод будет использоваться.
Метод ‘brute’ - это общий метод, который работает с любой моделью. Обратите внимание, что вычисление графиков ICE поддерживается только методом ‘brute’. Он аппроксимирует вышеупомянутый интеграл, вычисляя среднее значение по данным X
:
где \(x_C^{(i)}\) - значение i-й выборки для признаков в \(X_C\).
Для каждого значения \(x_S\) этот метод требует полного прохода по набору данных X
, что требует больших вычислительных затрат.
Каждое из \(f(x_{S}, x_{C}^{(i)})\) соответствует одной линии ICE, оцененной в \(x_{S}\). Вычисляя это для нескольких значений \(x_{S}\), мы получаем полную линию ICE. Как видно, среднее значение линий ICE соответствует линии частичной зависимости.
Метод ‘recursion’ быстрее, чем метод ‘brute’, но он поддерживается только для PDP-графиков некоторыми древовидными моделям. Он вычисляется следующим образом. Для заданной точки \(x_S\) выполняется обход взвешенного дерева: если узел разбиения включает интересующий входной признак, то следует соответствующая левая или правая ветвь; в противном случае следуют обе ветви, каждая из которых взвешивается по доле обучающих образцов, попавших в эту ветвь. Наконец, частичная зависимость определяется средневзвешенным значением всех посещенных листьев.
В методе ‘brute’ параметр X
используется как для генерации сетки значений \(x_S\), так и для значений дополняющего признака \(x_C\). Однако при использовании метода “recursion” параметр X
используется только для значений сетки: неявно значения \(x_C\) являются значениями обучающих данных.
По умолчанию метод ‘recursion’ используется для построения PDP на древовидных моделях, которые его поддерживают, а для остальных используется ‘brute’.
Примечание
Хотя в целом оба метода должны быть близки, они могут отличаться в некоторых специфических настройках. Метод ‘brute’ предполагает существование точек данных \((x_S, x_C^{(i)})\). Если признаки коррелированы, такие искусственные выборки могут иметь очень низкую массу вероятности. Методы “brute” и “recursion”, скорее всего, не согласятся с величиной частичной зависимости, поскольку будут по-разному относиться к этим маловероятным выборкам. Помните, однако, что основное предположение при интерпретации PDP заключается в том, что признаки должны быть независимыми.