本次的部分为数据预处理相关内容
library(tidymodels)
library(nycflights13) # 航班数据集(测试用)
library(skimr) # 总结及可视化变量结果
#查看原始数据集
glimpse(flights)
glimpse(weather)
#构建数据分析的数据集
set.seed(123)#设定随机种子
flight_data <-
flights %>%
mutate(
# 将航班延迟时间转换为因子变量
arr_delay = ifelse(arr_delay >= 30, "late", "on_time"),
arr_delay = factor(arr_delay),
# 将time_hour的时间日期数据转换为日期数据,并定义为data
date = lubridate::as_date(time_hour)
) %>%
# 根据出发地和出发日期时间对flights和weather两个数据集进行合并
inner_join(weather, by = c("origin", "time_hour")) %>%
# 保留需要的列
select(dep_time, flight, origin, dest, air_time, distance,
carrier, date, arr_delay, time_hour) %>%
# 删除含有缺失数据的行
na.omit() %>%
# 将所有字符串变量转换为因子型
mutate_if(is.character, as.factor)
#划分训练集和测试集
# Fix the random numbers by setting the seed
# This enables the analysis to be reproducible when random numbers are used
set.seed(222)
# Put 3/4 of the data into the training set
data_split <- initial_split(flight_data, prop = 3/4)
# Create data frames for the two sets:
train_data <- training(data_split)
test_data <- testing(data_split)
#构建建模需要的对象
flights_rec <-
recipe(arr_delay ~ ., data = train_data) %>%
update_role(flight, time_hour, new_role = "ID") #确定哪些是识别变量,后续分析不纳入
summary(flights_rec)
#对特征变量进行预处理
flights_rec <-
recipe(arr_delay ~ ., data = train_data) %>% #构建回归方程
update_role(flight, time_hour, new_role = "ID") %>% #确定ID识别变量
step_date(date, features = c("dow", "month")) %>% #对日期变量进行变化
#此处将日期变量转换为星期和月份
step_holiday(date, #将日期变量转换为是否为节将日(二分类变量)
holidays = timeDate::listHolidays("US"), #节假日按照美国日历
keep_original_cols = FALSE) %>%#不保留原始列
step_dummy(all_nominal_predictors()) %>% #将所有字符串变量转换为dummy变量
step_zv(all_predictors())#删除整列仅有1个值的变量
由于最终的结果变量为二分类,因此我们采用逻辑回归模型进行拟合
#定义模型
lr_mod <-
logistic_reg() %>%
set_engine("glm")
#拟合模型
flights_wflow <-
workflow() %>%
add_model(lr_mod) %>%
add_recipe(flights_rec)
flights_wflow
#利用训练数据进行模型训练
flights_fit <-
flights_wflow %>%
fit(data = train_data)
#查看训练后模型的参数
flights_fit %>%
extract_fit_parsnip() %>%
tidy()
#用测试数据队模型进行拟合并将所有变量和结果储存
flights_aug <-
augment(flights_fit, test_data)
# 筛选需要展示的变量:
flights_aug %>%
select(arr_delay, time_hour, flight, .pred_class, .pred_on_time)
#利用ROC曲线对模型进行评价并可视化
flights_aug %>%
roc_curve(truth = arr_delay, .pred_late) %>%
autoplot()
#计算模型AUC值
flights_aug %>%
roc_auc(truth = arr_delay, .pred_late)