Zurück zu allen Blogbeiträgen

Abstimmung von Random Forest auf Zeitreihendaten

  • Coding
  • Machine Learning
  • R
21. November 2019
·

Team statworx

„Schon wieder Steuern und Random Forest?“ Mein Kollege Thomas hier bei statworx zog die Augenbrauen hoch, als ich ihm von diesem Beitrag erzählte. „Ja!“, antwortete ich, „aber nicht, weil ich Steuern so sehr liebe (wer tut das schon?). Diesmal geht es ums Tuning!“

Spulen wir kurz zurück: Im vorherigen Beitrag haben wir uns angesehen, wie wir ökonometrische Techniken wie Differenzierung mit Machine-Learning-Algorithmen wie Random Forest kombinieren können, um eine Zeitreihe mit hoher Genauigkeit vorherzusagen. Falls du ihn verpasst hast, empfehle ich dir, ihn dir hier anzusehen. Die Daten sind inzwischen auch als CSV-Datei auf unserem statworx-GitHub verfügbar.

Da wir im letzten Beitrag schon einiges abgedeckt haben, blieb kaum Platz für andere Themen. Genau hier setzt dieser Beitrag an. Heute schauen wir uns an, wie wir die Hyperparameter eines Random Forests beim Umgang mit Zeitreihendaten tunen können.

Interessiert? Alles klar, dann legen wir los! Wenn du den letzten Beitrag gelesen hast, kannst du Abschnitt 1 überspringen und direkt mit Abschnitt 2 weitermachen.

Das Setup

# load packages
suppressPackageStartupMessages(require(tidyverse))
suppressPackageStartupMessages(require(tsibble))
suppressPackageStartupMessages(require(randomForest))
suppressPackageStartupMessages(require(forecast))

# specify the path to the csv file (your path here)
file <- "/Users/manueltilgner/Library/Mobile Documents/com~apple~CloudDocs/Artificial Intelligence/10_Blog/RF/tax.csv"

# read in the csv file
tax_tbl <- readr::read_delim(
  file = file,
  delim = ";",
  col_names = c("Year", "Type", month.abb),
  skip = 1,
  col_types = "iciiiiiiiiiiii",
  na = c("...")
) %>% 
  select(-Type) %>% 
  gather(Date, Value, -Year) %>% 
  unite("Date", c(Date, Year), sep = " ") %>% 
  mutate(
    Date = Date %>% 
      lubridate::parse_date_time("m y") %>% 
      yearmonth()
  ) %>% 
  drop_na() %>% 
  as_tsibble(index = "Date") %>% 
  filter(Date <= "2018-12-01")

# convert to ts format
tax_ts <- as.ts(tax_tbl)

Auch dies ist alles vom letzten Mal, ich habe es nur hier, damit Sie schnell loslegen können (einfach kopieren und einfügen)

# pretend we're in December 2017 and have to forecast the next twelve months
tax_ts_org <- window(tax_ts, end = c(2017, 12))

# estimate the required order of differencing
n_diffs <- nsdiffs(tax_ts_org)

# log transform and difference the data
tax_ts_trf <- tax_ts_org %>% 
  log() %>% 
  diff(n_diffs)

# embed the matrix
lag_order <- 6 # the desired number of lags (six months)
horizon <- 12 # the forecast horizon (twelve months)

tax_ts_mbd <- embed(tax_ts_trf, lag_order + 1) # embedding magic!

# do a train test split
y_train <- tax_ts_mbd[, 1] # the target
X_train <- tax_ts_mbd[, -1] # everything but the target

y_test <- window(tax_ts, start = c(2018, 1), end = c(2018, 12)) # the year 2018
X_test <- tax_ts_mbd[nrow(tax_ts_mbd), c(1:lag_order)] # the test set consisting
# of the six most recent values (we have six lags) of the training set. It's the
# same for all models.

Cross-Validation und ihre (Fehl-)Anwendungen

Wie stimmt man die Hyperparameter eines ML-Modells ab, wenn man es mit Zeitreihendaten zu tun hat? Zuschauerhinweis: Das folgende Material könnte für manche verstörend sein.

Bevor wir die obige Frage beantworten, klären wir zunächst: Wie stimmt man die Hyperparameter eines ML-Modells ab, wenn die Daten keine Zeitdimension haben?

Im Allgemeinen gehen wir folgendermaßen vor:

  1. Auswahl einiger Hyperparameter,
  2. Festlegung eines sinnvollen Wertebereichs für jeden, und schließlich
  3. Ermittlung der „besten“ Konfiguration, z. B. im Sinne der Minimierung eines Fehlermaßes.

Schritte 1) und 2) sind Trial-and-Error. In den meisten Fällen gibt es keinen analytischen Weg, um zu bestimmen, welche Hyperparameter in welcher Kombination am besten funktionieren. Zwar haben sich über die Jahre einige praktische Erfahrungswerte herausgebildet, im Grunde heißt es aber: ausprobieren und schauen, was bei deinen Daten funktioniert.

Und Schritt 3)? Die „beste“ Konfiguration findet man mithilfe verschiedener Resampling-Verfahren – eines der beliebtesten ist k-fold-Cross-Validation. Beliebt, weil k-fold-Cross-Validation recht verlässliche Schätzungen der Modellgüte liefert und die Daten effizient nutzt. Wie funktioniert das?

Zur Auffrischung: k-fold-Cross-Validation teilt die Daten in $k$ etwa gleich große Folds. Jeder Fold ist eine Teilmenge der Daten mit $N/k$ Beobachtungen. Das Modell wird dann auf $k-1$ Folds trainiert und auf dem $k$-ten, weggelassenen Fold validiert, indem man einen Loss (z. B. RMSE) berechnet. Dieser Prozess wird $k$-mal wiederholt, sodass jeder Fold einmal als Validierungsmenge dient.

Aus dieser Beschreibung ist sofort ersichtlich, warum das bei Zeitreihendaten problematisch ist. Wenn wir k-fold-Cross-Validation verwenden, trainieren wir das Modell zwangsläufig auf zukünftigen Daten, um die Vergangenheit vorherzusagen! Ich weiß nicht, wie es dir geht, aber das fühlt sich irgendwie nicht richtig an. Ganz zu schweigen davon, dass durch das zufällige Mischen der Daten vor dem Splitten die Zeitstruktur völlig zerstört wird.

Hold out – nicht so schnell

Was also tun? In der Zeitreihenökonometrie ist ein klassischer Ansatz: den letzten Teil der Zeitreihe als Holdout-Set reservieren. Das heißt, das Modell wird auf dem ersten Teil der Reihe trainiert und auf dem letzten Teil validiert. Im Wesentlichen ist das nichts anderes als eine Validierungsstrategie.

Dieser Ansatz ist einfach und intuitiv. Außerdem bewahrt er die zeitliche Reihenfolge der Daten. Aber er hat auch einen großen Nachteil: Er liefert keine robusten Schätzungen der Modellgüte, da wir das Modell nur ein einziges Mal testen – und das auf einem „Test“-Set, das willkürlich gewählt ist.

Ist das ein Problem?

Es kann eines sein: Zeitreihen repräsentieren vor allem Phänomene, die sich stetig verändern und weiterentwickeln. Insofern kann das Testset (also die „Zukunft“) systematisch anders sein als das Trainingsset (die „Vergangenheit“). Diese Veränderung im zugrunde liegenden Datenentstehungsprozess über die Zeit nennt man „Concept Drift“ und sie stellt eine ernsthafte Herausforderung in der Zeitreihenvorhersage dar.

Aber zurück zum Thema! Was wollen wir hier eigentlich erreichen? Wir wollen verlässliche Schätzungen der Modellgüte unseres ML-Modells bei Zeitreihendaten. Nur dann können wir mit einiger Sicherheit entscheiden, welche Hyperparameter wir wählen sollten. Doch der klassische Ansatz mit einem einzelnen Train-/Test-Split genügt dafür nicht.

Viel besser wäre es, mehrere Train-/Test-Splits zu verwenden. Im Kontext von Zeitreihen bedeutet das: Wir verschieben ein festes oder wachsendes Fenster über die Reihe, trainieren auf einem Abschnitt und sagen den nächsten voraus, berechnen den Fehler und verschieben das Fenster dann weiter (oder vergrößern es) und wiederholen den Prozess. Rob Hyndman hat dazu einen großartigen Beitrag geschrieben.

Dieser Ansatz, genannt Time Series Cross-Validation, ist effektiv – aber auch rechenintensiv. Stell dir vor, du hast 10 Hyperparameter-Kombinationen und testest jede mit 20 Train-/Test-Splits. Dann berechnest du insgesamt 200 Modelle. Je nach Modell und Datenmenge kann das einiges an Zeit in Anspruch nehmen.

Da wir beschäftigte Menschen in einer beschäftigten Welt sind, bleiben wir vorerst bei der Holdout-Strategie. Klingt einfach – aber wie macht man das konkret? Persönlich verwende ich dafür gerne die Funktion createTimeSlices aus dem Paket caret. Das ergibt vor allem Sinn, wenn du bereits mit einem caret-Workflow arbeitest oder viele unterschiedliche Serien modellierst. Wenn nicht, kannst du deine (Trainings-)Zeitreihe einfach so aufteilen, dass der letzte Abschnitt als Validierungsmenge dient.

Um zu sehen, wie die Funktion createTimeSlices funktioniert, führe sie zunächst eigenständig aus.

# we hold out the last 12 observations from our train set because this is also how far we want to predict into the future later
caret::createTimeSlices(
  1:nrow(X_train),
  initialWindow = nrow(X_train) - horizon,
  horizon = horizon,
  fixedWindow = TRUE
)

Du siehst, dass unser Trainingssatz aufgeteilt wird in ein Trainings- und ein Validierungsset, basierend auf dem von uns angegebenen Prognosehorizont (12 Monate). Okay, richten wir das nun so ein, dass wir es in einem train-Workflow verwenden können:

tr_control <- caret::trainControl(
  method = 'timeslice',
  initialWindow = nrow(X_train) - horizon,
  fixedWindow = TRUE
)

Mit trainControl als Grundlage richten wir als Nächstes ein Tuning-Grid ein. Auch wenn man hier sehr ausgeklügelt vorgehen kann, läuft es bei Random Forests meist auf zwei entscheidende Hyperparameter hinaus: die Anzahl der Bäume (ntree) und die Anzahl der Prädiktoren (mtry), die bei jedem Split im Baum zufällig ausgewählt werden.

Gute Werte für ntree liegen im Bereich einiger Hundert bis Tausend. Mehr Bäume können die Genauigkeit leicht verbessern, aber meistens nicht wesentlich. Da Random Forests kein hohes Overfitting-Risiko haben, hängt die Anzahl der verwendeten Bäume letztlich eher davon ab, wie viel Rechenleistung (oder Zeit) man zur Verfügung hat. Da das Tuning bei Zeitreihen typischerweise rechenintensiv ist, wählen wir hier 500 Bäume.

mtry hingegen ist in der Regel der spannendere Parameter. Er gibt an, wie viele Prädiktoren an jedem Knoten im Baum als Split-Kandidaten in Betracht gezogen werden. James et al. (2013) empfehlen als Richtwert $p/3$ oder $\sqrt{p}$ (wobei $p$ die Anzahl der Prädiktoren ist). Ich werde auch $p$ mit ins Grid aufnehmen – was dem Bagging entspricht (Nebenbemerkung: Wenn du diese Konzepte weiter vertiefen möchtest, sieh dir die Beiträge meiner Kolleg:innen zu Cross-Validation und Bagging an).

# caret actually only allows us to put one hyperparameter here
tune_grid <- expand.grid(
  mtry = c(
    ncol(X_train), # p
    ncol(X_train) / 3, # p / 3
    ceiling(sqrt(ncol(X_train))) # square root of p
  )
)

