paint-brush
Приложение Flighty теперь может предсказывать задержки рейсов: вот как это можно сделать с помощью машинного обученияк@kisican
430 чтения
430 чтения

Приложение Flighty теперь может предсказывать задержки рейсов: вот как это можно сделать с помощью машинного обучения

к Can Kisi6m2024/08/13
Read on Terminal Reader

Слишком долго; Читать

Flighty теперь может точно определить причину задержек. Он может определить две основные причины задержек: опоздание самолета и проблемы с воздушным пространством. Он также будет давать пользователям заблаговременные предупреждения о задержках до авиакомпаний. Такие модели прогнозирования могут быть важны для помощи авиакомпаниям в оптимизации операций, повышении удовлетворенности пассажиров и снижении эксплуатационных расходов.
featured image - Приложение Flighty теперь может предсказывать задержки рейсов: вот как это можно сделать с помощью машинного обучения
Can Kisi HackerNoon profile picture
0-item
1-item

Лучшее приложение для отслеживания рейсов Flighty использует машинное обучение, а также данные авиационных властей, чтобы теперь подавать ранние сигналы предупреждения о задержках и точно определять точную причину задержек. С этой последней версией приложение теперь способно определять две основные причины задержек — опоздание самолетов и проблемы с воздушным пространством — предоставляя пользователям заблаговременное предупреждение о задержках до того, как это сделают авиакомпании. Идея обновления заключается в том, чтобы помочь вам принимать более обоснованные решения о ваших планах путешествий, предоставляя вам информацию, которую авиакомпании обычно не предоставляют.


Например, авиакомпания может задержать ваш рейс на полчаса, затем на час и так далее. Flighty может заранее предупредить вас о том, что ваш рейс, скорее всего, будет задержан как минимум на пять часов из-за чего-то вроде официальной остановки на земле в вашем аэропорту или проблем с погодой. Возможно, вам захочется предпринять такие шаги, как перебронирование или немного подождать, прежде чем отправиться в аэропорт.


Мы подробно рассмотрим механизм работы новой функции 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, которая специально разработана для изучения долгосрочных зависимостей в данных временных рядов. Сначала необходимо создать последовательность точек данных с использованием 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. Модель включает два слоя 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, демонстрирующая возможности машинного обучения для решения реальных проблем. В процессе развития технологий и науки о данных этот тип модели будет совершенствоваться в плане точности и типов проблем, к которым он может быть применен, прокладывая путь к более умным и эффективным авиаперевозкам.



Следующие шаги

Тем, кто заинтересован в дальнейшем совершенствовании своей модели, следует рассмотреть следующее:

  • Настройка гиперпараметров : используйте поиск по сетке или случайный поиск, чтобы сосредоточиться на оптимальных гиперпараметрах вашей модели.
  • Разработка функций : изучите другие функции, которые влияют на задержки рейсов, такие как погодные условия, данные о воздушном движении и тип самолета.
  • Расширенные архитектуры : разрабатывайте эксперименты с глубокими архитектурами, двунаправленными LSTM или GRU с механизмами внимания, чтобы выявлять более сложные закономерности в этих данных.


Благодаря непрерывной итерации и совершенствованию можно добиться более высокой точности и более надежных прогнозов, а значит, более плавных и эффективных авиаперелетов.