Aplicaciones del Machine Learning

Para comentar las  diversas aplicaciones del ML primero vamos a diferenciar entre el Aprendizaje Supervisado y No Supervisado y el Aprendizaje por Refuerzo.

Aprendizaje Supervisado

En el Aprendizaje Supervisado los datos para el entrenamiento incluyen la solución deseada, llamada “etiquetas” (labels). Un claro ejemplo es al clasificar correo entrante entre Spam o no. Entre las diversas características que queremos entrenar deberemos incluir si es correo basura o no con un 1 o un 0. Otro ejemplo son al predecir valores numéricos por ejemplo precio de vivienda a partir de sus características (metros cuadrados, nº de habitaciones, incluye calefacción, distancia del centro, etc.) y deberemos incluir el precio que averiguamos en nuestro set de datos.

Los algoritmos más utilizados en Aprendizaje Supervisado son:

Aprendizaje No Supervisado

En el aprendizaje No Supervisado los datos de entrenamiento no incluyen Etiquetas y el algoritmo intentará clasificar o descifrar la información por sí solo. Un ejemplo en el que se usa es para agrupar la información recolectada sobre usuarios en una Web o en una app y que nuestra Inteligencia detecte diversas características que tienen en común.

Los algoritmos más importantes de Aprendizaje No supervisado son:

Aprendizaje por Refuerzo

Nuestro sistema será un “agente autónomo” que deberá explorar “un espacio” desconocido y determinar las acciones a llevar a cabo mediante prueba y error. Aprenderá por sí mismo obteniendo premios -recompensas- y penalidades la forma óptima para recorrer un camino, resolver un puzzle o comportarse por ejemplo en el Pac Man o en el Flappy Bird. Creará la mejor estrategia posible (políticas) para obtener la mayor recompensa posible en tiempo y forma. Las políticas definirán qué acciones tomar ante cada situación a la que se enfrente.

Los modelo más utilizados son:

  • Q-Learning basado en Procesos de Decisión de Markov (MDP: Markov Decision Process)

Aplicaciones de ML  y Ejemplos

Las aplicaciones más frecuentes del Machine Learning son:

Reconocimiento de Imágenes

Se utilizan diversos algoritmos para poder comprender imágenes sobre todo Deep Learning), encontrar algo en particular o agrupar zonas. Sabemos que las imágenes son conjuntos de pixeles continuos y cada uno contiene información del color que tiene que “iluminar” (por ejemplo RGB). Los ejemplos comunes son los de OCR Reconocimiento de Caracteres ópticos, es decir, encontrar letras, agruparlas, encontrar espacios y poder descifrar textos y el otro ejemplo es el de detectar personas en imágenes, presencia humana en cámaras de seguridad o más recientemente se utilizan redes neuronales convolucionales para detectar rostros: reconocimiento facial, seguramente más de una vez Facebook fue capaz de localizar a tus primos y hermanos en tus álbumes de fotos.

Nuevo: Clasificación de imágenes en Python

Reconocimiento de Voz

A partir de las ondas de sonido sintetizadas por el micrófono de tu ordenador, smartphone o de tu coche, los algoritmos de Machine Learning son capaces de limpiar ruido, intuir los silencios entre palabras y comprender tu idioma para interpretar tus ordenes, ya sea “Siri, Agregar un Recordatorio para el lunes que viene” o “Ok Google, Poner música de Coldplay” o hasta hacer reservas y pedir pizza. Parte del reconocimiento se hace mediante el Procesamiento del Lenguaje Natural (NLP en inglés).

Clasificación

Consiste en identificar a que Clase pertenece cada individuo de la población que estamos analizando. Se le asignará un valor discreto de tipo 1, 0 como en la clasificación de Spam o no. También podría ser clasificar si un tumor es benigno o no o al clasificar flores según las características obtenidas.

Ver un ejemplo de Arbol de Decisión con Clasificación

¿Comprar casa ó Alquilar? Resuelve el dilema con Naive Bayes

Predicción

Similar a la clasificación pero para valores continuos, nos permite intentar predecir qué valor obtendremos dado un conjunto de datos de entrada con resultado desconocido. Como comentábamos antes, se puede utilizar para predecir precios de inmuebles, alquileres, coches o la probabilidad de que ocurra algún evento utilizado con frecuencia en estadística con Regresión Lineal. Pero si lo que queremos hacer es Pronóstico de Series temporales, será mejor utilizar redes neuronales ú otros modelos estadísticos como ARIMA.

Segmentación de Audiencia

Se suele utilizar el aprendizaje no supervisado para crear y descubrir patrones no conocidos en el comportamiento de los clientes de una web, app o comercio. Estos algoritmos pueden descubrir grupos que desconocíamos por completo o agrupar ciertas características que se correlacionan y que nosotros difícilmente lo hubiéramos identificado.

Juegos

Podemos utilizar ML para dar inteligencia a los enemigos que tenga que enfrentar el usuario (protagonista) del juego. También se utiliza para hacer que nuestras tropas sepan como moverse y saltear obstáculos en un campo de batalla. Crea el Pong!

Coche Autónomo

En este campo se están ejecutando muchas de las investigaciones en Machine Learning para darle vida propia a los automóviles. Uno de los usos será para que el coche mueva el volante por si solo, analizando las imágenes, también para detectar otros vehículos y no chocar y hasta predecir cómo se están moviendo los demás para evitar accidentes. Detectar símbolos  de velocidad, Stop, zona escolar en la carretera. El coche tiene muchísimas decisiones que tomar y en muy poco tiempo, siendo todos cruciales y de alta prioridad. Es un caso muy interesante de estudio para el Machine Learning y se está volviendo una realidad. Crea un coche manejado por redes neuronales con Arduino

Salud

Dados los sintomas presentados por un paciente en una base de datos de pacientes anónimos nuestra máquina deberá ser capas de predecir si es probable que esa persona pueda sufrir una enfermedad específica. Este tipo de Aprendizaje Automático es de suma delicadeza y puede servir como soporte para un equipo médico.

Economía y Finanzas

Se podrá dar soporte a analistas financieros intentando predecir determinadas cotizaciones de acciones en la Bolsa, ayudando a decidir si conviene comprar, mantener o vender. Predicción de Ventas con Series Temporales

Motores de Recomendación

Vemos una peli o una serie. Millones de personas ven esa misma serie. ¿No sería lógico que a mi me guste otra peli que vieron otros usuarios con un perfil similar al mio? Pues eso es lo que aprovechan Netflix y otros proveedores para poder recomendar contenidos a sus usuarios. Amazon es famoso por sus… “Si llevas ese producto, también te interesará este otro”. Esto también se consigue con este tipo de Aplicaciones del Aprendizaje Automático. Lee aquí un nuevo artículo que te explica en detalle los sistemas de recomendación y te enseña a crear tu propio sistema en python!

¿Te sientes con ganas de instalar un ambiente de desarrollo Python y comenzar a programar? Lee las Prácticas del blog

2017 – Transformers, Traducción automática

Los transformers revolucionaron el NLP. ¿Cómo funcionan los Transformers?

2019 – Generación de texto con GPT, BERT…

Crea tu propio generador de textos en este ejercicio Python GPT-2

2022 – Generación de Imágenes a partir de Texto

Entérate cómo funciona Stable Diffusion, Dall-E y Midjourney en este artículo del blog.

¿Qué otras aplicaciones  del Machine Learning conoces? ¿Utilizas Inteligencia Artificial en tu trabajo, estudios o investigación? Escríbe un comentario y ayúdame a mejorar esta lista.

GuardarGuardar

GuardarGuardar

