Преимущества ансамблевых методов, таких как Random Forests, AdaBoost, XGBoost и т. д.

  1. Менее подвержены ошибкам из-за выбросов
  2. Масштабирование переменных не требуется, поскольку разбиение дерева основано на упорядочении переменных, а не на абсолютном значении.
  3. Более устойчивая производительность против пропущенных значений
  4. Поддерживает распределенные вычисления, а задания можно разделить на несколько процессоров.
  5. Используется в качестве «серебряной пули» в промышленности

Недостатки:

  1. Менее интерпретируемый по сравнению с традиционными статистическими моделями, такими как линейная регрессия, логистическая регрессия и т. д.
  2. Склонен к переоснащению

Анализ оттока с использованием данных банковских клиентов из SuperDataScience в Kaggle. Ссылка здесь:



#Importing the necessary Libraries
from numpy import loadtxt
import pandas as pd
import numpy as np
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from pandas import read_csv
from pandas import set_option
from xgboost import *
from matplotlib import *
from matplotlib import pyplot
from pandas import read_csv
from pandas import set_option
from pandas.tools.plotting import scatter_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

from sklearn.metrics import accuracy_score
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import ExtraTreesClassifier

Загрузка и подготовка данных для анализа

PATH = "../input"
dataset = pd.read_csv(f'{PATH}/Churn_Modelling.csv')
dataset1 = dataset
#dropping unnecessary columns
columns = ['RowNumber','CustomerId','Surname']
dataset1.drop(columns,axis=1,inplace = True)
#creating dummy variables for categorical variables
columns_to_convert=['Gender','Geography']
dataset1 = pd.get_dummies(columns = columns_to_convert,data=dataset1)
# Test options and evaluation metric
num_folds = 10
seed = 7
scoring = 'accuracy'
#Split data into training and test sets
X = dataset1.iloc[:,0:13]
Y = dataset1.iloc[:,13]

seed = 7
test_size = 0.3
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)

Моделирование для прогнозирования оттока клиентов банка

# ensembles
ensembles = []
ensembles.append(('AB', AdaBoostClassifier()))
ensembles.append(('GBM', GradientBoostingClassifier()))
ensembles.append(('RF', RandomForestClassifier()))
ensembles.append(('ET', ExtraTreesClassifier()))
results = []
names = []
for name, model in ensembles:
  kfold = KFold(n_splits=num_folds, random_state=seed)
  cv_results = cross_val_score(model, X_train, y_train, cv=kfold, scoring=scoring)
  results.append(cv_results)
  names.append(name)
  msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
  print(msg)

Вывод

Моделирование оттока с использованием XGBoost

# fit model on training data
model = XGBClassifier(learning_rate=0.1,max_depth=5,n_estimators=300,n_jobs=-1)
model.fit(X_train, y_train)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

XGBoost Точность

Функция Важность

# Feature Importance
plot_importance(model)
pyplot.show()