# let's see which hyperparameter the holdout method recommends
holdout_result <- caret::train(
  data.frame(X_train),
  y_train,
  method = 'rf',
  trControl = tr_control,
  tuneGrid = tune_grid
)

Diese Methode empfiehlt mtry = 6. Also, sollten wir jetzt aufhören und unser Modell fitten? Noch nicht ganz!

Schon wieder Cross-Validation?

Erinnerst du dich an all die negativen Dinge, die wir über k-fold-Cross-Validation (CV) bei Zeitreihendaten gesagt haben? Technisch gesehen stimmt das alles immer noch. Aber jetzt kommt der überraschende Teil: Bergmeir et al. (2018) fanden heraus, dass k-fold-CV tatsächlich auf Zeitreihenmodelle angewendet werden kann – allerdings nur, wenn es sich um rein autoregressive Modelle handelt. Mit anderen Worten: Wir können k-fold-CV auf Zeitreihendaten anwenden, aber nur, wenn die Prädiktoren in unserem Modell zeitverzögerte Versionen der Zielvariable sind.

Wie das? Die Autoren stellen fest, dass k-fold-CV nur dann gültig ist, wenn die Fehler des Modells unkorreliert sind. Diese Bedingung ist erfüllt, wenn das Modell, das wir trainieren, die Daten gut abbildet. Anders gesagt: k-fold-CV ist gültig, wenn unser Modell ein gutes Modell „enthält“, d. h. ein Modell, dessen Gewichtungen eine Teilmenge der Gewichtungen unseres Modells sind. In diesem Fall ist k-fold-Cross-Validation sogar die bessere Wahl als die Holdout-Strategie!

Ich weiß nicht, wie es dir geht, aber für mich war das eine Überraschung. Da das eine äußerst nützliche Erkenntnis ist, lohnt sich die Wiederholung: Wenn die Residuen unseres (rein autoregressiven) Zeitreihenmodells seriell unkorreliert sind, dann kann und sollte k-fold-Cross-Validation der Holdout-Strategie vorgezogen werden.

Neugierig geworden? Dann wenden wir es doch direkt an – und zwar nicht nur einmal, sondern mehrfach!

tr_control <- trainControl(
  method = 'repeatedcv',
  number = 10, 
  repeats = 3
)

kfold_result <- caret::train(
  data.frame(X_train),
  y_train,
  method = 'rf',
  trControl = tr_control,
  tuneGrid = tune_grid
)

Die Anwendung von k-fold-CV auf diese Zeitreihe schlägt einen Wert von mtry = 2 vor.

Interessant! Dann trainieren wir unseren Random Forest jetzt zweimal – einmal mit mtry = 2 und einmal mit mtry = 6. Danach vergleichen wir, welches Modell die bessere Vorhersage liefert!

mtrying it out!

# set up our empty forecast tibble
forecasts_rf <- tibble(
  mtry_holdout = rep(NA, horizon),
  mtry_kfold = rep(NA, horizon)
)

# collect the two mtry values from the tuning step
mtrys <- c(
  holdout_resultbestTune[[1]]
)

# train the model in a double loop
for (i in seq_len(length(mtrys))) {
  # start fresh for each mtry run
  y_train <- tax_ts_mbd[, 1] 
    X_train <- tax_ts_mbd[, -1] 

  # train the models
  for (j in seq_len(horizon)) {
    # set seed
    set.seed(2019)

    # fit the model
    fit_rf <- randomForest(X_train, y_train, mtry = mtrys[i])

    # predict using the test set
    forecasts_rf[j, i] <- predict(fit_rf, X_test)

    # here is where we repeatedly reshape the training data to reflect the time                            # distance corresponding to the current forecast horizon.
    y_train <- y_train[-1] 

    X_train <- X_train[-nrow(X_train), ] 
  }
}

Auch diesmal müssen wir unsere Vorhersagen rücktransformieren, um die Genauigkeit auf dem Testset zu berechnen. Dafür verwende ich purrr.

