5.1. Partial Dependence- und Individual Conditional Expectation-Plots#

Partial Dependence Plots (PDP) und Individual Conditional Expectation (ICE) Plots können verwendet werden, um die Interaktion zwischen der Zielantwort [1] und einem Satz von interessierenden Eingabefeatures zu visualisieren und zu analysieren.

Sowohl PDPs [H2009] als auch ICEs [G2015] gehen davon aus, dass die interessierenden Eingabefeatures unabhängig von den komplementären Features sind, und diese Annahme wird in der Praxis oft verletzt. Daher werden wir im Falle korrelierter Features absurde Datenpunkte erzeugen, um die PDP/ICE zu berechnen [M2019].

5.1.1. Partial Dependence Plots

Partial Dependence Plots (PDP) zeigen die Abhängigkeit zwischen der Zielantwort und einem Satz von interessierenden Eingabefeatures, wobei über die Werte aller anderen Eingabefeatures (der "komplementären" Features) gemittelt wird. Intuitiv können wir die partielle Abhängigkeit als die erwartete Zielantwort als Funktion der interessierenden Eingabefeatures interpretieren.

Aufgrund der Grenzen der menschlichen Wahrnehmung muss die Größe des Satzes von interessierenden Eingabefeatures klein sein (normalerweise ein oder zwei), daher werden die interessierenden Eingabefeatures normalerweise aus den wichtigsten Features ausgewählt.

Die folgende Abbildung zeigt zwei Einweg- und einen Zweiweg-Partial-Dependence-Plot für den Bike-Sharing-Datensatz mit einem HistGradientBoostingRegressor

../_images/sphx_glr_plot_partial_dependence_006.png

Einweg-PDPs sagen uns etwas über die Interaktion zwischen der Zielantwort und einem interessierenden Eingabefeature (z. B. linear, nicht-linear). Der linke Plot in der obigen Abbildung zeigt den Effekt der Temperatur auf die Anzahl der Fahrradverleihvorgänge; wir können deutlich sehen, dass eine höhere Temperatur mit einer höheren Anzahl von Fahrradverleihvorgängen zusammenhängt. Ähnlich könnten wir den Effekt der Luftfeuchtigkeit auf die Anzahl der Fahrradverleihvorgänge analysieren (mittlerer Plot). Diese Interpretationen sind also marginal, wobei jeweils ein Feature betrachtet wird.

PDPs mit zwei interessierenden Eingabefeatures zeigen die Interaktionen zwischen den beiden Features. Beispielsweise zeigt der Zwei-Variablen-PDP in der obigen Abbildung die Abhängigkeit der Anzahl der Fahrradverleihvorgänge von den gemeinsamen Werten von Temperatur und Luftfeuchtigkeit. Wir können eine klare Interaktion zwischen den beiden Features erkennen: Bei einer Temperatur von über 20 Grad Celsius hat hauptsächlich die Luftfeuchtigkeit einen starken Einfluss auf die Anzahl der Fahrradverleihvorgänge. Bei niedrigeren Temperaturen haben sowohl die Temperatur als auch die Luftfeuchtigkeit einen Einfluss auf die Anzahl der Fahrradverleihvorgänge.

Das Modul sklearn.inspection bietet eine praktische Funktion from_estimator zum Erstellen von Einweg- und Zweiweg-Partial-Dependence-Plots. Im folgenden Beispiel zeigen wir, wie ein Raster von Partial-Dependence-Plots erstellt wird: zwei Einweg-PDPs für die Features 0 und 1 und ein Zweiweg-PDP zwischen den beiden Features

>>> 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)
<...>

Sie können über die neu erstellten Figure- und Axes-Objekte mit plt.gcf() und plt.gca() auf diese zugreifen.

Um einen Partial-Dependence-Plot mit kategorialen Features zu erstellen, müssen Sie mithilfe des Parameters categorical_features angeben, welche Features kategorial sind. Dieser Parameter nimmt eine Liste von Indizes, Namen kategorialer Features oder eine boolesche Maske entgegen. Die grafische Darstellung der partiellen Abhängigkeit für kategoriale Features ist ein Balkendiagramm oder eine 2D-Heatmap.

PDPs für Mehrklassen-Klassifizierung#

Für die Mehrklassen-Klassifizierung müssen Sie das Klassenlabel angeben, für das die PDPs erstellt werden sollen, über das Argument 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)
<...>

