Введение

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

В этой статье мы рассмотрим набор данных о дорожно-транспортных происшествиях в США, доступный на Kaggle, который содержит информацию о более чем 2,6 миллионах аварий по всей стране. Наша цель будет заключаться в очистке данных путем удаления нулевых значений, обучении прогностических моделей, внедрении методов автоматического машинного обучения (AutoML) и оценке эффективности моделей в прогнозировании серьезности аварий.

Мы начнем с исследовательского анализа данных (EDA) набора данных, где мы выявим закономерности и взаимосвязи между различными переменными и получим представление о факторах, которые способствуют серьезности аварий. Затем мы предварительно обработаем данные, удалив нулевые значения и закодировав категориальные переменные, прежде чем обучать различные модели машинного обучения.

Чтобы еще больше повысить эффективность наших прогностических моделей, мы также внедрим методы автоматического машинного обучения (AutoML), такие как H2O.ai и TPOT. Наконец, мы оценим эффективность наших моделей, используя различные показатели, такие как точность, воспроизводимость и полнота, и определим наиболее эффективную модель для прогнозирования серьезности аварий.

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

Ссылка на набор данных: https://www.kaggle.com/datasets/sobhanmoosavi/us-accidents

О наборе данных

Это набор данных об автомобильных авариях по всей стране, который охватывает 49 штатов США. Данные об авариях собираются с февраля 2016 г. по декабрь 2021 г. с использованием нескольких API, которые предоставляют потоковые данные о дорожно-транспортных происшествиях (или событиях). Эти API-интерфейсы передают данные о дорожном движении, полученные различными организациями, такими как транспортные департаменты США и штатов, правоохранительные органы, дорожные камеры и датчики трафика в дорожных сетях. В настоящее время в этом наборе данных содержится около 2,8 млн записей об авариях. Отметьте здесь, чтобы узнать больше об этом наборе данных.

Описание каждой из функций в наборе данных:

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

Настройка!

Шаг 1: Установка и импорт

# Installations
!pip install fancyimpute

# Imports
import opendatasets as od
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pylab as plt
from matplotlib import pyplot
from fancyimpute import KNN
from sklearn.impute import SimpleImputer
from fancyimpute import IterativeImputer
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import StandardScaler
import scipy.stats as stats
from sklearn.svm import SVC
from sklearn.feature_selection import RFE
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import mean_squared_error
from sklearn.impute import KNNImputer
from sklearn.metrics import confusion_matrix
from sklearn.metrics import confusion_matrix as sklearn_confusion_matrix

Шаг 2: Загрузка набора данных

download_url = "https://www.kaggle.com/datasets/sobhanmoosavi/us-accidents"
df = pd.read_csv(download_url)

Подготовка данных

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

  1. Посмотрите предварительную информацию или сводную статистику.
  2. Исправьте любое отсутствующее/неправильное значение

1. Просмотрите предварительную информацию или сводную статистику.

Посмотрим на фреймворк данных

df

Данные содержат около 2,9 миллиона строк и 47 столбцов. Давайте посмотрим, что есть в столбцах для анализа.

df.column

Список столбцов

Далее нам нужен обзор типов данных для каждого столбца.

df.info()

Информация о столбце

Приведенный выше список заканчивается тем, что существует 13 логических типов, 13 типов с плавающей запятой, 1 целочисленный и 20 объектных типов данных.

Переходим к сводной статистике столбцов-

df.describe()

Сводные статистические данные

Данные состоят из 14 числовых столбцов, а остальные представляют собой категориальные переменные.

2. Исправьте отсутствующие/неверные значения.

Поиск недостающих значений

Запуск df.isna() преобразовал все в логическое значение. Он возвращал False для столбцов, в которых нет пропущенных значений; Правда иначе.

Нам нужны общие числа для каждого столбца в порядке убывания-

df.isna().sum().sort_values(ascending = False)

Сумма отсортированных пропущенных значений

Какова процентная доля пропущенных значений для каждого столбца во всех данных?

missing_percentage = df.isna().sum().sort_values(ascending = False)/len(df)missing_percentages#sort out the ones with zeroesmissing_percentages[missing_percentages != 0]

После сортировки процента отсутствующих значений оставшиеся столбцы:

Столбцы с наибольшим количеством пропущенных значений

В столбцах «Число», «Осадки (в)» и «Ветер_Холод (F)» больше всего отсутствующих значений (40–60 % данных). Целесообразно либо полностью удалить столбцы, либо исключить их из последующего анализа.

