¿Cómo definir un problema de Machine Learning?

En este artículo les voy a compartir una serie de pasos que les sugiero tener en cuenta para poder definir claramente el problema a resolver en un proyecto de Machine Learning, que debería ser siempre el primer paso antes de comenzar a desarrollar nuestro proyecto.

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

Aunque parezca obvio, muchas veces cuando desarrollamos un proyecto de Machine Learning nos olvidamos de un aspecto fundamental y es que al inicio deberíamos tener totalmente claros todos los aspectos del problema que queremos resolver.

Al no tener claros estos elementos estaremos invirtiendo tiempo, y posiblemente dinero, de manera innecesaria y probablemente el desarrollo que hagamos no tendrá una aplicación al final o no responderá a la necesidad que le dio origen a este proyecto.

Así que veamos los que considero son los principales elementos a tener en cuenta al momento de definir un problema de Machine Learning.

¿Por qué es fundamental tener claro el problema a resolver?

Antes de iniciar cualquier proyecto de Machine Learning es fundamental que tengamos claro el problema que queremos resolver, pues esto nos ahorrará tiempo e incluso dinero.

Si no tenemos claro el problema a resolver y en lugar de ello comenzamos por ejemplo a recolectar datos o a escribir código, es probable que en el camino nos demos cuenta de que por ejemplo los datos no son adecuados, o son insuficientes, o que ni siquiera era necesario usar Machine Learning para resolver nuestro problema, o que tal vez logremos construir un modelo pero que no responde a la necesidad planteada inicialmente.

Mientras que si tenemos totalmente claro el problema a resolver podremos aprovechar mejor los recursos que tengamos disponibles y podremos garantizar que el desarrollo que hagamos responderá a las necesidades que hayamos definido inicialmente.

Pasos para definir un problema de Machine Learning

Partamos de un ejemplo hipotético que nos permitirá entender fácilmente estos pasos para la definición de nuestro problema.

Supongamos que trabajamos como Científicos de Datos en una empresa de manufactura y que la empresa quiere determinar cómo maximizar las ganancias resultado de la venta de su producto estrella durante los próximos meses.

Como vemos esta es la necesidad del negocio y que no está definida usando el lenguaje de un Científico de Datos y más bien ha sido definida muy probablemente por el equipo de ventas o los administrativos de la empresa.

Partiendo de esta necesidad del negocio podemos llevar a cabo estos pasos para definir nuestro problema.

Paso 1: definir el problema de manera concreta pero usando un lenguaje informal

En este paso simplemente debemos intentar describir el problema con pocas palabras y como si se lo estuviéramos contando a un colega o a una persona que no es experta en el tema.

Volviendo a la necesidad del negocio, en este paso podríamos sintetizar nuestro problema como: “queremos saber el nivel de ventas del producto estrella de la empresa durante los próximos meses”.

Observemos que acá estamos comenzando a delimitar la necesidad original usando un lenguaje más específico. Ya estamos hablando del nivel de ventas y estamos diciendo que nos interesa analizar ese producto estrella y que nuestro horizonte de tiempo será en meses (aunque aún nos falta especificar cuántos).

Al definir el problema de esta forma ya tenemos un excelente punto de partida para poco a poco formalizarlo como un problema de Machine Learning.

Paso 2: formalizar el problema usando el lenguaje del Machine Learning

En este punto debemos traducir el problema que definimos anteriormente a un lenguaje técnico propio del Machine Learning, especificando el tipo de tarea que debería realizar nuestro modelo (si es por ejemplo regresión, clasificación o clustering), el tipo de aprendizaje (si es supervisado o no supervisado), las entradas y salidas esperadas y cómo vamos a medir el desempeño (en el artículo conceptos básicos del Deep Learning explico en detalle varios de estos conceptos).

Para entender esto partamos del problema que acabamos de plantear de manera informal, que consistía en determinar el nivel de ventas del producto estrella durante los próximos meses.

En este caso tendríamos una tarea de regresión, pues lo que queremos es predecir valores continuos, correspondientes al nivel de ventas de un producto.

Como entrada podremos definir que nos interesa tomar el registro histórico consecutivo de, por ejemplo, 9 meses, a partir del cual realizaremos la predicción (que será la salida del modelo) de los siguientes 3 meses. Observemos que en este caso ya estamos definiendo nuestros horizontes de tiempo que nos permitirán establecer las restricciones sobre el set de datos que requeriremos para entrenar nuestro modelo.