18 thoughts on “Aplicaciones del Machine Learning

  1. Hola Juan Ignacio, primero que todo felicitarte por este blog sobre ML, ha sido de gran ayudar.
    Con base a este post, tengo una duda. Me podrías explicar por qué Neural Networks y Deep Learning se consideran como algoritmos del aprendizaje supervisado?
    Muchas gracias!

    1. Hola David, gracias por escribir y por tu comentario! Me alegra saber que el blog ayuda 🙂
      Te contesto: La realidad es que las redes neuronales pueden crearse con algoritmos de aprendizaje supervisado o no supervisado.
      Lo frecuente estos días es que se utilice de manera supervisada, en donde el científico de datos le provee una fuente abundante de etiquetas, gracias al big data, y la red aprenda gracias a numerosos ejemplos que ayudan a lograr la generalización. Un ejemplo de esto son las Redes Neuronales Convolucionales (CNN) que reconocen imágenes, que suelen entrenarse con miles y miles de imágenes de gatitos y perros…
      Pero hay que decir que se puede programar una red neuronal para que se “auto organice” y modifique sus pesos internos sin tener etiquetas para que detecte y clasifique clusters de datos de manera similar a como lo pueden hacer otros algoritmos no supervisados.
      Saludos!

  2. Juan Ignacio, qué tal.

    Gracias infinitas por compartir tu conocimiento.

    Quisiera contar con tu opinión al respecto sobre sí es posible resolver la creación mes a mes de cronogramas de trabajo variables mediante Machine Learning.

    Te suelto el rollo con detalle (ojalá tengas tiempo para leerlo):

    Para mi tesis de grado de Ingeniería de Sistemas he de resolver una actividad que implica varios días de labor humana. Consiste en la programación mes a mes de los cronogramas de trabajo y descanso para una empresa que tiene 36 puntos de atención y sobre el cual se manejan muchas reglas, como por ejemplo que los días de descanso (4) varían entre un mes y otro, y éstos deben ser cubiertos por otro personal que también debe descansar otros 4 días del mes. Además, ningún punto de atención se debe quedar sin trabajador, ni siquiera los fines de semana

    Como los empleados solicitan los descansos para el mes siguiente, se ha optado por una aplicación Blockchain con Hyperledger para tal fin, incluso para que los puedan intercambiar.

    Para el resto de programación se ha estipulado que una máquina deba aprender a hacerlo.

    Como insumo para que la máquina aprenda, tengo ya los registros (punto de atención, fecha, empleado) de quién trabajó cada día en todos los puntos de atención desde el año 2013 hasta la fecha

    Mi duda inicial es sobre cómo presentarle estos datos al algoritmo y cuál sería el mejor para tal fin.

    ¿Se puede (supongo que sí) ? ¿Pudieras aportarme una ruta a seguir, un hilo del qué empezar a tirar?

    Mis gracias excederían el infinito, te lo aseguro. 🙂

    1. Hola Javen, y disculpa la demora en responder, recién hoy pude leer al completo tu comentario. Así en principio se me ocurre que podría ser una solución usar algoritmo genético.
      Déjame ver si se me ocurre algo mejor y te vuelvo a escribir. También intentaré pasar algún enlace sobre algoritmo genético, pues aún no escribí sobre él en el blog, pero lo utilice para mi tesis de la universidad hace unos cuantos años!
      Saludos

      1. Hombre, Juan Ignacio, muchas gracias.

        Leyendo por aquí y por allá, me viene a la mente la idea de que con Random Forrest se pudiera lograr el cometido.

        Según voy entendiendo, este algoritmo haría árboles de decisión por cada variable:
        -Punto de atención
        -Fecha
        -Tipo de día (si es hábil o feriado)
        -Empleado

        Y promediando determinaría los nodos y las bifurcaciones para hacer la predicción, que para este caso no tendría que coindicir con la realidad sino que por el contratio sería ya la decisión final que se tomaría en relación a cómo ubicar a cada trabajador por fecha disponible.

        Estudiaré lo de los algoritmos genéticos.

        Estaré atento a cualquier otra sugerencia.

        Gracias infinitas.

        1. Hola Javen, te cuento que estuve investigando el tema y tengo casi seguro que la mejor elección sería Algoritmo genético. Pues verás, encontré varios enlaces que resuelven problemas similares al tuyo (aunque por supuesto deberás adecuar tus datos y funciones particulares). Es decir, problemas de optimizar: stocks, cargas de tareas de un ordenador, horarios para conferencias o los turnos de enfermeras.
          Te dejaré aqui varios enlaces. Si te recomendaría comprender BIEN el tema primero, o puede que algunos de los ejemplos te resulten difíciles al principio, sin contar con una base en este tipo de algoritmos.
          Intentaré yo mismo escribir algún artículo en el futuro sobre Algoritmo Genético.
          Espero que te sean de ayuda y ya me contarás!
          PD: tu enfoque con Random Forest no logré comprenderlo :S

          ENLACES (Tienes mucho para leer!):

          1. Juan Ignacio, muchísimas gracias.

            ¡Qué cantidad de información! A vuelo de pájaro ya vi que tratan temas muy relacionados con el mío.

            Muy seguramente tienes razón en cuanto al Algoritmo Genético sobre el Random Forest.

            Te estaré comentando. Mi idea también es publicar la aplicación en Github.

            Estaré atento a tus post.

          2. Juan Ignacio, qué tal.

            He logrado por fin desarrollar el algoritmo genético con resultados consistentes, superiores al 97% de efectividad. Estoy buscando la manera de que siempre llegue al 100%. Lo he desarrollado en C#, que es el lenguaje en el que estoy más cómodo por el momento.

            Tengo el problema de que si le permito muchas crías o generaciones (para que llegue al 100) se vuelve un mounstruo como RAM. En un servidor lo logra, pero en un laptop, lo deja con la lengua afuera.

            Paso ahora a desarrollar la parte gráfica para que cualquiera puedar ver el resultado. Ya lo publicaré entonces.

            También es mi idea pasarlo a Python.

            Muchísimas gracias. Seguimos en contacto.

          3. Hola Javen, que buenas noticias! Felicitaciones por tu gran trabajo y me alegra mucho haber aportado mi granito de arena! Cuando avances no dejes de comentar como sigue tu proyecto final! Aún tengo pendiente en mi roadmap hacer un artículo sobre Algoritmo Genético y seguramente tu me puedas ayudar!
            Para el tema del consumo de RAM, te dejo este enlace, por si te sirve: IMPROVING GENETIC ALGORITHMS PERFORMANCE BY HASHING FITNESS VALUES (no le he leído!) Y en algún foro comentaban sobre utilizar caches intermedias y evitar recalcular el fitness.
            Saludos y seguimos en contacto!

          4. ¡Hombre, por supuesto! Un honor llegar a colaborar contigo.

            Tiene mucho sentido el artículo en no tener que evaluar lo ya evaluado.

            Por mi parte, tocando aquí y allá en mi algoritmo, reduje de 100 a 10 el número de crías y le permití pasar de 100 a 500 las generaciones, y hace el trabajo más rápido y con mucha menos RAM. Y casi siempre al 100%.

            Seguimos…

          5. Genial! veo que lo estás tuneando de manera espléndida!
            Seguimos en contacto!

  3. Muy bien! me encanta leer el contenido en castellaño!!!! a la mejor lo aconsejo durante nuestro curso en AI Saturdays Tarragona! 🙂

    1. Hola Marianna, gracias por escribir! Me alegro que te gusten los contenidos!
      Me encantaría que recomendaras el blog en vuestro curso.
      Toda ayuda para difundir Machine Learning siempre es bienvenida!
      Saludos y espero que sigamos en contacto.

  4. Hola Juan,
    Primero que nada darte las gracias por el excelente contenido que tienes y lo bien que se entiende. He aprendido muchas cosas aquí.
    Ahora quisiera pedirte tu opinión, tengo un dataset que se refieren a la cantidad de producto que debe haber en una tienda para que no se agote mientras lo van comprando, pero que sea el mínimo posible para que una parte de esos productos estén en el almacén central y se pueda distribuir a la tienda que más lo necesita en un determinado momento, así que tenemos:
    producto, color, talla por ejemplo, a la gama que pertenece o sea pantalón o camisa por ejemplo, la tienda que pueden ser varias, la cantidad de producto que se dispone en total y por ultimo el valor mínimo de ese producto para la tienda. He pensado que un random forest es lo ideal ya que la muestra es altamente descompensada, y puede haber muchas unidades de un producto y muy pocas de otros, en la gama color por ejemplo pueden ser muchas y el blanco ser muy abundante mientras que el negro ser menos del 1% del blanco. He hecho un RandomizedSearchCV para los hiperparametros, pero obtengo una eficacia muy pobre.
    Me puedes aconsejar en algo o si quieres te cuento más para que te hagas mejor la idea.

    Saludos,
    Robert

  5. Hola Juan
    Gracias por compartir, me ha sido de mucha ayuda

    La verdad no se conozco muy bien el tema, he estado leyendo estas dos ultimas semanas, los diferentes usos y aplicaciones en diferentes disciplina, los tipos, etc. pero he tenido dificultad en saber cuales son los principios del Machine Learning.
    si me preguntaran cuantos y cuales son no sabría que decir.. Me podrías ayudar

    Saludos,

    Liliana

  6. Muy bueno el POST y los comentarios. Recien me meto en lo que es ML por lo que no se ni en que aplicarlo en mi trabajo. Pero le veo un gran potencial. Me quema la cabeza saber que existe una herramienta tan potente y no saber usarla. Seguiré investigando.

  7. Saludos, la informacion compartida es de gran utilidad, podria ayudarme para realizar la prediccion de la radiacion solar? lo estaba probando los modelos de series temporales del post

Leave a Reply