В этой статье Medium анализируется набор данных о задержке рейса на Kaggle, включая очистку данных, исследование, моделирование и интерпретацию. Он отвечает на ключевые вопросы, касающиеся набора данных, такие как важность целевой переменной, критические функции для прогнозирования и оптимальные модели. Кроме того, в статье рассматриваются такие вопросы, как вменение отсутствующих данных, распределение данных и корреляции. Его цель — предоставить информацию для создания моделей прогнозирования задержек рейсов.

Мы будем следовать этому рабочему процессу в блокноте:

1. ДАННЫЕ

Я проанализирую набор данных о задержке рейсов в США за 2018–2022 годы, полученный от Kaggle. Набор данных содержит подробную информацию о рейсах, такую ​​как авиакомпания, дата, задержка вылета/прилета и т. д. Показано изображение кадра данных после чтения.

Фрейм данных состоит из 40783 строк и 62 столбцов. Он имеет 20 категориальных столбцов и 42 числовых столбца.

2. Понимание и подготовка данных

I. Работа с пропущенными значениями

При проверке набор данных содержал пропущенные значения в 17 столбцах, при этом процент от общего количества пропущенных значений колебался от 0,6% до 3,2%.

Обработка пропущенных значений — важный этап очистки данных, который помогает сохранить ценные данные и повысить точность и надежность анализа данных. В этом случае я использовал методы K-ближайших соседей (KNN) и многомерное вменение с помощью цепных уравнений (MICE), чтобы заполнить пропущенные значения в столбцах набора данных, гарантируя, что для анализа использовался полный набор данных.

Способ 1: КНН

В этом случае метод вменения KNN использовался для заполнения пропущенных значений в нескольких столбцах набора данных о задержке рейса, включая ArrDelay, ArrDel15, ArrivalDelayGroups, ArrivalDelayMinutes, AirTime и ActualElapsedTime. Вменение KNN работает, находя k-ближайших соседей к отсутствующему значению и используя их значения для заполнения отсутствующих данных. Этот метод может обеспечить надежную оценку недостающих данных и повысить точность и надежность анализа данных.

knn_imputer = KNNImputer(n_neighbors=2, weights=”uniform”)
df['ArrDelay'] = knn_imputer.fit_transform(df[['ArrDelay']])
df['ArrDel15'] = knn_imputer.fit_transform(df[['ArrDel15']])
df['ArrivalDelayGroups'] = knn_imputer.fit_transform(df[['ArrivalDelayGroups']])
df['ArrDelayMinutes'] = knn_imputer.fit_transform(df[['ArrDelayMinutes']])
df['AirTime'] = knn_imputer.fit_transform(df[['AirTime']])
df['ActualElapsedTime'] = knn_imputer.fit_transform(df[['ActualElapsedTime']])

Способ 2: МЫШИ

Я использовал метод импутации MICE (Multiple Imputation by Chained Equations), чтобы заполнить недостающие значения в столбцах TaxiIn, TaxiOut, WheelsOff, DepTime, DepDelayMinutes, DepDelay, DepDel15, DepartureDelayGroups, WheelsOn и ArrTime. MICE — это сложный метод импутации, который генерирует несколько импутаций для каждого пропущенного значения и учитывает корреляции между переменными.

mice_imputer = IterativeImputer()
df['TaxiIn'] = mice_imputer.fit_transform(df[['TaxiIn']])
df['TaxiOut'] = mice_imputer.fit_transform(df[['TaxiOut']])
df['WheelsOff'] = mice_imputer.fit_transform(df[['WheelsOff']])
df['DepTime'] = mice_imputer.fit_transform(df[['DepTime']])
df['DepTime'] = mice_imputer.fit_transform(df[['DepTime']])
df['DepDelayMinutes'] = mice_imputer.fit_transform(df[['DepDelayMinutes']])
df['DepDelay'] = mice_imputer.fit_transform(df[['DepDelay']])
df['DepDel15'] = mice_imputer.fit_transform(df[['DepDel15']])
df['DepartureDelayGroups'] = mice_imputer.fit_transform(df[['DepartureDelayGroups']])
df['WheelsOn'] = mice_imputer.fit_transform(df[['WheelsOn']])
df['ArrTime'] = mice_imputer.fit_transform(df[['ArrTime']])

II. Одно горячее кодирование

