Base de test para OpenMind v1.01

Objetivo: Predecir la baja de clientes

Analizaremos los modelos supervisados usando un ejemplo: predicción del churn en un telco (cancelación de clientes) (inspirado en http://blog.yhat.com/posts/predicting-customer-churn-with-sklearn.html). El valor de predecir el churn radica en que normalmente es más fácil retener a los clientes actuales que conseguir nuevos. El dataset que analizaremos contiene las siguientes variables: Churn?

  • State: los estados de Estados Unidos categorical
  • Account length: cuánto tiempo ha estado activa la cuenta (dias)
  • Area code: código de area
  • Phone: número de teléfono
  • Int'l Plan: si tiene plan internacional o no
  • VMail Plan: si tiene voice mail contratado o no
  • VMail Message: número de mensajes de voz
  • Day Mins: minutos que el cliente habló de día
  • Day Calls: llamadas que el cliente hizo de día
  • Day Charge: cargo que recibió el cliente de día
  • Eve Mins: minutos que el cliente habló por la tarde
  • Eve Calls: llamadas que el cliente hizo por la tarde
  • Eve Charge: cargo que recibió el cliente por la tarde
  • Night Mins: minutos que el cliente habló por la noche
  • Night Calls: llamadas que el cliente hizo por la noche
  • Night Charge: cargo que recibió el cliente por la noche
  • Intl Mins: minutos que el cliente habló de forma internacional
  • Intl Calls: llamadas internacionales que el cliente hizo
  • Intl Charge: cargo que recibió el cliente por llamadas internacionales
  • CustServ Calls: número de llamadas al servicio de atención al cliente
  • Churn?: Si el cliente se ha ido o no

In [7]:
import pandas as pd
import numpy as np

In [8]:
df = pd.read_table('churn.csv', sep=",")
df.head()


Out[8]:
State Account Length Area Code Phone Int'l Plan VMail Plan VMail Message Day Mins Day Calls Day Charge ... Eve Calls Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge CustServ Calls Churn?
0 KS 128 415 382-4657 no yes 25 265.1 110 45.07 ... 99 16.78 244.7 91 11.01 10.0 3 2.70 1 False.
1 OH 107 415 371-7191 no yes 26 161.6 123 27.47 ... 103 16.62 254.4 103 11.45 13.7 3 3.70 1 False.
2 NJ 137 415 358-1921 no no 0 243.4 114 41.38 ... 110 10.30 162.6 104 7.32 12.2 5 3.29 0 False.
3 OH 84 408 375-9999 yes no 0 299.4 71 50.90 ... 88 5.26 196.9 89 8.86 6.6 7 1.78 2 False.
4 OK 75 415 330-6626 yes no 0 166.7 113 28.34 ... 122 12.61 186.9 121 8.41 10.1 3 2.73 3 False.

5 rows × 21 columns


In [14]:
churn_df = pd.read_csv("churn.csv")
col_names = churn_df.columns.tolist()
churn_result = churn_df['Churn?']
y = np.where(churn_result == 'True.',1,0)

In [24]:
# We don't need these columns
to_drop = ['State','Phone',"Int'l Plan",'VMail Plan', 'Churn?']
churn_feat_space = churn_df.drop(to_drop,axis=1)
churn_feat_space["target"] = y

In [25]:
churn_feat_space.head()


Out[25]:
Account Length Area Code VMail Message Day Mins Day Calls Day Charge Eve Mins Eve Calls Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls Intl Charge CustServ Calls target
0 128 415 25 265.1 110 45.07 197.4 99 16.78 244.7 91 11.01 10.0 3 2.70 1 0
1 107 415 26 161.6 123 27.47 195.5 103 16.62 254.4 103 11.45 13.7 3 3.70 1 0
2 137 415 0 243.4 114 41.38 121.2 110 10.30 162.6 104 7.32 12.2 5 3.29 0 0
3 84 408 0 299.4 71 50.90 61.9 88 5.26 196.9 89 8.86 6.6 7 1.78 2 0
4 75 415 0 166.7 113 28.34 148.3 122 12.61 186.9 121 8.41 10.1 3 2.73 3 0

In [26]:
churn_feat_space.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3333 entries, 0 to 3332
Data columns (total 17 columns):
Account Length    3333 non-null int64
Area Code         3333 non-null int64
VMail Message     3333 non-null int64
Day Mins          3333 non-null float64
Day Calls         3333 non-null int64
Day Charge        3333 non-null float64
Eve Mins          3333 non-null float64
Eve Calls         3333 non-null int64
Eve Charge        3333 non-null float64
Night Mins        3333 non-null float64
Night Calls       3333 non-null int64
Night Charge      3333 non-null float64
Intl Mins         3333 non-null float64
Intl Calls        3333 non-null int64
Intl Charge       3333 non-null float64
CustServ Calls    3333 non-null int64
target            3333 non-null int32
dtypes: float64(8), int32(1), int64(8)
memory usage: 429.7 KB

In [27]:
churn_feat_space.to_csv("Basis_Train.csv")