Давайте теперь посмотрим, как будут выглядеть приведенные выше числа визуально. Построение горизонтальной гистограммы как

missing_percentages[missing_percentages != 0].plot(kind = ‘barh’)

Использование импутации Мышей для импутации отсутствующих значений

mice_imputer = IterativeImputer()
df_numeric_imputed = mice_imputer.fit_transform(df_numeric)

Проверка нулевых значений после вменения:

df_numeric_imputed = pd.DataFrame(df_numeric_imputed, columns = df_numeric.columns)
df_numeric_imputed.isna().sum()

Как мы видим, все пропущенные значения для числовых столбцов были удалены.

Выявление лучших независимых функций для нашей зависимой функции, которая называется Severity.

Способ 1: выполнение корреляционного анализа:

df_corr = df.corr()
df_corr_severity = abs(df_corr['Severity'])
best_independent_variables = df_corr_severity[df_corr_severity > 0].sort_values(ascending = False)
best_independent_variables

  • Первая строка имеет коэффициент корреляции 1,0 между серьезностью и самой собой.
  • Остальные строки показывают коэффициенты корреляции между Severity и другими независимыми переменными в наборе данных.
  • Коэффициенты корреляции варьируются от 1,0 (полная положительная корреляция) до -1,0 (полная отрицательная корреляция).
  • Положительные значения корреляции указывают на то, что более высокие значения независимых переменных приводят к более тяжелым авариям.
  • Отрицательные значения корреляции указывают на то, что более высокие значения независимых переменных приводят к менее серьезным авариям.
  • Строки сортируются по абсолютному значению их коэффициентов корреляции, при этом верхние переменные имеют наибольшую корреляцию с серьезностью.
  • Переменные внизу имеют слабую корреляцию или вообще не коррелируют с серьезностью, при этом коэффициенты абсолютной корреляции меньше или равны 0.

Лучшие функции на основе выходных данных — это те, у которых самые высокие значения абсолютного коэффициента корреляции. В этом случае основными функциями являются:

  • Severity (коэффициент корреляции 1,0 с самим собой)
  • Start_Lng (коэффициент корреляции 0,118389)
  • End_Lng (коэффициент корреляции 0,118374)
  • End_Lat (коэффициент корреляции 0,085870)
  • Start_Lat (коэффициент корреляции 0,085864)
  • Distance(mi) (коэффициент корреляции 0,083510)

Эти функции имеют самую сильную положительную корреляцию с Severity среди всех независимых переменных.

Способ 2. Метод SelectKBest с использованием f-теста

# Convert the categorical data to numeric using LabelEncoder
le = LabelEncoder()
df_kbest = df
df_kbest = df_kbest.apply(lambda col: le.fit_transform(col))

# Split the data into independent and dependent variables
X = df_kbest.drop('Severity', axis=1)
y = df_kbest['Severity']

# Fit the data to SelectKBest method
selector = SelectKBest(f_classif, k='all')
selector.fit(X, y)

# Get the scores and p-values of each independent variable
scores = selector.scores_
pvalues = selector.pvalues_

# Combine the scores and p-values in a dataframe
features = pd.DataFrame({'features': X.columns, 'scores': scores, 'pvalues': pvalues})

# Sort the features based on their scores
features = features.sort_values(by='scores', ascending=False)

# Print the top 10 features
print(features.head(10))

Из приведенного выше теста функции с более высокими баллами и более низкими значениями p больше подходят для использования в качестве наших независимых переменных.

Лучшими независимыми переменными в соответствии с выходом являются:

  • Время окончания
  • Время начала
  • Weather_Timestamp
  • Weather_Timestamp_Imputed
  • Описание
  • Осадки (в)
  • Улица
  • Часовой пояс
  • Погодные условия
  • Почтовый индекс

Метод 3. Рекурсивное исключение признаков (RFE) с классификатором опорных векторов (SVC)

# Split the data into features and target
X = df.drop("Severity", axis=1)
y = df["Severity"]
numeric_columns = df.select_dtypes(include=[np.number]).columns
X = df[numeric_columns]

# Standardize the features
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Initialize the SVC and RFE models
svc = SVC(kernel="linear")
rfe = RFE(svc, n_features_to_select=1)

# Fit the RFE model to the data
rfe.fit(X_scaled, y)

# Print the ranking of the features
print("Feature ranking:")
for i, feature in enumerate(X.columns):
    print(f"{i + 1}. {feature}: {rfe.ranking_[i]}")

Чем ниже ранг, тем лучше функция

Из приведенных выше 3 методов функции, которые я выбрал в качестве независимых переменных, следующие:

