¿Qué es la estratificación en machine learning?

| Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabías que el proceso de estratificación en machine learning está íntimamente relacionado con el train y el test de diversos modelos?

La estratificación, como su nombre indica, es el acto de dividir en estratos, ya sea cosas, personas, etc. En su definición más primigenia y general, la estratificación es, como lo define la RAE, separar en estragos. De tal modo que la estratificación en machine learning tiene esta misma acepción, pero aplicada a un contexto distinto. A través de un ejemplo, en este post profundizamos en el concepto.

Ejercicio de estratificación en machine learning

ejemplo1 ['label'].value_counts ()

1 60

0 40

Name: label, dtype: int64

Lo que nos quiere decir este resultado es que tenemos 60 instancias de tipo 1 y 40 instancias del otro tipo. No es una división 50-50, sino una división 60-40.

Hemos visto cuál es la división real, sabemos que hay 60% de un tipo y 40% del otro. Lo que veremos es lo que pasa cuando hacemos la división entre train y test sin estratificar, cuál es el resultado de esa división y cómo queda.

Veremos qué porcentaje de unos y ceros hay cuando dividimos entre train y test sin estratificar:

X_train, X_test, y_train, y_test = train_test_split (X1, y1, test_size = 0.3 shuffle = True, random_state = 0)
print (f' Distribución de clases en test SIN estratificación:  {np.unique (y_test, return_counts = True) [1] [0] / len (y_test)}')

Ahora hacemos el mismo proceso, pero con la estratificación en machine learning:

X_train, X_test, y_train, y_test = train_test_split (X1, y1, test_size = 0.3 shuffle = True, random_state = 0, stratify = y1)
print (f' Distribución de clases en test CON estratificación en machine learning: {np.unique (y_test, return_counts = True) [1] [0] / len (y_test)}')

Los resultados, respectivamente, serían:

Distribución de clases en test SIN estratificación en machine learning: 0.366666666666666664

Distribución de clases en test CON estratificación en machine learning: 0.4

Con la fórmula np.unique (y_test, return_counts = True), lo que hacemos es calcular los valores únicos del y_test. Si hacemos clic en el np, esta función nos devuelve una tupla con dos arrays de numpy:

(array ([0., 1.]), array ([12, 18]))

El primer arreglo son las clases, que en este caso sabemos que es binario, por eso aparecen [0, 1]. El segundo son los valores, las instancias de cada clase. Así pues, tenemos que en test son 30 instancias (0.3) y, de esas 30 instancias, 12 son 0 y 18 son 1.

Entonces, como queremos saber qué porcentaje tenemos, lo estamos dividiendo entre el tamaño total de y_test. De esta manera, estamos sacando el porcentaje de ceros. De modo que el porcentaje de ceros, menos el total, es un 40%; y el porcentaje de ceros en test, cuando partimos sin estratificar, aunque es muy similar, es un 36.66%.

Sin embargo, en el momento en el que le decimos que estratifique, el porcentaje de ceros en y_test es exactamente igual al porcentaje de ceros en la fase completa.

Función Shuffle

El shuffle es una función que nos permite escoger diferentes datos de diferentes lugares y divisiones. Podrías pensar que el shuffle es lo mismo que la estratificación en machine learning, pero no es así.

Imaginemos que estamos midiendo edades, que la variable objetivo de este problema son las edades. Tenemos la clasificación 0-30, 30-60 y 60+. Si tenemos una proporción de 30%, 40%, y 30% en las tres clases, lo que queremos es que en el conjunto de train y en el de test se mantengan esas proporciones. Eso es lo que hace la estratificación en machine learning.

Con el shuffle, por el contrario, todo se hace de manera aleatoria, no hay ningún parámetro que defina que se deben conservar los mismos porcentajes que se tenían anteriormente. Todo se hace randomizando, es decir, escogiendo datos al azar, de modo que en esa selección pueden quedar conjuntos de 10%, 55% y 35%, cuando inicialmente los porcentajes eran de 30%, 30% y 40%.

¿Cómo continuar avanzando?

Ahora que has entendido esta temática y la gran diferencia entre la estratificación en machine learning y la función shuffle, podemos dar el siguiente paso en este proceso de aprendizaje. Para ello puedes inscribirte en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva de 8 meses en la que adquirirás muchas herramientas teóricas y prácticas para transformar tu futuro y convertirte en un experto de este sector tan demandado. ¡No dejes pasar esta oportunidad y entra ahora para solicitar más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado