{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introducción a las técnicas de Machine Learning (ML)\n", "\n", "## ¿Qué es Machine Learning?\n", "\n", "> \"El [aprendizaje automático o aprendizaje automatizado o aprendizaje de máquinas](https://en.wikipedia.org/wiki/Machine_learning) (del inglés, machine learning) es el subcampo de las ciencias de la computación y una rama de la inteligencia artificial, cuyo objetivo es desarrollar técnicas que permitan que las computadoras aprendan. Se dice que un agente aprende cuando su desempeño mejora con la experiencia y mediante el uso de datos; es decir, cuando la habilidad no estaba presente en su genotipo o rasgos de nacimiento\" \n", "\n", "\n", "\n", "
\n", "\n", "\n", "## Tareas más recurrentes en ciencias de datos \n", "\n", "Podemos clasificar las tareas de aprendizaje automático según el tipo de actividad que se busca realizar [3]:\n", "\n", "- **Clasificación y estimación de probabilidad de clase.** Consiste en asignar a cada individuo de una población la clase o clases a las que pertenece, o bien estimar la probabilidad de pertenencia. \n", " *Ejemplos:* ¿Qué clientes reaccionarán ante una oferta? ¿Qué usuarios aceptarían responder una encuesta telefónica?\n", "\n", "- **Regresión (estimación de valores).** Se busca predecir el valor numérico de una variable continua. \n", " *Ejemplo:* ¿Cuántos clientes utilizarán este servicio? \n", " Está estrechamente relacionada con la clasificación: mientras la clasificación predice *si* algo ocurrirá, la regresión estima *cuánto* ocurrirá.\n", "\n", "- **Emparejamiento por similitud (similarity matching).** Se trata de identificar elementos similares a partir de sus características. Es una técnica común en sistemas de recomendación, y se basa en indicadores que también aparecen en clasificación, regresión o agrupamiento.\n", "\n", "- **Agrupamiento (clustering).** Pretende organizar los individuos de una población en grupos o clústeres de acuerdo con su similitud. \n", " *Ejemplo:* ¿Qué perfiles de clientes comparten intereses o comportamientos similares?\n", "\n", "- **Agrupamiento por coocurrencia (co-occurrence grouping).** Busca descubrir asociaciones entre elementos que suelen aparecer juntos en transacciones. \n", " *Ejemplo:* ¿Qué productos suelen comprarse conjuntamente? \n", " Es similar al clustering, aunque se centra en las relaciones dentro de transacciones.\n", "\n", "- **Perfilado (profiling).** Su objetivo es caracterizar el comportamiento típico de un individuo, grupo o población. \n", " *Ejemplo:* ¿Qué aplicaciones suelen usar los adolescentes? \n", " Es especialmente útil para la detección de anomalías.\n", "\n", "- **Predicción de enlaces (link prediction).** Intenta anticipar la existencia o fortaleza de conexiones entre entidades. \n", " *Ejemplo:* ¿Conviene colaborar con este influencer para alcanzar a esta comunidad de usuarios?\n", "\n", "- **Reducción de datos (data reduction).** Busca sintetizar grandes volúmenes de información extrayendo las variables más relevantes o representativas. \n", " *Ejemplo:* ¿Qué características son las más importantes para este estudio?\n", "\n", "- **Modelado causal (causal modeling).** Se orienta a comprender la influencia mutua entre eventos o acciones. \n", " *Ejemplo:* ¿Qué factores han llevado al usuario a comprar este producto?\n", "\n", "\n", "## Planteemos un problema de recomendación desde una perspectiva más 'tradicional'\n", "\n", "Vamos a afrontar el diseño de un sistema de recomendación basado en reglas.\n", "- ¿Qué criterios utilizaríamos (precio, categoría, promociones, historial del usuario...)?\n", "- ¿Cómo implementaríamos las reglas de recomendación de forma explícita (if... then...)?\n", "\n", "Disponemos de la siguiente información: \n", " \n", "| Transaction ID | Order | User Region | Product ID | Product Price | Promotion | Product Category | Product Description | User Class |\n", "|----------------|-------|-------------|------------|---------------|-----------|------------------|---------------------|------------|\n", "| 001 | 1 | 920 | 01 | 25 | Yes | Book | bla bla BLA | A |\n", "| 001 | 2 | 920 | 02 | 20 | Yes | Book | ble ble BLE | A |\n", "| 839 | 1 | 878 | 03 | 40 | No | Technology | blu blu BLU | C |\n", "| 839 | 2 | 878 | 04 | 100 | No | Home | None None none | C |\n", "| 030 | 1 | 909 | 05 | 20 | No | Home | Lorem Ipsum | D |\n", "| 030 | 2 | 909 | 06 | 20 | Yes | Garden | Green Green | D |\n", "\n", "\n", "- IDEAS?\n", "\n", "```python\n", "# Regla 1: coocurrencia 01 -> 02\n", "if \"01\" in shopping_cart.product_ids:\n", " add_to_recommendations(\"02\") # \"Otros usuarios también compraron...\"\n", "\n", "# Regla 2: categoría Garden -> producto para el hogar\n", "if any(p.category == \"Garden\" for p in shopping_cart.products):\n", " add_to_recommendations(\"05\")\n", "\n", "# Regla 3: contenido y categoría\n", "if any(\"BLA\" in p.description and p.category == \"Book\"\n", " for p in shopping_cart.products):\n", " add_to_recommendations(\"03\")\n", "\n", "```\n", "\n", "Y ¿qué pasaría si se incorporan nuevos criterios, cambian los modelos o los valores de los atributos, o simplemente si tuviéramos miles de transacciones diarias?\n", "\n", "Este tipo de soluciones presentan:\n", "- Una **escasa flexibilidad**: Son ad hoc y, a partir de cierta complejidad, se vuelven muy difíciles de mantener.\n", "- Un **escalado insuficiente**: No escalan bien ni se adaptan con facilidad a nuevos requisitos.\n", "- Un **rendimiento computacional pobre**: Pueden consumir muchos recursos computacionales y ofrecer tiempos de respuesta inaceptables.\n", "- Una **calidad cuestionable**: Plantean dudas sobre su fiabilidad y precisión, especialmente cuando el sistema crece.\n", "\n", "Resulta necesario automatizar el aprendizaje de patrones a partir de los datos en lugar de definir manualmente todas las reglas.\n", "\n", "\n", "\n", "## Sobre el aprendizaje automático o machine learning \n", "\n", "\n", "\n", "El aprendizaje automático tiene como resultado un modelo para resolver una tarea dada. Diferentes tipos de modelos: geométrico, probabilístico o lógico.\n", "\n", "\n", "## Tipos de algoritmos\n", "\n", "### Métodos supervisados y B) no supervisados\n", "\n", "La principal diferencia entre ambos es la disponibilidad de datos etiquetados, es decir, datos con información explícita sobre el objetivo que permiten guiar el proceso de aprendizaje. Si disponemos de este tipo de datos, podemos aplicar métodos supervisados. \n", "\n", "Por ejemplo, ante la pregunta ``¿cuántos tipos de clientes podríamos tener?'' no contamos con etiquetas previas que indiquen estos tipos, por lo que se trata de un problema no supervisado, típico de agrupamiento de clientes. En cambio, si queremos encontrar grupos de clientes con alta probabilidad de cancelar su contrato y disponemos de ejemplos históricos de clientes que cancelaron y que no lo hicieron, podemos aplicar un método supervisado usando esta separación para guiar el aprendizaje. \n", "\n", "Técnicas de clasificación, regresión y modelado causal suelen considerarse métodos supervisados. Por su parte, clustering, agrupamiento por coocurrencia y perfilado se consideran habitualmente métodos no supervisados. El resto de tareas puede abordarse con enfoques de ambos tipos, según cómo se formulen los datos y el problema. \n", "\n", "También existen los **métodos semisupervisados**, que combinan ambos enfoques: se dispone de una pequeña parte de los datos etiquetada y una gran cantidad de datos sin etiquetar, que también se aprovechan durante el entrenamiento. \n", "\n", "### Aprendizaje por refuerzo (Reinforcement Learning)\n", "\n", "En estos métodos el aprendizaje se guía mediante recompensas que valoran las acciones del agente en un entorno. El agente observa un estado, ejecuta una acción y recibe una recompensa (positiva o negativa) que indica la calidad de la decisión tomada. La interacción repetida entre estados, acciones y recompensas se utiliza para entrenar una política que maximice la recompensa acumulada a lo largo del tiempo.\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## A) Aprendizaje supervisado\n", "\n", "Dentro del aprendizaje supervisado se distinguen dos tipos de problemas básicos:\n", "\n", "1. **Regresión** \n", "2. **Clasificación**\n", "\n", "Una forma intuitiva de diferenciarlos es preguntarse si se quiere predecir una cantidad o valor continuo, o una categoría. \n", "- \"¿Cuánto vale una casa dado el vecindario y la superficie?\" → problema de **regresión**. \n", "- \"Dado el valor de una casa y la superficie, ¿en qué vecindario está?\" → problema de **clasificación**.\n", "\n", "### A.1 Regresión\n", "\n", "El término regresión fue introducido por Francis Galton al estudiar cómo los hijos de personas muy altas tendían a acercarse a la altura media de la población, fenómeno conocido como **regresión a la media**.\n", "\n", "Entre los algoritmos más utilizados para problemas de regresión se encuentran:\n", "\n", "- **Regresión lineal** y variantes: \n", " - Ridge Regression (penalización \\(l_2\\)) \n", " - Lasso Regression (penalización \\(l_1\\)) \n", " - Stepwise Regression (selección progresiva de variables)\n", "- **Árboles de regresión y conjuntos de árboles** (Random Forests, Gradient Boosting, etc.)\n", "- **Support Vector Regressors (SVR)**\n", "\n", "\n", "### A.2 Clasificación\n", "\n", "La clasificación es una de las tareas más habituales: se busca asignar a cada observación la clase o grupo al que pertenece.\n", "\n", "Entre los algoritmos de clasificación más usados se encuentran:\n", "\n", "- **Regresión logística** \n", "- **Árboles de decisión y ensamblados de árboles** (Random Forests, Gradient Boosting, etc.) \n", "- **Support Vector Classifiers (SVC)** \n", "\n", "\n", "\n", "## B) Aprendizaje no supervisado\n", "\n", "En el aprendizaje no supervisado se trabaja con datos **sin etiquetas** explícitas sobre la salida u objetivo. El propósito suele ser descubrir estructura, patrones o relaciones en los datos.\n", "\n", "Dentro de esta categoría se pueden distinguir varias subfamilias en función del objetivo:\n", "\n", "1. **Clustering** \n", " - **k-means** y variantes \n", " - **(H)DBSCAN** (Density-Based Spatial Clustering of Applications with Noise) \n", " - Clustering jerárquico \n", " - **Expectation–Maximization** (p. ej., modelos de mezcla gaussianos)\n", "\n", "2. **Reducción de dimensionalidad / visualización** \n", " - **Principal Component Analysis (PCA)** \n", " - **t-distributed Stochastic Neighbor Embedding (t-SNE)** \n", "\n", "\n", "3. **Reglas de asociación** \n", " - Por ejemplo, reglas del tipo: \"{carbón} + {carne} → {cerveza}\" típicas de análisis de cesta de la compra.\n", "\n", "## Elección de algoritmo\n", "\n", "Como objetivo principal suele estar el saber **qué tipo de modelo usar en cada situación**. Dos errores frecuentes son:\n", "\n", "1. **Elegir mal el modelo**: \n", " - Un modelo demasiado simple que no capta la complejidad del problema (**underfitting**). \n", " - Un modelo excesivamente complejo que \"memoriza\" el conjunto de entrenamiento y no generaliza (**overfitting**).\n", "\n", "2. **Elegir mal los datos o las variables**.\n", "\n", "\n", "## Entre los problemas de datos más habituales:\n", "\n", "- Representatividad insuficiente: el conjunto de datos no refleja bien la diversidad de casos. \n", "- Datos de baja calidad: valores atípicos, valores ausentes, errores de medida, etc. \n", "- Atributos irrelevantes o ruidosos: identificadores arbitrarios, variables que no aportan información útil (garbage in, garbage out).\n", "\n", "Una parte crucial a la hora de crear un modelo es **seleccionar y transformar adecuadamente las variables**, lo que se conoce como **feature engineering**:\n", "\n", "- **Feature extraction**: creación de nuevas variables a partir de las existentes, por ejemplo: \"duration = date_exit- date_start\".\n", "- **Feature selection**: eliminación de atributos que no aportan valor o añaden ruido, lo que puede simplificar el modelo y mejorar su rendimiento.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bibliografía\n", "\n", "- [1] Introduction to Machine Learning with Python. A guide for Data Scientist. Andreas C. Müller and Sarah Guido. OReilly. 2017\n", "- [2] Data Science for Business. Foster Provost and Tom Fawcett. OReilly. 2013\n", "- [3] Machine Learning. The art and science of Algorithms that make sense od data. Peter Flach. Cambridge. 2012\n", "- [4] Biel - Github https://github.com/bmalcover/MADM2021\n", "- [5] Machine Learning & Data Science Blueprints for Finance: from Building Trading Strategies to Robo-advisors using python. Hariom Tatsat, Sahil Puri, and Brad Lookabaugh. OReilly. 2021" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/)
\n", "Isaac Lera and Gabriel Moya
\n", "Universitat de les Illes Balears
\n", "isaac.lera@uib.edu, gabriel.moya@uib.edu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "my3110", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.0" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }