Nützliche Python-Skripte für effektives Feature-EngineeringNützliche Python-Skripte für effektives Feature-Engineering
Bild vom Autor

# Einführung

Als Experte für maschinelles Lernen wissen Sie, dass Function-Engineering mühsame, manuelle Arbeit ist. Sie müssen Interaktionsterme zwischen Options erstellen, kategoriale Variablen richtig kodieren, zeitliche Muster aus Datumsangaben extrahieren, Aggregationen generieren und Verteilungen transformieren. Sie testen für jedes potenzielle Function, ob es die Modellleistung verbessert, iterieren anhand von Variationen und verfolgen, was Sie ausprobiert haben.

Dies wird schwieriger, je größer Ihr Datensatz wird. Bei Dutzenden von Options benötigen Sie systematische Ansätze, um Kandidatenfeatures zu generieren, ihren Nutzen zu bewerten und die besten auszuwählen. Ohne Automatisierung werden Ihnen wahrscheinlich wertvolle Funktionskombinationen entgehen, die die Leistung Ihres Modells erheblich steigern könnten.

In diesem Artikel werden fünf Python-Skripte behandelt, die speziell für die Automatisierung der wirkungsvollsten Function-Engineering-Aufgaben entwickelt wurden. Diese Skripte helfen Ihnen, qualitativ hochwertige Options systematisch zu generieren, sie objektiv zu bewerten und optimierte Function-Units zu erstellen, die die Modellleistung maximieren.

Den Code finden Sie auf GitHub.

# 1. Kodierung kategorialer Merkmale

// Der Schmerzpunkt

Kategoriale Variablen kommen überall in realen Daten vor. Sie müssen diese Kategorien kodieren, und die Wahl der richtigen Kodierungsmethode ist wichtig:

  • One-Scorching-Codierung funktioniert für Options mit niedriger Kardinalität, führt jedoch zu Dimensionsproblemen bei Kategorien mit hoher Kardinalität
  • Die Etikettenkodierung ist speichereffizient, impliziert jedoch Ordinalität
  • Die Zielkodierung ist leistungsstark, birgt jedoch das Risiko von Datenlecks

Die korrekte Implementierung dieser Codierungen, der Umgang mit unsichtbaren Kategorien in Testdaten und die Wahrung der Konsistenz über Zug-, Validierungs- und Testaufteilungen hinweg erfordern sorgfältigen, fehleranfälligen Code.

// Was das Skript macht

Das Skript wählt automatisch geeignete Codierungsstrategien basierend auf Funktionsmerkmalen aus und wendet sie an: Kardinalität, Zielkorrelation und Datentyp.

Es übernimmt die One-Scorching-Kodierung für Merkmale mit niedriger Kardinalität, die Zielkodierung für mit dem Ziel korrelierte Merkmale, die Frequenzkodierung für Merkmale mit hoher Kardinalität und die Label-Kodierung für Ordinalvariablen. Außerdem gruppiert es seltene Kategorien automatisch, verarbeitet unsichtbare Kategorien in Testdaten ordnungsgemäß und sorgt für die Codierungskonsistenz über alle Datenaufteilungen hinweg.

// Wie es funktioniert

Das Skript analysiert jedes kategoriale Merkmal, um seine Kardinalität und Beziehung zur Zielvariablen zu bestimmen.

  • Für Options mit weniger als 10 eindeutigen Werten wird One-Scorching-Codierung angewendet
  • Für Merkmale mit hoher Kardinalität und mehr als 50 eindeutigen Werten wird die Frequenzkodierung verwendet, um eine Dimensionsexplosion zu vermeiden
  • Für Options, die eine Korrelation mit dem Ziel aufweisen, wird eine Zielkodierung mit Glättung angewendet, um eine Überanpassung zu verhindern
  • Seltene Kategorien, die in weniger als 1 % der Zeilen vorkommen, werden in der Kategorie „Andere“ zusammengefasst

Alle Kodierungszuordnungen werden gespeichert und können konsistent auf neue Daten angewendet werden, wobei unsichtbare Kategorien standardmäßig behandelt werden, indem eine seltene Kategoriekodierung oder ein globaler Mittelwert verwendet wird.

Holen Sie sich das kategoriale Function-Encoder-Skript

# 2. Numerische Merkmale transformieren

// Der Schmerzpunkt

Rohe numerische Merkmale müssen vor der Modellierung häufig transformiert werden. Schiefe Verteilungen sollten normalisiert werden, Ausreißer sollten behandelt werden, Options mit unterschiedlichen Maßstäben müssen standardisiert werden und nichtlineare Beziehungen erfordern möglicherweise polynomische oder logarithmische Transformationen. Das manuelle Testen verschiedener Transformationsstrategien für jedes numerische Merkmal ist mühsam. Dieser Vorgang muss für jede numerische Spalte wiederholt und validiert werden, um sicherzustellen, dass Sie die Modellleistung tatsächlich verbessern.

// Was das Skript macht

Das Skript testet automatisch mehrere Transformationsstrategien für numerische Merkmale: Protokolltransformationen, Field-Cox-TransformationenQuadratwurzel, Kubikwurzel, Standardisierung, Normalisierung, robuste Skalierung und Potenztransformationen.

Es bewertet die Auswirkungen jeder Transformation auf die Verteilungsnormalität und die Modellleistung, wählt die beste Transformation für jedes Function aus und wendet Transformationen konsistent auf Trainings- und Testdaten an. Außerdem werden Nullen und unfavourable Werte ordnungsgemäß verarbeitet, wodurch Transformationsfehler vermieden werden.

// Wie es funktioniert

Für jedes numerische Merkmal testet das Skript mehrere Transformationen und wertet sie mithilfe von Normalitätstests aus, z. B Shapiro-Wilk Und Anderson-Darling – und Verteilungsmetriken wie Schiefe und Kurtosis. Für Options mit einer Schiefe größer als 1 werden Log- und Field-Cox-Transformationen priorisiert.

Für Options mit Ausreißern wird eine robuste Skalierung angewendet. Das Skript verwaltet an Trainingsdaten angepasste Transformationsparameter und wendet sie konsistent auf Validierungs- und Testsätze an. Options mit negativen Werten oder Nullen werden mit verschobenen Transformationen oder behandelt Yeo-Johnson Transformationen, die mit beliebigen realen Werten funktionieren.

Holen Sie sich das Skript für den numerischen Function-Transformer

# 3. Generieren von Funktionsinteraktionen

// Der Schmerzpunkt

Interaktionen zwischen Options enthalten häufig wertvolle Signale, die einzelnen Options entgehen. Der Umsatz könnte je nach Kundensegment unterschiedlich ausfallen, Werbeausgaben könnten je nach Saison unterschiedliche Auswirkungen haben oder die Kombination aus Produktpreis und Kategorie könnte aussagekräftiger sein als beide allein. Aber bei Dutzenden von Funktionen bedeutet das Testen aller möglichen paarweisen Interaktionen, dass Tausende von Kandidaten bewertet werden müssen.

// Was das Skript macht

Dieses Skript generiert Function-Interaktionen mithilfe mathematischer Operationen, Polynom-Options, Verhältnis-Options und kategorialer Kombinationen. Es bewertet die Vorhersagekraft jeder Kandidateninteraktion anhand gegenseitiger Informationen oder modellbasierter Wichtigkeitsbewertungen. Es werden nur die N wertvollsten Interaktionen zurückgegeben, wodurch eine Funktionsexplosion vermieden und gleichzeitig die wirkungsvollsten Kombinationen erfasst werden. Es unterstützt auch benutzerdefinierte Interaktionsfunktionen für domänenspezifisches Function-Engineering.

// Wie es funktioniert

Das Skript generiert Kandidateninteraktionen zwischen allen Function-Paaren:

  • Für numerische Merkmale werden Produkte, Verhältnisse, Summen und Differenzen erstellt
  • Für kategoriale Merkmale werden gemeinsame Kodierungen erstellt

