教程:使用 R 预测航班延误 您所在的位置:网站首页 r语言中factor函数用法 教程:使用 R 预测航班延误

教程:使用 R 预测航班延误

2023-05-29 03:26| 来源: 网络整理| 查看: 265

航班延误预测 项目 05/23/2023

本文使用 nyc13 数据来预测飞机是否晚点超过 30 分钟。 然后,我们使用预测结果生成交互式 Power BI 仪表板。

重要

Microsoft Fabric 目前为预览版。 此信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 Microsoft 不对此处提供的信息作任何明示或默示的担保。

在本教程中,你将了解如何:

使用 整洁模型 包(如 recipes、 parsnip、 rsample 、workflows )来处理数据和训练机器学习模型。 将输出数据作为 delta 表写入 lakehouse。 通过“查看”模式生成 Power BI 视觉对象报表,直接访问 lakehouse 上的数据。 先决条件

Power BI Premium订阅。 如果没有,请参阅如何购买Power BI Premium。

分配有高级容量的 Power BI 工作区。 如果没有工作区,请使用 创建工作区 中的步骤创建工作区并将其分配给高级容量。

登录到 Microsoft Fabric。

打开或创建笔记本。 若要了解如何操作,请参阅 如何使用 Microsoft Fabric 笔记本。

通过将 语言选项 设置为 SparkR (R) 来更改主要语言。

将笔记本附加到湖屋。 在左侧,选择“ 添加 ”以添加现有湖屋或创建湖屋。

将笔记本附加到湖屋。 在左侧,选择“ 添加 ”以添加现有湖屋或创建湖屋。 安装包

若要使用本文中的代码,请安装 nyc 打13 包。

install.packages("nycflights13") # load the packages library(tidymodels) # for tidymodels packages library(nycflights13) # for flight data 数据研究

该 nycflights13 数据包含 2013 年从纽约市附近起飞的 325,819 个航班的信息。 让我们先看一下航班延误分布。 下图显示到达延迟的分布是右偏斜的,它在高值中具有长尾。

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

加载数据,对变量进行一些更改:

set.seed(123) flight_data % 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)

在开始构建模型之前,让我们快速了解一些对预处理和建模都很重要的特定变量。

请注意,名为 的 arr_delay 变量是因子变量。 请务必将用于训练逻辑回归模型的结果变量作为一个因素。

glimpse(flight_data)

你会看到,此数据集中大约 16% 的航班晚于 30 分钟到达。

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

中包含 dest104 个航班目的地。

unique(flight_data$dest)

有 16 个不同的运营商。

unique(flight_data$carrier) 数据拆分

若要开始,请将此单个数据集拆分为两个数据集: 训练 集和 测试 集。 保留原始数据集中的大部分行 (在训练集中随机选择) 子集。 训练数据用于拟合模型,测试集用于度量模型性能。

rsample使用 包创建一个对象,该对象包含有关如何拆分数据的信息,然后使用另外两个rsample函数为训练集和测试集创建数据帧:

set.seed(123) # keep most of the data into the training set data_split % 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()) 使用食谱拟合模型

使用逻辑回归对航班数据进行建模。 首先使用 parsnip 包生成模型规范:

lr_mod % set_engine("glm")

然后使用包workflows将模型 (lr_mod) 与食谱 (flights_rec) 捆绑在一起parsnip。

flights_wflow % add_model(lr_mod) %>% add_recipe(flights_rec) flights_wflow 定型模型

下面是一个函数,可用于准备配方并从生成的预测器中训练模型:

flights_fit % fit(data = train_data)

使用帮助程序函数 xtract_fit_parsnip() 和 extract_recipe() 从工作流中提取模型或配方对象。 例如,在此处拉取拟合的模型对象, broom::tidy() 然后使用 函数获取整齐的模型系数:

flights_fit %>% extract_fit_parsnip() %>% tidy() 预测结果

现在,使用经过训练的工作流 (flights_fit) 通过不可见的测试数据进行预测,只需调用 predict()一次即可完成。 方法 predict() 将配方应用于新数据,然后将其传递给拟合的模型。

predict(flights_fit, test_data)

现在,从 predict() 获取的输出返回预测类: late 与 on_time。 如果需要每个航班的预测类概率,请将 与模型和测试数据一 augment() 起使用,将它们一起保存:

flights_aug 0.50) 。 但你也知道,我们总共有 81,455 行要预测。

你需要一个指标,用于指示模型与结果变量 arr_delay的真实状态相比,模型的延迟到达情况。

使用 ROC 曲线下的面积作为指标,使用 roc_curve() 和 roc_auc() 从包中 yardstick 计算。

flights_aug %>% roc_curve(truth = arr_delay, .pred_late) %>% autoplot() 生成 Power BI 报表

模型结果不是太差! 使用航班延误预测结果生成交互式 Power BI 仪表板,按航空公司显示航班数和目的地航班数量。 仪表板还可以按延迟预测结果进行筛选。

首先将承运商名称和机场名称包含在预测结果数据集中。

flights_clean % # 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)

数据如下所示:

glimpse(flights_clean)

将数据转换为 Spark 数据帧:

sparkdf


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有