Mit tidymodels steht in R ein leistungsstarkes, modular aufgebautes Framework zur Verfügung, das den gesamten Prozess der Modellierung abdeckt – von der Datenbereinigung über Feature Engineering bis hin zur Modellbewertung. Um zuverlässige und interpretierbare Modelle zu erstellen, reicht die Auswahl eines Algorithmus allein nicht aus. Benötigt werden eine sorgfältige Datenbereinigung und explorative Datenanalyse (EDA), durchdachtes Feature Engineering, sinnvolle Resampling-Strategien und eine reproduzierbare Pipeline für die Feinabstimmung und Bewertung. Das Framework bietet eine vereinheitlichte Toolbox für jeden dieser Schritte: Vorverarbeitung (recipes), Modellspezifikation (parsnip), Resampling (rsample), Parameteroptimierung (tune, dials, finetune) und Bewertung (yardstick), welche alle durch Workflows miteinander verbunden sind. Dieser Blogbeitrag bietet eine praxisorientierte Einführung dazu.

Datenanalyse als Teil der Modellierung

Erwartungen

Bevor Sie mit der Datenanalyse beginnen, sollten Sie klare Erwartungen hinsichtlich des Ziels des Modells sowie der Bewertung seiner Leistung (und seines Erfolgs) haben. Legen Sie fest, welche Metrik(en) den Erfolg bestimmen (z.B. RMSE für Regression oder AUC für Klassifizierung) und definieren Sie realistische Zielwerte. Formulieren Sie ausserdem, welche Mindestanforderungen ein Modell erfüllen muss, damit es als «einsatzbereit» gilt. So vermeiden Sie eine Überanpassung an die Metrik und stellen sicher, dass die Modellierungsentscheidungen mit den geschäftlichen oder wissenschaftlichen Zielen übereinstimmen.

Explorative Datenanalyse (EDA)

Die explorative Datenanalyse ist ein wichtiger Bestandteil bei der Erstellung hochwertiger Modelle. Sie zeigt Variablenverteilungen, Korrelationen, typische Bereiche, Saisonalität (bei Zeitreihen) sowie relevante Beziehungen für das Feature Engineering und die Modellauswahl auf.

Explorative Datenanalyse

Daten bereinigen und vorbereiten

Die Datenbereinigung wird oft unterschätzt, ist jedoch häufig sehr zeitintensiv. Untersuchen Sie fehlende Werte, Ausreisser und inkonsistente Kodierungen. Prüfen Sie ebenfalls, ob Datentypen korrekt gesetzt sind (z.B. Datum, Faktor, numerisch) und führen Sie bei Bedarf Typkonvertierungen durch. Stellen Sie ausserdem sicher, dass die Variablen mit den Anforderungen des Modells und den Projektzielen übereinstimmen. Dokumentieren Sie Transformationen und belassen Sie, wenn sinnvoll, die ursprünglichen Spalten im Datensatz – sie könnten für die spätere Fehlerbehebung hilfreich sein.

Grundgedanke von tidymodels

tidymodels ist ein Ökosystem aus R-Paketen, das entwickelt wurde, um den Prozess der Modellierung und des maschinellen Lernens zu optimieren und dabei der «tidyverse»-Designphilosophie zu folgen. Die Hauptidee besteht darin, eine konsistente und benutzerfreundliche Oberfläche für die Datenvorverarbeitung, Modellspezifikation, Feinabstimmung und Bewertung bereitzustellen. Anstatt für jedes Modellierungspaket unterschiedliche Syntaxen zu erlernen, vereint tidymodels diese unter einer einheitlichen Grundstruktur. Dadurch wird das Experimentieren mit verschiedenen Modellen erleichtert, Ergebnisse können besser verglichen werden und es ist einfacher, reproduzierbare Arbeitsabläufe zu erstellen.

Die verschiedenen Aspekte von tidymodels:

  • Die Modellspezifikation erfolgt unabhängig von den Daten (mit parsnip).
  • Die Vorverarbeitung und das Feature Engineering werden deklarativ definiert (mit recipes).
  • Resampling-Strategien (Splits, CV, Bootstrap) werden von rsample verarbeitet.
  • Die Feinabstimmung wird durch tune und dials standardisiert.
  • Die Bewertung erfolgt mit yardstick, das übersichtliche Metrik-Tabellen zurückgibt.

Dieses modulare Design ermöglicht die Reproduzierbarkeit, den einfachen Austausch von Modell-Engines (z.B. «lm» vs. «glmnet») sowie die Wiederverwendung von Vorverarbeitungsschritten über Modelle hinweg. Darüber hinaus lassen sich die übersichtlichen und konsistenten Ausgaben in bestehenden R-Code integrieren.

Leistungsmetriken

Die Leistungsmetriken müssen dem Modellierungsziel entsprechen und im Kontext interpretierbar sein. Für Regressionen werden gängige Metriken wie RMSE und MAE verwendet, welche die Differenz zwischen den beobachteten und den vorhergesagten Werten messen. Zusätzlich ist das Bestimmtheitsmass R2 hilfreich, da es den Anteil der erklärten Varianz angibt. Für Klassifizierungen sollten Metriken wie Genauigkeit, Precision/Recall oder ROC-AUC in Betracht gezogen werden. Wenn möglich, geben Sie Metriken mit Unsicherheitsmassen (z.B. Konfidenzintervall oder Standardfehler) an.

