人気のフライト追跡アプリ Flighty は、機械学習と航空当局のデータを活用して、遅延の早期警告信号を提供し、遅延の正確な原因を特定しています。この最新リリースでは、アプリは遅延の 2 大原因である航空機の遅延と空域の問題を特定できるようになり、航空会社が警告を出す前にユーザーに遅延の事前警告を提供します。このアップデートの背後にある考え方は、航空会社が通常は提供しない情報を提供することで、旅行計画についてより情報に基づいた決定を下せるように支援することです。
たとえば、航空会社がお客様の旅行を 30 分、1 時間など遅らせる場合があります。Flighty は、空港での正式な地上停止や天候の問題などにより、フライトが少なくとも 5 時間遅れる可能性があることを事前に通知します。再予約したり、空港に向かう前にもう少し待つなどの措置を講じる必要があるかもしれません。
Flighty の新機能の仕組みを詳しく説明し、LSTM を使用してフライトの遅延を予測するという強力な機能をプロジェクトに追加する方法を説明します。
フライト遅延の予測は、主に天候、航空交通、技術的な問題など、遅延の原因となる要因が多数あるため、非常に困難です。このような予測モデルは、航空会社が業務を最適化し、乗客の満足度を向上させ、運用コストを削減する上で重要になる可能性があります。
効果的なフライト遅延予測モデルを構築するには、遅延に影響を与える可能性のあるさまざまな機能を使用することが不可欠です。この記事では、次の機能を使用します。
FL_DATE
: フライトの日付。DEP_DELAY
: 出発の遅延(分単位)。ORIGIN_CITY_NAME
: フライトが出発する都市。DEST_CITY_NAME
: 目的地の都市。CRS_DEP_TIME
: 予定出発時刻。DISTANCE
: 飛行距離(マイル単位)。データ準備は、機械学習モデルを構築するプロセスにおける主要なステップの 1 つです。フライトに関する過去のデータをいくつか使用し、欠損値の処理、カテゴリ特徴のエンコード、データの正規化など、いくつかの前処理ステップを実行します。
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)
リカレント ニューラル ネットワークの 1 つに、長期短期記憶 (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 モデルを定義してトレーニングします。このモデルには、過剰適合を防ぐためのドロップアウト レイヤーと高密度出力レイヤーを含む 2 つの LSTM レイヤーが含まれています。
# 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
上記のグラフは、実際の遅延と予測された遅延を示しています。2 本の線にほとんど偏差がない場合は、モデルが遅延をうまく予測していることになります。ただし、ハイパーパラメータを微調整したり、機能を追加したり、より高度なアーキテクチャを使用したりすることで、モデルを改善する余地は常にあります。
メリットがあるにもかかわらず、いくつかの課題と考慮事項があります。
一般的に、フライト遅延予測における機械学習は非常に強力なツールです。航空会社の業務効率を大幅に向上させ、乗客に優れた旅行体験を提供するのに役立ちます。この記事で紹介した例を参考にして、フライト遅延予測の独自のモデルを実装し、この分野で機能する機械学習の威力を実感してください。
これは Flighty の新機能の 1 つに過ぎず、機械学習で現実世界の問題を解決する可能性を強調しています。テクノロジーとデータ サイエンスの進歩の過程で、この種のモデルは精度と適用可能な問題の種類が向上し続け、よりスマートで効率的な航空旅行への道を切り開きます。
モデルをさらに強化することに関心がある場合は、次の点を考慮してください。
継続的な反復と改善により、より高い精度が達成され、より信頼性の高い予測が可能になり、よりスムーズで効率的な航空旅行が可能になります。