АвторШри Пуджита Мандали

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

Как найти лучшую модель для набора данных?

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

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

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

# Import dataset
df = pd.read_csv("../input/bank_customer_churn/Bank_Customer_Churn_Prediction.csv")
#shape of dataset
df.shape
# Head of the dataset
df.head()

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

#checking if the any data is missing
df.isnull().sum()
# dropping features that are insignificant
# Dropping customer_id column as it is just a unique identifiers or number assigned to each customer.
df = df.drop(["customer_id"],axis = 1)

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

#converting the categorical values of gender and country to numerical values
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

for column in df.columns:
    # Fit the label encoder to the dataframe column
    le.fit(df[column])
    # Replace the dataframe column with the encoded values
    df[column] = le.transform(df[column])

print(df)

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

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

# Histogram plots for continuous features.
numerical_ft = [["credit_score"],["age"],["tenure"],["balance"],["products_number"],["credit_card"],["active_member"],["estimated_salary"],["churn"]]
plt.figure(figsize=(30,25))
for i,col in enumerate(numerical_ft,1):
    plt.subplot(5,2,i)
    sns.histplot(df[col],kde=True,bins = 5)

# heatmap
plt.figure(figsize=(15,10))
sns.heatmap(df.corr(),annot = True)

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

Перед масштабированием функций — столбцы в наборе данных об оттоке банков:

num_feat = ["credit_score","age","tenure","balance","products_number","credit_card","active_member","estimated_salary","churn"]
# Create x to store scaled values as floats
x = df[num_feat].values.astype(float)
# Preparing for normalizing
min_max_scaler = preprocessing.MinMaxScaler()
# Transform the data to fit minmax processor
x_scaled = min_max_scaler.fit_transform(x)
# Run the normalizer on the dataframe
df[num_feat] = pd.DataFrame(x_scaled)
plt.figure(figsize=(20,7))
sns.boxplot(data = df)

5. Разделите данные на наборы для обучения и тестирования. Разделите предварительно обработанные данные на наборы для обучения и тестирования, обычно в соотношении 70:30 или 80:20.

# Splitting the dataset into training and testing sets
X = df.drop('churn', axis=1)
y = df['churn']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Приведенный выше код разбивает данный набор данных на наборы для обучения и тестирования с помощью функции train_test_split из библиотеки scikit-learn, где 80% данных используются для обучения, а 20% — для тестирования, а целевая переменная «отток» отбрасывается. из входных признаков X.

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

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

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

# Logistic Regression
lr = LogisticRegression()
lr.fit(X_train, y_train)
lr_preds = lr.predict(X_test)

# Random Forest
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
rf_preds = rf.predict(X_test)

# Decision Tree
dt = DecisionTreeClassifier()
dt.fit(X_train, y_train)
dt_preds = dt.predict(X_test)

# Naive Bayes
nb = GaussianNB()
nb.fit(X_train, y_train)
nb_preds = nb.predict(X_test)

# SVM
svm = SVC()
svm.fit(X_train, y_train)
svm_preds = svm.predict(X_test)

Приведенный выше код обучает и оценивает пять различных моделей машинного обучения на предварительно обработанных обучающих данных с использованием библиотеки scikit-learn. Обученные модели — это логистическая регрессия, случайный лес, дерево решений, наивный байесовский алгоритм и метод опорных векторов (SVM). Метод fit() используется для обучения каждой модели на обучающих данных, а метод predict() используется для прогнозирования тестовых данных. Прогнозируемые значения хранятся в отдельных переменных (lr_preds, rf_preds, dt_preds, nb_preds и svm_preds) для каждой модели.

7. Оценка моделей.Оценка модели — это процесс измерения эффективности модели машинного обучения в заданном наборе данных с использованием предопределенных показателей, характерных для решаемой задачи, таких как точность, достоверность, полнота, оценка F1, AUC-ROC. для классификации и MSE, RMSE, MAE, R-квадрат для регрессии. Выбор оценочной метрики зависит от проблемы и целей модели, а набор данных делится на обучающий и тестовый наборы для обучения и оценки модели. Затем производительность модели оценивается на основе выбранной метрики.

# evaluate each model on the testing set and store the metrics
for model in models:
    y_pred = model.predict(X_test)
    accuracy_scores.append(accuracy_score(y_test, y_pred))
    precision_scores.append(precision_score(y_test, y_pred))
    recall_scores.append(recall_score(y_test, y_pred))
    f1_scores.append(f1_score(y_test, y_pred))

# create a dataframe to display the evaluation metrics for each model
results = pd.DataFrame({'Model': ['Logistic Regression', 'Random Forest', 'Decision Tree', 'Naive Bayes', 'SVM'],
                        'Accuracy': accuracy_scores,
                        'Precision': precision_scores,
                        'Recall': recall_scores,
                        'F1 Score': f1_scores})
print(results)

Сравните производительность моделей на основе показателей оценки. Определите модель с лучшими характеристиками.

import matplotlib.pyplot as plt
# plot the evaluation metrics for each model
fig, ax = plt.subplots(figsize=(10, 6))
x = results['Model']
y1 = results['Accuracy']
y2 = results['Precision']
y3 = results['Recall']
y4 = results['F1 Score']
ax.bar(x, y1, label='Accuracy')
ax.bar(x, y2, label='Precision')
ax.bar(x, y3, label='Recall')
ax.bar(x, y4, label='F1 Score')
# add labels and title to the plot
ax.set_xlabel('Model')
ax.set_ylabel('Score')
ax.set_title('Evaluation Metrics for Different Models')
ax.legend()
# display the plot
plt.show()

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

Заключение

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

Справочник по ноутбукам

https://colab.research.google.com/drive/1UaQmaU8Rd9EBTJWut4Nm4xtWcdIvU0BN?usp=sharing

Рекомендации

https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/