Абстрактный

Этот набор данных содержит данные о 5000 клиентов, и информация включает возраст клиента, доход и другие демографические данные; взаимоотношения клиента с банком; и реакция клиента на самую последнюю кампанию личного кредита (персональный кредит). Только 480 (или 9,6%) из этих 5000 клиентов приняли потребительский кредит, предоставленный им в ходе предыдущей кампании.

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

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

Описание переменной:

Вот информация об атрибутах набора данных: Информация об атрибутах:

1. ID: ID клиента

2. Возраст: возраст клиента в полных годах.

3. Опыт: # лет профессионального опыта

4. Доход: Годовой доход клиента ($000)

5. Почтовый индекс: почтовый индекс домашнего адреса.

6. Семья: Размер семьи клиента

7.CCAvg : Средн. расходы на кредитные карты в месяц ($000)

8. Образование: уровень образования. 1: старшекурсник; 2: Выпускник; 3: Продвинутый/Профессиональный

9. Ипотека: Стоимость ипотечного кредита, если таковой имеется. (000 долларов США)

10. Потребительский заем. Принял ли этот клиент личный заем, предложенный в ходе последней кампании?

11. Счет ценных бумаг: есть ли у клиента счет ценных бумаг в банке?

12. Счет CD: есть ли у клиента счет депозитного сертификата (CD) в банке?

13. Онлайн. Пользуется ли клиент средствами интернет-банкинга?

14. Кредитная карта: использует ли клиент кредитную карту, выданную удостоверением личности?

На какой вопрос вы пытаетесь ответить? Как вы определили это как задачу машинного обучения?

Здесь я пытаюсь спрогнозировать потребительский кредит на основе некоторых его характеристик, таких как возраст, доход и опыт. Цифры от 3 до 8 используются для обозначения личного займа, где 3 — наихудший, а 8 — наилучший.

Личный кредит обозначается целым числом от 3 до 8. Это обычная проблема классификации.

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

Какова производительность этой задачи на уровне человека? Какой уровень производительности необходим?

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

Исследовательский анализ данных

Приведенный выше код показывает сведения о столбцах в наборе данных с типами данных.

При проверке любых нулевых значений в наборе данных у нас нет нулевых значений, так что все готово.

plt.rcParams["figure.figsize"] = (20, 10)
for i in df.columns:
    values = df[i].values
    f = Fitter(values, distributions=get_common_distributions())
    f.fit()
    print(f.summary())
    plt.ylabel("Density")
    plt.xlabel(i)
    plt.show()

График плотности создается для каждого столбца с помощью Matplotlib. Ось Y помечена как плотность, ось X помечена именем столбца i, а для отображения графика вызывается функция plt.show().

Предварительные выводы EDA.

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

Распределение данных для обучающего набора данных: я изучил распределение вероятностей каждой функции.

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

Гистограмма: анализ гистограммы был проведен для определения влияния переменной на личный кредит.

Вышеупомянутые графики дают точное представление о том, как личный кредит меняется по отношению ко всем ключевым факторам.

Несколько выводов, которые мы можем интерпретировать из приведенного выше графика следующим образом:

Персональный кредит увеличивается по мере увеличения опыта.

Индивидуальный кредит увеличивается по мере снижения дохода.

Личный кредит увеличивается по мере уменьшения семьи.

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

Это предварительные выводы о том, как отдельные параметры влияют на личный кредит.

Очистка данных

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

Важность функции и выбор

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

Этот код создает нормализованный фрейм данных, удаляя столбец «личный кредит» из исходного фрейма данных «data4». Значения остальных столбцов в кадре данных «df» нормализуются, чтобы попасть в диапазон от 0 до 1. Затем столбец «Личный кредит» добавляется обратно в нормализованный кадр данных для создания df.

import statsmodels.formula.api as smf  # OLS model Library

results = smf.ols(
    "Personal_Loan ~ ID + Age + Experience + Income + ZIP_Code + Family + CCAvg + Education + Mortgage + Securities_Account + CD_Account + Online + CreditCard ",
    data=df
).fit()
print(results.summary())  # OLS Linear Model Summary

  • Модель OLS имеет личный кредит в качестве зависимой переменной и идентификатор, возраст, опыт, доход, почтовый индекс, семью, CCAvg, образование, ипотеку, учетную запись ценных бумаг, учетную запись CD, онлайн, кредитную карту в качестве независимых переменных.
  • Сводка включает информацию о производительности модели, значимость и коэффициенты каждой независимой переменной, а также статистические показатели, такие как значение R-квадрата и p-значения.

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

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

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

Нулевая гипотеза

Статистически это может быть достигнуто с помощью P-Value.

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

Особенности в нашем наборе данных со значением P ‹ 0,05

  • Доход
  • Опыт
  • Семья
  • Образование