last_observation <- as.vector(tail(tax_ts_org, 1))

forecasts <- forecasts_rf %>% 
  purrr::map_df(function(x) exp(cumsum(x)) * last_observation)

accuracies <- forecasts %>% 
  purrr::map(function(x) accuracy(x, as.vector(y_test))) %>%
  do.call(rbind, .)

Und siehe da! k-fold-CV hat sich tatsächlich als besser erwiesen als unser Holdout-Ansatz. Sowohl RMSE als auch MAPE wurden reduziert. Wir haben sogar unser Ergebnis vom letzten Mal bestätigt, bei dem wir ebenfalls einen MAPE von 2,6 hatten. Zumindest in diesem Fall war es also völlig in Ordnung, Random Forest ohne spezielles Tuning einzusetzen.

ME RMSE MAE MPE MAPE
holdout 429258.4 484154.7 429258.4 4.709705 4.709705
k-fold 198307.5 352789.9 238652.6 2.273785 2.607773

Visualisieren wir das Ganze auch noch:

plot <- tax_tbl %>% 
  filter(Date >= "2018-01-01") %>% 
  mutate(
    Ground_Truth = Value / 10000,
    Forecast_Holdout = forecastsmtry_kfold / 10000,
  ) %>% 
  ggplot(aes(x = Date)) +
  geom_line(aes(y = Value / 10000, linetype = "Truth")) +
  geom_line(aes(y = Forecast_Holdout, color = "Holdout")) +
  geom_line(aes(y = Forecast_Kfold, color = "k-fold CV")) +
  theme_minimal()+
  labs(
    title = "Forecast of the German Wage and Income Tax for the Year 2018",
    x = "Months",
    y = "Euros"
  ) +
  scale_color_manual(
    name = "Forecasts",
    values = c("Truth" = "black", "Holdout" = "darkblue", "k-fold CV" = "orange")
  ) +
  scale_linetype_manual(name = "Original", values = c("Truth" = "dashed")) +
  scale_x_date(date_labels = "%b %Y", date_breaks = "2 months")

Wir sehen, dass die orangefarbene Linie, die die Vorhersagen des k-fold-CV-Modells repräsentiert, an mehreren Stellen enger an den echten Werten liegt.

tax-scaled.png

Fazit (TL;DR)

Das Tuning von ML-Modellen auf Zeitreihendaten kann aufwendig sein – muss es aber nicht. Wenn das Modell ausschließlich endogene Prädiktoren verwendet, also Lags der Zielvariable, hast du Glück! Dann kannst du ganz beruhigt die bekannte und bewährte k-fold-Cross-Validation verwenden, um deine Hyperparameter abzustimmen. Wenn du tiefer einsteigen willst, lies dir unbedingt das zitierte Originalpapier durch. Oder du schnappst dir einfach eine Zeitreihe deiner Wahl und schaust, ob du dein Modell durch ein bisschen Tuning verbessern kannst. So oder so – es ist auf jeden Fall besser, als die Steuererklärung zu machen!

Quellen

  • James, Gareth, et al. An Introduction to Statistical Learning. Vol. 112. New York: Springer, 2013.
  • Bergmeir, Christoph, und José M. Benítez. “On the use of cross-validation for time series predictor evaluation.” Information Sciences 191 (2012): 192–213.
Linkedin Logo
Marcel Plaschke
Head of Strategy, Sales & Marketing
Beratung vereinbaren
Zugehörige Leistungen
No items found.

Weitere Blogartikel

  • Coding
  • Python
  • Statistics & Methods
Ensemble-Methoden im maschinellen Lernen: Bagging & Subagging
Team statworx
15.4.2025
Mehr erfahren
  • Deep Learning
  • Python
  • Tutorial
Verwendung von Reinforcement Learning zum Spielen von Super Mario Bros auf NES mit TensorFlow
Sebastian Heinz
15.4.2025
Mehr erfahren
  • Data Science
  • Statistics & Methods
Modellregularisierung – The Bayesian Way
Thomas Alcock
15.4.2025
Mehr erfahren
  • Coding
  • Python
  • Statistics & Methods
Wie man Gradient Boosting um den Faktor Zwei beschleunigt
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • Frontend
  • R
Dynamische UI-Elemente in Shiny - Teil 2
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • R
Warum heißen sie so?! – Ursprung und Bedeutung von R-Paketnamen
Team statworx
15.4.2025
Mehr erfahren
  • Data Engineering
  • Python
Von überall aus auf deinen Spark-Cluster zugreifen – mit Apache Livy
Team statworx
15.4.2025
Mehr erfahren
  • Coding
  • Data Engineering
  • Data Science
Testen von REST-APIs mit Newman
Team statworx
14.4.2025
Mehr erfahren
  • Machine Learning
  • Python
  • R
XGBoost: Entscheidungsbaum vs. Lineares Modell
Fabian Müller
14.4.2025
Mehr erfahren
  • Data Science
  • R
Kombination von Preiselastizitäten und Verkaufsprognosen zur Verkaufssteigerung
Team statworx
14.4.2025
Mehr erfahren
  • Data Science
  • Machine Learning
  • R
Zeitreihenvorhersage mit Random Forest
Team statworx
14.4.2025
Mehr erfahren
  • Data Visualization
  • R
Gemeinschaftsdetektion mit Louvain und Infomap
Team statworx
14.4.2025
Mehr erfahren
  • Machine Learning
Machine Learning Goes Causal II: Der kausale Bruder des Random Forests
Team statworx
11.4.2025
Mehr erfahren
  • Coding
  • Data Visualization
  • R
Animierte Diagramme mit ggplot und gganimate
Team statworx
8.4.2025
Mehr erfahren
  • Artificial Intelligence
AI Trends Report 2025: Die 16 Trends im Überblick
Tarik Ashry
25.2.2025
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • GenAI
Wie ein CustomGPT Effizienz und Kreativität bei hagebau fördert
Tarik Ashry
15.1.2025
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
Explainable AI in der Praxis: Mit der richtigen Methode die Black Box öffnen
Jonas Wacker
15.1.2025
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 4)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 3)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 2)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Data Science
  • Deep Learning
  • GenAI
  • Machine Learning
AI Trends Report 2024: statworx COO Fabian Müller zieht eine Zwischenbilanz
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Maßgeschneiderte KI-Chatbots: Hohe Leistung und schnelle Integration vereint
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Zurück in die Zukunft: Die Geschichte von Generativer KI (Episode 1)
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Human-centered AI
KI in der Arbeitswelt: Wie wir Skepsis in Zuversicht verwandeln
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • GenAI
  • statworx
Generative KI als Denkmaschine? Ein medientheoretischer Blick
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Culture
  • Human-centered AI
Wie Führungskräfte die Datenkultur im Unternehmen stärken können
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
Wie wir für Microsoft einen Chatbot mit echtem Wissen entwickelt haben
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Data Visualization
  • Frontend Solution
Warum Frontend-Entwicklung in Data Science-Anwendungen nützlich ist
Jakob Gepp
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • statworx
the byte - Wie wir ein KI-gesteuertes Pop-up Restaurant aufgebaut haben
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • GenAI
Die Zukunft des Customer Service: Generative KI als Erfolgsfaktor
Tarik Ashry
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Der AI-Act ist da – diese Risikoklassen sollte man kennen
Fabian Müller
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
Genderdarstellung in der KI – Teil 2: Automatisierte Erzeugung genderneutraler Versionen von Gesichtsbildern
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Human-centered AI
  • Statistics & Methods
Die Black-Box entschlüsseln – 3 Explainable AI Methoden zur Vorbereitung auf den AI-Act
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Wie der AI-Act die KI-Branche verändern wird: Alles, was man jetzt darüber wissen muss
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Recap
  • statworx
