En este artículo realizaremos un ejercicio que consiste en calcular el ratio de desbalance de un problema. Vamos a trabajar con datos de fuga de una compañía telefónica. El objetivo de este ejercicio es predecir cuándo los clientes van a abandonar la compañía.
El ejercicio de calcular el ratio de desbalance de un problema tiene varias etapas:
- Cargar los datos churn.csv y ejecutar un primer análisis exploratorio de los datos cargados.
- Nos damos cuenta de que el problema está desbalanceado, así que debemos calcular el ratio de desbalance.
¿Qué son los datos desbalanceados?
Los datos desbalanceados son datos que, debido a múltiples razones, no guardan medidas de proporcionalidad adecuadas en un problema de clasificación.
Cuanto mayor sea el grado de desbalance, peor será el rendimiento del ejercicio de clasificación y, por lo tanto, una métrica para calcular el ratio de desbalance adecuada debería mostrar una correlación negativa con el rendimiento de la clasificación.
Calcular el ratio de desbalance de un problema: ejercicio
#Calcular el ratio de desbalance de un problema
dataa = pd.read_csv ('./data / churn.csv')
data.head ().T
0 | 1 | 2 | 3 | 4 | |
state | KS | OH | NJ | OH | OK |
account length | 128 | 07 | 137 | 84 | 75 |
area code | 415 | 415 | 415 | 408 | 415 |
phone number | 382 – 4657 | 371 – 191 | 358 – 1921 | 375 – 9999 | 330 – 6626 |
international plan | no | no | no | yes | yes |
voice mail plan | yes | yes | no | no | no |
number vmail messages | 25 | 26 | 0 | 0 | 0 |
total day minutes | 265.1 | 161.6 | 243.4 | 299.4 | 166.7 |
total day calls | 110 | 123 | 114 | 71 | 113 |
total day charge | 45.07 | 22.47 | 41.38 | 50.9 | 28.34 |
total eve minutes | 197.4 | 195.5 | 121.2 | 61.9 | 148.3 |
total eve calls | 99 | 103 | 110 | 88 | 122 |
total eve charge | 16.78 | 16.62 | 10.3 | 5.26 | 12.61 |
total night charge | 244.7 | 254.4 | 162.6 | 196.9 | 186.9 |
total night calls | 91 | 103 | 104 | 89 | 121 |
total night charge | 11.01 | 11.45 | 7.32 | 8.86 | 8.41 |
total intl minutes | 10 | 13.7 | 12.2 | 6.6 | 10.1 |
total intl calls | 3 | 3 | 5 | 7 | 3 |
total intl charge | 2.7 | 3.7 | 3.29 | 1.78 | 2.73 |
customer service calls | 1 | 1 | 0 | 2 | 3 |
churm | False | False | False | False | False |
Vamos a hacer un análisis muy básico con data.types.
#Calcular el ratio de desbalance de un problema
data.types
state: object
account length: int64
area code: int64
phone number: object
international plan: object
voice mail plan: object
number vmail messages: int64
total day minutes: float64
total day calls: int64
total day charge: float64
total eve minutes: float64
total eve calls: int64
total eve charge: float64
total night minutes: float64
total night calls: int64
total night charge: float64
total intl minutes: float64
total intl calls: int64
total intl charge: float64
customer service calls: int64
churn: bool
dtype: object
Este resultado ha arrojado que tenemos instancias que no son enteros. Esto se convierte en un problema.
#Calcular el ratio de desbalance de un problema
data.describe ().T
Ahora, vamos a calcular el ratio de desbalance de este ejercicio, una vez hemos mostrado ya todo el dataset. La función que podemos usar para calcular la distribución de las características en la variable objetivo.
Es decir, en la variable objetivo, que es churn (un boolean, o sea que solo acepta valores binarios), lo que nos dice es que está desbalanceada. Esto significa que la variable no es un 50/50, sino que el 0 o el 1 tienen más registro que el otro.
Lo que vamos a hacer entonces en el ejercicio es calcular el ratio de desbalance.
Para la distribución de las clases utilizamos el value counts:
#Calcular el ratio de desbalance de un problema
data ['churn'].value_counts ()
False: 2850
True: 483
Name: churn, dtype: int64
Tenemos este resultado. Vemos que hay mayoría de false, por encima de true. Si nos piden el ratio y no un valor, lo primero que hay que hacer es esto:
#Calcular el ratio de desbalance de un problema
(data ['churn'].value_counts () / data.shape [0]) * 100
Dividimos entre el número de registros, que es equivalente al value counts, y entre el data shape, que es el número de filas.
El resultado es:
False: 85.508551
True: 14.491449
Name: churn, dtype: float64
Tenemos un 85,5 % de false y un 14.5 % de true. Este resultado sería el ratio de desbalance.
¿Quieres seguir aprendiendo?
El Big Data es una de las áreas en las que más trabajos se ofertan. Si quieres acceder a este tipo de opciones laborales, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la que adquirirás todos los conocimientos teóricos y prácticos que te permitirán obtener el trabajo de tus sueños. ¡No esperes más para seguir tu camino hacia el éxito y solicita información ahora!