1. Серьезность

2. СтартЛнг

3. EndLng

4. Конечная широта

5. Старт Широта

6. Расстояние (мили)

7. WeatherTimestampImputed

8. Влажность

9. Скорость ветра в час

10. Пересечение

11. Давление (в)

12. Развязка

13. ВетерХилл(F)

14. Сигнал трафика

15. Видимость (ми)

16. Станция

17. Температура (F)

18. Осадки(в)

19. Стоп

20. Удобства

21. Нет выхода

22. Железная дорога

23. Успокаивающий трафик

24. Удар

25. Номер

26. Уступи дорогу

Обучение классификатора с использованием алгоритма классификации дерева решений и проверка точности, проверка зависимых переменных

# Split the data into training and testing datasets
X_train, X_test, y_train, y_test = train_test_split(df_independant_variables, df['Severity'], test_size=0.2, random_state=0)

# Train the classifier
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# Predict using the test dataset
y_pred = clf.predict(X_test)

# Calculate the accuracy score of the prediction
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: ", accuracy*100)

Мы видим, что точность нашего алгоритма классификации дерева решений составляет 84,53%.

Важность графических объектов для алгоритма классификации дерева решений

# Split the data into training and testing datasets
X_train, X_test, y_train, y_test = train_test_split(df_independant_variables, df["Severity"], test_size=0.2, random_state=0)

# Train the classifier
clf = DecisionTreeClassifier(random_state=0)
clf.fit(X_train, y_train)

# Obtain the feature importances
importances = clf.feature_importances_

# Sort the features based on importances
sorted_idx = importances.argsort()[::-1]

# Plot the feature importances
plt.figure(figsize = (16,10))
plt.title("Feature Importances")
plt.barh(range(X_train.shape[1]), importances[sorted_idx])
plt.yticks(range(X_train.shape[1]), X_train.columns[sorted_idx])
plt.xlabel("Relative Importance")
plt.show()

Из приведенного выше графика видно, что наиболее важными переменными-предикторами являются

1. Weather_timestamp

2. End_Lng

3. Номер

4. Влажность

5. Расстояние

Внедрение AutoML

ИнициализацияH20 ивыполнениевыбора функций

# Start H2O
h2o.init()

Загрузка кадра данных в H20

#Loading pandas dataframe into H20
data = h2o.H2OFrame(df)

Разделение данных на тестовые и проверочные

train, valid = data.split_frame(ratios=[0.8], seed=123)

Выбор ответа и переменной-предиктора

# Set response and predictor variable
response = 'Severity'
predictors = list(data.columns)
predictors.remove('Severity')

Поиск важных переменных-предикторов с использованием случайного леса

# initialize random forest model
rf_model = H2ORandomForestEstimator(
    ntrees=100,
    max_depth=20,
    min_rows=10,
    stopping_rounds=5,
    seed=1234)

# train the model
rf_model.train(x=predictors, y=response, training_frame=train, validation_frame=valid)

# get variable importance
varimp = rf_model.varimp(use_pandas=True)

# plot variable importance
plt.figure(figsize=(25, 5))
plt.bar(varimp['variable'], varimp['percentage'])
plt.xticks(rotation=45, ha='right')
plt.ylabel('Percentage of Importance')
plt.xlabel('Variable')
plt.title('Variable Importance for Severity')
plt.show()

Извлечение переменных, имеющих какое-либо значение, из приведенного выше графика

important_variables = varimp[varimp['relative_importance'] >= 0.001]['variable']
important_variables

Построение тепловой карты между функциями:

plt.figure(figsize=(20,7))
sns.heatmap(df.corr(), annot=True, cmap='RdYlGn')

Проверка связи между зависимой переменной и независимыми переменными:

model = sm.OLS(df['Severity'], df_numeric_imputed).fit()

# Print out the statistics
model.summary()

Проверка модели на мультиколлинеарность с помощью VIF

# the independent variables set
X = df.select_dtypes(numeric)

  
# VIF dataframe
vif_data = pd.DataFrame()
vif_data["feature"] = X.columns
  
# calculating VIF for each feature
vif_data["VIF"] = [variance_inflation_factor(X.values, i)
                          for i in range(len(X.columns))]
  
print(vif_data)

В модели присутствует мультиколлинеарность, о чем свидетельствуют высокие коэффициенты инфляции дисперсии (VIF) для таких характеристик, как Start_Lat, Start_Lng, End_Lat, End_Lng, Temperature(F), Wind_Chill(F), влажность(%), давление(in) и видимость. (ми). Высокие значения VIF (> 5 или 10) предполагают значительную мультиколлинеарность, при этом VIF некоторых признаков намного выше 10, что указывает на высокую корреляцию с одним или несколькими другими признаками в наборе данных.

