El algoritmo KNN y que alfajor serias

Si solo viniste para saber que alfajor sos, hace click aquí, te llevara al test, si queres saber mas, te recomendamos que pases por ahí, sigas las instrucciones y después retomes esta lectura, ¡Suerte!


Si viviste las antiguas épocas de facebook (épocas de pet society y no de los grupos de compra-venta) seguramente alguna vez te topaste con algún tipo de predictor que según algunos de tus gustos te decía que tan cercano a X objeto te pareces, como por ejemplo, una fruta, un auto, etc. Por lo general esos test tenían pocos resultados posibles, y su funcionamiento era muy básico. Por ejemplo si el test es "¿En que casa de Hogwarts estarías?", como habían 4 resultados posibles, las preguntas tenían 4 respuestas posibles, una que correspondía a cada casa, para el resultado final se sumaban las respuestas de cada una y se veía cual tenia más. A nosotros no nos gusta ese sistema por que es poco escalable y súper evidente, así que lo llevamos a otro nivel.


¿Entonces como lo hicieron? ¿Magia?

Para explicarlo de manera sencilla, nuestro test lo hicimos mediante un algoritmo denominado KNN (los k vecinos cercanos por sus siglas en ingles, sí, exacto, parecido a un barrio privado). Es un algoritmo del tipo de aprendizaje automático denominado supervisado, que se utiliza para predecir categorías; el objetivo de este, es poner una etiqueta basándose solamente en como son los vecinos de ese dato, en otras palabras funciona a base del "Dime con quien andas, y te diré quien eres..." (el algoritmo más pre-juicioso que existe).

Es de los algoritmos de clasificación más sencillos que hay, lo cual hace que, entendiéndolo bien y con un poco de maña, se pueda aplicarlo en excel.

Volviendo al test, para determinar que tipo de alfajor eres, realizamos una serie de preguntas, unas divertidas más que otras, para determinar en que zona de los alfajores se encuentran los datos que has ingresado, de esa forma podemos encontrar cual es tu alfajor vecino más cercano y decirte que pareces a un Guaymallen de fruta o a un Jorgito.

¿Como funciona KNN?

Imaginemos que queremos hacer otro clasificador, uno de golosinas, podemos tener caramelos, alfajores y gomitas. Para nosotros (y para hacer más sencillo el ejemplo), una golosina tiene solamente 2 características, el precio y la cantidad de azúcar.
Si tuviéramos muchos tipos de cada uno, y los graficaramos, tendríamos un grafico muy parecido a este:



Podemos ver que hay zonas bien definidas para cada tipo de golosina. por lo que si nosotros solo conocemos el precio y cantidad de azúcar de una golosina, pero no sabemos que es, podemos agregarla en el gráfico y ver en que zona esta.

Gráficamente es muy fácil, pero para que la computadora lo haga eficiente necesitamos una forma matemática, entonces, elegimos un valor entero "k", por ejemplo 3, y buscamos la distancia de cada punto a nuestro punto incógnita y, vemos cuales son los "k" más cercanos, osea que, son los 3 valores más cercanos a nuestro punto, en este caso. si la mayoría de esos puntos son, caramelos, entonces nuestra golosina es un caramelo.

Para la distancia usamos al famoso teorema de Pitágoras.


Ahora lo vamos a complicar un poco mas, ¿que pasa si tenemos mas de 3 características? En este caso no lo podremos graficar en un plano por que con 6 características, necesitaríamos un gráfico de 6D, sin embargo matemáticamente es lo mismo, usamos pitágoras ampliada:

Si se te complica entender mas de 3 dimensiones, te dejamos un vídeo del mismísimo Carl Sagan en Cosmos que lo explica.




¿En que mas se utiliza este tipo de aprendizaje automático?

Es muy útil para varios campos profesionales, como en áreas de la salud, análisis para imágenes satelitales, finanzas, ciencias políticas, reconocimiento de algunas plantas y de vides, hasta puede ser aplicado en ambientes políticos complejos para clasificar los potenciales votantes de un posible candidato.

¿Qué tipo de alfajor sos?

Bueno ya esta, ahora si, a lo que vinieron, Alfajores. Explicaremos paso a paso (como la receta para hacer el alfajor) como hicimos este proceso.

Para todo el programa utilizamos el lenguaje Python, en Jupyter Notebooks, si no conoces de programación no te preocupes, te explicaremos paso a paso que fue lo que hicimos. Si conoces del tema, abajo esta nuestro código fuente.

Modelo de alfajor

Primeramente debimos modelar matemáticamente lo que es un alfajor, en otras palabras, ¿que características tiene un alfajor? Ademas del nombre y una pequeña descripción, le dimos 6 parámetros:

  • Precio
  • Rareza
  • Popularidad
  • Tamaño
  • Pesadez
  • Romanticismo

Cabe destacar que en nuestro caso buscamos atributos que de cierta forma puedan compartir los alfajores con las personas, por mas que tengan connotaciones distintas como lo que es ser "pesado" para una persona y un alfajor.

Preguntas Usuario

Primero, debemos consultarle al usuario algunas características suyas o cuanto se identifica con "X" afirmación, para luego, estas afirmaciones pasarlas a datos válidos que sean legibles para el predictor, como por ejemplo:
  • ¿Eres una persona que se considere sociable o que tiene muchos amigos?
  • ¿Te consideras una persona deportista?
  • ¿Sos una persona romántica?
  • ¿Que tanto te gustan los dulces?
  • ¿Cuales son tus citas favoritas?
  • ¿Gastas mucho o poco en ropa?
  • ¿Cuánto medís?
  • Etc...

Base de datos

Luego teníamos que tener alfajores para comparar, creamos la base de datos de alfajores, lo que fue una parte bastante engorrosa, no tomamos datos precisos de información nutricional de estos, ni de bases de datos de kioskos, ni nada de eso, utilizamos un método mucho más preciso e infalible, nuestro criterio.

Generamos una clase con los respectivos atributos (lo pueden ver arriba, en el link del test, si ponen para mostrar el código), para luego insertarlo en una lista que sea legible y comparable con los valores de entrada del usuario y, además, utilizable para el predictor.

Limpieza de datos

El algoritmo KNN requiere que todos las características tengan escalas similares. lo cual es lógico, queremos ver cercanía de datos, y si uno esta en escala de 1 a 10 y otro del 1 al 10 000, la computadora pensara que los datos del 1 al 10 000 estan mas alejados, lo cual puede no ser cierto. Para eso tenemos que llevar a que todos los datos de cada característica estén entre 0 y 1, siendo 0 para el/los menores valores y 1 para el/los máximos valores.

KNN

Ahora si, podemos pasar al algoritmo, no hace falta que lo programemos nosotros de 0, ya otras personas lo hicieron por nosotros y lo dejaron en la librería sklearn que utilizaremos.
Para aplicarlo, primero generamos una clase de este algoritmo y luego, lo alimentamos con los datos que tenemos y ya lo tenemos listo para predecir. (más info en el código fuente abajo)

Problemas

Sí, durante el desarrollo del programa, tuvimos muchísimos problemas de diseño en el test, principalmente en el entendimiento de la matemática que sustenta todo, al llamado "Sesgo Tatin" pero esa historia te la contaremos en la próxima publicación.

Conclusiones

Por último y para terminar, además de divertirnos y adivinar nuestro tipo de alfajor, aprendimos conceptos nuevos, utilizar gráficos que jamas habíamos usado (de los cuales también tuvimos inconvenientes) y finalmente darle algo de letra para que ustedes se diviertan con nosotros.

Dejanos en los comentarios que tipo de alfajor les quedo, acá nos toco un Balcarce a Igna y un Havanna a Martín. Y por último si te gusto, compartilo (Por ahí tu pareja es un entre 2 y vos te enteras con esto).

Este post tiene segunda parte

Haciendo click aqui iras al articulo donde explicamos como algunas complicaciones con esta app aparentemente sencilla nos llevaron a aplicar matematicas avanzadas.

¿Ganas de mas?

  • Si buscas una guía completa de como aplicar KNN en un proyecto de python, te recomendamos esta guía
  • Si queres ver otros test, te dejamos este test sobre que tipo de personalidad tenes, con evidencia científica.
  • Como siempre, nuestro código fuente esta aquí.

¿Necesitas ayuda?
Podes hacer preguntas aca abajo en los comentarios o en nuestros perfiles de linkedin que puedes encontrar en este link. Si estas buscando ayuda en proyectos grandes, nos podes contratar por medio de nuestra consultora haciendo click en este link . Hacemos ingenieria electromecanica, civil, desarrollo de software y varias cosas mas.

Comentarios

Entradas populares de este blog

¿Se pueden escribir algoritmos que evolucionen por si mismos? (Algoritmos genéticos/evolutivos)

Jugá mejor al truco usando ciencia de datos

Quisimos hacer un test de Alfajores, y terminamos aplicando matematicas avanzadas