顶级航班跟踪应用程序 Flighty 正在使用机器学习以及航空当局的数据来提供延误的早期预警信号并查明延误的确切原因。借助最新版本,该应用程序现在能够识别延误的两个最大原因——飞机晚点和空域问题——在航空公司之前为用户提供延误预警。此次更新的目的是通过向您提供航空公司通常不会提供的信息来帮助您做出更明智的旅行计划决策。
例如,航空公司可能会将您的行程延误半小时,然后一小时,等等。Flighty 可以提前提醒您,您的航班可能会因机场正式停飞或天气问题等原因延误至少 5 小时。您可能需要采取重新预订或等待一段时间再前往机场等措施。
我们将深入探讨 Flighty 新功能背后的机制,并指导您将这一强大的功能添加到您的项目中:使用 LSTM 预测航班延误。
航班延误预测可能非常具有挑战性,因为造成延误的因素有很多,主要与天气、空中交通和技术问题有关。此类预测模型对于帮助航空公司优化运营、提高乘客满意度和降低运营成本非常重要。
为了建立有效的航班延误预测模型,必须使用各种可能影响延误的特征。在本文中,我们将使用以下特征:
FL_DATE
:航班日期。DEP_DELAY
:出发延迟时间(分钟)。ORIGIN_CITY_NAME
:航班出发的城市。DEST_CITY_NAME
:目的地城市。CRS_DEP_TIME
:预定出发时间。DISTANCE
:飞行距离(英里)。数据准备是构建机器学习模型过程中的主要步骤之一。我们将使用一些有关航班的历史数据并执行几个预处理步骤:处理缺失值、编码分类特征和规范化数据。
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout # Load the flight data flights_df = pd.read_csv('path_to_your_flight_data.csv') # Convert FL_DATE to datetime and set as index flights_df['FL_DATE'] = pd.to_datetime(flights_df['FL_DATE']) flights_df.set_index('FL_DATE', inplace=True) # Select relevant columns and drop rows with NaN values features = ['DEP_DELAY', 'ORIGIN_CITY_NAME', 'DEST_CITY_NAME', 'CRS_DEP_TIME', 'DISTANCE'] flights_df = flights_df[features].dropna() # Convert categorical features to dummy variables flights_df = pd.get_dummies(flights_df, columns=['ORIGIN_CITY_NAME', 'DEST_CITY_NAME']) # Normalize the data scaler = MinMaxScaler() scaled_data = scaler.fit_transform(flights_df)
一种循环神经网络是长短期记忆或 LSTM 网络,专门用于学习时间序列数据中的长期依赖关系。首先,需要使用 LSTM 创建一系列数据点。
# Create sequences def create_sequences(data, seq_length): sequences = [] for i in range(len(data) - seq_length): seq = data[i:i+seq_length] target = data[i+seq_length][0] # DEP_DELAY is the target sequences.append((seq, target)) return sequences seq_length = 30 sequences = create_sequences(scaled_data, seq_length)
接下来,我们将序列分成训练集和测试集来评估模型的性能。
# Split into train and test sets train_size = int(len(sequences) * 0.8) train_sequences = sequences[:train_size] test_sequences = sequences[train_size:] # Prepare the input and output X_train, y_train = zip(*train_sequences) X_train, y_train = np.array(X_train), np.array(y_train) X_test, y_test = zip(*test_sequences) X_test, y_test = np.array(X_test), np.array(y_test)
然后,我们定义并训练一个 LSTM 模型。该模型包括两个 LSTM 层,其中带有 dropout 层以防止过度拟合,以及一个密集输出层。
# Build the LSTM model model = Sequential() model.add(LSTM(50, return_sequences=True, input_shape=(seq_length, X_train.shape[2]))) model.add(Dropout(0.2)) model.add(LSTM(50)) model.add(Dropout(0.2)) model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') # Train the model model.fit(X_train, y_train, epochs=20, batch_size=32, validation_data=(X_test, y_test))
训练模型后,我们可以用它对测试数据进行预测并可视化结果。
# Make predictions predictions = model.predict(X_test) predictions = scaler.inverse_transform(np.concatenate((predictions, np.zeros((predictions.shape[0], scaled_data.shape[1] - 1))), axis=1))[:, 0] from sklearn.preprocessing import MinMaxScaler future_flight_data = { 'DEP_DELAY': 0, 'ORIGIN_CITY_NAME': 'San Francisco, CA', 'DEST_CITY_NAME': 'New York, NY', 'CRS_DEP_TIME': 1230, 'DISTANCE': 2904 } future_flight_df = pd.DataFrame([future_flight_data]) future_flight_df = pd.get_dummies(future_flight_df, columns=['ORIGIN_CITY_NAME', 'DEST_CITY_NAME']) scaler_columns = list(scaler.feature_names_in_) for col in scaler_columns: if col not in future_flight_df.columns: future_flight_df[col] = 0 future_flight_df = future_flight_df[scaler_columns] # Normalize the data using the fitted scaler scaled_future_flight = scaler.transform(future_flight_df) seq_length = 30 # Repeat the future flight data to create a sequence future_sequence = np.array([scaled_future_flight] * seq_length) future_sequence = future_sequence.reshape(1, seq_length, future_sequence.shape[2]) predicted_delay = model.predict(future_sequence) predicted_delay = scaler.inverse_transform( np.concatenate( (predicted_delay, np.zeros((predicted_delay.shape[0], scaled_future_flight.shape[1] - 1))), axis=1 ) )[:, 0] print(f"Predicted delay for the specific future flight: {predicted_delay[0]:.2f} minutes")
Predicted delay for the specific future flight: 4.10 minutes
上图显示了实际延迟和预测延迟。如果两条线的偏差很小,则该模型在预测延迟方面做得很好。但是,通过微调超参数或添加更多功能或使用更高级的架构,模型总是有改进的空间。
尽管有这些好处,但也存在一些挑战和注意事项:
总的来说,机器学习在航班延误预测中是一个非常强大的工具;它可以帮助航空公司提高运营效率,并为乘客提供更好的旅行体验。通过本文中给出的示例来实现您自己的航班延误预测器模型,并感受机器学习在此领域的强大功能。
这只是 Flighty 的新功能之一,它凸显了机器学习在解决实际问题方面的可能性。在技术和数据科学进步的过程中,这种模型的准确性和可应用的问题类型将继续提高,为更智能、更高效的航空旅行铺平道路。
对于那些有兴趣进一步增强其模型的人,请考虑以下内容:
通过不断的迭代改进,可以达到更高的准确度,实现更可靠的预测,从而使航空旅行更加顺畅和高效。