Внедрение и тестирование AutoML

train, valid = data.split_frame(ratios=[0.8], seed=123)
# Set response variable
response = 'Severity'
predictors = list(data.columns)
predictors.remove('Severity')
aml = H2OAutoML(max_runtime_secs=600, seed=123, nfolds=5, 
                exclude_algos=["DeepLearning", "GLM", "DRF"], 
                stopping_metric="AUTO", balance_classes=True,
                max_models=20)
aml.train(x=predictors, y=response, training_frame=train)

Сводка показателей перекрестной проверки:

Используемая стратегия суммирования представляет собой перекрестную проверку с использованием в общей сложности 20 базовых моделей, из которых использовались 8. Все 8 используемых базовых моделей были моделями XGBoost, а используемый алгоритм metalearner — GLM. Схема присвоения кратностей металарнера была случайной, и металарнер обучался на 5 кратностях.

Раздел выходных данных ModelMetricsRegressionGLM предоставляет показатели производительности для модели ансамбля с накоплением как на данных обучения, так и на данных перекрестной проверки. На обучающих данных модель имеет MSE 0,043, RMSE 0,208, MAE 0,098 и R² 0,776, что указывает на хорошую производительность на обучающих данных. По данным перекрестной проверки модель имеет MSE 0,150, RMSE 0,387, MAE 0,182 и R² 0,224, что указывает на более низкую производительность на новых данных.

В разделе «Сводка показателей перекрестной проверки» представлены дополнительные показатели данных перекрестной проверки, включая среднюю абсолютную ошибку (MAE), среднее остаточное отклонение, среднеквадратичную ошибку (MSE), нулевое отклонение, R², остаточное отклонение, RMSE и RMSLE. Эти показатели указывают на общую производительность модели по данным перекрестной проверки, а также на изменчивость производительности в 5 раз.

Наилучшей моделью для набора данных из приведенных выше результатов является составной ансамбль.

RMSE лучшей модели из приведенных выше результатов, т. е. Stacked Ensemble — 0,2079, RSME после регуляризации — 0,00056. Из этих наблюдений мы можем сделать вывод, что регуляризация в этом случае значительно помогает.

Поэтому Stacked Ensemle вместе с регуляризацией является лучшей моделью для прогнозирования серьезности дорожно-транспортных происшествий в США

Тестирование интерпретируемости модели

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

I. Подгонка модели линейной регрессии и интерпретация коэффициентов регрессии

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

linreg = LinearRegression()
linreg.fit(X_train, y_train)

# Print the coefficient
print("Coefficient:", linreg.coef_[0])

Выход и результаты:

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

II. График пчелиного роя для линейной регрессии

explainer_lr = shap.LinearExplainer(linreg, X_train)


# generate SHAP values for linear regression
shap_values_lr = explainer_lr.shap_values(X_train)

# visualize SHAP values for linear regression
shap.summary_plot(shap_values_lr, X_train)

На графике показано распределение значений SHAP для каждой функции, где цвет представляет значение функции (красный для высоких значений и синий для низких значений), а положение на оси Y показывает важность функции, причем наиболее важные функции находятся на верх, то есть End_Lng, Start_lng, Temparture (F), Wind_Chill (F), Start_Lat. По оси x от -7,5 до 7,5, что указывает на диапазон значений SHAP. На графике показано, как значения SHAP для каждой функции распределяются в этом диапазоне и как это связано с общей важностью каждой функции.

Например, сверху мы видим, что чем выше End_Lng, тем выше задержка.

III. График водопада для линейной регрессии

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 количественно определяют количество и направление, в котором каждая переменная влияет на прогнозируемую цену дома. Значения SHAP, показанные внутри красных стрелок, соответствуют входным переменным, которые «подталкивают» модель к прогнозированию более высокой вероятности задержки, тогда как те, что отмечены синим цветом, «подталкивают» модель к более низкой вероятности задержки.

Окончательный прогноз f(x) равен базовому значению плюс сумма всех значений SHAP.

В блокноте в конце вы найдете этапы интерпретации модели, выполненные для всех моделей.

