최고의 항공편 추적 앱인 Flighty는 항공 당국의 데이터와 더불어 머신 러닝을 사용하여 지연에 대한 조기 경고 신호를 제공하고 지연의 정확한 이유를 파악합니다. 이 최신 릴리스를 통해 앱은 이제 지연의 두 가지 가장 큰 원인인 항공기 지연과 공역 문제를 식별하여 항공사가 이를 수행하기 전에 사용자에게 지연에 대한 사전 경고를 제공할 수 있습니다. 이 업데이트의 아이디어는 항공사가 일반적으로 제공하지 않는 정보를 제공하여 여행 계획에 대한 정보에 입각한 결정을 내릴 수 있도록 돕는 것입니다.
예를 들어, 항공사가 여행을 30분, 그다음 1시간 등으로 지연시킬 수 있습니다. 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(Long Short-Term Memory) 네트워크로, 시계열 데이터에서 장기 종속성을 학습하도록 특별히 설계되었습니다. 먼저 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 레이어와 밀집 출력 레이어를 포함합니다.
# 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의 새로운 기능 중 하나일 뿐이며, 머신 러닝으로 실제 문제를 해결할 수 있는 가능성을 강조합니다. 기술 및 데이터 과학 발전 과정에서 이러한 종류의 모델은 정확도와 적용할 수 있는 문제 유형이 개선되어 더 스마트하고 효율적인 항공 여행을 향한 길을 열 것입니다.
모델을 더욱 개선하는 데 관심이 있는 사람이라면 다음 사항을 고려하세요.
지속적인 반복과 개선을 통해 더 높은 정확도를 달성하여 예측의 신뢰성을 높이고, 그 결과 항공 여행이 더 원활하고 효율적으로 이루어질 수 있습니다.