results2 = smf.ols(
  "Personal_Loan ~ Experience + Income  + Family + Education ",
    data=df_norm_feature_selected,
).fit()
print(results2.summary())  # OLS Linear Model Summary

def percentage_change(l1, l2):
    percent_change = np.abs(l2 - l1) / (l1 + 0.000000001)
    avg_change = np.mean(percent_change)
    return avg_change
print(
    "Accuracy of predicting the correct Personal_Loan of df using all features = ",
    100 - percentage_change(df_norm["Personal_Loan"], df_norm["predicted_Personal_Loan_1"]),
)

  • Выбранные функции: ID, Возраст, Опыт, Доход, ZIP_Code, Семья, CCAvg, Образование, Ипотека, Securities_Account, CD_Account, Интернет, Кредитная карта. Целевая переменная: личный кредит. Вычисляет прогнозируемые значения, используя все функции исходного фрейма данных, кроме личного кредита. Прогнозируемые значения округляются и сохраняются в новом столбце «predicted_Personal_Loan_1» в df_norm.
  • Определяет функцию «percentage_change» для расчета процентного изменения между двумя списками чисел. Среднее процентное изменение, рассчитанное для всех элементов в списках и возвращенное как «avg_change».
  • Практически не влияет на результат, наблюдаемый при выборе только статистически значимых признаков. Модель, использующая все признаки, немного более точна, чем модель, использующая только существенные признаки (90,40%).

Как вы разделили данные на обучение и тестирование?

Здесь 90% и 10% данных соответственно были разделены на данные обучения и тестирования.
Этот код отделяет входные признаки (хранящиеся в переменной «X») от целевой переменной («Личный кредит»). перед подготовкой данных для обучения и тестирования. Затем функция «train_test_split» из библиотеки «sklearn» используется для разделения данных на обучающий и тестовый наборы. Для воспроизводимости для случайного состояния установлено значение 42, а размер теста — 10%.
Затем код выбирает 100 точек данных для последующего использования в анализе SHAP из обучающих и тестовых наборов. Переменные «x_train_100» и «x_test_100» содержат образцы соответственно.

Подгонка линейной модели

import sklearn

linear_model = sklearn.linear_model.LinearRegression()  # Initializing a Linear Model
linear_model.fit(x_train, y_train)  # Training a linear model

Затем метод fit() используется для обучения модели с использованием обучающих данных (x_train и y_train). Затем обученная модель используется для прогнозирования тестовых данных (x_test), после чего прогнозы округляются с помощью функции round(). Переменная y_linear_predictions содержит предсказанные значения.

Подбор модели на основе дерева

from sklearn.ensemble import RandomForestRegressor

tree_model = RandomForestRegressor(
    max_depth=X.shape[1], random_state=0, n_estimators=10
)
tree_model.fit(x_train, y_train)
y_tree_based_predictions = tree_model.predict(x_test).round()

Используя RandomForestRegressor и обучающие данные, этот код создает модель регрессии случайного леса. Параметр n_estimators управляет количеством деревьев, а параметр max_depth управляет максимальной глубиной каждого дерева решений в лесу. Затем тестовый набор используется для генерации прогнозов на основе модели, и с помощью метода round() прогнозируемые значения округляются до ближайшего целого числа. Переменная y_tree_based_predictions содержит предсказанные значения.

Подбор машины опорных векторов (SVM)

from sklearn import svm

regr = svm.SVR()
svm_model = regr.fit(x_train, y_train)
svm_predictions = svm_model.predict(x_test).round()

Этот код создает модель для прогнозирования целевой переменной Personal Loan на основе функций x_train с использованием регрессии опорных векторов (SVR) из scikit-learn. Для обучения модели метод fit вызывается после создания экземпляра класса SVR с гиперпараметрами по умолчанию. Выходные данные округляются до ближайшего целого числа после того, как для тестовых данных (x_test) сделаны прогнозы с использованием метода прогнозирования. Переменная svm_predictions содержит предсказанные значения.

Подбор регрессора MLP

from sklearn.neural_network import MLPRegressor

regr = MLPRegressor(random_state=1, max_iter=500).fit(x_train, y_train)
mlp_predictions = regr.predict(x_test).round()

Использование AutoML для поиска лучшей модели

  • Первая функция, autoML(), использует обучающие данные для выполнения AutoML на двух кадрах данных H2O, df_train и df_test. Затем функция возвращает обученный объект AutoML и исходные обучающие и тестовые кадры данных.
  • Вторая функция, getBestModel(), использует таблицу лидеров для выбора наиболее эффективной модели из обученного объекта AutoML aml. Функция создает словарь имен моделей и соответствующих им индексов таблицы лидеров, а затем выбирает топ-модель либо как лучшую модель GLM, либо как самую высокопроизводительную модель без ансамбля.

В целом, используя функциональность H2O AutoML, эти функции обеспечивают эффективный и автоматический выбор модели.

Чтобы найти модель с наилучшей производительностью, обученный объект AutoML передается в качестве аргумента функции getBestModel(). Переменной autoML_model присваивается созданная модель с наилучшей производительностью.

В наборе тестовых данных для получения прогнозов используется функция pred() объекта autoML_model. Для прогнозируемых значений метод.round() используется для округления значений до ближайшего целого числа.

Переменной autoML_best_predictions присваиваются полученные прогнозные значения, чтобы можно было оценить производительность модели. С помощью функции h2o.as_list() кадры H2O, содержащие прогнозируемые и истинные значения, преобразуются в списки.

Гиперпараметрическая настройка лучшей модели AutoML

Набор данных разделен кодом на три раздела: обучение, проверка и тестирование. Затем функция H2OGridSearch используется для создания сетки гиперпараметров для модели XGBoost. ntrees, max_depth и sample_rate — это гиперпараметры, которые будут проверены. После использования обучающих и проверочных наборов для обучения сетки он выбирает лучшую модель на основе ее значения R-квадрата. Затем с помощью функции find_best_model_from_grid определяется лучшая модель из сетки, и результат сохраняется в переменной best_xgboost_model.

Какой показатель оценки вы используете

Метрики оценки, которые я использую:

  • Среднеквадратическая ошибка
  • Среднеквадратичная ошибка
  • Средняя абсолютная ошибка
  • Среднее остаточное отклонение

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

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

Как сравнить показатели обучения, проверки и тестирования

И в наборе данных для обучения, и в наборе данных для проверки топ-модель (модель, настроенная с помощью гиперпараметров AutoML) показала себя превосходно.

Поскольку среднее остаточное отклонение этой модели в наборе данных для обучения и проверки составляет ~ 0,0127.

best_drf_model

# Evaluating the model on Test Data
autoML_best_predictions_2 = best_drf_model.predict(df_test).round()
autoMLpredictions_2 = h2o.as_list(autoML_best_predictions_2, use_pandas=False)
y_test_h2O_2 = h2o.as_list(df_test["Personal_Loan"], use_pandas=False)
autoMLpredictions_2 = flatten(autoMLpredictions_2)
y_test_h2O_2 = flatten(y_test_h2O_2)
print(
    "Accuracy of predicting the correct Personal_Loan of df using MLP Regressor = ",
    100 - percentage_change(y_test, mlp_predictions),
)
print(
    "Accuracy of predicting the correct Personal_Loan of df using Linear Model = ",
    100 - percentage_change(y_test, y_linear_predictions),
)
print(
    "Accuracy of predicting the correct Personal_Loan of df using Tree Based Model = ",
    100 - percentage_change(y_test, y_tree_based_predictions),
)
print(
    "Accuracy of predicting the correct Personal_Loan of df using SVM = ",
    100 - percentage_change(y_test, svm_predictions),
)
print(
    "Accuracy of predicting the correct Personal_Loan of df using best AutoML model = ",
    100 - percentage_change(y_test_h2O, autoMLpredictions),
)
print(
    "Accuracy of predicting the correct Personal_Loan of df using best AutoML model with Tuned Hyper-Parameters = ",
    100 - percentage_change(y_test_h2O_2, autoMLpredictions_2),
)

Из приведенного выше сводного описания моделей, обученных на наборе данных, модель AutoML показала очень хорошие результаты с настроенными гиперпараметрами с точностью 99,59 %.

Интерпретация регрессора SVM с использованием значений SHAP

Здесь ось X — это функция, а ось Y — результат, когда мы изменяем функцию. Серая гистограмма — это распределение переменных в наборе данных, а крест, сделанный E[Feature], E[f(x)] — это ожидаемые значения.

Возьмем функцию fixed_acidity

Крест сделан приблизительно при E[f(x)] 0,0536.

Таким образом, по мере увеличения fixed_acidity ожидаемое значение также увеличивается.

Говоря о красной линии на графике — когда мы даем образец в качестве входных данных (sample_ind = 18) в качестве входных данных для проверки вывода. Построив это, мы можем увидеть разницу между выходом модели и ожидаемым значением.

Интерпретация графика важности функции SHAP для линейной и древовидной модели

Легко понять концепцию важности SHAP: важны функции с высокими абсолютными значениями Шепли. Мы усредняем абсолютные значения Шепли для каждого признака по данным, потому что хотим определить его глобальное значение. Затем характеристики сортируются и отображаются в порядке убывания важности.

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

Интерпретация визуализации водопада SHAP

Рассмотрим тот же образец (sample_ind = 18).

В нем говорится, что f(x) = -0,077 — это то, что мы получили в качестве выходных данных модели, а ожидаемый результат для этого образца был равен 0,054.

Мы подошли довольно близко к его определению, так как разница составляет всего 0,023.

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

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