Como métrica de desempeño podríamos por ejemplo usar la raíz cuadrada del error cuadrático medio, es decir que tomaremos las sumas de las diferencias cuadráticas entre los valores reales y los valores predichos por el modelo, las promediaremos entre la cantidad de predicciones realizadas y obtendremos la raíz cuadrada de este resultado.

Así que vemos que en este segundo paso estamos siendo mucho más técnicos con el lenguaje utilizado y ya hemos delimitado muchas variables como el horizonte de tiempo y la forma como mediremos el comportamiento del modelo al momento de hacer las predicciones.

Paso 3: pensar cómo resolveríamos el problema manualmente (¡sin código!)

Con el problema ya definido usando un lenguaje técnico la siguiente fase es una etapa de planeación en donde la idea es establecer todos los requerimientos a tener en cuenta para posteriormente poder resolver el problema usando Machine Learning.

En este punto tenemos que pensar por ejemplo qué tipo de datos y cuántos datos requerimos, cómo vamos a adquirir esos datos, cómo los pre-procesaríamos y qué tipo de modelos podrían ser útiles en este caso.

Y lo importante de este paso es que todo lo hacemos de forma manual, es decir que en este punto no escribiremos nada de código, sino que haremos un listado de requerimientos y estrategias que luego, cuando estemos resolviendo el problema, si implementaremos a través de la programación.

Para entender este paso volvamos al problema que ya tenemos definido, donde nos interesa realizar una tarea de regresión para predecir el nivel de ventas del producto durante tres meses consecutivos tomando como entrada el comportamiento en los 9 meses previos.

En este caso los datos que requerimos para entrenar el modelo corresponden precisamente al registro histórico de las ventas del producto y podemos establecer que como requerimiento necesitamos el comportamiento histórico de, por ejemplo, al menos los últimos 5 años, día tras día (es decir al menos 1825 registros diarios consecutivos).

Para adquirir estos datos deberíamos verificar si están disponibles en la base de datos de la empresa y al momento de pre-procesarlos deberíamos al menos tener en cuenta que puede haber datos incompletos. Además, dependiendo del modelo que vayamos a usar, podría ser necesario hacer algún tipo de escalamiento o estandarización de los datos.

También podríamos definir que las redes LSTM o el método ARIMA podrían ser modelos que resultarían viables al momento de hacer las predicciones.

Y observemos que con esta planeación, aún sin implementar nada de código, ya podremos incluso comenzar a determinar si resulta o no viable resolver el problema usando Machine Learning.

Por ejemplo, volviendo a nuestro caso hipotético de predecir el nivel de ventas de un producto, en este proceso podemos darnos cuenta que probablemente no tendremos la totalidad de datos requeridos o que tendremos que acudir a los puntos de venta para recolectar los datos (si no están centralizados en algún repositorio) o que tal vez no podremos usar redes LSTM porque no tendremos una cantidad suficiente de datos, o que tal vez debemos reformular nuestro horizonte de tiempo en la predicción y en lugar de predecir los próximos 3 meses lo haremos sólo para 1 mes.

Así que este último paso de planeación es super importante porque nos va a permitir identificar posibles vacíos en los datos o en nuestro enfoque de solución y nos permitirá hacer los ajustes que sean necesarios antes de comenzar a escribir el código para resolver nuestro problema.

Incluso podríamos darnos cuenta de que el problema es más sencillo de lo que pensábamos y que probablemente no resulta necesario el uso del Machine Learning para resolverlo (si te interesa puedes revisar el artículo ¿cuándo usar el Machine Learning?), o de que definitivamente no resulta viable realizar la predicción con base en los datos que tenemos.

Conclusión

Muy bien, como lo mencioné al comienzo del artículo creo que este listado de sugerencias es un paso fundamental al inicio de cualquier proyecto de Machine Learning pues nos permite en últimas definir los requerimientos y la viabilidad de resolver el problema antes de comenzar el desarrollo y esto en últimas nos va ahorrar tiempo y recursos.

En esencia, si no tenemos perfectamente claro el problema a resolver y los requerimientos del mismo no vale la pena que comencemos a escribir código pues no tendremos una meta clara en mente y llegaremos a resultados que probablemente no responderán a las necesidades del negocio.

Si tienes alguna duda de este artículo o tienes alguna sugerencia no dudes en contactarme diligenciando el siguiente formulario:

Debes introducir tu nombre.
Debes introducir tu apellido.
Debes introducir un email válido.
Debes introducir un mensaje.
Debes aceptar la política de privacidad.