Denselben Parameter target wird verwendet, um das Ziel in Multi-Output-Regressionseinstellungen anzugeben.

Wenn Sie die Rohwerte der Partial-Dependence-Funktion anstelle der Plots benötigen, können Sie die Funktion sklearn.inspection.partial_dependence verwenden

>>> from sklearn.inspection import partial_dependence

>>> results = partial_dependence(clf, X, [0])
>>> results["average"]
array([[ 2.466...,  2.466..., ...
>>> results["grid_values"]
[array([-1.624..., -1.592..., ...

Die Werte, bei denen die partielle Abhängigkeit ausgewertet werden soll, werden direkt aus X generiert. Für die 2-Wege-partielle Abhängigkeit wird ein 2D-Gitter von Werten generiert. Das Feld values, das von sklearn.inspection.partial_dependence zurückgegeben wird, enthält die tatsächlichen Werte, die im Gitter für jedes interessierende Eingabefeature verwendet werden. Sie entsprechen auch den Achsen der Plots.

5.1.2. Individual Conditional Expectation (ICE) Plot

Ähnlich wie ein PDP zeigt ein Individual Conditional Expectation (ICE) Plot die Abhängigkeit zwischen der Zielfunktion und einem interessierenden Eingabefeature. Im Gegensatz zu einem PDP, der den durchschnittlichen Effekt des Eingabefeatures zeigt, visualisiert ein ICE-Plot die Abhängigkeit der Vorhersage von einem Feature für jede Stichprobe einzeln mit einer Linie pro Stichprobe. Aufgrund der Grenzen der menschlichen Wahrnehmung wird nur ein interessierendes Eingabefeature für ICE-Plots unterstützt.

Die folgenden Abbildungen zeigen zwei ICE-Plots für den Bike-Sharing-Datensatz mit einem HistGradientBoostingRegressor. Die Abbildungen zeigen die entsprechende PD-Linie, überlagert mit ICE-Linien.

../_images/sphx_glr_plot_partial_dependence_004.png

Während die PDPs gut darin sind, den durchschnittlichen Effekt der Zielfeatures zu zeigen, können sie eine heterogene Beziehung, die durch Interaktionen entsteht, verschleiern. Wenn Interaktionen vorhanden sind, liefert der ICE-Plot viel mehr Erkenntnisse. Wir sehen zum Beispiel, dass der ICE für das Temperatur-Feature zusätzliche Informationen liefert: Einige ICE-Linien sind flach, während andere einen Rückgang der Abhängigkeit für Temperaturen über 35 Grad Celsius zeigen. Ein ähnliches Muster beobachten wir für das Luftfeuchtigkeits-Feature: Einige ICE-Linien zeigen einen starken Rückgang, wenn die Luftfeuchtigkeit über 80 % liegt.

Die praktische Funktion PartialDependenceDisplay.from_estimator des Moduls sklearn.inspection kann zum Erstellen von ICE-Plots verwendet werden, indem kind='individual' gesetzt wird. Im folgenden Beispiel zeigen wir, wie ein Raster von ICE-Plots erstellt wird

>>> 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')
<...>

In ICE-Plots ist es möglicherweise nicht einfach, den durchschnittlichen Effekt des interessierenden Eingabefeatures zu erkennen. Daher wird empfohlen, ICE-Plots neben PDPs zu verwenden. Sie können mit kind='both' zusammen geplottet werden.

>>> PartialDependenceDisplay.from_estimator(clf, X, features,
...     kind='both')
<...>

Wenn in einem ICE-Plot zu viele Linien vorhanden sind, kann es schwierig sein, Unterschiede zwischen einzelnen Stichproben zu erkennen und das Modell zu interpretieren. Das Zentrieren des ICE auf den ersten Wert auf der x-Achse erzeugt zentrierte Individual Conditional Expectation (cICE) Plots [G2015]. Dies hebt die Abweichung der individuellen bedingten Erwartungen von der Mittellinie hervor, wodurch die Untersuchung heterogener Beziehungen erleichtert wird. cICE-Plots können durch Setzen von centered=True geplottet werden

>>> PartialDependenceDisplay.from_estimator(clf, X, features,
...     kind='both', centered=True)
<...>

5.1.3. Mathematische Definition

Sei \(X_S\) die Menge der interessierenden Eingabefeatures (d. h. der Parameter features) und sei \(X_C\) deren Komplement.

Die partielle Abhängigkeit der Antwort \(f\) an einem Punkt \(x_S\) ist definiert als

\[\begin{split}pd_{X_S}(x_S) &\overset{def}{=} \mathbb{E}_{X_C}\left[ f(x_S, X_C) \right]\\ &= \int f(x_S, x_C) p(x_C) dx_C,\end{split}\]

wobei \(f(x_S, x_C)\) die Antwortfunktion (predict, predict_proba oder decision_function) für eine gegebene Stichprobe ist, deren Werte durch \(x_S\) für die Features in \(X_S\) und durch \(x_C\) für die Features in \(X_C\) definiert sind. Beachten Sie, dass \(x_S\) und \(x_C\) Tupel sein können.

Die Berechnung dieses Integrals für verschiedene Werte von \(x_S\) erzeugt ein PDP-Diagramm wie oben. Eine ICE-Linie ist definiert als ein einzelnes \(f(x_{S}, x_{C}^{(i)})\), das an \(x_{S}\) ausgewertet wird.

5.1.4. Berechnungsmethoden

Es gibt zwei Hauptmethoden zur Annäherung des obigen Integrals, nämlich die Methoden 'brute' und 'recursion'. Der Parameter method steuert, welche Methode verwendet wird.

Die Methode 'brute' ist eine generische Methode, die mit jedem Estimator funktioniert. Beachten Sie, dass die Berechnung von ICE-Plots nur mit der Methode 'brute' unterstützt wird. Sie approximiert das obige Integral, indem ein Durchschnitt über die Daten X berechnet wird

\[pd_{X_S}(x_S) \approx \frac{1}{n_\text{samples}} \sum_{i=1}^n f(x_S, x_C^{(i)}),\]

wobei \(x_C^{(i)}\) der Wert der i-ten Stichprobe für die Features in \(X_C\) ist. Für jeden Wert von \(x_S\) erfordert diese Methode einen vollständigen Durchlauf über den Datensatz X, was rechenintensiv ist.

Jedes der \(f(x_{S}, x_{C}^{(i)})\) entspricht einer ICE-Linie, die an \(x_{S}\) ausgewertet wird. Wenn dies für mehrere Werte von \(x_{S}\) berechnet wird, erhält man eine vollständige ICE-Linie. Wie man sieht, entspricht der Durchschnitt der ICE-Linien der partiellen Abhängigkeitslinie.

Die Methode 'recursion' ist schneller als die Methode 'brute', wird aber nur für PDP-Plots von einigen baumbasierten Estimators unterstützt. Sie wird wie folgt berechnet. Für einen gegebenen Punkt \(x_S\) wird eine gewichtete Baumtraversierung durchgeführt: Wenn ein Split-Knoten ein interessierendes Eingabefeature beinhaltet, wird der entsprechende linke oder rechte Ast verfolgt; andernfalls werden beide Äste verfolgt, wobei jeder Ast mit dem Bruchteil der Trainingsstichproben gewichtet wird, die in diesen Ast gelangt sind. Schließlich wird die partielle Abhängigkeit durch einen gewichteten Durchschnitt aller besuchten Blattwerte gegeben.

Bei der Methode 'brute' wird der Parameter X sowohl für die Erzeugung des Wertegitters \(x_S\) als auch für die Werte der komplementären Features \(x_C\) verwendet. Bei der 'recursion'-Methode wird X jedoch nur für die Gitterwerte verwendet: implizit sind die \(x_C\)-Werte diejenigen der Trainingsdaten.

Standardmäßig wird die Methode 'recursion' für das Plotten von PDPs auf baumbasierten Estimators verwendet, die dies unterstützen, und 'brute' für den Rest.

Hinweis

Obwohl beide Methoden im Allgemeinen nahe beieinander liegen sollten, können sie sich in bestimmten Einstellungen unterscheiden. Die Methode 'brute' geht von der Existenz der Datenpunkte \((x_S, x_C^{(i)})\) aus. Wenn die Features korreliert sind, können solche künstlichen Stichproben eine sehr geringe Wahrscheinlichkeitsmasse haben. Die Methoden 'brute' und 'recursion' werden wahrscheinlich hinsichtlich des Wertes der partiellen Abhängigkeit abweichen, da sie diese unwahrscheinlichen Stichproben unterschiedlich behandeln werden. Denken Sie jedoch daran, dass die primäre Annahme für die Interpretation von PDPs ist, dass die Features unabhängig sein sollten.

Beispiele

Fußnoten

Referenzen