Járatkésés előrejelzése

Ez a cikk a nycflights13 adatait használja annak előrejelzésére, hogy egy repülő 30 percnél hosszabb késéssel érkezik-e. Ezt követően az előrejelzési eredmények alapján létrehozunk egy interaktív Power BI-irányítópultot.

Fontos

A Microsoft Fabric jelenleg előzetes verzióban érhető el. Ezek az információk egy előzetes termékre vonatkoznak, amely a kiadás előtt lényegesen módosítható. A Microsoft nem vállal kifejezett vagy vélelmezett garanciát az itt megadott információkra vonatkozóan.

Eben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Az adatok feldolgozásához és gépi tanulási modell betanításához használjon tidymodels-csomagokat, például recepteket, elemzéseket, rsample-munkafolyamatokat.
  • Írja be a kimeneti adatokat a lakehouse-ba delta táblaként.
  • Hozzon létre egy Power BI-vizualizációs jelentést a See Through mód használatával, amely közvetlenül hozzáfér az adatokhoz a tóházban.

Előfeltételek

  • Nyisson meg vagy hozzon létre egy jegyzetfüzetet. További információ: A Microsoft Fabric-jegyzetfüzetek használata.

  • Módosítsa az elsődleges nyelvet úgy, hogy a nyelvi beállítástSparkR (R) értékre állítja.

  • Csatolja a jegyzetfüzetet egy tóházhoz. A bal oldalon válassza a Hozzáadás lehetőséget egy meglévő tóház hozzáadásához vagy egy tóház létrehozásához.

  • Csatolja a jegyzetfüzetet egy tóházhoz. A bal oldalon válassza a Hozzáadás lehetőséget egy meglévő tóház hozzáadásához vagy egy tóház létrehozásához.

Csomag telepítése

A jelen cikkben szereplő kód használatához telepítse a nycflights13 csomagot.

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

Adatfeltárás

Az nycflights13 adatok 325 819 new york-i járatról tartalmaznak információkat 2013-ban. Először vessünk egy pillantást a járatkésés eloszlására. Az alábbi ábra azt mutatja, hogy az érkezési késleltetés eloszlása jobbra ferde, hosszú farkú a magas értékekben.

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

A repülési késés grafikonja.

Töltse be az adatokat, és végezze el a változók néhány módosítását:

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)

Mielőtt elkezdené felépíteni a modellt, vessünk egy pillantást néhány olyan változóra, amelyek mind az előfeldolgozás, mind a modellezés szempontjából fontosak.

Figyelje meg, hogy a hívott arr_delay változó egy tényezőváltozó. Az iIt fontos, hogy a logisztikai regressziós modell betanításának eredményváltozója tényező legyen.

glimpse(flight_data)

Láthatja, hogy az adatkészletben lévő járatok körülbelül 16%-a több mint 30 percet késett.

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

A(z) 104 járatcélpontot tartalmaz.dest

unique(flight_data$dest)

16 különböző szolgáltató létezik.

unique(flight_data$carrier)

Adatok felosztása

Első lépésként ossza fel ezt az adatkészletet két részre: egy betanítási készletre és egy tesztelési csoportra. Tartsa meg a legtöbb sort az eredeti adatkészletben (véletlenszerűen kiválasztott részhalmaz) a betanítási csoportban. A betanítási adatok a modellhez illeszkednek, a tesztelési készlet pedig a modell teljesítményének mérésére szolgál.

rsample A csomag használatával hozzon létre egy objektumot, amely tartalmazza az adatok felosztásával kapcsolatos információkat, majd két további rsample függvényt a betanítási és tesztelési csoportok adatkereteinek létrehozásához:

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)

Recept és szerepkörök létrehozása

Hozzon létre egy receptet egy egyszerű logisztikai regressziós modellhez. A modell betanítása előtt használjon egy receptet néhány új prediktor létrehozásához és a modell által igényelt előfeldolgozás végrehajtásához.

A függvény segítségével tudathatja a update_role() receptekkel, hogy flight és time_hour olyan változók, amelyeknek egy nevű ID egyéni szerepkörük van (a szerepkörök bármilyen karakterértékűek lehetnek). A képlet a betanítási készletben szereplő összes változót tartalmazza, a prediktorok kivételével arr_delay . A recept megtartja ezt a két azonosítóváltozót, de nem használja őket eredményként vagy előrejelzőként.

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

A változók és szerepkörök aktuális készletének megtekintéséhez használja a függvényt summary() :

summary(flights_rec)

Szolgáltatások létrehozása

A modell fejlesztéséhez végezze el a funkciófejlesztést. Talán ésszerű, hogy a járat dátuma befolyásolja a késői érkezés valószínűségét.

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

