Ứng dụng theo dõi chuyến bay hàng đầu, Flighty, đang sử dụng máy học cũng như dữ liệu từ các cơ quan hàng không để hiện cung cấp các tín hiệu cảnh báo sớm về sự chậm trễ và xác định chính xác lý do đằng sau sự chậm trễ. Với bản phát hành mới nhất này, ứng dụng hiện có khả năng xác định hai nguyên nhân lớn nhất gây ra sự chậm trễ—máy bay đến muộn và các vấn đề về không phận—cung cấp cho người dùng cảnh báo trước về sự chậm trễ trước khi các hãng hàng không thực hiện việc đó. Ý tưởng đằng sau bản cập nhật là giúp bạn đưa ra quyết định sáng suốt hơn về kế hoạch du lịch của mình bằng cách cung cấp cho bạn thông tin mà các hãng hàng không thường không cung cấp.
Ví dụ, một hãng hàng không có thể hoãn chuyến bay của bạn nửa giờ, rồi một giờ, v.v. Flighty có thể cảnh báo bạn trước rằng chuyến bay của bạn có khả năng bị hoãn ít nhất năm giờ do một lý do nào đó như dừng mặt đất chính thức tại sân bay của bạn hoặc các vấn đề về thời tiết. Bạn có thể muốn thực hiện các bước như đặt lại chuyến bay hoặc đợi lâu hơn một chút để ra sân bay.
Chúng tôi sẽ đi sâu vào cơ chế đằng sau tính năng mới của Flighty và hướng dẫn bạn cách thêm tính năng mạnh mẽ này vào dự án của mình: dự đoán sự chậm trễ của chuyến bay bằng LSTM.
Dự đoán sự chậm trễ của chuyến bay có thể rất khó khăn do có nhiều yếu tố có thể trở thành nguyên nhân gây ra sự chậm trễ, chủ yếu liên quan đến thời tiết, lưu lượng không khí và các vấn đề kỹ thuật. Các mô hình dự đoán như vậy có thể quan trọng trong việc giúp các hãng hàng không tối ưu hóa hoạt động, cải thiện sự hài lòng của hành khách và giảm chi phí hoạt động.
Để xây dựng một mô hình dự đoán chuyến bay bị chậm hiệu quả, điều cần thiết là phải sử dụng nhiều tính năng có thể ảnh hưởng đến sự chậm trễ. Trong bài viết này, chúng tôi sẽ sử dụng các tính năng sau:
FL_DATE
: Ngày bay.DEP_DELAY
: Độ trễ khởi hành tính bằng phút.ORIGIN_CITY_NAME
: Thành phố nơi chuyến bay khởi hành.DEST_CITY_NAME
: Thành phố đích.CRS_DEP_TIME
: Thời gian khởi hành theo lịch trình.DISTANCE
: Khoảng cách của chuyến bay tính bằng dặm.Chuẩn bị dữ liệu là một trong những bước chính trong quá trình xây dựng mô hình học máy. Chúng tôi sẽ sử dụng một số dữ liệu lịch sử về các chuyến bay và thực hiện một vài bước tiền xử lý: xử lý các giá trị bị thiếu, mã hóa các tính năng phân loại và chuẩn hóa dữ liệu.
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)
Một loại mạng nơ-ron hồi quy là mạng bộ nhớ dài hạn ngắn hạn hoặc mạng LSTM, được thiết kế đặc biệt để tìm hiểu các mối phụ thuộc dài hạn trong dữ liệu chuỗi thời gian. Đầu tiên, cần phải tạo một chuỗi các điểm dữ liệu bằng 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)
Tiếp theo, chúng tôi chia các chuỗi thành tập huấn luyện và tập thử nghiệm để đánh giá hiệu suất của mô hình.
# 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)
Sau đó, chúng tôi định nghĩa và đào tạo một mô hình LSTM. Mô hình bao gồm hai lớp LSTM với các lớp bỏ qua để ngăn chặn tình trạng quá khớp và một lớp đầu ra dày đặc.
# 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))
Sau khi đào tạo mô hình, chúng ta có thể sử dụng nó để đưa ra dự đoán về dữ liệu thử nghiệm và trực quan hóa kết quả.
# 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
Biểu đồ trên cho thấy độ trễ thực tế và dự đoán. Nếu hai đường cho thấy độ lệch rất ít, thì mô hình đang làm tốt công việc dự đoán độ trễ. Tuy nhiên, luôn có chỗ để cải thiện mô hình bằng cách tinh chỉnh siêu tham số hoặc bằng cách thêm nhiều tính năng hơn hoặc sử dụng kiến trúc tiên tiến hơn.
Mặc dù có nhiều lợi ích, vẫn có một số thách thức và cân nhắc:
Nhìn chung, học máy trong dự đoán sự chậm trễ của chuyến bay là một công cụ rất mạnh mẽ; nó có thể giúp mang lại hiệu quả to lớn cho các hãng hàng không trong hoạt động của họ và cung cấp trải nghiệm du lịch tốt hơn cho hành khách. Hãy xem qua các ví dụ được đưa ra trong bài viết này để triển khai mô hình dự đoán sự chậm trễ của chuyến bay của riêng bạn và cảm nhận sức mạnh của học máy trong lĩnh vực này.
Đây chỉ là một trong những tính năng mới hơn từ Flighty, nêu bật những gì có thể với máy học để giải quyết các vấn đề trong thế giới thực. Trong quá trình tiến bộ của khoa học dữ liệu và công nghệ, loại mô hình này sẽ tiếp tục cải thiện độ chính xác và các loại vấn đề mà nó có thể được áp dụng, mở đường cho du lịch hàng không thông minh hơn và hiệu quả hơn.
Đối với những ai quan tâm đến việc cải thiện mô hình của mình hơn nữa, hãy cân nhắc những điều sau:
Thông qua quá trình lặp lại và cải tiến liên tục, có thể đạt được độ chính xác cao hơn để đưa ra những dự đoán đáng tin cậy hơn, do đó, chuyến bay sẽ suôn sẻ và hiệu quả hơn.