Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (2023)

  • Artikel

In diesem Artikel werden die nycflights13-Daten verwendet, um vorherzusagen, ob ein Flugzeug mehr als 30 Minuten zu spät ankommt. Anschließend verwenden wir die Vorhersageergebnisse, um eine interaktive Power BI-Dashboard zu erstellen.

Wichtig

Microsoft Fabric befindet sich derzeit in der Vorschauversion. Diese Informationen beziehen sich auf eine Vorabversion des Produkts, an der vor der Veröffentlichung noch wesentliche Änderungen vorgenommen werden können. Microsoft übernimmt keine Garantie, weder ausdrücklich noch stillschweigend, für die hier bereitgestellten Informationen.

In diesem Tutorial lernen Sie Folgendes:

  • Verwenden Sie tidymodels-Pakete wie Rezepte, Parsnip, Rsample , Workflows , um Daten zu verarbeiten und ein Machine Learning-Modell zu trainieren.
  • Schreiben Sie die Ausgabedaten als Deltatabelle in lakehouse.
  • Erstellen Sie einen visuellen Power BI-Bericht über den Modus "Durchsehen" direkt auf Daten in Ihrem Lakehouse zugreifen.

Voraussetzungen

  • Ein Power BI Premium-Abonnement. Wenn Sie noch keines haben, finden Sie weitere Informationen unter So erwerben Sie Power BI Premium.

  • Ein Power BI-Arbeitsbereich mit zugewiesener Premium-Kapazität. Wenn Sie keinen Arbeitsbereich haben, führen Sie die Schritte unter Erstellen eines Arbeitsbereichs aus, um einen Arbeitsbereich zu erstellen und ihn einer Premium-Kapazität zuzuweisen.

  • Melden Sie sich bei Microsoft Fabric an.

  • Öffnen oder erstellen Sie ein Notebook. Weitere Informationen finden Sie unter Verwenden von Microsoft Fabric-Notebooks.

  • Ändern Sie die primäre Sprache, indem Sie die Sprachoption auf SparkR (R) festlegen.

  • Schließen Sie Ihr Notebook an ein Lakehouse an. Wählen Sie auf der linken Seite Hinzufügen aus, um ein vorhandenes Lakehouse hinzuzufügen oder ein Lakehouse zu erstellen.

  • Schließen Sie Ihr Notebook an ein Lakehouse an. Wählen Sie auf der linken Seite Hinzufügen aus, um ein vorhandenes Lakehouse hinzuzufügen oder ein Lakehouse zu erstellen.

Paket installieren

Um Code in diesem Artikel zu verwenden, installieren Sie das Paket nycflights13.

install.packages("nycflights13")
# load the packageslibrary(tidymodels) # for tidymodels packageslibrary(nycflights13) # for flight data

Durchsuchen von Daten

Die nycflights13 Daten enthalten Informationen zu 325.819 Flügen in der Nähe von New York City im Jahr 2013. Sehen wir uns zunächst die Verteilung von Flugverspätungen an. Die folgende Abbildung zeigt, dass die Verteilung der Ankunftsverzögerung richtig verzerrt ist, sie hat einen langen Schwanz in den hohen Werten.

ggplot(flights, aes(arr_delay)) + geom_histogram(color="blue", bins = 300)

Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (1)

Laden Sie die Daten, und nehmen Sie einige Änderungen an den Variablen vor:

set.seed(123)flight_data <- flights %>% mutate( # convert the arrival delay to a factor arr_delay = ifelse(arr_delay >= 30, "late", "on_time"), arr_delay = factor(arr_delay), # we will use the date (not date-time) in the recipe below date = lubridate::as_date(time_hour) ) %>% # include the weather data inner_join(weather, by = c("origin", "time_hour")) %>% # only retain the specific columns we will use select(dep_time, flight, origin, dest, air_time, distance, carrier, date, arr_delay, time_hour) %>% # exclude missing data na.omit() %>% # for creating models, it is better to have qualitative columns # encoded as factors (instead of character strings) mutate_if(is.character, as.factor)

Bevor Sie mit dem Erstellen Ihres Modells beginnen, werfen wir einen kurzen Blick auf einige bestimmte Variablen, die sowohl für die Vorverarbeitung als auch für die Modellierung wichtig sind.

Beachten Sie, dass die aufgerufene arr_delay Variable eine Faktorvariable ist. iEs ist wichtig, dass Ihre Ergebnisvariable für das Trainieren eines logistischen Regressionsmodells ein Faktor ist.

glimpse(flight_data)

Sie sehen, dass etwa 16 % der Flüge in diesem Dataset mehr als 30 Minuten verspätet eintrafen.

flight_data %>% count(arr_delay) %>% mutate(prop = n/sum(n))

In sind 104 Flugziele enthalten dest.

unique(flight_data$dest)

Es gibt 16 verschiedene Carrier.

unique(flight_data$carrier)

Datenteilung

Um zu beginnen, teilen Sie dieses einzelne Dataset in zwei auf: einen Trainingssatz und einen Testsatz . Behalten Sie die meisten Zeilen im ursprünglichen Dataset (Teilmenge zufällig ausgewählt) im Trainingssatz bei. Die Trainingsdaten werden zum Anpassen des Modells verwendet, und der Testsatz wird verwendet, um die Modellleistung zu messen.

Verwenden Sie das rsample Paket, um ein -Objekt zu erstellen, das die Informationen zum Aufteilen der Daten enthält, und dann zwei weitere rsample Funktionen zum Erstellen von Datenrahmen für die Trainings- und Testsätze:

set.seed(123)# keep most of the data into the training set data_split <- initial_split(flight_data, prop = 0.75)# create data frames for the two sets:train_data <- training(data_split)test_data <- testing(data_split)

Erstellen von Rezepten und Rollen

Erstellen Sie ein Rezept für ein einfaches logistisches Regressionsmodell. Verwenden Sie vor dem Trainieren des Modells ein Rezept, um einige neue Prädiktoren zu erstellen und einige für das Modell erforderliche Vorverarbeitung durchzuführen.

Verwenden Sie die update_role() Funktion, um Rezepte darüber zu informieren, dass flight und time_hour Variablen mit einer benutzerdefinierten Rolle namens ID sind (eine Rolle kann einen beliebigen Zeichenwert haben). Die Formel enthält alle Variablen im Trainingssatz außer arr_delay als Prädiktoren. Das Rezept behält diese beiden ID-Variablen bei, verwendet sie jedoch nicht als Ergebnisse oder Prädiktoren.

flights_rec <- recipe(arr_delay ~ ., data = train_data) %>% update_role(flight, time_hour, new_role = "ID") 

Verwenden Sie summary() die Funktion, um den aktuellen Satz von Variablen und Rollen anzuzeigen:

summary(flights_rec)

Erstellen von Features

Führen Sie einige Featureentwicklung durch, um Ihr Modell zu verbessern. Möglicherweise ist es sinnvoll, dass sich das Datum des Fluges auf die Wahrscheinlichkeit einer verspäteten Ankunft auswirkt.

flight_data %>% distinct(date) %>% mutate(numeric_date = as.numeric(date)) 

Es kann besser sein, Modellbegriffe hinzuzufügen, die vom Datum abgeleitet werden und ein besseres Potenzial haben, für das Modell wichtig zu sein. Leiten Sie die folgenden aussagekräftigen Features aus der einzelnen Datumsvariablen ab:

  • Wochentag
  • Month (Monat)
  • Gibt an, ob das Datum einem Urlaub entspricht oder nicht.

Führen Sie alle drei Schritte aus, indem Sie Ihrem Rezept Schritte hinzufügen:

flights_rec <- recipe(arr_delay ~ ., data = train_data) %>% update_role(flight, time_hour, new_role = "ID") %>% step_date(date, features = c("dow", "month")) %>% step_holiday(date, holidays = timeDate::listHolidays("US"), keep_original_cols = FALSE) %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors())

Anpassen eines Modells mit einem Rezept

Verwenden Sie die logistische Regression, um die Flugdaten zu modellieren. Beginnen Sie mit dem Erstellen der Modellspezifikation mit dem parsnip Paket:

lr_mod <- logistic_reg() %>% set_engine("glm")

Verwenden Sie dann das workflows Paket, um Ihr parsnip Modell (lr_mod) mit Ihrem Rezept (flights_rec) zu bündeln.

flights_wflow <- workflow() %>% add_model(lr_mod) %>% add_recipe(flights_rec)flights_wflow

Trainieren des Modells

Hier sehen Sie eine einzelne Funktion, die verwendet werden kann, um das Rezept vorzubereiten und das Modell anhand der resultierenden Prädiktoren zu trainieren:

flights_fit <- flights_wflow %>% fit(data = train_data)

Verwenden Sie die Hilfsfunktionen xtract_fit_parsnip() und extract_recipe() , um das Modell oder die Rezeptobjekte aus dem Workflow zu extrahieren. Hier ziehen Sie z. B. das angepasste Modellobjekt und verwenden dann die broom::tidy() Funktion, um ein ordentliches Tibble der Modellkoeffizienten zu erhalten:

flights_fit %>% extract_fit_parsnip() %>% tidy()

Vorhersagen von Ergebnissen

Verwenden Sie nun den trainierten Workflow (flights_fit), um mit den nicht angezeigten Testdaten vorherzusagen, was Sie mit einem einzelnen Aufruf von predict()tun. Die predict() Methode wendet das Rezept auf die neuen Daten an und übergibt sie dann an das angepasste Modell.

predict(flights_fit, test_data)

