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
Egy Power BI Premium előfizetés. Ha nincs ilyenje, olvassa el a Vásárlás Power BI Premium című témakört.
Egy Power BI-munkaterület hozzárendelt prémium szintű kapacitással. Ha nincs munkaterülete, a Munkaterület létrehozása lépésekkel hozzon létre egyet, és rendelje hozzá egy Prémium szintű kapacitáshoz.
Jelentkezzen be a Microsoft Fabricbe.
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)
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.
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.
A bal oldalon válassza a OneLake adatközpont lehetőséget.
Válassza ki a jegyzetfüzethez csatolt Lakehouse-t.
A jobb felső sarokban válassza a Megnyitás lehetőséget.
Felül válassza az Új Power BI-adatkészlet lehetőséget.
Válassza a nycflight13 lehetőséget az új adathalmazhoz, majd válassza a Megerősítés lehetőséget.
Létrejön a Power BI-adatkészlet. A tetején válassza az Új jelentés lehetőséget.
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.
A szakasz elején látható jelentés létrehozásához használja az alábbi vizualizációkat és adatokat:
Halmozott sávdiagram a következővel:
- Y tengely: carrier_name.
- X tengely: repülés. Az összesítéshez válassza a Darabszám lehetőséget.
- Jelmagyarázat: origin_name
Halmozott sávdiagram a következővel:
- Y tengely: dest_name.
- X tengely: repülés. Az összesítéshez válassza a Darabszám lehetőséget.
- Jelmagyarázat: origin_name.
Szeletelő a következővel:
- Mező: _pred_class
Szeletelő a következővel:
- Mező: _pred_late