XGBOOST_航班延误预测

本文介绍了利用XGBOOST进行航班延误预测的过程。首先,作者通过搜集和处理数据,包括合并天气数据,构建预测模型。然后,使用XGBOOST进行训练,模型准确率达到了90%。最后,讨论了评估模型性能的方法,如AUC曲线,强调了模型预测的有效性。
摘要由CSDN通过智能技术生成

最近,想尝试一下利用机器学习进行航班的延误预测,一开始的倾向是使用GBDT算法,使用了在scikit-learn上的肿瘤数据作为初步模型测试,使用网格搜索后发现,其预测结果仅仅只有50%不到,还不如KNN——《机器学习之Knn算法》

后来在网上看到了XGBOOST算法,于是常识了一波,准确率可以达到90%,比knn要强出5%以上,所以在模型的选择上,博主决定使用XGBOOST。

对于GBDT和XGBOOST的原理,以及各超参的控制机理,博主这边还只是初步尝试,后面会较深入的去琢磨一番,然后完善博客,但是工具的使用还是简单的,问题在于数据集。


一、航班数据集

1.1 搜集数据

国内的航班数据几乎没有,也没有免费的公开网站,而公司的数据几乎不可用,因为只有航线、航司、出发、到达、计划时间等,没有博主需要的实际时间、天气状况、航班号等。

为此博主花了一整天时间搜罗各大网站,终于发现了这个国外网站——stat-computing.org,貌似需要翻墙。可以查询到美国的航空公司航班准点率数据,博主选取的是2016年的。

此外,还有这位博主,提供的数据也被博主参考了进来——《通过使用 Python 创建机器学习模型来预测航班晚点情况》

但是唯一遗憾就是缺少天气数据,经过不断的搜索,博主发现了一个美国气象局,可以查到2016年的历史天气数据——ATL亚特兰大国际机场天气状况

亚特兰大国际机场2016年1月部分数据
在这里插入图片描述

本想通过爬虫进行爬取数据,但实际情况不允许。不过博主也是讲table标签数据copy下来,然后利用python进行数据的整理与合并。

经过分析,博主个人认为风速和降水量,由于变化幅度大,可以作为影响航班的主要因素,隐藏只提取这两个因素作为天气指数。

1.2 天气数据处理和合并

由于是调研,选取的是美国大型航空公司——DL达美,并选取了五个机场:ATL(佐治亚州亚特兰大:哈茨菲尔德-杰克逊亚特兰大国际机场)、DTW(底特律韦恩县国际机场)、JFK(纽约:约翰·F·肯尼迪国际机场)、MSP(明尼苏达州明尼阿波利斯:明尼阿波利斯圣保罗国际机场)、SEA(华盛顿州:西雅图/塔科马国际机场)

由两个文件,一个是USA_fightDataSet.xlsx,这个Excel文件记录的是起飞时间、机场、计划飞行时间、实际飞行实际、航班号等数据;另一个是由机场和月份组成的60个txt文件,里面是html的table标签数据。

博主要做的就是将table标签里的当天的天气情况,即风速和降水量,插入到表格相应的位置,代码如下:

## 获取天气数据的类方法
import pandas as pd
import numpy as np
np.set_printoptions(threshold=np.inf)
# 获取数据
def getData(url, airport, mon):
    # 读取配置文件
    table = pd.read_html(url);

    # 数据行数
    dayOfMonth = np.array(table[1])[1:, 0]
    size = dayOfMonth.size

    # 选取最后一个元素进行判断,因为爬取的数据有时候最后一个又从1号开始,这里进行判断排除处理
    ele = dayOfMonth[size-1]
    if ele == '1':
        dayOfMonth = np.array(table[1])[1:size, 0]
        wsp_data = np.array(table[5])[1:size, 1]
        precipitation_data = table[7].values[1:size, 0]
    else :
        # 读取数据,这里将header删掉,取数据
        # 日
        dayOfMonth = np.array(table[1])[1:, 0]

        # windSpeed的平均值
        wsp_data = np.array(table[5])[1:, 1]

        # 降水量
        precipitation_data = table[7].values[1:, 0]

    # 填充月份
    size = dayOfMonth.size
    month = np.array([mon for i in range(size)])

    # 填充机场
    airport = np.array([airport for i in range(size)])

    # 输出结果
    return np.vstack([month, dayOfMonth, airport, wsp_data, precipitation_data]).T

# 迭代合并数组,从2开始
def fibonacci
  • 6
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值