Jeder Kandidat wird anhand gegenseitiger Informationen mit der Ziel- oder Merkmalsbedeutung aus einer zufälligen Gesamtstruktur bewertet. Nur Interaktionen, die einen Wichtigkeitsschwellenwert überschreiten oder im oberen N-Rating liegen, werden beibehalten. Das Skript verarbeitet Randfälle wie Division durch Null, unendliche Werte und Korrelationen zwischen generierten Options und Unique-Options. Zu den Ergebnissen gehören eindeutige Function-Namen, aus denen hervorgeht, welche Unique-Options wie kombiniert wurden.

Holen Sie sich das Function-Interaktionsgenerator-Skript

# 4. Extrahieren von Datetime-Funktionen

// Der Schmerzpunkt

Datetime-Spalten enthalten nützliche zeitliche Informationen, ihre effektive Nutzung erfordert jedoch umfangreiches manuelles Function-Engineering. Sie müssen Folgendes tun:

  • Extrahieren Sie Komponenten wie Jahr, Monat, Tag und Stunde
  • Erstellen Sie abgeleitete Options wie Wochentags-, Quartals- und Wochenend-Flags
  • Berechnen Sie Zeitunterschiede wie Tage seit einem Referenzdatum und einer Referenzuhrzeit zwischen Ereignissen
  • Behandeln Sie zyklische Muster

Das Schreiben dieses Extraktionscodes für jede Datetime-Spalte ist repetitiv und zeitaufwändig, und Praktiker vergessen oft wertvolle zeitliche Funktionen, die ihre Modelle verbessern könnten.

// Was das Skript macht

Das Skript extrahiert automatisch umfassende Datums-/Uhrzeitfunktionen aus Zeitstempelspalten, einschließlich grundlegender Komponenten, Kalenderfunktionen, boolescher Indikatoren, zyklischer Kodierungen mithilfe von Sinus- und Kosinustransformationen, Jahreszeitenindikatoren und Zeitunterschieden zu Referenzdaten. Es erkennt und markiert auch Feiertage, verarbeitet mehrere Datum/Uhrzeit-Spalten und berechnet Zeitunterschiede zwischen Datum/Uhrzeit-Paaren.

// Wie es funktioniert

Das Skript verwendet Datum/Uhrzeit-Spalten und extrahiert systematisch alle relevanten zeitlichen Muster.

Für zyklische Merkmale wie Monat oder Stunde werden Sinus- und Kosinustransformationen erstellt:
(
textual content{Monat_sin} = sinleft(frac{2pi instances textual content{Monat}}{12}proper)
)

Dadurch wird sichergestellt, dass Dezember und Januar im Function-Bereich nahe beieinander liegen. Es berechnet Zeitdeltas von einem Referenzpunkt (Tage seit der Epoche, Tage seit einem bestimmten Datum), um Tendencies zu erfassen.

Für Datensätze mit mehreren Datum/Uhrzeit-Spalten (z. B order_date Und ship_date), berechnet es Unterschiede zwischen ihnen, um Dauern wie zu ermitteln processing_time. Für besondere Tage, Wochenenden und Periodengrenzen werden boolesche Flags erstellt. Alle Funktionen verwenden klare Namenskonventionen, aus denen ihre Quelle und Bedeutung hervorgeht.

Holen Sie sich das Datetime-Function-Extraktionsskript

# 5. Funktionen automatisch auswählen

// Der Schmerzpunkt

Nach dem Function-Engineering verfügen Sie normalerweise über mehrere Options, von denen viele redundant oder irrelevant sind oder eine Überanpassung verursachen. Sie müssen herausfinden, welche Funktionen Ihrem Modell tatsächlich helfen und welche entfernt werden sollten. Bei der manuellen Function-Auswahl müssen Modelle wiederholt mit unterschiedlichen Function-Teilmengen trainiert, die Ergebnisse in Tabellenkalkulationen verfolgt und versucht werden, komplexe Function-Wichtigkeitswerte zu verstehen. Der Prozess ist langsam und subjektiv, und Sie wissen nie, ob Sie den optimalen Funktionsumfang gefunden haben oder ob Sie bei Ihren Versuchen einfach nur Glück hatten.

// Was das Skript macht

Das Skript wählt mithilfe mehrerer Auswahlmethoden automatisch die wertvollsten Funktionen aus:

  • Varianzbasierte Filterung entfernt konstante oder nahezu konstante Merkmale
  • Korrelationsbasierte Filterung entfernt redundante Funktionen
  • Statistische Exams wie Varianzanalyse (ANOVA), Chi-Quadrat und gegenseitige Info
  • Baumbasierte Function-Wichtigkeit
  • L1-Regularisierung
  • Eliminierung rekursiver Merkmale

Anschließend kombiniert es die Ergebnisse mehrerer Methoden zu einem Ensemble-Rating, ordnet alle Options nach Wichtigkeit und identifiziert die optimale Function-Teilmenge, die die Modellleistung maximiert und gleichzeitig die Dimensionalität minimiert.

// Wie es funktioniert

Das Skript wendet eine mehrstufige Auswahlpipeline an. Hier ist, was jede Stufe bewirkt:

  1. Entfernen Sie Options mit einer Varianz von Null oder nahezu Null, da sie keine Informationen liefern
  2. Entfernen Sie stark korrelierte Merkmalspaare und behalten Sie bei, dass das Merkmalspaar stärker mit dem Ziel korreliert
  3. Berechnen Sie die Function-Wichtigkeit mit mehreren Methoden, z. B. Random-Forest-Wichtigkeit, Mutual-Info-Scores, statistischen Exams und L1-Regularisierungskoeffizienten
  4. Normalisieren und kombinieren Sie Partituren aus verschiedenen Methoden zu einem Ensemble-Rating
  5. Verwenden Sie rekursive Function-Eliminierung oder Kreuzvalidierung, um die optimale Anzahl von Options zu bestimmen

Das Ergebnis ist eine Rangliste der Funktionen und eine empfohlene Teilmenge für das Modelltraining sowie detaillierte Wichtigkeitswerte für jede Methode.

Holen Sie sich das automatisierte Funktionsauswahlskript

# Abschluss

Diese fünf Skripte befassen sich mit den Kernherausforderungen des Function-Engineerings, die in maschinellen Lernprojekten den größten Teil der Zeit in Anspruch nehmen. Hier eine kurze Zusammenfassung:

  • Der kategoriale Encoder übernimmt die intelligente Codierung basierend auf Kardinalität und Zielkorrelation
  • Der numerische Transformator findet automatisch optimale Transformationen für jedes numerische Merkmal
  • Der Interaktionsgenerator entdeckt systematisch wertvolle Funktionskombinationen
  • Der Datetime-Extraktor extrahiert umfassende zeitliche Muster und zyklische Merkmale
  • Der Function-Selektor identifiziert mithilfe von Ensemble-Methoden die prädiktivsten Options

Jedes Skript kann unabhängig für bestimmte Function-Engineering-Aufgaben verwendet oder zu einer vollständigen Pipeline kombiniert werden. Beginnen Sie mit den Encodern und Transformatoren, um Ihre Basisfunktionen vorzubereiten, verwenden Sie den Interaktionsgenerator, um komplexe Muster zu entdecken, extrahieren Sie zeitliche Funktionen aus Datums-/Uhrzeitspalten und schließen Sie mit der Funktionsauswahl ab, um Ihren Funktionsumfang zu optimieren.

Viel Spaß beim Function-Engineering!

Bala Priya C ist ein Entwickler und technischer Redakteur aus Indien. Sie arbeitet gerne an der Schnittstelle von Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Zu ihren Interessen- und Fachgebieten gehören DevOps, Datenwissenschaft und Verarbeitung natürlicher Sprache. Sie liebt es zu lesen, zu schreiben, zu programmieren und Kaffee zu trinken! Derzeit arbeitet sie daran, zu lernen und ihr Wissen mit der Entwickler-Group zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt außerdem ansprechende Ressourcenübersichten und Programmier-Tutorials.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert