En las empresas se coleccionan grandes cantidades de datos que, desafortunadamente, muchas veces sólo se almacenan sin aprovechar su potencial para mejorar la gestión de la misma. Aunque, cada vez más, las empresas entienden el valor que los datos les pueden aportar y buscan maneras de cómo incorporar métodos de análisis de datos y aprendizaje automático para facilitar y apoyar las decisiones basándose en datos.

Este proyecto ha sido realizado para una empresa que vende un gran catálogo de productos (más de 90.000 referencias) a través de tiendas físicas y online. Esta cantidad de productos dificulta su clasificación y por consiguiente, la aparición de los mismos en la web para su venta.

En el proyecto proponemos la incorporación de técnicas de aprendizaje automático para la gestión de artículos, desde la clasificación automática hasta la definición del stock mínimo. El proyecto está dividido en dos partes, en esta primera parte, sobre la que trata este artículo, nos centramos en la clasificación de productos en la categoría en la cual se publica en la web para su venta online, la segunda parte está dedicada a la definición del Stock mínimo mediante aprendizaje automático

Dataset

El dataset para análisis, proporcionado directamente por la empresa, contenía >90.000 artículos, divididos en 8 categorías de productos (tabla 1). El artículo puede estar asignado a más que una categoría, pero para el análisis inicial escogimos sólo la primera categoría. De todos artículos, casi 70 % no tiene la categoría asignada.

Tabla 1: Las categorías, cantidad (n), la proporción (%) de total de artículos asignados a cada categoría y la proporción (% con categoría) de artículos con la categoría asignada. Se observa la gran cantidad de artículos sin la categoría asignada (en cursiva).

 

Preparación y limpieza de los datos

Del análisis excluimos varios artículos (18.800 en total), por ejemplo, los que no tenían suficiente información en la descripción, la categoría “C2”, con muy pocos registros, etc. Dataset final para el análisis contenía 74.050 registros (artículos), 45.393 de ellos “sin categoría”. De todos estos registros creamos “Bag of words” extrayendo las palabras de la descripción de los artículos que mas adelante usamos para construir el modelo predictivo. Eliminamos las palabras que no aportan significado (colores, preposiciones, puntuación, etc.), también los códigos alfanuméricos. Así obtuvimos >16.000 palabras únicas, para cuales calculamos las frecuencias de ocurrencia.

Análisis predictivo

En este caso aplicamos el método de clasificación supervisada, usando algoritmo Naïve Bayes – un clasificador probabilístico, dentro de la librería de R quanteda (Benoit et al. 2018), desarrollada especialmente para análisis de textos.

Para el análisis ponderamos las frecuencias de ocurrencia calculando la medida numérica “tf-idf” (Term frequency – Inverse document frequency, frecuencia de término – frecuencia inversa de documento), cual aumenta el peso de las palabras que ocurren pocas veces. Seleccionamos los artículos con la categoría asignada (28.657) y los dividimos aleatoriamente en dos partes: training dataset (80%, para entrenar el modelo de clasificación) y testing dataset (20%, para validar el modelo). Creamos el modelo predictivo usando algoritmo Naïve Bayes sobre la matriz de palabras de training dataset y lo aplicamos al test dataset para evaluar su potencial predictivo.

Para cada artículo de test dataset obtuvimos la categoría predicha (la más probable) y las probabilidades de pertenecer a cualquiera de otras categorías. Al aplicar el modelo a la matriz de palabras de test dataset, conseguimos clasificar de forma automática los productos en la categoría correspondiente, con exactitud (% de aciertos de la categoría predicha) entre 72-99% y sensibilidad (% de veces que acierta la categoría) entre 82-99% por categoría (tabla 2). La precisión general del modelo era 0.95 (intervalo de confianza 95% 0.94-0.95), que significa que en 95% de casos la clasificación es correcta.

Tabla 2: Evaluación del modelo predictivo Naive Bayes sobre el test dataset. En filas se encuentran categorías predichas del modelo, en columnas las categorías de referencia asignados por la empresa.

 

Finalmente, aplicamos el modelo al dataset de artículos sin categoría asignada. Los resultados de este proceso (tabla 3) facilitan a la empresa la incorporación de los productos a la venta online y así la posibilidad de aumentar las ventas.

Tabla 3: Resultados de aplicación del modelo predictivo a dataset sin clasificar. Se desglosa número (n) y la proporción del total (%) de artículos asignados a cada categoría.

 

Conclusiones

Como vemos, el modelo predice bastante bien la categoría, los posibles errores de la clasificación pueden ser causados por estos factores:

  • Usamos solo la primera categoría para la clasificación (cada artículo puede tener varias asignadas).
  • Usamos el algoritmo probabilístico, que significa que el algoritmo tiene que asignar cada artículo a una de las clases entrenadas. La clase asignada es la con más probabilidad, aunque puede ser que la diferencia de probabilidades entre dos clases sea muy pequeña.
  • La descripción del artículo no proporciona suficiente información para el algoritmo.
  • Inconsistencia en descripción de los artículos, errores ortográficos en la descripción, descripciones en castellano e inglés.
  • Para posible mejora del modelo se podría construir un diccionario de abreviaturas de códigos alfanuméricos usados en la descripción.

En este proyecto proponemos aplicación de método supervisado de aprendizaje automático para la clasificación de productos a la categoría correspondiente y así facilitar su incorporación en la venta online.

De momento no disponemos de datos reales para poder valorar el impacto de la implementación de la técnica propuesta en la empresa. Sin embargo, entre otros beneficios esperados, una de las ventajas inmediatas es el ahorro del tiempo. Como ejemplo, si se tardara sólo un minuto a asignar la categoría del producto manualmente, con unos 40.000 productos se necesitarían unas 667 horas, siendo 83 jornadas laborales de 8 horas.

Análisis

Para desarrollo de este proyecto utilizamos el programa R (R Core Team, 2018), con siguientes librerías: dplyr, tidyr, quanteda, caret, ggplot2, janitor, kableExtra, DBI, ODBC.