Rufen Sie nun die Ausgabe ab, um predict() die vorhergesagte Klasse zurückzugeben: late versus on_time. Wenn Sie stattdessen die vorhergesagten Klassenwahrscheinlichkeiten für jeden Flug möchten, verwenden Sie augment() mit dem Modell plus Testdaten, um sie zusammen zu speichern:

flights_aug <- augment(flights_fit, test_data)

Die Daten sehen wie folgt aus:

glimpse(flights_aug)

Evaluieren des Modells

Jetzt haben Sie ein Tibble mit Ihren vorhergesagten Klassenwahrscheinlichkeiten. In diesen ersten Zeilen sehen Sie, dass Ihr Modell 5 Zeitflüge korrekt vorhergesagt hat (Werte von .pred_on_time sind p > 0,50). Sie wissen aber auch, dass wir insgesamt 81.455 Zeilen vorherzusagen haben.

Sie möchten eine Metrik, die angibt, wie gut Ihr Modell Spätankünfte vorhergesagt hat, im Vergleich zum wahren status Ihrer Ergebnisvariablen. arr_delay

Verwenden Sie den Bereich unter der ROC-Kurve als Metrik, die mit roc_curve() und roc_auc() aus dem yardstick Paket berechnet wird.

flights_aug %>% roc_curve(truth = arr_delay, .pred_late) %>% autoplot()

Erstellen eines PowerBI-Berichts

Das Modellergebnis ist nicht schlecht! Verwenden Sie die Ergebnisse der Flugverspätungsvorhersage, um eine interaktive Power BI-Dashboard zu erstellen, die die Anzahl der Flüge nach Fluggesellschaft und die Anzahl der Flüge nach Ziel anzeigt. Die Dashboard kann auch nach den Verzögerungsvorhersageergebnissen filtern.

Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (2)

Fügen Sie zunächst den Namen der Fluggesellschaft und den Flughafennamen in das Dataset für das Vorhersageergebnis ein.

 flights_clean <- flights_aug %>% # include the airline data left_join(airlines, c("carrier"="carrier"))%>% rename("carrier_name"="name") %>% # include the airports data for origin left_join(airports, c("origin"="faa")) %>% rename("origin_name"="name") %>% # include the airports data for destination left_join(airports, c("dest"="faa")) %>% rename("dest_name"="name") %>% # only retain the specific columns we will use select(flight, origin, origin_name, dest,dest_name, air_time,distance, carrier, carrier_name, date, arr_delay, time_hour, .pred_class, .pred_late, .pred_on_time)

Die Daten sehen wie folgt aus:

glimpse(flights_clean)

Konvertieren Sie die Daten in den Spark-Datenrahmen:

sparkdf <- as.DataFrame(flights_clean)display(sparkdf)

Schreiben Sie die Daten in eine Deltatabelle auf Ihrem Lakehouse:

# write data into delta tabletemp_delta<-"Tables/nycflight13"write.df(sparkdf, temp_delta ,source="delta", mode = "overwrite", header = "true")

Sie können diese Tabelle jetzt verwenden, um ein Power BI-Dataset zu erstellen.

  1. Wählen Sie links OneLake Data Hub aus.

  2. Wählen Sie das Lakehouse aus, das Sie ihrem Notebook angefügt haben.

  3. Wählen Sie oben rechts Öffnen aus.

    Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (3)

  4. Wählen Sie oben Neues Power BI-Dataset aus.

  5. Wählen Sie nycflight13 für Ihr neues Dataset und dann Bestätigen aus.

  6. Ihr Power BI-Dataset wird erstellt. Wählen Sie oben Neuer Bericht aus.

  7. Wählen Oder ziehen Sie Felder aus den Daten- und Visualisierungsbereichen auf den Berichtsbereich, um Ihren Bericht zu erstellen.

Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (4)

Verwenden Sie die folgenden Visualisierungen und Daten, um den am Anfang dieses Abschnitts angezeigten Bericht zu erstellen:

  1. Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (5) Gestapeltes Barchart mit:
    1. Y-Achse: carrier_name.
    2. X-Achse: Flight. Wählen Sie Count (Anzahl ) für die Aggregation aus.
    3. Legende: origin_name
  2. Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (6) Gestapeltes Barchart mit:
    1. Y-Achse: dest_name.
    2. X-Achse: Flight. Wählen Sie Count (Anzahl ) für die Aggregation aus.
    3. Legende: origin_name.
  3. Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (7) Slicer mit:
    1. Feld: _pred_class
  4. Tutorial: Vorhersagen von Flugverspätungen mit R - Microsoft Fabric (8) Slicer mit:
    1. Feld: _pred_late

Nächste Schritte

  • Verwenden von SparkR
  • Verwenden von Sparklyr
  • Verwenden von Tidyverse
  • R-Bibliotheksverwaltung
  • Visualisieren von Daten in R
  • Tutorial: Avocado-Preisvorhersage
Top Articles
Latest Posts
Article information

Author: Twana Towne Ret

Last Updated: 01/05/2023

Views: 5506

Rating: 4.3 / 5 (64 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.