Está en la página 1de 23

3.

Machine learning
3.1 Aprendizaje supervisado
3.1.1 Conceptos generales
Machine learning desarrolla algoritmos que hace que las máquinas aprendan
por su cuenta, y permite que respondan determinadas preguntas con un cierto
grado de certeza. Para poder aplicar estos algoritmos existen dos tipos de
aprendizajes: supervisado y no supervisado.

¿Qué es el aprendizaje supervisado? Consiste en entrenar un algoritmo y


brindar las preguntas que se denominan features (características), y las
respuestas que se definen como el target. Es decir, que a partir de ciertas
variables se sabe cuál es la respuesta a predecir. Por ejemplo, si se desea
predecir la cantidad de clientes que van a ingresar en un local, tendríamos
como variables para dar respuesta a ese objetivo los siguientes datos: día de
la semana, día del mes, horario, ubicación del local, etc. Es decir, en el ejemplo
las características serían todas las variables listadas, mientras que el target
es la cantidad de clientes.

Dentro del aprendizaje supervisado se destacan dos tipos de predicciones


que pueden variar por el tipo de dato que se desea predecir, o por el
problema a dar solución, estos son: regresión y clasificación.

Figura 1: Clasificación y regresión

Fuente: [Imagen sin título sobre clasificación y regresión], s.f., https://cdn-images-


1.medium.com/max/1600/1*ASYpFfDh7XnreU-ygqXonw.png
3.1.2 Predicciones
Dentro de los aprendizajes supervisados se encuentra el modelo de regresión,
que es uno de los algoritmos más populares y de los mejores para entender
en machine learning. Por lo tanto, en esta sección se desarrollará un caso
ejemplo y se explicará cómo funciona el algoritmo.

Un buen ejemplo para el uso de regresión lineal es la predicción del sueldo


de los empleados de una empresa, para esto vamos a usar un dataset
generado para el ejercicio, que está compuesto por el sueldo y la antigüedad
en meses de cada uno de los empleados de esta empresa ficticia. A partir del
dataset, la empresa necesita recategorizar un empleado que está en distintas
condiciones que el resto con relación al sueldo, este empleado tiene 60 meses
de antigüedad. Es decir, que es necesario predecir cuál es el sueldo óptimo
para este empleado con su antigüedad determinada.

Como se puede ver en la figura 2, la relación entre el sueldo y la antigüedad


en meses de cada uno de los empleados es lineal y puede ser representado
por una recta, por lo tanto, de esta forma podemos predecir que el sueldo
para el empleado de 60 meses de antigüedad es de $82000
aproximadamente.

Figura 2: Dispersión y tendencia de sueldo vs. Antigüedad

Sueldo vs antigüedad
140.000,00

120.000,00

100.000,00

80.000,00 Datos Reales


Estimado
60.000,00
Lineal (Datos Reales)
40.000,00

20.000,00

-
0 20 40 60 80 100 120

Fuente: elaboración propia.


La predicción del sueldo de los empleados es un problema de regresión lineal
que nos permite predecir el valor de los sueldos por la representación de una
recta que está dada por una función lineal determinada.

¿Cómo funciona un algoritmo de regresión lineal? todo aprendizaje


supervisado cuenta con un dataset que se llama conjunto de entrenamiento
(training set). En el ejemplo anterior, son los sueldos de los empleados con su
respectiva antigüedad, y el objetivo era aprender sobre los datos ya
conocidos y poder predecir cuál es el sueldo para una antigüedad
determinada, y de esa forma acercarse a la realidad con datos.

Figura 3: Aprendizaje supervisado

Fuente: elaboración propia.

El training set es la entrada al algoritmo para determinar cuál es la función


resultante (hipótesis) que aplica para predecir la variable dependiente, en el
ejemplo sería el sueldo de cada empleado, en donde se usa como entrada la
antigüedad en meses, luego se aplica la función hipótesis y se finaliza con el
resultado que es la predicción determinada.

En el ejemplo, al tener solo una variable de entrada y una de salida, se la