Заключение:

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

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

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

  • Для начала я использовал набор данных, доступный по адресу https://www.kaggle.com/datasets/sobhanmoosavi/us-accidents, который содержал информацию о дорожно-транспортных происшествиях в США.
  • Целевой переменной в наборе данных была «Тяжесть», которая была показателем серьезности аварии в диапазоне от 1 до 4.
  • Когда я изучил набор данных, я обнаружил, что в нем отсутствуют значения в нескольких столбцах. Чтобы обработать эти пропущенные значения, я использовал MICE (множественное вменение с помощью цепных уравнений) для вменения недостающих данных.
  • Затем я выполнил одно горячее кодирование, чтобы преобразовать категориальные данные в числовую форму. Это позволило вам использовать категориальные функции в ваших моделях.
  • Кроме того, я нормализовал данные, чтобы привести все функции к одному масштабу. Это было важно, чтобы гарантировать, что ни одна функция не окажет непропорционального влияния на результаты ваших моделей.
  • Я также проверил мультиколлинеарность между переменными-предикторами в наборе данных. Мультиколлинеарность возникает, когда две или более переменных-предикторов сильно коррелируют друг с другом. Это может вызвать проблемы в моделях, поэтому важно проверять это и обрабатывать соответствующим образом.
  • Чтобы смоделировать данные и предсказать целевую переменную «Серьезность», я использовал четыре разные модели — Random Forest, Decision Tree, XGBoost и LightGBM.
  • После того, как я обучил модели, вы использовали анализ SHAP для интерпретации результатов. SHAP (Shapley Additive exPlanations) — это метод объяснения результатов моделей машинного обучения. Это помогает понять отношения между различными переменными в наборе данных и определить основные функции, которые управляют целевой переменной.
  • Основываясь на результатах моделей, я определил основные функции, которые определяют целевую переменную «Серьезность». Этими функциями были Weather_timestamp, End_Lng, Number, Humidity и Distance.
  • В целом, используя комбинацию вменения MICE, одного горячего кодирования, нормализации, нескольких моделей и анализа SHAP, мы смогли получить хорошие результаты для прогнозирования целевой переменной «Серьезность». Эти шаги также помогли вам получить представление о взаимосвязях между различными переменными в наборе данных и справиться с проблемами мультиколлинеарности.

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

  • Были выполнены эффективные этапы предварительной обработки данных, включая вменение данных с использованием MICE и нормализацию, чтобы улучшить качество данных и уменьшить систематические ошибки, которые могут негативно повлиять на производительность модели.
  • Использование нескольких моделей, в том числе Random Forest, Decision Tree, XGBoost и LightGBM, улучшило понимание взаимосвязи между переменными в наборе данных и целевой переменной, потенциально повышая точность модели.
  • Были идентифицированы основные функции, определяющие целевую переменную, включая Weather_timestamp, End_Lng, Number, Humidity и Distance, что указывает на то, что модели эффективно фиксируют отношения переменных.
  • Мультиколлинеарность среди переменных-предикторов повлияла на производительность и интерпретацию модели. Эта проблема была решена путем удаления коррелирующих переменных или использования методов регуляризации для уменьшения их влияния.
  • Показатели производительности модели, такие как точность, достоверность, полнота, оценка F1 или AUC-ROC, были хорошими, что еще больше подтверждало эффективность подхода к моделированию.
  • Целевой переменной является «Тяжесть», которая измеряет тяжесть аварии по шкале от 1 до 4, где 1 — наименее серьезная, а 4 — самая серьезная.

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

  • Важность этапов предварительной обработки данных, таких как эффективное вменение данных с использованием MICE и нормализация, для повышения качества данных и уменьшения погрешностей, которые могут негативно повлиять на производительность модели.
  • Преимущества использования нескольких моделей, таких как Random Forest, Decision Tree, XGBoost и LightGBM, для лучшего понимания взаимосвязей между переменными и целевой переменной, что может повысить точность модели.
  • Важность определения основных функций, управляющих целевой переменной, таких как Weather_timestamp, End_Lng, Number, Humidity и Distance, для получения представления о ключевых факторах, влияющих на целевую переменную, и повышения производительности модели.
  • Негативное влияние мультиколлинеарности среди переменных-предикторов на производительность модели и важность решения этой проблемы с помощью методов выбора переменных или регуляризации.
  • Методы визуализации данных и исследовательского анализа могут помочь понять структуру и распределение набора данных, что может помочь в выборе метода моделирования и этапов предварительной обработки данных.
  • Использование анализа SHAP для интерпретируемости модели, чтобы понять отношения между различными переменными в наборе данных.
  • Важность оценки производительности модели с использованием соответствующих показателей, таких как точность, точность, полнота, оценка F1 или AUC-ROC, для оценки эффективности подхода к моделированию.

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



Использованная литература:

Авторы: