Oktatóanyag: R használata a repülési késés előrejelzéséhez
Ez az oktatóanyag a Synapse Adattudomány munkafolyamatának végpontok közötti példáját mutatja be a Microsoft Fabricben. A nycflights13 adatokat és az R-t használja annak előrejelzésére, hogy egy repülő több mint 30 perc késéssel érkezik-e. Ezután az előrejelzési eredmények alapján interaktív Power BI-irányítópultot hoz létre.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- Tidymodels-csomagok (receptek, elemzések, rsample, munkafolyamatok) használata az adatok feldolgozásához és egy gépi tanulási modell betanításához
- A kimeneti adatok írása egy tóházba deltatáblaként
- Power BI-vizualizációs jelentés készítése a tóházban lévő adatok közvetlen eléréséhez
Előfeltételek
Microsoft Fabric-előfizetés lekérése. Vagy regisztráljon egy ingyenes Microsoft Fabric-próbaverzióra.
A kezdőlap bal oldalán található élménykapcsolóval válthat a Synapse Adattudomány felületre.
Nyisson meg vagy hozzon létre egy jegyzetfüzetet. A Microsoft Fabric-jegyzetfüzetek használatáról további információt a Microsoft Fabric-jegyzetfüzetek használata című témakörben talál.
Állítsa a nyelvi beállítást SparkR (R) értékre az elsődleges nyelv módosítá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.
Csomagok telepítése
Telepítse a nycflights13 csomagot az oktatóanyagban szereplő kód használatához.
install.packages("nycflights13")
# Load the packages
library(tidymodels) # For tidymodels packages
library(nycflights13) # For flight data
Az adatok feltárása
Az nycflights13
adatok 325 819 járatról tartalmaznak információt, amelyek 2013-ban érkeztek New York city közelében. Először tekintse meg a repülési késések eloszlását. Ez a grafikon azt mutatja, hogy az érkezési késések eloszlása megfelelő. Hosszú farka van a magas értékekben.
ggplot(flights, aes(arr_delay)) + geom_histogram(color="blue", bins = 300)
Töltse be az adatokat, és módosítsa a változókat:
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),
# You'll use the date (not date-time) for the recipe that you'll create
date = lubridate::as_date(time_hour)
) %>%
# Include weather data
inner_join(weather, by = c("origin", "time_hour")) %>%
# Retain only the specific columns that you'll 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's better to have qualitative columns
# encoded as factors (instead of character strings)
mutate_if(is.character, as.factor)
A modell létrehozása előtt fontolja meg néhány konkrét változót, amelyek mind az előfeldolgozás, mind a modellezés szempontjából fontosak.
A változó arr_delay
egy tényezőváltozó. A logisztikai regressziós modell betanításához fontos, hogy az eredményváltozó tényezőváltozó legyen.
glimpse(flight_data)
Az adathalmaz járatainak körülbelül 16%-a több mint 30 perccel később érkezett.
flight_data %>%
count(arr_delay) %>%
mutate(prop = n/sum(n))
A dest
szolgáltatás 104 járatcélponttal rendelkezik.
unique(flight_data$dest)
16 különböző szállító létezik.
unique(flight_data$carrier)
Az adatok felosztása
Ossza fel az egyetlen adatkészletet két halmazra: egy betanítási csoportra és egy tesztelési csoportra. A betanítási adathalmazban tartsa az eredeti adatkészlet legtöbb sorát (véletlenszerűen kiválasztott részhalmazként). A betanítási adatkészlet használatával illeszkedjen a modellhez, és a tesztadatkészlet használatával mérje a modell teljesítményét.
rsample
A csomag használatával létrehozhat egy objektumot, amely információkat tartalmaz az adatok felosztásáról. Ezután két további rsample
függvény használatával hozzon létre DataFrame-eket a betanítási és tesztelési csoportokhoz:
set.seed(123)
# Keep most of the data in the training set
data_split <- initial_split(flight_data, prop = 0.75)
# Create DataFrames for the two sets:
train_data <- training(data_split)
test_data <- testing(data_split)
Recept és szerepkörök létrehozása
Egyszerű logisztikai regressziós modell receptjének létrehozása. A modell betanítása előtt egy recept segítségével hozzon létre új prediktorokat, és végezze el a modell által igényelt előfeldolgozást.
Használja a függvénytupdate_role()
, hogy a receptek tudják, és flight
time_hour
változók legyenek, egy egyéni szerepkörrel.ID
A szerepkörök bármilyen karakterértékűek lehetnek. A képlet a betanítási csoportban 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éské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 következő függvényt summary()
:
summary(flights_rec)
Funkciók létrehozása
Végezze el a funkciófejlesztést a modell fejlesztéséhez. A repülési dátum ésszerű hatással lehet a késői érkezés valószínűségére.
flight_data %>%
distinct(date) %>%
mutate(numeric_date = as.numeric(date))
Segíthet a modell azon dátumából származtatott modellkifejezések hozzáadásában, amelyek potenciálisan fontosak lehetnek a modell számára. Az egydátum változóból az alábbi hasznos funkciók származtathatóak:
- A hét napja
- Hónap
- Attól függetlenül, hogy a dátum egy ünnepnek felel-e meg
Adja hozzá a három lépést a recepthez:
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. Először hozzon létre egy modellspecifikációt a parsnip
csomaggal:
lr_mod <-
logistic_reg() %>%
set_engine("glm")
workflows
A csomag használatával csomagolja be a parsnip
modellt (lr_mod
) a receptjével (flights_rec
):
flights_wflow <-
workflow() %>%
add_model(lr_mod) %>%
add_recipe(flights_rec)
flights_wflow
A modell betanítása
Ez a függvény előkészíti a receptet, és betanítsa a modellt az eredményként kapott prediktorokból:
flights_fit <-
flights_wflow %>%
fit(data = train_data)
Használja a segédfüggvényeket xtract_fit_parsnip()
, és extract_recipe()
bontsa ki a modell- vagy receptobjektumokat a munkafolyamatból. Ebben a példában húzza le a beépített modellobjektumot, majd használja a függvényt a broom::tidy()
modell együtthatóinak rendezett csempéjének lekéréséhez:
flights_fit %>%
extract_fit_parsnip() %>%
tidy()
Eredmények előrejelzése
Egyetlen hívás a predict()
betanított munkafolyamat (flights_fit
) használatával előrejelzéseket készít a nem látható tesztadatokkal. A predict()
módszer alkalmazza a receptet az új adatokra, majd átadja az eredményeket a beépített modellnek.
predict(flights_fit, test_data)
A kimenet predict()
lekérése az előrejelzett osztály visszaadásához: late
versus on_time
. Az egyes repülések előrejelzett osztály-valószínűségeihez azonban a augment()
modellel együtt, a tesztadatokkal kombinálva mentse őket együtt:
flights_aug <-
augment(flights_fit, test_data)
Tekintse át az adatokat:
glimpse(flights_aug)
A modell értékelése
Most már van egy kavics az előrejelzett osztály valószínűségeivel. Az első néhány sorban a modell helyesen előrejelzett öt helyszíni járatot (az .pred_on_time
értékek a következők p > 0.50
). Összesen azonban 81 455 sort kell előrejelezni.
Szükségünk van egy metrika, amely megmutatja, hogy a modell milyen jól előrejelezte a késői érkezéseket az eredményváltozó arr_delay
valós állapotához képest.
Metrikaként használja a görbevevő működési jellemzője (AUC-ROC) alatti területet. Számítás a csomagból roc_curve()
és roc_auc()
a yardstick
csomagból:
flights_aug %>%
roc_curve(truth = arr_delay, .pred_late) %>%
autoplot()
Power BI-jelentés készítése
A modell eredménye jól néz ki. A repülési késés előrejelzési eredményeivel interaktív Power BI-irányítópultot hozhat létre. Az irányítópult a járatok számát jeleníti meg fuvarozónként, valamint a járatok számát cél szerint. Az irányítópult a késés előrejelzési eredményei alapján szűrhet.
Adja meg a szolgáltató nevét és a repülőtér nevét az előrejelzés eredményadatkészletében:
flights_clean <- flights_aug %>%
# Include the airline data
left_join(airlines, c("carrier"="carrier"))%>%
rename("carrier_name"="name") %>%
# Include the airport data for origin
left_join(airports, c("origin"="faa")) %>%
rename("origin_name"="name") %>%
# Include the airport data for destination
left_join(airports, c("dest"="faa")) %>%
rename("dest_name"="name") %>%
# Retain only the specific columns you'll 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)
Tekintse át az adatokat:
glimpse(flights_clean)
Az adatok konvertálása Spark DataFrame-gé:
sparkdf <- as.DataFrame(flights_clean)
display(sparkdf)
Írja be az adatokat egy delta táblába a tóházban:
# Write data into a delta table
temp_delta<-"Tables/nycflight13"
write.df(sparkdf, temp_delta ,source="delta", mode = "overwrite", header = "true")
A deltatáblával szemantikai modellt hozhat létre.
A bal oldalon válassza a OneLake adatközpontot
Válassza ki a jegyzetfüzethez csatolt tóházat
Válassza a Megnyitás lehetőséget
Új szemantikai modell kiválasztása
Válassza a nycflight13 lehetőséget az új szemantikai modellhez, majd válassza a Megerősítés lehetőséget
Létrejön a szemantikai modell. Új jelentés kiválasztása
Mezők kijelölése vagy húzása az Adatok és vizualizációk panelről a jelentésvászonra a jelentés létrehozásához
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őkkel:
- Y tengely: carrier_name
- X tengely: repülés. Válassza a Darabszám lehetőséget az összesítéshez
- Jelmagyarázat: origin_name
- Halmozott sávdiagram a következőkkel:
- Y tengely: dest_name
- X tengely: repülés. Válassza a Darabszám lehetőséget az összesítéshez
- Jelmagyarázat: origin_name
- Szeletelő a következőkkel:
- Mező: _pred_class
- Szeletelő a következőkkel:
- Mező: _pred_late
Kapcsolódó tartalom
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: