Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind – KDnuggets

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind – KDnuggets

Quellknoten: 2893531

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
[Bild vom Autor]

 

Das Konzept der „Merkmalsbedeutung“ wird im maschinellen Lernen häufig als grundlegendste Art der Modellerklärbarkeit verwendet. Beispielsweise wird es bei der rekursiven Merkmalseliminierung (RFE) verwendet, um das unwichtigste Merkmal des Modells iterativ zu löschen.

Es besteht jedoch ein Missverständnis darüber.

Die Tatsache, dass eine Funktion wichtig ist, bedeutet nicht, dass sie für das Modell von Vorteil ist!

Wenn wir tatsächlich sagen, dass ein Merkmal wichtig ist, bedeutet das einfach, dass das Merkmal einen hohen Beitrag zu den Vorhersagen des Modells leistet. Aber das sollten wir bedenken Ein solcher Beitrag kann falsch sein.

Nehmen Sie ein einfaches Beispiel: Ein Datenwissenschaftler vergisst versehentlich die Kunden-ID zwischen den Funktionen seines Modells. Das Modell nutzt die Kunden-ID als äußerst prädiktive Funktion. Infolgedessen hat diese Funktion eine hohe Funktionsbedeutung, selbst wenn sie das Modell tatsächlich verschlechtert, da sie bei unsichtbaren Daten nicht gut funktionieren kann.

Zur Verdeutlichung müssen wir zwischen zwei Konzepten unterscheiden:

  • Vorhersagebeitrag: Welcher Teil der Vorhersagen ist auf das Feature zurückzuführen; Dies entspricht der Wichtigkeit von Merkmalen.
  • Fehlerbeitrag: Welcher Teil der Vorhersagefehler ist auf das Vorhandensein des Features im Modell zurückzuführen?

In diesem Artikel erfahren Sie, wie Sie diese Größen berechnen und wie Sie sie verwenden, um wertvolle Erkenntnisse über ein Vorhersagemodell zu gewinnen (und es zu verbessern).

Hinweis: Dieser Artikel konzentriert sich auf den Regressionsfall. Wenn Sie sich mehr für den Klassifizierungsfall interessieren, können Sie lesen „Welche Merkmale sind schädlich für Ihr Klassifizierungsmodell?“

Angenommen, wir haben ein Modell entwickelt, um das Einkommen von Menschen basierend auf ihrem Beruf, ihrem Alter und ihrer Nationalität vorherzusagen. Jetzt verwenden wir das Modell, um Vorhersagen für drei Personen zu treffen.

Somit haben wir die Grundwahrheit, die Modellvorhersage und den daraus resultierenden Fehler:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Grundwahrheit, Modellvorhersage und absoluter Fehler (in Tausend $). [Bild vom Autor]

 

Wenn wir ein Vorhersagemodell haben, können wir die Modellvorhersagen jederzeit in die Beiträge der einzelnen Features zerlegen. Dies kann über SHAP-Werte erfolgen (wenn Sie nicht wissen, wie SHAP-Werte funktionieren, können Sie meinen Artikel lesen: SHAP-Werte werden Ihnen genau so erklärt, wie Sie es sich gewünscht haben).

Nehmen wir also an, dass dies die SHAP-Werte relativ zu unserem Modell für die drei Personen sind.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
SHAP-Werte für die Vorhersagen unseres Modells (in Tausend $). [Bild vom Autor]

 

Die Haupteigenschaft von SHAP-Werten besteht darin, dass sie additiv sind. Das bedeutet, dass wir – indem wir die Summe jeder Zeile bilden – die Vorhersage unseres Modells für diese Person erhalten. Nehmen wir zum Beispiel die zweite Zeile: 72 $ +3 $ -22 $ = 53 $, was genau der Vorhersage des Modells für die zweite Person entspricht.

Nun sind SHAP-Werte ein guter Indikator dafür, wie wichtig ein Merkmal für unsere Vorhersagen ist. Tatsächlich gilt: Je höher der (absolute) SHAP-Wert, desto einflussreicher ist das Merkmal für die Vorhersage über diese bestimmte Person. Beachten Sie, dass ich von absoluten SHAP-Werten spreche, da das Vorzeichen hier keine Rolle spielt: Eine Funktion ist gleichermaßen wichtig, wenn sie die Vorhersage nach oben oder unten verschiebt.

Daher sind  Der Vorhersagebeitrag eines Features entspricht dem Mittelwert der absoluten SHAP-Werte dieses Features. Wenn Sie die SHAP-Werte in einem Pandas-Datenrahmen gespeichert haben, ist dies so einfach:

prediction_contribution = shap_values.abs().mean()

In unserem Beispiel ist das Ergebnis:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Vorhersagebeitrag. [Bild vom Autor]

 