denomina regresión univariante, mientras que los problemas que tienen más
de una variable de entrada se las llama regresión multivariante.

Una vez obtenida la función hipótesis que sería de la forma:

𝑦̂ = 𝜃0 + 𝜃1 𝑋
Se puede observar que es una función lineal, en donde 𝑋 es la variable de
entrada (la antigüedad del empleado) y la 𝑦̂ es la variable a predecir (sueldo
del empleado). Mientras que las constantes 𝜃0 y 𝜃1 representan la inclinación
y la posición de la recta para representar el dataset a predecir.

Una vez obtenida la hipótesis es necesario determinar qué tan preciso es el


modelo para predecir por medio de esa función, para eso existe lo que se
llama costo de la función. Que consiste en ver la diferencia en promedio del
dato que se realizó la predicción en relación al dato real, en el ejemplo sería
determinar la diferencia entre el sueldo que se predijo versus el sueldo real
para esa antigüedad. El costo de función más conocido es el error cuadrático
medio.

𝑚
1
𝐽(𝜃0 , 𝜃1 ) = ∑(𝑦̂ 𝑖 − 𝑦 𝑖 )2
2𝑚
𝑖=1

El costo de la función calcula para cada resultado estimado 𝑦̂ 𝑖 la diferencia


con el dato real 𝑦 𝑖 , al cuadrado de esa resta y la suma de todos los resultados
para llevar a un valor que determina que tan acertado es el modelo.

Una vez que se sabe cómo generar la hipótesis y cómo medir que tan buena
es, hay que continuar por encontrar la mejor hipótesis para el problema a
predecir. Para esto se utiliza gradient descent que permite optimizar el
algoritmo cambiando los parámetros 𝜃0 , 𝜃1 en cada iteración hasta encontrar
el costo de función mínimo.

En resumen, consiste en elegir de forma aleatoria valores para 𝜃0 , 𝜃1 e ir


cambiando en cada iteración con el uso del costo de la función, en donde se
intenta generar grandes rateos de aprendizaje, es decir, que en cada
iteración sea menor el costo de la función y de forma significativa con respecto
a la iteración anterior. De esta forma, hasta que los rateos de aprendizajes
no sean amplios, se encuentra el punto óptimo con los parámetros 𝜃0 , 𝜃1 ya
definidos, y así se encuentra la hipótesis más adecuada para dar solución al
problema.

A continuación, vamos a realizar un ejemplo práctico con código Python para


demostrar cuáles son los pasos y el resultado de realizar una regresión lineal
simple.

Contamos con un dataset que contiene la antigüedad de los empleados de una


empresa y el salario correspondiente de cada uno.
Problema para resolver: ¿cuál es el salario que le corresponde a todos los
empleados de la empresa a partir de su tiempo de pertenencia en la misma?

A partir de esto sabemos que el dato a predecir es el salario (nuestra 𝑦̂),


mientras que solo tenemos una variable independiente que es la antigüedad
(𝑋). Una muestra de la información:

Tabla 1: Muestra de dataset de salario según antigüedad

Antigüedad Salario
1.1 39343.00
1.3 46205.00
1.5 37731.00
2.0 43525.00
2.2 39891.00
2.9 56642.00
3.0 60150.00
3.2 54445.00
3.2 64445.00
3.7 57189.00
3.9 63218.00
4.0 55794.00
4.0 56957.00
4.1 57081.00

Fuente: elaboración propia.

Una vez que contamos con la información es necesario validar qué tipo de
relación tienen los datos, y de acuerdo con un diagrama de dispersión se llega
a la conclusión que es lineal:
Figura 4: Dispersión de antigüedad vs. salario

Fuente: elaboración propia.

Por lo tanto, se puede realizar la predicción por medio de un modelo de


regresión lineal. Para resolver el problema se deben realizar los siguientes
pasos:

1) Dividir el dataset en dos muestras: por un lado, los datos que se van a
utilizar para que el modelo aprenda y la otra, para probar el modelo.
En Python sería:

𝑋_𝑡𝑟𝑎𝑖𝑛, 𝑋_𝑡𝑒𝑠𝑡, 𝑌_𝑡𝑟𝑎𝑖𝑛, 𝑌_𝑡𝑒𝑠𝑡


= 𝑡𝑟𝑎𝑖𝑛_𝑡𝑒𝑠𝑡_𝑠𝑝𝑙𝑖𝑡(𝑥, 𝑦, 𝑡𝑒𝑠𝑡_𝑠𝑖𝑧𝑒
= 1/3, 𝑟𝑎𝑛𝑑𝑜𝑚_𝑠𝑡𝑎𝑡𝑒 = 0)

Donde:
i. 𝑋_𝑡𝑟𝑎𝑖𝑛: un conjunto de valores de antigüedades que
se usan para entrenar el modelo de regresión.
ii. 𝑋_𝑡𝑒𝑠𝑡: un conjunto de valores de antigüedades que
se usan para probar el modelo.
iii. 𝑌_𝑡𝑟𝑎𝑖𝑛: son los salarios de las antigüedades
𝑋_𝑡𝑟𝑎𝑖𝑛 que se toman para entrenar al modelo y
saber que predecir.
iv. 𝑌_𝑡𝑒𝑠𝑡: son los salarios de las antigüedades.
𝑋_𝑡𝑒𝑠𝑡 que se utilizan para determinar cómo predice
el modelo.
2) Entrenar el modelo de regresión lineal con las muestras de
entrenamiento:

𝑓𝑟𝑜𝑚 𝑠𝑘𝑙𝑒𝑎𝑟𝑛. 𝑙𝑖𝑛𝑒𝑎𝑟_𝑚𝑜𝑑𝑒𝑙 𝑖𝑚𝑝𝑜𝑟𝑡 𝐿𝑖𝑛𝑒𝑎𝑟𝑅𝑒𝑔𝑟𝑒𝑠𝑠𝑖𝑜𝑛


𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑜𝑟 = 𝐿𝑖𝑛𝑒𝑎𝑟𝑅𝑒𝑔𝑟𝑒𝑠𝑠𝑖𝑜𝑛()
𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑜𝑟. 𝑓𝑖𝑡(𝑋_𝑡𝑟𝑎𝑖𝑛, 𝑌_𝑡𝑟𝑎𝑖𝑛)

Se utiliza una librería de Python para resolver regresiones lineales


linear regression y luego se envía como parámetro primero las
variables dependientes (antigüedad) y luego la variable a predecir
(salario).

3) Prueba del modelo entrenado con el conjunto de datos de prueba:

𝑦_𝑝𝑟𝑒𝑑 = 𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑜𝑟. 𝑝𝑟𝑒𝑑𝑖𝑐𝑡(𝑋_𝑡𝑒𝑠𝑡)

4) Conocer la función lineal que representa la predicción de los datos:

𝑝𝑟𝑖𝑛𝑡("𝐸𝑙 𝑚𝑜𝑑𝑒𝑙𝑜 𝑙𝑖𝑛𝑒𝑎𝑙 𝑒𝑠: 𝑌 = {: .5} +


{: .5}𝑋". 𝑓𝑜𝑟𝑚𝑎𝑡(𝑟𝑒𝑔. 𝑖𝑛𝑡𝑒𝑟𝑐𝑒𝑝𝑡_[0], 𝑟𝑒𝑔. 𝑐𝑜𝑒𝑓_[0][0]))

Resultado de la sentencia:

𝑌 = 2.5792𝑒 + 04 + 9450.0𝑋

5) Visualizar la función lineal con respecto a los datos reales del salario
de los empleados con respecto a la antigüedad:
Figura 5: Resultado del modelo antigüedad vs. salario

Fuente: elaboración propia.

Para finalizar, se pueden obtener datos estadísticos para saber qué tan
confiable es el modelo resultante. Para continuar con el ejemplo y con el uso
de Python sería de la siguiente forma:

𝑖𝑚𝑝𝑜𝑟𝑡 𝑠𝑡𝑎𝑡𝑠𝑚𝑜𝑑𝑒𝑙𝑠. 𝑎𝑝𝑖 𝑎𝑠 𝑠𝑚


𝑋 = 𝑠𝑚. 𝑎𝑑𝑑_𝑐𝑜𝑛𝑠𝑡𝑎𝑛𝑡(𝑥)
𝑚𝑜𝑑𝑒𝑙 = 𝑠𝑚. 𝑂𝐿𝑆(𝑦, 𝑋). 𝑓𝑖𝑡()
𝑚𝑜𝑑𝑒𝑙. 𝑠𝑢𝑚𝑚𝑎𝑟𝑦()

Se obtiene como resultado un R-squared (R cuadrado) de 0,957 y nos permite


determinar qué tan confiable es la predicción con valores que van desde 0
hasta 1, donde los valores cercanos a 1 indican que el modelo es confiable.
Por lo tanto, el resultado del modelo de regresión lineal utilizado para
predecir el salario a partir de la antigüedad de los empleados es confiable
y robusto.
Figura 6: Datos estadísticos del modelo

Fuente: elaboración propia.

3.1.3 Clasificación
En el caso de querer predecir o clasificar datos que no son tipos de datos
continuos existen diversos algoritmos adaptados para resolver este tipo de
problemas, entre ellos se encuentra la regresión logística, árboles de decisión,
random forest, etc. En esta sección se va a demostrar el uso de la regresión
logística y cómo trabaja, teniendo en cuenta que es un algoritmo simple, fácil
de implementar y es robusto para utilizar en muchas tareas.

La regresión logística es un método de clasificación binaria que brinda como


salida un valor discreto binario entre 0 y 1. Algunos ejemplos de estos pueden
ser la clasificación de los correos electrónicos si son spam (1) o no (0), como
así también determinar si un paciente tiene cáncer o no.
Este algoritmo mide la relación entre la variable que se quiere predecir
(variable dependiente o target) y una o más variables independientes
(features) por medio del uso de probabilidades estimadas, que luego deben
ser transformadas en valores binarios para lograr de esta forma una
predicción. Este cambio de un valor probabilístico a un dato binario se hace
con el uso de la función sigmoide. Esta función se caracteriza por tener una
gráfica en forma de S y la curva tiene límites finitos de 0 cuando × se
aproxima a −∞ y de 1 cuando × se aproxima a +∞.

Figura 7: Función sigmoide

Fuente: elaboración propia.

Por lo tanto, cuando ×= 0 el resultado de la función es 0,5, y como uso de la


regresión logística se determina que un resultado mayor a 0,5 es 1, mientras
que un valor menor a 0,5 es 0.

Por ejemplo, el resultado de un algoritmo de regresión logística que un


paciente tenga cáncer es 0,30 significa que la predicción del modelo es que
el paciente no tiene cáncer, debido a que 0,30 es menor a 0,5 y el algoritmo
lo interpreta como un 0.

En resumen, el algoritmo de regresión logística realiza una predicción con


resultados probabilísticos que luego son transformados en datos binarios por
la función sigmoide y de esta forma se logra la clasificación de un sí y un no.
Figura 8: Pasos regresión logística

Fuente: [Imagen sin título sobre pasos regresión logística], s. f.,


https://machinelearningblogcom.files.wordpress.com/2018/04/bildschirmfoto-2018-04-23-um-12-
05-381.png?w=1400

Para clasificar mejor se busca mejorar la predicción por medio de métodos


como la estimación máxima de verosimilitud, que consiste en buscar inferencias
de un valor a partir de un conjunto de observaciones. De esta forma, se
obtiene un modelo más robusto y con predicciones más acertadas.

¿Cuándo usar regresión logística? se recomienda utilizar cuando la variable


que se desea predecir solo tiene dos posibles valores, es decir, cuando son
valores discretos y no continuos. Una forma sencilla de verlo es por medio de
un gráfico en donde se puede observar cómo se diferencian las regiones una
para cada clase, por ejemplo, los signos + y los signos - en el gráfico a
continuación.
Figura 9: Función de clasificación

Fuente: [Imagen sin título sobre función de clasificación], s. f.,


https://machinelearningblogcom.files.wordpress.com/2018/04/perceptron_binary.png?w=345&h=2
69

¿Cómo clasificar si son más de dos clases? existen dos métodos para realizar
una clasificación para más de dos clases. Por ejemplo, si se desea clasificar
las siguientes frutas: manzana (0), banana (1) y naranja (2), ya no estaríamos
bajo valores binarios, por lo tanto, sería más difícil clasificar por medio del
uso de regresión logística con una clasificación binaria. Entonces, existen
algunas alternativas para dar solución a este caso de problemas:

 Uno versus todos: en este se debería entrenar 3 modelos, uno para cada
clase (manzana, banana y naranja), de esta forma existe un modelo para
detectar manzana con un resultado 1, y 0 en el caso que sea cualquiera
de las otras, y replicando esta lógica para el resto de las frutas.
 Uno versus uno: crear un modelo para cada par de frutas. En este caso
sería un modelo para predecir manzana vs. banana, otro para distinguir
entre manzana vs. naranja, y así continuar para cada par de frutas.

El algoritmo de regresión logística es uno de los más usados debido a que es


muy eficiente, no necesita grandes requisitos computacionales, es altamente
interpretable, es fácil de regularizar y se puede utilizar para comparar la
performance con otros modelos de mayor complejidad.

Para finalizar, se desarrolla un ejemplo con el uso de Python y la librería


disponible para entrenar modelos de regresión logística. El dataset a utilizar
cuenta con información de clientes que usaron una publicidad web para
acceder a un producto en venta y se determina si compró o no esa persona
(1 compró y 0 no compró).

Tabla 2: muestra de dataset de clientes

Sueldo ¿Compró?
Género Edad
estimado
Male 45 26000 1
Male 46 28000 1
Female 48 29000 1
Male 45 22000 1
Female 47 49000 1
Male 48 41000 1
Female 45 22000 1
Male 46 23000 1
Male 47 20000 1
Male 49 28000 1
Female 47 30000 1
Male 29 43000 0
Male 31 18000 0
Male 31 74000 0
Female 27 137000 1
Female 21 16000 0
Female 28 44000 0

Fuente: elaboración propia.

Problema para resolver: ¿qué clientes van a comprar o no el producto?

A partir de esto sabemos que el dato a predecir es la compra del producto


(nuestra 𝑦̂), mientras que solo usaremos dos variables independientes que son
la edad y el sueldo estimado (𝑋).
Debido que se necesita predecir un valor discreto y binario, es decir, si compró
o no (0 o 1), se puede utilizar como modelo para predecir una regresión
logística. Por lo tanto, para aplicarlo hay que seguir ciertos pasos:

1) Dividir el dataset en dos muestras, por un lado los datos que se van a
utilizar para que el modelo aprenda y la otra para probar el
modelo. En Python sería:

𝑋_𝑡𝑟𝑎𝑖𝑛, 𝑋_𝑡𝑒𝑠𝑡, 𝑦_𝑡𝑟𝑎𝑖𝑛, 𝑦_𝑡𝑒𝑠𝑡


= 𝑡𝑟𝑎𝑖𝑛_𝑡𝑒𝑠𝑡_𝑠𝑝𝑙𝑖𝑡(𝑋, 𝑦, 𝑡𝑒𝑠𝑡_𝑠𝑖𝑧𝑒
= 0.25, 𝑟𝑎𝑛𝑑𝑜𝑚_𝑠𝑡𝑎𝑡𝑒 = 0)
Donde:
i. 𝑋_𝑡𝑟𝑎𝑖𝑛: un conjunto de valores de antigüedades que
se usan para entrenar el modelo de regresión.
ii. 𝑋_𝑡𝑒𝑠𝑡: un conjunto de valores de antigüedades que se
usan para probar el modelo.
iii. 𝑦_𝑡𝑟𝑎𝑖𝑛: son los salarios de las antigüedades 𝑋_𝑡𝑟𝑎𝑖𝑛
que se toman para entrenar al modelo y saber que
predecir.
iv. 𝑦_𝑡𝑒𝑠𝑡: son los salarios de las antigüedades
𝑋_𝑡𝑒𝑠𝑡 que se utilizan para determinar cómo predice
el modelo.

2) Entrenar el modelo de regresión logística con las muestras de


entrenamiento:

𝑓𝑟𝑜𝑚 𝑠𝑘𝑙𝑒𝑎𝑟𝑛. 𝑙𝑖𝑛𝑒𝑎𝑟_𝑚𝑜𝑑𝑒𝑙 𝑖𝑚𝑝𝑜𝑟𝑡 𝐿𝑜𝑔𝑖𝑠𝑡𝑖𝑐𝑅𝑒𝑔𝑟𝑒𝑠𝑠𝑖𝑜𝑛


𝑐𝑙𝑎𝑠𝑠𝑖𝑓𝑖𝑒𝑟 = 𝐿𝑜𝑔𝑖𝑠𝑡𝑖𝑐𝑅𝑒𝑔𝑟𝑒𝑠𝑠𝑖𝑜𝑛(𝐶 = 1𝑒5, 𝑠𝑜𝑙𝑣𝑒𝑟
= ′𝑙𝑏𝑓𝑔𝑠′, 𝑚𝑢𝑙𝑡𝑖_𝑐𝑙𝑎𝑠𝑠 = ′𝑚𝑢𝑙𝑡𝑖𝑛𝑜𝑚𝑖𝑎𝑙′)
𝑟𝑒𝑔𝑟𝑒𝑠𝑠𝑜𝑟. 𝑓𝑖𝑡(𝑋_𝑡𝑟𝑎𝑖𝑛, 𝑌_𝑡𝑟𝑎𝑖𝑛)

Se entrena el modelo de regresión logística con la muestra de


entrenamiento definido en el paso anterior.

3) Prueba del modelo entrenado con el conjunto de datos de prueba:

𝑦_𝑝𝑟𝑒𝑑 = 𝑐𝑙𝑎𝑠𝑠𝑖𝑓𝑖𝑒𝑟. 𝑝𝑟𝑒𝑑𝑖𝑐𝑡(𝑋_𝑡𝑒𝑠𝑡)

4) Visualizar la función lineal que realiza la división entre los clientes que
compran (el valor es igual a 1) y cuáles no (el valor es igual a 0), a
partir de eso se puede predecir los próximos clientes que tengan las
mismas características de alguna de las clasificaciones y predecir su
comportamiento:
Figura 10: Clasificador de clientes

Fuente: elaboración propia.


3.2 Aprendizaje no
supervisado
3.2.1 Conceptos generales
El aprendizaje no supervisado no cuenta como entrada el target a predecir,
como si lo tiene el aprendizaje supervisado, es decir, que solo recibe como
input las features. Este tipo de aprendizaje complejiza encontrar la respuesta
y es por eso que son algoritmos que ayudan a describir la estructura de los
datos, en un estilo de carácter exploratorio. Su función es agrupar los datos
de estos features de acuerdo a su similitud y de esta forma crear grupos que
puedan llevar a una interpretación del aprendizaje.

3.2.2 Clustering
Todos los problemas de aprendizaje no supervisado se destacan en hacer
inferencias sobre un conjunto de datos (datasets) para lograr alguna
predicción en particular. En el caso de clustering, que es un modelo no
supervisado, consiste en agrupar una colección de datos agrupados entre sí
porque comparten ciertas similitudes. Por ejemplo, se puede aplicar un
algoritmo de clustering para segmentar una cartera de clientes en grupos
similares, ya sea por sus actividades, su género, cosas que les gusta y no en
las redes sociales, edad, su historial de actividad con respecto a la empresa,
etc. A partir de esta segmentación se pueden crear campañas de marketing
personalizadas, detectar síntomas para ciertas enfermedades, agrupar
noticias según el tipo de información que tiene (como lo hace Google News),
o para gran cantidad de aplicaciones.

En esta sección se explica cómo funciona, y algunos ejemplos de uno de los


algoritmos de clustering más conocidos: K-means.

K-means es un algoritmo de aprendizaje no supervisado y es uno de los más


sencillos para el uso de clustering. Para su uso solo requiere de dos datos, por
un lado, la cantidad K que sería el número de clusters, y por el otro lado la
cantidad de datos a entrenar, en otras palabras, el dataset a analizar. Means
en el K-means se refiere a que se obtiene la media de los datos para
encontrar el centroide de cada cluster.

Una vez definido el valor de K, es decir de la cantidad de clusters con los que
se van a trabajar el algoritmo sigue los siguientes pasos:

 Inicialización: es la primera tarea que realiza el algoritmo y consiste en


asignar de forma aleatoria los puntos de los centroides dependiendo la
cantidad de K que se definieron. En el ejemplo solo son dos centroides
𝑘 = 2, el azul y el anaranjado.

Figura 11: Inicialización

Fuente:[Imagen sin título sobre inicialización], s. f., https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-


content/uploads/2017/02/Initialisation-300x256.png

 Asignación de cluster: luego de asignar los centroides, se determina la


distancia de cada uno de los datos con respecto a los dos centros del cluster
y a partir de la distancia mínima se asigna al segmento que corresponde.
De esta forma todo el dataset queda dividido en dos grupos: azules y
anaranjados.

Figura 12: Asignación de cluster

Fuente:[Imagen sin título sobre asignación de cluster], s. f.,


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-content/uploads/2017/02/cluster-assignment-1.png

 Mover el centroide: para optimizar la división de los clusters se mueven los


centros a partir del promedio de todos los integrantes de cada clusters, por
ejemplo, en el caso de los azules se moverá el centro a partir del promedio
calculado de todos los datos azules.
Figura 13: Movimiento de centroide

Fuente:[Imagen sin título sobre movimiento de centroide], s. f.,


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-content/uploads/2017/02/Move-centroid-2-
300x234.png

 Optimización: los dos pasos anteriores se deben iterar hasta que el


centroide del cluster no cambie de posición y quede en un punto estático.

Figura 14: Optimización

Fuente:[Imagen sin título sobre optimización], s.f., https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-


content/uploads/2017/02/Centroid-convergence-2-300x234.png

 Convergencia: es cuando los puntos de los centroides se encuentran en un


punto estático y son representativos para cada uno de los segmentos.

El resultado de este algoritmo varía de acuerdo con la cantidad K definidos


en un principio, por lo tanto, es recomendable utilizar algún método para
seleccionar la cantidad de clusters o realizar una N cantidad de modelos
de K-means, variar la cantidad de segmentos y luego comparar que tan
robusto es cada uno de ellos y seleccionar el modelo ganador.

Para finalizar, se brinda un ejemplo desarrollado en Python para segmentar


los clientes de un shopping en base a sus atributos. Este dataset contiene datos
de cada uno de los clientes que realizaron compras y a los cuales se puede
determinar qué acciones tomar a partir de los segmentos obtenidos de cada
uno.
Tabla 3: Muestra de dataset de clientes del shopping

Edad Cantidad de Ingreso en


Id del cliente Género
ventas miles ($)
1 Male 19 15 39
2 Male 21 15 81
3 Female 20 16 6
4 Female 23 16 77
5 Female 31 17 40
6 Female 22 17 76
7 Female 35 18 6
8 Female 23 18 94
9 Male 64 19 3
10 Female 30 19 72
11 Male 67 19 14
12 Female 35 19 99
13 Female 58 20 15
14 Female 24 20 77
15 Male 37 20 13
16 Male 22 20 79
17 Female 35 21 35
18 Male 20 21 66
19 Male 52 23 29
Fuente: elaboración propia.
Problema para resolver: ¿cómo segmentar a los clientes a partir de sus
atributos?

Debido a que no está definido el target a predecir, es decir, no existe una


variable dependiente, se habla que este problema es no supervisado. Por lo
tanto, se puede resolver por medió de clustering y obtener de esta forma la
segmentación de los clientes según sus datos en común.

A partir de un diagrama de dispersión se puede observar la relación de las


diferentes features, como pueden ser la cantidad de ventas vs. ingresos y de
esta forma ver ciertas condiciones que llevan a segmentos, pero aun no
definidos por un modelo.

Figura 15: Dispersión de cantidad de ventas vs. ingresos

Fuente: elaboración propia.


Una vez analizadas las distintas variables, y la relación entre ellas, se continua
con el entrenamiento del modelo de clustering que se usará. En este caso se
desarrolla con k-means que fue el modelo descripto previamente. Para
implementar este tipo de modelo hay que definir la cantidad de centroides
que se van a definir y de acuerdo con esto será el número de clusters
resultantes. En código Python se resolvería de la siguiente forma:

𝑓𝑟𝑜𝑚 𝑠𝑘𝑙𝑒𝑎𝑟𝑛. 𝑐𝑙𝑢𝑠𝑡𝑒𝑟 𝑖𝑚𝑝𝑜𝑟𝑡 𝐾𝑀𝑒𝑎𝑛𝑠

𝑘𝑚𝑒𝑎𝑛𝑠 = 𝐾𝑀𝑒𝑎𝑛𝑠(𝑛_𝑐𝑙𝑢𝑠𝑡𝑒𝑟𝑠 = 4)

𝑘𝑚𝑒𝑎𝑛𝑠. 𝑓𝑖𝑡(𝑋)

𝑦_𝑘𝑚𝑒𝑎𝑛𝑠 = 𝑘𝑚𝑒𝑎𝑛𝑠. 𝑝𝑟𝑒𝑑𝑖𝑐𝑡(𝑋)

Donde 𝑛_𝑐𝑙𝑢𝑠𝑡𝑒𝑟𝑠 recibe como asignación la cantidad de clusters que


debería segmentar el modelo a partir de las distintas features (determinado
por 𝑋), es decir, que el resultado del modelo a predecir serían 4 clusters que
comparten ciertos patrones entre los miembros de sus grupos.

Figura 16: K-means con cuatro clusters

Fuente: elaboración propia.


Como conclusión, se puede observar que los clientes que compraron en el
shopping se clasifican en esos cuatro grupos y que tienen ciertos patrones en
común, esto permitiría tomar acciones sobre los grupos y no a nivel
poblacional. Por ejemplo, enviar una promoción adaptada para el cluster
número uno de clientes que realiza una elevada cantidad de compras y tienen
entre 20-30 años.
Referencias
[Imagen sin título sobre clasificación y regresión]. (s.f.). Recuperada de
https://cdn-images-1.medium.com/max/1600/1*ASYpFfDh7XnreU-
ygqXonw.png

[Imagen sin título sobre pasos regresión logística]. (s.f.). Recuperada de


https://machinelearningblogcom.files.wordpress.com/2018/04/bildschirmfot
o-2018-04-23-um-12-05-381.png?w=1400

[Imagen sin título sobre función de clasificación]. (s.f.). Recuperada de


https://machinelearningblogcom.files.wordpress.com/2018/04/perceptron_
binary.png?w=345&h=269

[Imagen sin título sobre inicialización]. (s.f.). Recuperada de


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-
content/uploads/2017/02/Initialisation-300x256.png

[Imagen sin título sobre asignación de cluster]. (s.f.). Recuperada de


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-
content/uploads/2017/02/cluster-assignment-1.png

[Imagen sin título sobre movimiento de centroide]. (s.f.). Recuperada de


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-
content/uploads/2017/02/Move-centroid-2-300x234.png

[Imagen sin título sobre optimización]. (s.f.). Recuperada de


https://d1jnx9ba8s6j9r.cloudfront.net/blog/wp-
content/uploads/2017/02/Centroid-convergence-2-300x234.png

También podría gustarte