Я использовал One Hot Encoding для преобразования категориальных данных в числовые данные для таких столбцов, как «Происхождение», «Пункт назначения», «Год», «Месяц», «День недели», «Квартал», «Авиакомпания» и «Штат происхождения» в таблице. набор данных о задержке рейса. Одно горячее кодирование является ценным методом обработки категорийных данных, поскольку оно создает фиктивные переменные для каждой уникальной категории в наборе данных. Затем эти фиктивные переменные можно использовать в моделях регрессии и классификации в качестве числовых данных.

3. Исследование данных

I. Корреляционный анализ

Я использовал матрицу корреляции, чтобы определить, какие переменные сильно коррелируют с интересующим столбцом «ArrDel15». Анализ выявил несколько переменных, которые имеют значительную корреляцию с «ArrDel15», включая «Airline», «Dest», «Cancelled», «DepDelayMinutes», «ArrTime», «ArrDelayMinutes» и другие. Понимание этих взаимосвязей может помочь выявить факторы, способствующие задержкам рейсов, и разработать стратегии по их минимизации.

II. Выбор функции

На основе корреляционного анализа были выбраны следующие функции: «Время прибытия», «Въезд на такси», «Время выруливания», «Выключение колес», «Время вылета», «Время выруливания», «Минуты задержки», «Задержка вылета», «Минуты задержки», «Задержка прибытия», « DepartureDelayGroups», «ArrivalDelayGroups», «DepDel15», «OriginState», «ArrDel15», «Origin», «Dest», «Year», «Month», «DayOfWeek» и «Quarter». Этот процесс помогает уменьшить размерность данных и повысить эффективность анализа.

III. Проверьте диапазон значений

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

print(df.describe())

Вот некоторые из многих идей, которые я нашел сверху:

  • Среднее время прибытия — 14:57 (14:57), а среднее время отправления — 13:34 (13:34).
  • Средняя задержка отправления составляет 13,03 минуты, а средняя задержка прибытия — 7,43 минуты. Максимальная задержка вылета и прибытия составляет 1677 минут, а минимальная задержка прибытия — 86 минут.
  • Около 22% рейсов столкнулись с задержкой прибытия более чем на 15 минут (указано в столбце ArrDel15).

4. Моделирование данных

Способ 1: КНН

KNN — это контролируемый алгоритм машинного обучения, используемый для задач классификации и регрессии. В KNN «k» представляет количество ближайших соседей, которые будут использоваться для классификации или прогнозирования данной точки данных.

# Fit the KNN model
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# Predict the target variable on the test data
y_pred = knn.predict(X_test)
# Evaluate the model using accuracy score
print("Accuracy Score:", accuracy_score(y_test, y_pred))
# Evaluate the model using confusion matrix
print("Confusion Matrix: \n", confusion_matrix(y_test, y_pred))
# Evaluate the model using classification report
print("Classification Report: \n", classification_report(y_test, y_pred))
# Calculate feature importances using permutation_importance
result = permutation_importance(knn, X, y, n_repeats=1, random_state=0)
sorted_idx = result.importances_mean.argsort()
# Print the sorted feature importances
print("Features sorted by their importance:")
for i in sorted_idx:
    print("{}: {}".format(features[i], result.importances_mean[i]))

Выход:

Эффективность, которую мы получили выше с KNN, составляет 96%. Давайте попробуем другие методы моделирования.

Способ 2: Автомл

EvalML — это библиотека Python для автоматического машинного обучения (AutoML), специально разработанная для задач классификации. EvalML использует ряд методов, таких как очистка данных, проектирование признаков, выбор модели и настройка гиперпараметров, для автоматического создания и оптимизации конвейера классификации.

I. AutoML с использованием EvalML: классификация

from evalml.automl import AutoMLSearch
automl=AutoMLSearch(X_train=X_train,y_train=y_train,problem_type='binary',max_batches=1,optimize_thresholds=True)
automl.search()

На основе EvalML лучшей моделью для прогнозирования целевого поля «ArrDel15» является классификатор логистической регрессии.

ПОЧЕМУ ЭТО НЕ РАБОТАЕТ?

Похоже, что выбранная модель логистической регрессии может нарушать одно из ключевых допущений модели, а именно отсутствие мультиколлинеарности. Мультиколлинеарность возникает, когда переменные-предикторы в модели сильно коррелируют друг с другом.