Feature Engineering

Beim Feature Engineering werden Prädiktorwerte so aufbereitet, dass sie für ein Modell leichter und effektiver nutzbar sind. Dazu gehören Transformationen, Skalierungen und Kodierungen der Daten, um ihre wichtigen Eigenschaften bestmöglich darzustellen.

Prädiktorwerte erstellen

Daten aufteilen

Der primäre Ansatz für die empirische Modellvalidierung besteht darin, die vorhandenen Daten in zwei separate Sätze aufzuteilen: Trainings- und Testsatz. Der Trainingssatz wird zur Entwicklung und Optimierung des Modells verwendet und umfasst üblicherweise den Grossteil der Daten.

Der andere Teil der Daten wird in den Testsatz aufgenommen. Dieser wird zurückbehalten und erst für die finale Bewertung eingesetzt, nachdem ein oder zwei Modelle als vielversprechend identifiziert wurden. Anschliessend wird der Testsatz als endgültige Entscheidungsgrundlage zur Bestimmung der Wirksamkeit des Modells verwendet.

Bei allgemeinen tabellarischen Daten sind zufällige Aufteilungen (z.B. 80/20) mit initial_split() üblich. Bei Zeitreihen oder stark zeitabhängigen Daten verwenden Sie initial_time_split(), damit der Testsatz den neuesten Teil der Reihe enthält. Das rsample-Paket erzeugt rsplit-Objekte, die nur die Partitionsinformationen enthalten. Verwenden Sie training() und testing(), um die tatsächlichen Datenrahmen zu extrahieren.

Daten aufteilen

recipes

Mit dem Paket recipes können Sie verschiedene Aufgaben des Feature Engineerings und der Vorverarbeitung kombinieren und diese Transformationen auf verschiedene Datensätze anwenden. Verwenden Sie recipes, um geordnete Vorverarbeitungsschritte (wie Imputation, Skalierung, Dummy-Kodierung, Log-Transformationen, usw.) als wiederverwendbares Objekt zu erstellen. Für einfache Transformationen der interessierenden Variable wird jedoch empfohlen, diese direkt im Dataframe vorzunehmen.

Verschiedene Modelle haben unterschiedliche Vorverarbeitungsanforderungen. Einige, wie z.B. baumbasierte Modelle, erfordern nur sehr wenig Vorverarbeitung.

Qualitative Daten kodieren

Eine der häufigsten Aufgaben des Feature Engineerings ist die Umwandlung von Zeichenvariablen in Faktoren. Dies ist besonders wichtig für Modelle, welche nicht mit Zeichenketten umgehen können.

In tidymodels werden Prädiktoren, die Zeichen sind, grundsätzlich automatisch in Faktoren umgewandelt. Durch die explizite Konvertierung haben Sie jedoch mehr Kontrolle darüber, wie die Faktorstufen behandelt werden, und können sicherstellen, dass die Modellierungsmaschine die erwarteten Daten erhält.

Werden Zeichen nicht explizit in Faktoren konvertiert, können neue Daten zum Zeitpunkt der Vorhersage unbekannte Stufen aufweisen. Das kann das Modell stören. Wenn Sie von Anfang an Faktoren verwenden, können Sie alle in Ihren Trainingsdaten erwarteten Stufen festlegen und Fehler vermeiden.

Mit der Funktion step_unknown() können fehlende Werte in eine dedizierte Faktorstufe geändert werden. Wenn davon auszugehen ist, dass in zukünftigen Daten neue Faktorstufen auftreten könnten, kann mit step_novel() eine neue Stufe zugewiesen werden. Mithilfe der Funktion step_other() können Sie die Häufigkeiten der Faktorstufen im Trainingssatz analysieren und selten vorkommende Werte mit einem festlegbaren Schwellenwert in eine Sammelstufe «other» umwandeln.

recipes

Spaltenrollen zuweisen

Wird beim ersten Aufruf von recipe() eine Formel verwendet, weist diese jeder Spalte eine Rolle zu, je nachdem, auf welcher Seite der Tilde sie sich befindet. Mögliche Rollen sind «Prädiktor» oder «Kriterium». Bei Bedarf können jedoch auch andere Rollen zugewiesen werden.

Verwenden Sie die Funktionen add_role(), remove_role() und update_role(), um Nicht-Prädiktor-Spalten in den Trainingsdaten zu erhalten (für spätere Debugging- oder Join-Vorhersagen) oder um Spalten mit besonderen Rollen zu markieren, die über «Prädiktor» bzw. «Kriterium» hinausgehen.

Rezeptschritte überprüfen

Mit der Funktion tidy() können Sie überprüfen, welche Transformationen stattfinden (z.B. welche Faktoren dummyisiert werden). Sie können den Schritten IDs zuweisen, um sie leichter zu finden. Die Methode «tidy()» kann auch mit der Nummerkennung aufgerufen werden, wenn bekannt ist, welcher Schritt in «recipes» benötigt wird.