Big Data & AI World 2023 Recap
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Statistics & Methods
Ein erster Einblick in unser Forecasting Recommender Tool
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
Vom Können, Tun und Wollen – Warum Datenkultur und Death Metal einiges miteinander gemeinsam haben
David Schlepps
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Wie man KI-generierte Avatare mit Hilfe von Stable Diffusion und Textual Inversion erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Strategy
Das Geheimnis der Datenkultur entschlüsseln: Diese Faktoren beeinflussen Kultur und Erfolg von Unternehmen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
GPT-4 – Eine Einordnung der wichtigsten Neuerungen
Mareike Flögel
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Strategy
Knowledge Management mit NLP: So einfach verarbeitet man E-Mails mit KI
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
3 Anwendungsfälle, wie ChatGPT die Kommunikation in Unternehmen revolutionieren wird
Ingo Marquart
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Machine Learning
  • Tutorial
Paradigmenwechsel in NLP: 5 Ansätze, um bessere Prompts zu schreiben
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Ho ho ho – weihnachtlicher Küchenabriss
Julius Heinz
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Real-time Computer Vision: Gesichter erkennen mit einem Roboter
Sarah Sester
6.12.2024
Mehr erfahren
  • Recap
  • statworx
statworx @ UXDX Conf 2022
Markus Berroth
6.12.2024
Mehr erfahren
  • Data Engineering
  • Tutorial
Data Engineering – From Zero to Hero
Thomas Alcock
6.12.2024
Mehr erfahren
  • Recap
  • statworx
statworx @ vuejs.de Conf 2022
Jakob Gepp
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
Überwachung und Protokollierung von Anwendungen und Infrastruktur: Metriken und (Ereignis-)Protokolle
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Python
Wie Du Deinen Code und Deine Abhängigkeiten in Python scannst
Thomas Alcock
6.12.2024
Mehr erfahren
  • Cloud Technology
  • Data Engineering
  • Data Science
Wie du dein Data Science Projekt fit für die Cloud machst
Alexander Broska
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
  • Machine Learning
Geschlechter­darstellung in der KI – Teil 1: Verwendung von StyleGAN zur Erforschung von Geschlechter­vielfalt bei der Bild­bearbeitung
Isabel Hermes
6.12.2024
Mehr erfahren
  • R
Das helfRlein Package – Eine Sammlung nützlicher Funktionen
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Data-Centric AI: Von Model-First zu Data-First KI-Prozessen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Human-centered AI
  • Machine Learning
DALL-E 2: Warum Diskriminierung in der KI-Entwicklung nicht ignoriert werden kann
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Human-centered AI
statworx AI Principles: Warum wir eigene KI-Prinzipien entwickeln
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
5 Highlights vom Digital Festival Zürich 2021
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Unfold 2022 in Bern – by Cleverclip
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Human-centered AI
  • Machine Learning
  • Strategy
Warum Data Science und KI-Initiativen scheitern – eine Reflektion zu nicht-technischen Faktoren
Team statworx
6.12.2024
Mehr erfahren
  • Machine Learning
  • Python
  • Tutorial
Wie man eine Machine Learning API mit Python und Flask erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
  • Machine Learning
Vorurteile in KI abbauen
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Cloud Technology
  • Data Science
  • Sustainable AI
Wie du als Data Scientist deinen KI CO₂ Fußabdruck verringerst
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Engineering
Automatisierte Erstellung von Docker Containern
Stephan Emmer
6.12.2024
Mehr erfahren
  • Coding
  • Data Visualization
  • R
Anpassung der Zeit- und Datumsskalen in ggplot2
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Machine Learning
5 Typen von Machine Learning Algorithmen (Mit Anwendungsfällen)
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Machine Learning
  • Python
Data Science in Python – Der Einstieg in Machine Learning mit Scikit-Learn
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
2022 und die Reise zu statworx next
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Recap
  • statworx
Als Data Science Praktikant bei statworx
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Science
  • Python
Wie man mit Call Graph automatisch Projektgrafiken erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Human-centered AI
  • Machine Learning
  • statworx
Kolumne: Mensch und Maschine Seite an Seite
Sebastian Heinz
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Machine Learning Modelle bereitstellen und skalieren mit Kubernetes
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Python
  • Tutorial
statworx Cheatsheets – Python Basics Cheatsheet für Data Science
Team statworx
6.12.2024
Mehr erfahren
  • Cloud Technology
  • Data Engineering
  • Machine Learning

3 Szenarien zum Deployment von Machine Learning Workflows mittels MLflow
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • statworx
  • Strategy
STATWORX meets DHBW – Data Science Real-World Use Cases
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Deep Learning
Car Model Classification I: Transfer Learning mit ResNet
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
Car Model Classification IV: Integration von Deep Learning Modellen mit Dash
Dominique Lade
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning

Car Model Classification III: Erklärbarkeit von Deep Learning Modellen mit Grad-CAM
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Coding
  • Deep Learning
Car Model Classification II: Deployment von TensorFlow-Modellen in Docker mit TensorFlow Serving
Team statworx
6.12.2024
Mehr erfahren
  • AI Act
Potenzial noch nicht ausgeschöpft – Ein Kommentar zur vorgeschlagenen KI-Regulierung der EU
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • statworx
Creaition – Revolutionierung des Designprozesses mit Machine Learning
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Deep Learning
Die 5 wichtigsten Use Cases für Computer Vision
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Data Science
  • Machine Learning
Generative Adversarial Networks: Wie mit Neuronalen Netzen Daten generiert werden können
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
5 Technologien, die jeder Data Engineer kennen sollte
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
  • Machine Learning
5 praxisnahe Beispiele für NLP Use Cases
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Science
  • Deep Learning
Finetuning von Tesseract-OCR für deutsche Rechnungen
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Deep Learning
Neue Trends im Natural Language Processing – Wie NLP massentauglich wird
Dominique Lade
6.12.2024
Mehr erfahren
  • Data Engineering
  • Data Science
  • Machine Learning
Machine Learning Modelle mit Hilfe von Docker Containern bereitstellen
Thomas Alcock
6.12.2024
Mehr erfahren
  • Frontend
  • Python
  • Tutorial
Wie Du ein Dashboard In Python baust – Plotly Dash Step-by-Step Tutorial
Alexander Blaufuss
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Machine Learning
Whitepaper: Ein Reifegradmodell für Künstliche Intelligenz
Team statworx
6.12.2024
Mehr erfahren
  • Data Engineering
  • R
  • Tutorial
Wie Du ShinyApps in Docker-Images einbauen kannst
Team statworx
6.12.2024
Mehr erfahren
  • Recap
  • statworx
STATWORX 2.0 – Das neue Headquarter in Frankfurt ist eröffnet
Julius Heinz
6.12.2024
Mehr erfahren
  • Coding
  • Python
Web Scraping 101 in Python mit Requests & BeautifulSoup
Team statworx
6.12.2024
Mehr erfahren
  • Artificial Intelligence
  • Deep Learning
Deep Learning – Überblick und Einstieg
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • R
  • Statistics & Methods
Wie man eine Kreuzvalidierung zur Evaluation der Modellperformance von Grund auf selbst erstellt
Team statworx
6.12.2024
Mehr erfahren
  • Machine Learning
  • R
  • Statistics & Methods
Was dem MAPE fälschlicherweise vorgeworfen wird, seine WAHREN Schwächen und BESSERE Alternativen!
Team statworx
6.12.2024
Mehr erfahren
  • Data Visualization
  • R
Interaktive Netzwerkvisualisierung mit R
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Tutorial
Eine Einführung in Dataiku DSS
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Visualization
  • Python
Das häufigste Problem mit Plotly Histograms und wie man es löst
Team statworx
6.12.2024
Mehr erfahren
  • Coding
  • Data Engineering
  • R
Wie Du ein R-Skript in Docker ausführst
Team statworx
6.12.2024
Mehr erfahren
  • Data Science
  • Data Visualization
  • Python
Data Science in Python – Matplotlib – Teil 4
Team statworx
6.12.2024
Mehr erfahren
This is some text inside of a div block.
This is some text inside of a div block.