Érdemesebb lehet olyan modellkifejezéseket hozzáadni, amelyek a modell szempontjából fontos dátumból származnak. Az egydátum változóból a következő értelmes jellemzők származtathatóak:

  • A hét napja
  • Month (hónap)
  • Azt jelzi, hogy a dátum megfelel-e egy ünnepnapnak.

Végezze el mind a három lépést a recept lépéseinek hozzáadásával:

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())

Modell igazítása recepttel

Logisztikai regresszióval modellezheti a repülési adatokat. Első lépésként a csomag használatával kell felépíteni a modell specifikációját parsnip :

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

Ezután a workflows csomaggal csomagolja be a parsnip modellt (lr_mod) a receptjéhez (flights_rec).

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

flights_wflow

A modell betanítása

Íme egy egyetlen függvény, amely a recept előkészítésére és a modell betanítására használható az eredményül kapott prediktorokból:

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

Használja a segédfüggvényeket xtract_fit_parsnip() , és extract_recipe() nyerje ki a modell- vagy receptobjektumokat a munkafolyamatból. Itt például lekérheti a beszerelt modellobjektumot, majd a broom::tidy() függvénnyel a modell együtthatóinak rendezett tava jelenik meg:

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

Eredmények előrejelzése

Most használja a betanított munkafolyamatot (flights_fit) a nem látható tesztadatok előrejelzéséhez, amelyeket egyetlen hívással hajthat végre.predict() A predict() metódus alkalmazza a receptet az új adatokra, majd átadja azokat a beszerelt modellnek.

predict(flights_fit, test_data)

Most szerezze be a kimenetet az előrejelzett osztály visszaadása predict() után: late kontra on_time. Ha inkább az egyes járatok előrejelzett osztály-valószínűségeit szeretné használni, a modell és a tesztadatok együttes mentéséhez használja augment() őket:

flights_aug <- 
  augment(flights_fit, test_data)

Az adatok a következőképpen néznek ki:

glimpse(flights_aug)

A modell értékelése

Most már van egy árva az előrejelzett osztály valószínűségeivel. Az első néhány sorból láthatja, hogy a modell 5-öt jósolt az idő szerinti repülések során (az értékek .pred_on_time p > 0,50). De azt is tudja, hogy összesen 81 455 sort kell előrejelezni.

Olyan metrikát szeretne, amely megmutatja, hogy a modell milyen jól előrejelezte a késéseket az eredményváltozó valós állapotához képest. arr_delay

Használja az ROC-görbe alatti területet metrikaként, amelyet a csomag és a yardstick csomag alapján roc_curve()roc_auc() számítunk ki.

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

Power BI-jelentés létrehozása

A modell eredménye nem túl rossz! A járatkésés előrejelzési eredményeivel interaktív Power BI-irányítópultot hozhat létre, amelyen a járatok száma szolgáltatónként és a járatok száma cél szerint látható. Az irányítópult a késés előrejelzési eredményei alapján is képes szűrni.

Power BI-jelentés grafikonja.

Először adja meg a szolgáltató nevét és a repülőtér nevét az előrejelzési eredményadatkészlethez.

  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)

Az adatok a következőképpen néznek ki:

glimpse(flights_clean)

Konvertálja az adatokat Spark-adatkeretté:

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

Írja be az adatokat egy delta táblába a tóházban:

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

Ezzel a táblával power BI-adatkészletet hozhat létre.

  1. A bal oldalon válassza a OneLake adatközpont lehetőséget.

  2. Válassza ki a jegyzetfüzethez csatolt Lakehouse-t.

  3. A jobb felső sarokban válassza a Megnyitás lehetőséget.

    Képernyőkép a tóház megnyitásának helyéről.

  4. Felül válassza az Új Power BI-adatkészlet lehetőséget.

  5. Válassza a nycflight13 lehetőséget az új adathalmazhoz, majd válassza a Megerősítés lehetőséget.

  6. Létrejön a Power BI-adatkészlet. A tetején válassza az Új jelentés lehetőséget.

  7. A jelentés létrehozásához jelöljön ki vagy húzzon mezőket az adat- és vizualizációpanelekről a jelentésvászonra.

Power BI-adathalmaz grafikonja.

A szakasz elején látható jelentés létrehozásához használja az alábbi vizualizációkat és adatokat:

  1. Halmozott sávdiagram a következővel:
    1. Y tengely: carrier_name.
    2. X tengely: repülés. Az összesítéshez válassza a Darabszám lehetőséget.
    3. Jelmagyarázat: origin_name
  2. Halmozott sávdiagram a következővel:
    1. Y tengely: dest_name.
    2. X tengely: repülés. Az összesítéshez válassza a Darabszám lehetőséget.
    3. Jelmagyarázat: origin_name.
  3. Szeletelő a következővel:
    1. Mező: _pred_class
  4. Szeletelő a következővel:
    1. Mező: _pred_late

Következő lépések