Esta unidad resumirá los puntos más importantes modelos de machine learning (ML) ya resueltos. No es una lista exhaustiva de las características de un buen modelo de machine learning, sino más bien una primera parte. Las definiciones se irán entregando de forma progresiva a medida que se vayan realizando más modelos. Los modelos ya realizados han sido de:
- Base de datos de clientes de un banco: Se crea modelo que predice con un 86% cuales clientes se retirarán del banco.
- Base de datos de Play Store: Se realiza un análisis exploratorio de los distintos mercados de aplicaciones. El fin es identificar las características que tiene una buena aplicación móvil. Adicionalmente se analiza la competencia que tienen las App dado el mercado que entran.
¿Por que usar un Modelo de Machine Learning?
Antes de comenzar hay dos preguntas importantes:
- ¿Qué es un modelo de Machine learning?
- ¿Por qué son importantes estos modelos?
las respectivas respuestas son:
- Son herramientas matemáticas que permiten identificar patrones en los datos.
- Permite aprender de los datos y ayudan a tomar mejores decisiones con ellos. Además, dado que son modelos que aprenden de datos son muy útiles para automatizar procesos sin tener que programar grandes heurísticas o algoritmos para resolver ciertos procesos.
Dicho de otra forma, el fin de un modelos de Machine learning es que ayudan a la toma de decisiones. Luego algunas de las preguntas que pueden responder son:
- ¿Qué clientes son los más propensos a irse? y ¿Cómo cuidamos a estos clientes para que no se retiren?
- ¿Qué características tienen las App que los usuarios aman (y por ende debo enfocar esfuerzos a la hora de lanzar una App)?
La relevancia de los modelos de machine learning queda clara con esto. Ya que permiten tomar mejores decisiones u optimizar procesos que manejen grandes volúmenes de datos. Con esto surge la siguiente pregunta,
¿Cómo Crear un Buen Modelo de Machine Learning?
A grandes rasgos estos son los principales puntos para crear un buen modelo de Machine Learning (se explicarán en más detalle de estos puntos abajo):
- Definir el problema al que se quiere aplicar el ML. (trabajar con foco hacia dónde se quiere ir.)
- Recoger los datos que se necesitarán. Quizás estos estén en distintas tablas que se deben unir. Para que lo anterior funcione ¡hay que tener cuidado! con variables de tiempo y con las variables con las que se unen las tablas.
- Transformar los datos: Está parte la idea es ¡dejar los datos de tal forma que puedan ser usados por el modelo de ML! Por ejemplo, en este problema de Play Store se usó un modelo de clustering llamado kmeans ¡Estos datos deben ser normalizados antes de aplicar el modelo!. La idea es: Trabajar con datos de calidad remover filas o registros con datos nulos (eliminar datos). O también se pueden ser crear variables al problema (creación de datos). Dentro de esta etapa se pueden realizar arreglos más finos como quitar variables fuera de rango (anormalidades).
- Entrenar el modelo
- Usar el modelo para predecir
Consideraciones Acerca de las Linealidades entre etapas
El proceso de creación de un modelo de ML no es tan lineal o secuencial como parece a primera vista. El proceso es de investigación continua. Es decir, se realiza un análisis exploratorio luego una hipótesis y se comprueba después su veracidad. Puede ser (y probablemente ocurra) que al realizar todos los pasos anteriores se deba volver sobre ellos. Ejemplo de lo anterior, ocurre cuando nueva información relevante al problema llega posterior a los primeros análisis (quizás siendo solicitada expresamente por dudas en los análisis realizados hasta el momento). Es decir, nos devolvemos a los “primeros pasos” para incorporar nuevos datos al modelo. Con esto se quiere dejar claro que este proceso es dinámico y no lineal al ser investigativo. Esto conlleva que cada etapa se construye no solo con la etapa anterior sino que también con la que viene después.
Pese a todo lo dicho en el párrafo anterior, la primera barrida o visión macro del problema se resuelve con los pasos o hitos presentados aquí y en ese orden.
Definir el problema
Primero hay que saber que problemas son buenos para trabajar con ML. A veces, puede ser mejor trabajar con heuristicas u otros métodos para resolver una determinada situación. Entonces…
¿Cuándo, cómo y para qué usar los modelos de ML?
- Cuándo: se trabaja con modelos de ML si se conoce el problema lo suficiente para saber o intuir que variables son claves. PERO, se está abierto a cambiar estás variables con la llegada de nueva evidencia. Por ejemplo, si se descubre que una de las variables criticas, que se definió como tal al comienzo, al final no lo era se puede eliminar. Es decir, se trabaja en un mundo de ambiguedad y descubrimiento continuo.
- Cómo: Estos modelos requieren datos. De hecho muchos datos para tener una buena predicción de lo que se necesita. Considere que la cantidad de datos depende del tipo de modelo que se trate. Redes neurales, por ejemplo, requiere muchos más datos que otros modelos. Adicionalmente hay que considerar la cantidad de variables relevantes que se tengan para predecir. Más variables relevantes requieren más registros o “filas” en la tabla.
- Para qué: Orientados a tomar decisiones y no solo a predecir. Pregúntese ¿Por qué quiere realizar un modelo de ML? ¿Qué quiere hacer con el resultado de su modelo?
Recoger los datos
El hito de esta etapa es construir su base de datos. Si recién comienza un problema de Machine Learning, considere en esta fase 2 o 3 variables con alto poder predictivo (de lo que necesita) para su base. La idea es aprender de los datos y avanzar con su modelo. Luego puede ir incrementando la complejidad del problema (Recomendación investigue que es “the curse of dimensionality“). Está fase tiene los siguientes “checklist” que tiene revisar de sus datos (este es un resumen, que se explicará más abajo en detalle):
- Cantidad: Número mínimo necesario de datos, respecto a los parámetros del modelo que se entrenará.
- Calidad: Esto impacta en la capacidad de lograr objetivos con los datos. Dicho de otra forma, “buenos datos” permiten realizar “buenos análisis”. Y con “buenos análisis” se pueden tomar “buenas decisiones”. Entre los buenos datos, análisis y decisiones hay muchos pasos intermedios, pero cada uno es una condición necesaria para la siguiente.
- Confiabilidad: Omitidos, duplicados, errores de registros, variables con “ruido”.
- Representación: Por ejemplo, transformar variables categóricas a binarias: “one-hot encoding”.
- Minimizar el sesgo: Ejemplo de esto: “leakage” de datos, o usar datos que no se tendrán al momento de predecir con el modelo (datos estadísticos o variables que se pueden sacar offline y no online con la información disponible o con los tiempos de los servidores).
- Unir registros: Es importante distinguir entre los distintos tipos de registros. Ya que, su “naturaleza” de origen pueden ser distinta. Por ejemplo, puede existir datos que registren un “evento” (una acción hecha en un momento) o datos estadísticos que agreguen mucha información en un solo dato. Estos datos vienen de fuentes distintas. Uno es creado automáticamente por las interacciones, por ejemplo, de un usuario en plataforma. Y el otro, es tomando históricos y creando métricas. Ambos datos serían interesante estuvieran en la misma tabla. Pero, dado que sus orígenes son distintos hay que realizar un trabajo extra de unirlos.
- Muestreo y división de datos (La explicación quedará pendiente hasta que se realice un problema que lo requiera)
Cantidad de datos
Debe tener al menos un orden de magnitud mayor (10 veces más) que el número de parámetros que entrenará. Por ejemplo, si quiere predecir el precio de una casa y tiene solo 3 variables relevantes: número de pieza, metros cuadrados construidos y región o comuna. Considere (por lo muy mínimo) 30 casas en su base de datos. Sin embargo, esta regla es una cota inferior baja de lo que necesita, ya que si existen varias comunas debe tener muchos más datos. La idea es que tenga la noción que si trabaja con muchos parámetros o variables debe tener por lo bajo 10 veces más datos o registros en su base. En el caso de tener una variable como comuna, el modelo debe aprenda de ésta. Para esto debe tener dentro de su base varias casas distintas de la misma comuna. Lo que básicamente dice esto es: “el modelo no es mágico, si quiere que aprenda la relación de una variable con otra, deben existir suficientes datos para que su modelo lo haga”.
Calidad de datos
No basta con tener un buen número de datos, sino que además los datos deben ser:
- Confiables.
- Procesables por el modelo de ML (representación).
- Y contingentes al problema que se quiere resolver (minimizar el sesgo).
Confiabilidad de datos
Con confiables se responde a la pregunta: ¿Usted confía que el dato que aparece en su registro (imagine una celda del Excel)? Cuando no debería confiar en sus datos:
- Si existen muchos datos vacíos indicando problemas en la medición de estos.
- Los datos son ingresados manualmente por humanos que pueden equivocarse.
- Los datos son tomados por un instrumento que comete mucho error.
Medición definiciones importantes
Dos definiciones importantes y distintas son las de exactitud y precisión. La exactitud dice que tan cercana es la medición del valor real. Por otro lado, la precisión tiene relación con que, dadas las mismas condiciones en la medición, que tan cercano son estas mediciones entre ellas.
Por ejemplo, imagine una habitación que está a 20 grados (dato real). Y usted tiene dos termómetros uno siempre mide la temperatura a 17 grados. El otro termómetro de repente mide a 19 y otras veces a 21 grados. Entonces, ¿Cómo son los dos termómetros en términos de exactitud y precisión?
Primer termómetro es preciso, pero no exacto. Mientras que, el segundo es exacto, pero no preciso.
¿Qué hacer con datos duplicados?
Considere de ejemplo la siguiente linea de código del caso de “Google Play Store”:
df.drop_duplicates(subset=‘App’, inplace=True)
Esta línea elimina los registros duplicados de aplicaciones.
¿Por qué este paso es importante?
Porque dentro del modelo se sacan ciertas estadísticas, por ejemplo, el ranking promedio dentro de cada categoría. Entonces, duplicar datos puede inflar el promedio si se duplican registros de aplicaciones con buen ranking o bajarlo si se hace lo contrario.
También se deben eliminar para evitar que al separar los datos en grupos de entrenamiento y de testeo un dato esté en entrenamiento y el otro dato (igual) este en el de testeo (aumentando artificialmente el poder predictivo del modelo). Esto último porque se entrena el modelo permitiéndole que vea la data de testeo (que no debería ver).
Esta acción cae dentro del paragua de confiabilidad de los datos del modelo de ML. Y es un paso necesario para tener un modelo confiable.
Datos Procesables
Cuando se dice que los datos sean procesables por el modelo de ML se refiere a que el registro del dato este “bien escrito” para su uso. Nuevamente imagine que usted quisiera realizar un modelo que predice el precio de una casa. Los datos del precio que usted espera son así: 10.500 y no “diez mil quinientos” ya que la segunda forma no le permite realizar un modelo matemático. Nuevamente dentro del modelo de “Google Play Store” realizado en este sitio se transformaron los datos para que fueran procesables por el modelo (en varias oportunidades). Revise esta línea:
df[‘Installs’]=df.Installs.apply(lambda x: x.replace(‘+’,”) if ‘+’ in str(x) else x)
Esta línea quita los signos ‘+’ que aparecen en ‘Installs’. Lo que se quiere lograr finalmente es transformar esta variable en un número (“integer” o “float”) que un modelo de ML pueda trabajar. Esto culmina con esta nueva línea de código:
df[‘Installs’]=df.Installs.apply(lambda x: int(x))
Datos contingentes
Cuando se dice que la calidad pasa por tener datos contingentes al problema que se quiere resolver se refiere a que:
- Si, por ejemplo, se está realizando un modelo para que determine la gravedad de un diagnóstico médico. Se espera que el modelo resuelva este problema con datos disponibles al momento que se quiere realizar el diagnostico. Un error aquí sería incluir dentro del modelo al hospital donde el paciente se realiza tratamiento una vez identificado la gravedad del diagnóstico. Ya que este dato se tiene después de realizar el diagnóstico y no antes. Por lo tanto, si el modelo se entrena con esta variable ella tendrá mucho poder predictivo, pero no es útil. De hecho, probablemente se requiere saber la gravedad de un diagnóstico médico para determinar a qué hospital se debe llevar al paciente para su tratamiento. Variables que sí serían útiles son:
- Exámenes de sangre
- Daños físicos del paciente
- Historial médico
- Otras variables
- Otros problemas comunes son crear modelos que funcionan muy bien offline pero Online (con información dentro de un servidor) no. Esto puede ocurrir porque dentro del modelo offline se tiene información que no se puede procesar en el servidor (como variables estadísticas). Si el problema que se debe resolver son recomendaciones online no se puede crear un modelo con estas variables estadísticas que no se tendrán al momento que se requieren.
Unir Registros o Tablas
A veces es necesario unir datos de distintas tablas, para crear una sola gran tabla con todos los datos necesarios para el modelo. Hay 3 tipos de datos a nivel macro. Esto es importante de entender ya que, por lo general, estos datos están en diferentes localizaciones, Estos datos son:
- Transaccionales: Asociados a un evento que ocurrió en un momento (cierto tiempo) y fue registrado. Deben tener una ID que lo identifique. Ejemplos son:
- Registrar los click que hacen los usuarios en un sitio web.
- Registrar las búsquedas realizadas en Google.
- Atributos: Información que caracteriza a un usuario u otro ente. Ejemplos de los casos ya vistos:
- El ranking, review, categoría de las aplicaciones.
- Las características de los clientes de un banco.
- También se pueden formar datos de tipo atributos con datos históricos de un usuario. Es decir, con varios datos transaccionales. Por ejemplo, en el caso de Google se tiene una columna con la última fecha de actualización. Si los datos de la base de datos estuvieran por ID que representasen la fecha y la App que se actualiza. En este escenario se podría crear un nuevo atributo o columna para cada App que sería frecuencia de actualización. Esta variable es un atributo, de tipo agregado estadístico.
- Agregado estadístico: Atributos con información estadística agregada.
Para crear un buen modelo es necesario unir tablas con información relevante. Si, por ejemplo, quiere predecir la salida de los clientes de un banco. Una forma para mejorar el modelo que se realizó aquí es incorporando variables transaccionales (no se contaban con estos registros).
Imagínese se hubiera tenido variables del tipo: Transacciones del cliente, monto de transacción, etc. Se pudo ver creado un perfil de consumo con varias variables. Con estas nuevas variables incorporadas dentro del modelo de “churn rate” de clientes se podría ver el poder predictivo del (nuevo) modelo.
Otro ejemplo, es este código del caso de “Play Store”:
df=pd.merge(df1,df_fix, on=“App”, how=“inner”)
Muestra cómo se unen unas variables de eventos (una review realizada por alguien) con otras de atributos (número de instalaciones de la App, nota general de ella, entre otras).
Etiquetas de Datos
La etiqueta de datos tiene relación con que el nombre del atributo sea claro en lo que mide. Si se mide visitas a un sitio web. Que el atributo se llame visita. Por ejemplo, si en Aprende-Ingeniería se quiere crear un modelo y la variable que se busca es “le gusta el sitio web Aprende-Ingeniería”. No se puede confundir una visita cualquiera con que le gusta el sitio. Ya que, por ejemplo, el usuario puede ingresar al sitio e irse inmediatamente. E incluso si el usuario permanece en el sitio web por un buen tiempo aún así no se tiene la variable que le gusta el sitio, ya que podría estar ahí más tiempo por otros motivos. En este caso la variable “le gusta el sitio web Aprende-Ingeniería” es una variable directa de lo que se quiere. Pero, no se puede medir. Pese a lo anterior, sí se puede hacer algo para tratar de ver si a los usuarios le gusta o no el sitio. No de forma directa. Si no, con una variable derivada de la anterior que se relacione con lo que de verdad se quiere. En este caso se puede tomar el número de visitas al sitio y el tiempo que se pasa en él. Estas dos variables derivadas permiten tener una noción de si llama la atención el sitio para entrar en él. Y, por otro lado, muestran si una vez en él un usuario tiende a quedarse.
Fuentes Bibliográficas
- https://developers.google.com/machine-learning/crash-course
- https://www.edx.org/es/course/python-for-data-science-2