Затем следовал доход, который оказал негативное влияние и снова снизил потребительский кредит на 0,15 для этой выборки, и так далее.

Используя эту модель, мы можем визуально интерпретировать, почему именно этот конкретный образец дает результат 0,054.

Интерпретируйте сводную диаграмму SVM Model

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

Каждая точка (красная и синяя) представляет собой характеристику личного кредита. Красный представляет высокие значения, тогда как синий представляет низкие значения.

Если точка находится справа от оси Y, то она оказывает положительное влияние, а если она находится слева от оси, то оказывает отрицательное влияние.

Положение точки на оси x представляет интенсивность воздействия, которое она оказала; чем дальше от оси, тем больше интенсивность. Давайте попробуем понять, как функции влияют на модель.

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

График частичной зависимости SHAP для древовидной модели

Визуализация тепловых карт для линейных и древовидных моделей

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

Здесь ось Y — это функции, а ось X — экземпляр этой функции.

Цвет экземпляра определяет, имел ли он положительный или отрицательный эффект своим цветом. Если экземпляр красный, то он имел положительный эффект, а если экземпляр синий, то он имел отрицательный эффект.

Интенсивность цвета прямо пропорциональна интенсивности эффекта. Чем глубже цвет, тем эффектнее функция.

Интерпретация лучшей модели AutoML с настроенными гиперпараметрами

Как распределяются ошибки/остатки и насколько интерпретируема ваша модель

Остаточный анализ

Здесь мы можем видеть полосатые линии остатков, которые являются артефактом наличия целочисленного значения в качестве значения ответа вместо реального значения. Из приведенного ниже графика также видно, что остатки распределены нормально. Остатки означают, что остатки не имеют гетероскедастичности.

Значение переменной

На графике важности переменной мы можем наблюдать, что график повторяет результаты, полученные нами из линейной модели и древовидной модели выше. Важность переменной была масштабирована от 0 до 1 для простоты понимания.

Обзор SHAP

Из сводной диаграммы SHAP мы можем сделать несколько выводов:

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

Положение на оси значений SHAP указывает положительное или отрицательное влияние функции на прогноз. То есть, чем дальше точка данных отстоит от значения формы 0,0, тем сильнее ее влияние. Как мы видим, доход оказывает наибольшее влияние на личный кредит. Цвет точки представляет (красный — высокий, синий — низкий) влияние значения на результат. т. е. — высокая сумма дохода приводит к высокому личному кредиту, низкая сумма дохода приводит к низкому личному кредиту и так далее.

Как мы видим, распределение красных точек в функции «Доход» гораздо шире, чем синих точек. Из этого изображения мы можем понять, что личный кредит значительно увеличивается по мере увеличения суммы дохода. Это не имеет большого значения, если содержание низкое, то есть между значением формы от 0,1 до 0,6 синие точки данных довольно сконцентрированы.

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

Графики частичной зависимости

График частичной зависимости (PDP) дает графическое изображение предельного влияния переменной на отклик. Влияние переменной измеряется изменением среднего отклика. PDP предполагает независимость между функцией, для которой вычисляется PDP, и остальными.

График ICE (индивидуальное условное ожидание)

Поскольку они оба отображают связь между функцией и прогнозом модели, графики ICE и графики PDP сопоставимы друг с другом. Графики PDP, с другой стороны, отображают среднее влияние функции, тогда как графики ICE отображают влияние функции на конкретные экземпляры.

Для иллюстрации рассмотрим функции «Доход и образование». На графике PDP мы видели, что количество личных кредитов увеличивалось, когда доход составлял от 100 до 200, а образование — от 2 до 3. Однако это может быть справедливо не для всех экземпляров в наборе данных. График ICE показывает, что для некоторых экземпляров число \ может значительно увеличиться в этом диапазоне (экземпляр 0-го процентиля), в то время как для других оно может не сильно измениться (экземпляр 100-го процентиля).

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

Заключение:

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

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

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

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

5. Модельная интерпретация серии заданий предлагает наиболее ценные уроки. SHAP, LIME и PDP упростили понимание того, что заставляет модель точно предсказывать результат.

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

  1. https://docs.h2o.ai/h2o/latest-stable/h2o-docs/grid-search.html

2. https://towardsdatascience.com/explain-your-model-with-the-shap-values-bc36aac4de3d

3.https://github.com/aiskunks/YouTube/blob/main/A_Crash_Course_in_Statistical_Learning/Full_ML_Report/Wine-Quality-Analysis.ipynb

4. https://colab.research.google.com/drive/1WCvwjAy8oEGmxth9Xq4bL0UObWVOJ_e4#scrollTo=pU-Xl66u0G3f

Авторы:

  1. Риддхи Вора [ https://www.linkedin.com/in/riddhivora23/]
  2. Ник Беар Браун — средний