Wie Sie sehen, ist der Job eindeutig das wichtigste Merkmal, da er im Durchschnitt 71.67 $ der endgültigen Vorhersage ausmacht. Nationalität und Alter sind das zweit- bzw. drittwichtigste Merkmal.

Allerdings sagt die Tatsache, dass ein bestimmtes Feature einen relevanten Teil der endgültigen Vorhersage ausmacht, nichts über die Leistung des Features aus. Um auch diesen Aspekt zu berücksichtigen, müssen wir den „Fehlerbeitrag“ berechnen.

Nehmen wir an, wir möchten die folgende Frage beantworten: „Welche Vorhersagen würde das Modell treffen, wenn es diese Funktion nicht hätte?“ Job?“ Mithilfe der SHAP-Werte können wir diese Frage beantworten. Da sie additiv sind, reicht es tatsächlich aus, die SHAP-Werte relativ zum Feature zu subtrahieren Job aus den Vorhersagen des Modells.

Natürlich können wir diesen Vorgang für jedes Feature wiederholen. Bei Pandas:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

Das ist das Ergebnis:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Vorhersagen, die wir erhalten würden, wenn wir das jeweilige Feature entfernen würden. [Bild vom Autor]

 

Das heißt, wenn wir die Funktion nicht hätten Job, dann würde das Modell 20 $ für die erste Person, -19 $ für die zweite und -8 $ für die dritte Person vorhersagen. Stattdessen, wenn wir die Funktion nicht hätten  Alterwürde das Modell 73 $ für die erste Person vorhersagen, 50 $ für die zweite Person und so weiter.

Wie Sie sehen, variieren die Vorhersagen für jede einzelne Person erheblich, wenn wir verschiedene Funktionen entfernen. Infolgedessen wären auch die Vorhersagefehler sehr unterschiedlich. Wir können sie leicht berechnen:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

Das Ergebnis ist folgendes:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Absolute Fehler, die wir erhalten würden, wenn wir die entsprechende Funktion entfernen würden. [Bild vom Autor]

 

Dies sind die Fehler, die wir erhalten würden, wenn wir die entsprechende Funktion entfernen würden. Wenn der Fehler gering ist, ist das Entfernen des Features intuitiv kein Problem – oder sogar vorteilhaft – für das Modell. Wenn der Fehler hoch ist, ist das Entfernen der Funktion keine gute Idee.

Aber wir können mehr als das tun. Tatsächlich können wir die Differenz zwischen den Fehlern des vollständigen Modells und den Fehlern berechnen, die wir ohne die Funktion erhalten würden:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

Welches ist:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Unterschied zwischen den Fehlern des Modells und den Fehlern, die wir ohne die Funktion hätten. [Bild vom Autor]

 

Wenn diese Nummer ist:

  • negativ, dann führt das Vorhandensein des Merkmals zu einer Verringerung des Vorhersagefehlers, sodass das Merkmal für diese Beobachtung gut funktioniert!
  • positiv, dann führt das Vorhandensein des Merkmals zu einem Anstieg des Vorhersagefehlers, sodass das Merkmal für diese Beobachtung schlecht ist.

Wir können den „Fehlerbeitrag“ als Mittelwert dieser Werte für jedes Feature berechnen. Bei Pandas:

error_contribution = error_diff.mean()

Das ist das Ergebnis:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Fehlerbeitrag. [Bild vom Autor]

 

Wenn dieser Wert positiv ist, bedeutet dies, dass das Vorhandensein des Merkmals im Modell im Durchschnitt zu einem höheren Fehler führt. Ohne diese Funktion wäre die Vorhersage im Allgemeinen besser gewesen. Mit anderen Worten: Die Funktion schadet mehr als sie nützt!

Im Gegenteil: Je negativer dieser Wert ist, desto vorteilhafter ist das Merkmal für die Vorhersagen, da sein Vorhandensein zu kleineren Fehlern führt.

Versuchen wir, diese Konzepte auf einen realen Datensatz anzuwenden.

Im Folgenden verwende ich einen Datensatz aus Pycaret (eine Python-Bibliothek unter MIT-Lizenz). Der Datensatz heißt „Gold“ und enthält Zeitreihen von Finanzdaten.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Datensatzbeispiel. Die Merkmale werden alle in Prozent ausgedrückt, sodass -4.07 eine Rendite von -4.07 % bedeutet. [Bild vom Autor]

 

Die Merkmale bestehen in der Rendite von Finanzanlagen jeweils 22, 14, 7 und 1 Tag vor dem Beobachtungszeitpunkt („T-22“, „T-14“, „T-7“, „T-1“). Hier ist die vollständige Liste aller finanziellen Vermögenswerte, die als Prognosemerkmale verwendet werden:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Liste der verfügbaren Assets. Jeder Vermögenswert wird zum Zeitpunkt -22, -14, -7 und -1 beobachtet. [Bild vom Autor]

 

Insgesamt verfügen wir über 120 Funktionen.

Das Ziel besteht darin, den Goldpreis (die Rendite) 22 Tage im Voraus vorherzusagen („Gold_T+22“). Werfen wir einen Blick auf die Zielvariable.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Histogramm der Variablen. [Bild vom Autor]

 

Nachdem ich den Datensatz geladen habe, habe ich folgende Schritte ausgeführt:

  1. Teilen Sie den gesamten Datensatz nach dem Zufallsprinzip auf: 33 % der Zeilen im Trainingsdatensatz, weitere 33 % im Validierungsdatensatz und die restlichen 33 % im Testdatensatz.
  2. Trainieren Sie einen LightGBM-Regressor anhand des Trainingsdatensatzes.
  3. Treffen Sie Vorhersagen zu Trainings-, Validierungs- und Testdatensätzen, indem Sie das im vorherigen Schritt trainierte Modell verwenden.
  4. Berechnen Sie SHAP-Werte von Trainings-, Validierungs- und Testdatensätzen mithilfe der Python-Bibliothek „shap“.
  5. Berechnen Sie den Vorhersagebeitrag und den Fehlerbeitrag jedes Features in jedem Datensatz (Training, Validierung und Test) mithilfe des Codes, den wir im vorherigen Absatz gesehen haben.

Vergleichen wir den Fehlerbeitrag und den Vorhersagebeitrag im Trainingsdatensatz. Wir verwenden ein Streudiagramm, sodass die Punkte die 120 Merkmale des Modells identifizieren.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Vorhersagebeitrag vs. Fehlerbeitrag (im Trainingsdatensatz). [Bild vom Autor]

 

Es besteht eine stark negative Korrelation zwischen dem Vorhersagebeitrag und dem Fehlerbeitrag im Trainingssatz.

Und das macht Sinn: Da das Modell anhand des Trainingsdatensatzes lernt, tendiert es dazu, den Merkmalen, die zu einer starken Reduzierung des Vorhersagefehlers führen (d. h. einem stark negativen Fehlerbeitrag), eine hohe Bedeutung (d. h. einen hohen Vorhersagebeitrag) beizumessen..

Aber das trägt nicht viel zu unserem Wissen bei, oder?

Was uns wirklich wichtig ist, ist der Validierungsdatensatz. Der Validierungsdatensatz ist tatsächlich der beste Proxy, den wir haben können, um zu bestimmen, wie sich unsere Funktionen bei neuen Daten verhalten. Machen wir also den gleichen Vergleich mit dem Validierungssatz.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Vorhersagebeitrag vs. Fehlerbeitrag (im Validierungsdatensatz). [Bild vom Autor]

 

Aus dieser Handlung können wir noch einige weitere interessante Informationen extrahieren.

Die Merkmale im unteren rechten Teil des Diagramms sind diejenigen, denen unser Modell korrekterweise eine hohe Bedeutung zuweist, da sie tatsächlich zu einer Verringerung des Vorhersagefehlers führen.

Beachten Sie außerdem, dass „Gold_T-22“ (die Rückkehr von Gold 22 Tage vor dem Beobachtungszeitraum) im Vergleich zu der Bedeutung, die das Modell ihm beimisst, wirklich gut funktioniert. Das bedeutet, dass Diese Funktion ist möglicherweise unzureichend. Und diese Information ist besonders interessant, da Gold der Vermögenswert ist, den wir vorhersagen wollen („Gold_T+22“).

Auf der anderen Seite, Die Funktionen, deren Fehlerbeitrag über 0 liegt, verschlechtern unsere Vorhersagen. Beispielsweise ändert „US Bond ETF_T-1“ die Modellvorhersage im Durchschnitt um 0.092 % (Vorhersagebeitrag), führt aber dazu, dass das Modell eine Vorhersage macht, die im Durchschnitt um 0.013 % (Fehlerbeitrag) schlechter ist, als sie ohne diese Funktion gewesen wäre .

Das können wir vermuten Alle Features mit einem hohen Fehlerbeitrag (im Vergleich zu ihrem Vorhersagebeitrag) sind wahrscheinlich überpassend oder sie verhalten sich im Allgemeinen im Trainingssatz und im Validierungssatz unterschiedlich.

Sehen wir uns an, welche Funktionen den größten Fehlerbeitrag haben.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Funktionen sortiert nach abnehmendem Fehlerbeitrag. [Bild vom Autor]

 

Und nun die Features mit dem geringsten Fehlerbeitrag:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Funktionen sortiert nach zunehmendem Fehlerbeitrag. [Bild vom Autor]

 

Interessanterweise können wir beobachten, dass alle Merkmale mit einem höheren Fehlerbeitrag relativ zu T-1 (1 Tag vor dem Beobachtungszeitpunkt) sind, wohingegen fast alle Merkmale mit einem kleineren Fehlerbeitrag relativ zu T-22 (22 Tage vor dem Beobachtungszeitpunkt) sind ).

Das scheint darauf hinzudeuten Die jüngsten Merkmale neigen zu einer Überanpassung, wohingegen die zeitlich weiter entfernten Merkmale tendenziell besser verallgemeinern.

Beachten Sie, dass wir diese Erkenntnis ohne Fehlerbeitrag nie erlangt hätten.

Traditionelle RFE-Methoden (Recursive Feature Elimination) basieren auf der Entfernung unwichtiger Features. Dies entspricht dem Entfernen der Features zunächst mit einem kleinen Vorhersagebeitrag.

Basierend auf dem, was wir im vorherigen Absatz gesagt haben, wäre es jedoch sinnvoller, zuerst die Features mit dem höchsten Fehlerbeitrag zu entfernen.

Um zu überprüfen, ob unsere Intuition bestätigt ist, vergleichen wir die beiden Ansätze:

  • Herkömmliches RFE: Zuerst nutzlose Funktionen entfernen (geringster Vorhersagebeitrag).
  • Unser RFE: Schädliche Funktionen entfernen zuerst (höchster Fehlerbeitrag).

Sehen wir uns die Ergebnisse des Validierungssatzes an:

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Mittlerer absoluter Fehler der beiden Strategien im Validierungssatz. [Bild vom Autor]

 

Die beste Iteration für jede Methode wurde eingekreist: Es handelt sich um das Modell mit 19 Features für den traditionellen RFE (blaue Linie) und das Modell mit 17 Features für unseren RFE (orange Linie).

Im Allgemeinen scheint unsere Methode gut zu funktionieren: Das Entfernen des Features mit dem höchsten Fehlerbeitrag führt zu einem durchweg geringeren MAE im Vergleich zum Entfernen des Features mit dem höchsten Vorhersagebeitrag.

Möglicherweise denken Sie jedoch, dass dies nur deshalb gut funktioniert, weil wir den Validierungssatz überangepasst haben. Schließlich interessiert uns das Ergebnis, das wir auf dem Testsatz erhalten.

Sehen wir uns also den gleichen Vergleich im Testsatz an.

 

Ihre Funktionen sind wichtig? Das bedeutet nicht, dass sie gut sind
Mittlerer absoluter Fehler der beiden Strategien im Testsatz. [Bild vom Autor]

 

Das Ergebnis ähnelt dem vorherigen. Auch wenn der Abstand zwischen den beiden Linien geringer ist, ist der MAE, der durch Entfernen des höchsten Fehlerbeitrags erzielt wird, deutlich besser als der MAE, der durch Entfernen des niedrigsten Vorhersagebeitrags erzielt wird.

Da wir im Validierungssatz die Modelle ausgewählt haben, die zum kleinsten MAE führen, sehen wir uns deren Ergebnis im Testsatz an:

  • RFE-Vorhersagebeitrag (19 Features). MAE am Testset: 2.04.
  • RFE-Fehlerbeitrag (17 Features). MAE am Testsatz: 1.94.

Das beste MAE mit unserer Methode ist also 5 % besser als herkömmliches RFE!

Das Konzept der Feature-Wichtigkeit spielt eine grundlegende Rolle beim maschinellen Lernen. Allerdings wird der Begriff „Wichtigkeit“ oft mit „Güte“ verwechselt.

Um zwischen diesen beiden Aspekten zu unterscheiden, haben wir zwei Konzepte eingeführt: Vorhersagebeitrag und Fehlerbeitrag. Beide Konzepte basieren auf den SHAP-Werten des Validierungsdatensatzes, und im Artikel haben wir den Python-Code zur Berechnung dieser Werte gesehen.

Wir haben sie auch an einem realen Finanzdatensatz ausprobiert (in dem die Aufgabe darin besteht, den Goldpreis vorherzusagen) und bewiesen, dass die Eliminierung rekursiver Merkmale basierend auf dem Fehlerbeitrag zu einem um 5 % besseren mittleren absoluten Fehler im Vergleich zu herkömmlichem RFE basierend auf dem Vorhersagebeitrag führt.

Der gesamte für diesen Artikel verwendete Code ist in zu finden dieses Notizbuch.

Vielen Dank für das Lesen!

 
 
Samuele Mazzanti ist Lead Data Scientist bei Jakala und lebt derzeit in Rom. Er hat einen Abschluss in Statistik und sein Hauptforschungsinteresse gilt den Anwendungen des maschinellen Lernens für die Industrie. Er ist außerdem freiberuflicher Content-Ersteller.

 
Original. Mit Genehmigung erneut veröffentlicht.
 

Zeitstempel:

Mehr von KDnuggets