II. AutoML с использованием EvalML: регрессия

automl=AutoMLSearch(X_train=X_train,y_train=y_train,problem_type='regression',max_batches=1,optimize_thresholds=True)
automl.search()

Основываясь на приведенных выше результатах для этого набора данных, лучшей моделью для прогнозирования «ArrDel15» является регрессор случайного леса.

ЧТО РАБОТАЛО?

Модель RMSE для регрессии случайного леса близка к 0, демонстрируя, что это лучшая модель, найденная для набора данных для выполнения прогнозного моделирования.

  • Пожалуйста, обратитесь к блокноту в конце, чтобы проверить другие альтернативные методы моделирования, опробованные на этом конкретном наборе данных.

5. Интерпретируемость модели (анализ SHAP)

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

shap_values_lr_single = explainer_lr.shap_values(X_test.iloc[0,:])
shap.waterfall_plot(shap.Explanation(values=shap_values_lr_single, base_values=explainer_lr.expected_value, data=X_test.iloc[0,:]), max_display=10)

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

  • Я выполнил анализ SHAP для каждой созданной модели. Дополнительные примеры анализа SHAP см. в блокноте в конце.

6. Заключение и выводы

Какой был вопрос?

  • Какие функции наиболее важны для прогнозирования целевой переменной?
  • Какие модели лучше всего использовать для прогнозирования целевой переменной и какая из них лучше всего подходит для этого набора данных?
  • Как выглядит набор данных с точки зрения его размера, структуры и содержания?
  • Является ли набор данных полным или есть какие-то пропущенные значения, которые необходимо вменить?
  • Если есть пропущенные значения, каковы наилучшие методы для вменения отсутствующих данных?
  • Каково распределение данных для различных столбцов в наборе данных?
  • Насколько интерпретируемы данные и как можно использовать SHAP для понимания взаимосвязей между различными переменными в наборе данных?
  • Существуют ли какие-либо корреляции или проблемы мультиколлинеарности между переменными-предикторами в наборе данных?

Что мы сделали?

  • Идентифицирована целевая переменная как «ArrDel15», которая указывает, прибыл ли рейс с задержкой на 15 минут или более.
  • Исследовали структуру и содержимое набора данных, состоящего из 40783 строк и 61 столбца, 41 числового и 20 категориальных столбцов.
  • Обнаружены отсутствующие значения в 17 столбцах набора данных и использованы методы вменения KNN и MICE для их устранения.
  • Выполнено однократное кодирование категориальных переменных для подготовки набора данных к моделированию.
  • Оценивали наличие корреляций между предикторными переменными.
  • Изучили различные методы моделирования, в том числе классификацию KNN, дерево решений, линейную регрессию и evalml, чтобы предсказать целевую переменную и сравнить их эффективность.
  • Исследовал интерпретируемость моделей с помощью анализа SHAP, чтобы понять отношения между различными переменными в наборе данных.

Насколько хорошо это сработало?

  • Предварительная обработка данных: данные были импутированы эффективно, и в наборе данных не было пропущенных значений. Для категориальных переменных было выполнено однократное кодирование и проведена нормализация данных.
  • Важность функции. Основными функциями, определяющими целевую переменную ArrDel15, были DepDel15, ArrivalDelayGroups, DepartureDelayGroups, ArrDelayMinutes, DepDelayMinutes и DepDelay.
  • Выбор модели: KNN, линейная регрессия и моделирование дерева решений хорошо работали для этого набора данных. EvalML с классификацией не дал эффективных результатов, так как не учитывал мультиколлинеарность, но EvalML с регрессией решил проблему.
  • Оценка производительности: модели оценивались на основе различных показателей, таких как точность, воспроизводимость и оценка F1. Модель дерева решений показала самую высокую точность, в то время как модель линейной регрессии имела самую низкую среднюю абсолютную ошибку.
  • Интерпретируемость модели: анализ SHAP использовался для понимания взаимосвязей между различными переменными в наборе данных и для интерпретации прогнозов модели.
  • Удаление выбросов: было замечено, что удаление выбросов улучшило производительность моделей.
  • Корреляции и мультиколлинеарность. Между переменными-предикторами в наборе данных были корреляции и мультиколлинеарность.

Что мы узнали?

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

7. Ссылка на блокнот



8. Ссылки

9. Авторы