Выборка данных
Выборка данных содержит порядка 10000 строк и 15 столбцов.Вот некоторые из параметров:
- Возраст
- Пол
- Количество денежных средств на счету
Задача
- Найти параметры максимально влияющие на отток клиентов.
- Создание гипотезы, предсказывающей отток клиентов банка.
Инструментарий
- pandas
- sklearn
- matplotlib
- numpy
Импорт библиотек
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn import svm
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error
import numpy as np
from sklearn.naive_bayes import GaussianNB
Загрузка и просмотр данных
dataframe = pd.read_csv("../input/Churn_Modelling.csv")
dataframe.head()
Преобразование данных
Для правильной работы классификатора необходимо преобразование категориального признака в числовой.На представленных выше данных в глаза сразу бросается два столбца: «Пол» и «Географическое положение». Проведем преобразования:
dataframe['Geography'].replace("France",1,inplace= True)
dataframe['Geography'].replace("Spain",2,inplace = True)
dataframe['Geography'].replace("Germany",3,inplace=True)
dataframe['Gender'].replace("Female",0,inplace = True)
dataframe['Gender'].replace("Male",1,inplace=True)
Создание корреляционной матрицы
correlation = dataframe.corr()
plt.figure(figsize=(15,15))
sns.heatmap(correlation, vmax=1, square=True,annot=True,cmap='cubehelix')
plt.title('Correlation between different fearures')
plt.show()
Корреляционная показывает, какие параметры будут влиять на результат. Сразу можно выделить 3 положительные корреляции: «Баланс счета», «Возраст», «Географическое положение».
Кросс валидация
Для избежания проблем с переобучением разделим наш набор данных:
X_train, X_test, y_train, y_test = train_test_split(
X, Y, test_size=0.4, random_state=0)
Прогноз
clf = GaussianNB()
clf = clf.fit(X_train ,y_train)
clf.score(X_test, y_test)
Точность предсказания составила ~78%, что является неплохим результатом.
Комментарии (10)
ElvinFox
24.05.2017 15:59+1Как-то внезапно оборвалась статья… Ощущение что это только шапка и первый параграф
fowler
24.05.2017 16:30+3Это какой-стеб, наверное.
Если класс клиента (уйдет, не уйдет) кодируется значениями 0 и 1, а, судя по dataframe.corr(), это так, то использование корреляционной матрицы тут вообще недопустимо: мало того что Вы притащили в анализ тестовые данные (корр. матрица по всему датафрейму) так еще и сравнили с искомым классом.
Корреляционная матрица на ранговых данных (пол, местоположение, наличие кредитной карты) должна использовать корреляцию Кендалла, а не Пирсона по умолчанию. Мало того невозможно найти корреляцию между ранговыми и непрерывными полями данных — это сути корреляции противоречит!
Корреляция не показывает, какие данные повлияют на результат, она используется для нахождения сильно линейно зависимых друг от друга признаков, которые, при использовании линейных моделей, начнут «перетягивать» на себя коэффициенты линейного уравнения, что снизит точность модели. Потому, обычно, один из таких признаков исключают.
А в целом, статья непонятна начинающему, не имеет объяснений — Вы даже классификатор не описали!!, оперирует неверными понятиями и учит плохому. Дети, не делайте так.puff1n
25.05.2017 00:13Корреляционная матрица на ранговых данных (пол, местоположение, наличие кредитной карты)...
Какие же пол и наличие кредитной карты ранговые данные? Это номинальные показатели.
fowler
25.05.2017 09:39Согласен, недосмотрел.
Для номинальных переменных используются критерии сходства на базе теста хи-квадрат.
tomzarubin
26.05.2017 12:35мало того что Вы притащили в анализ тестовые данные
А что тут плохого? Вы же не модель строите, чтобы не строить корреляционную матрицу по всему датасету.
lash05
24.05.2017 19:18dataframe['Geography'].replace(«France»,1,inplace= True)
— поменяйте Испанию с Германией и почувствуйте разницу.
dataframe['Geography'].replace(«Spain»,2,inplace = True)
dataframe['Geography'].replace(«Germany»,3,inplace=True)
Andy_U
24.05.2017 23:35Совершенно неправильно заменять наименование страны на его «номер». Ну, почему у Вас «Германия» оказалась больше, чем «Испания», а «Испания» больше «Франции»? А правильно из одного признака сделать столько логических признаков, сколько есть разных стран. Попробуйте, наверняка результат сразу улучшится.
hose314
Не понял
Kwent
Тоже не совсем понял как интерпретировать результаты, отрицательные значения высокие по модулю тоже сильно влияют или только положительные?
Vodolazskyi
корреляционные коэффициенты близкие к 1 и -1 показывают высокую линейную зависимость, разница лишь в направленности (прямая/обратная). 0 — отсутствие зависимости.
однако, для задачи классификации лучше использовать information value (IV) для определения предсказательной силы параметра. Поправьте, если я не прав.