В этой статье 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. Ссылки
- https://www.aidancooper.co.uk/a-non-technical-guide-to-interpreting-shap-analyses/
- https://shap.readthedocs.io/en/latest/example_notebooks/api_examples/plots/beeswarm.html
- https://towardsdatascience.com/introduction-to-shap-with-python-d27edc23c454
- https://www.analyticsvidhya.com/blog/2021/04/breast-cancer-prediction-using-evalml/
- https://www.analyticsvidhya.com/blog/2021/04/automating-machine-learning-tasks-using-evalml-library/
- https://github.com/aiskunks/YouTube/blob/main/A_Crash_Course_in_Statistical_Learning/AutoML/AutoML_Smoke_Detection_Example.ipynb
- https://github.com/aiskunks/YouTube/blob/main/A_Crash_Course_in_Statistical_Learning/AutoML/CC_Kaggle_AutoML_Regression_Melbourne_Housing.ipynb
- https://github.com/krishnaik06/EVALML
- https://www.kaggle.com/code/parulpandey/
- https://www.geeksforgeeks.org/python-imputation-using-the-knnimputer/
- https://www.geeksforgeeks.org/missing-data-imputation-with-fancyimpute/
- https://www.analyticsvidhya.com/blog/2018/03/introduction-k-neighbours-algorithm-clustering/
- https://www.ibm.com/docs/en/ias?topic=procedures-k-nearest-neighbors-knn
- https://www.geeksforgeeks.org/python-imputation-using-the-knnimputer/
- https://www.youtube.com/live/kLDTbavcmd0?feature=share
- https://www.analyticsvidhya.com/blog/2021/09/a-complete-guide-on-sampling-techniques/
9. Авторы
- Шрея Махер
- Профессор Теговое имя указано ниже: https://medium.com/@NikBearBrown