Modell erstellen und anpassen

Der Zyklus aus Transformation, Modellierung und Visualisierung erfordert in der Regel mehrere Iterationen. Stellen Sie deshalb sicher, dass jeder Schritt reproduzierbar ist.

Modell erstellen

tidymodels vereinheitlicht den Ansatz zur Spezifikation von Modellen:

  • Wählen Sie den Modelltyp anhand seiner mathematischen Struktur (z.B. lineare Regression, Random Forest, KNN usw.).
  • Bestimmen Sie die Maschine (das zugrunde liegende Paket, welches zum Anpassen des Modells verwendet wird, wie z.B. «lm», «glmnet», «ranger», «xgboost»).
  • Geben Sie den Modus des Modells an («Regression» oder «Klassifizierung»), sofern dieser nicht implizit festgelegt ist.

Die Spezifikation wird ohne unmittelbaren Bezug zu den Daten erstellt.

Modell erstellen

Beliebte Modelle

Lineares Regressionsmodell (LM)

Lineare Regressionsmodelle zählen zu den einfachsten und am häufigsten verwendeten Ansätzen in der statistischen Modellierung. Sie gehen von einer linearen Beziehung zwischen Prädiktoren und Kriterium (engl. Outcome) aus, wodurch sie sich leicht interpretieren und kommunizieren lassen.

Lineare Modelle funktionieren am besten, wenn die Prädiktoren eine annähernd lineare Beziehung zur abhängigen Variablen aufweisen und die Annahmen der Homoskedastizität und Normalverteilung der Residuen angemessen erfüllt sind. Obwohl sie weniger flexibel sind als komplexere Modelle des maschinellen Lernens, bieten lineare Modelle eine wichtige Grundlage und erweisen sich oft als überraschend effektiv für strukturierte Daten.

In parsnip wird ein lineares Modell mit linear_reg() spezifiziert und mit set_engine() eine Maschine ausgewählt. Bei vielen Prädiktoren oder bei Multikollinearität sollten Sie über dieselbe parsnip-Schnittstelle eine regulierte Maschine (z.B. glmnet) verwenden – die Modellsyntax bleibt dabei konsistent, während sich die Maschine ändert.

Random Forest

Random Forest ist eine Baum-Ensemble-Methode, bei der viele Entscheidungsbäume aus leicht unterschiedlichen Versionen des Trainingssatzes erstellt werden. Sie erfordern nur wenig Vorverarbeitung und können komplexe Wechselwirkungen und Nichtlinearitäten erfassen. In tidymodels können Sie Random Forest über rand_forest() festlegen und als Maschine z.B. «ranger» verwenden.

parsnip-Erweiterungspakete

Das parsnip-Ökosystem ist erweiterbar. Zusätzliche Maschinen und Algorithmen stehen als Erweiterungspakete auf CRAN zur Verfügung. Eine Liste der unterstützten Modelle finden Sie unter www.tidymodels.org/find.

Viele Modellspezifikationen erstellen

Es kann mühsam sein, viele Modellspezifikationen zu schreiben oder sich zu merken, wie der Code zu ihrer Generierung lautet. Das parsnip-Paket enthält ein RStudio-Add-in, das dabei helfen kann, Zeit zu sparen und Syntaxfehler zu vermeiden. Wählen Sie das Add-in entweder über die Add-in-Symbolleiste oder führen Sie den Code parsnip_addin() aus. Dadurch wird ein Fenster im Viewer-Panel der RStudio-IDE geöffnet.

Leistungstest

Nachdem die Details des Modells festgelegt wurden, können Sie die Modellschätzung entweder mit der Funktion fit() zur Verwendung einer Formel oder mit der Funktion fit_xy() bei bereits vorverarbeiteten Daten durchführen. Das parsnip-Paket ermöglicht es, die Schnittstelle des zugrunde liegenden Modells zu ignorieren. Um den im Hintergrund ausgeführten Code anzuzeigen, können Sie die Funktion translate() nutzen.

Leistungstest

Modellergebnisse verwenden

Sobald das Modell erstellt und angepasst wurde, lassen sich die Ergebnisse auf verschiedene Weise nutzen. Sie können die Modellausgabe beispielsweise visualisieren oder mit der Funktion «tidy()» untersuchen. Dies ist möglich, weil in einem parsnip-Modellobjekt mehrere Werte, darunter auch das angepasste Modell, gespeichert werden.

Exkurs: tidyAML

tidyAML ist ein R-Paket, welches das tidymodels-Ökosystem für AutoML-Aufgaben nutzbar macht, insbesondere wenn keine tiefgehende Feinabstimmung erforderlich ist. Mit tidyAML können Sie verschiedene hochwertige maschinelle Lernmodelle und Vorhersagen auf einmal erstellen. Die Modelle lassen sich entweder über die unterstützten parsnip-Funktionen, wie etwa linear_reg(), oder über die gewünschte Engine auswählen. Es ist auch möglich, beide Optionen zu kombinieren.

Zu Teil 2 gehen

Quellen