Glosario
Datos faltantes: qué hacer cuando faltan ventas, y por qué faltan
Definición
Los datos faltantes son huecos en una tabla: valores que deberían estar y no están, como la venta de una semana o el precio de un producto. Antes de rellenarlos hay que averiguar la causa. Si el hueco es aleatorio (un fallo de registro), se puede estimar con la media, con valores parecidos o con un modelo. Si tiene un motivo, como una tienda cerrada, ese motivo es información y se codifica con una variable.
En casi toda exportación de un programa hay huecos: una semana sin registro, un producto sin precio, una tienda que no envió sus cifras. Rellenarlos con la media parece lo natural, pero antes hay que saber por qué faltan, porque una tienda cerrada y un dato perdido no se tratan igual.
Qué es exactamente
Un dato faltante es un valor que debería existir en la tabla y no existe. En ventas y stock aparece de muchas maneras: una semana sin cifras de una tienda, un precio vacío, una fecha de caducidad sin rellenar. Algunos modelos no admiten huecos y los descartan; otros sí.
Según Hyndman y Athanasopoulos, los huecos tienen causas distintas. Pueden sesgar un modelo, como una tienda cerrada en festivos donde el día siguiente tiene más ventas, o ser esencialmente aleatorios, como ventas sin registrar o un dispositivo que falla. Quitar un valor extremo también crea un hueco. Para el primer caso, no hay método automático: se trata con variables que lo expresen, como «es festivo» y «es el día después de un festivo».
También se le llama
Valores perdidos, valores ausentes, missing values, huecos o NaN (de «not a number», el marcador que usan muchos programas). Rellenarlos se llama imputar. Que no se confunda con el cero: «no se vendió nada» es un dato; «no sabemos cuánto se vendió» es un hueco.
Un ejemplo
Una cadena de librerías tiene las ventas semanales de un libro de bolsillo en una tienda: 10, 12, vacío, 11, 13. La media de las cuatro semanas con dato es 11,5. Rellenar con ella es lo que hace el imputador más sencillo de scikit-learn, que admite media, mediana, el valor más frecuente o un valor constante.
Pero primero hay que saber qué pasó la semana vacía. Si la tienda cerró por obras, el valor correcto es cero y la causa tiene consecuencias: la semana siguiente puede vender más. Si fue un fallo de comunicación del TPV, la venta real fue positiva y un 11,5 es razonable. Si fue una semana con inventario y se vendió normal, también.
Hay métodos más finos. El imputador de vecinos más próximos (KNN) rellena el hueco con la media de las tiendas más parecidas en las demás variables. El imputador iterativo modela cada variable con hueco como función de las demás, y se repite varias rondas. Hyndman y Athanasopoulos proponen, para series, ajustar un modelo ARIMA y usarlo para interpolar; en su ejemplo, un valor extremo de 81,1 se sustituye por 8,5.
Un recurso importante es marcar los rellenados. La documentación de scikit-learn permite añadir un indicador que dice qué valores eran huecos, para que el modelo sepa que esa cifra es una estimación y pueda aprender si faltar tiene significado.
Ojo con esto
Los errores que más se repiten al tratar huecos:
- Tomar el hueco por cero: hunde la media de ventas y la previsión sale baja. Es un fallo frecuente en exportaciones que dejan en blanco lo que no se vendió.
- Borrar las filas con hueco: la documentación advierte de que se pierden datos que pueden ser valiosos aunque estén incompletos. Si el hueco afecta a una variable secundaria, es mejor imputar.
- Rellenar con la media de la empresa entera: una tienda que vende 4 a la semana no debe recibir la media de otra que vende 30. Se rellena con datos de la misma serie o de sitios parecidos.
- Ignorar que algunos métodos no admiten huecos: según el manual de Hyndman, los métodos de suavizado exponencial (ETS) y la descomposición STL no los toleran; otros, como ARIMA, sí.
Dónde aparece en el sistema
En la carga semanal, antes de calcular nada, el sistema detecta los huecos de cada producto y sitio, intenta explicarlos (festivo, cierre, rotura, fallo de registro) y los trata según su causa. Los que no tienen explicación se señalan en un informe para que alguien de tu empresa los revise.
Los modelos basados en árboles pueden tratar los huecos dentro del propio modelo: scikit-learn documenta que HistGradientBoosting aprende por cada corte hacia qué lado enviar los valores que faltan, sin necesidad de imputar. Todo esto forma parte de la limpieza de datos previa a la previsión de demanda.
Términos relacionados
Limpieza de datos, valor atípico, demanda censurada, serie temporal y gradient boosting.
Preguntas frecuentes
¿Cuántos huecos son demasiados para usar un producto?
No hay un porcentaje universal. Si los huecos son aleatorios y pocos, se imputan sin problema. Si faltan semanas seguidas o muchas, es mejor usar solo los datos posteriores al último hueco o apoyarse en productos parecidos.
¿Una semana sin ventas porque no había stock es un hueco?
No, es peor: es un dato que parece correcto y no lo es. La venta fue cero porque no se pudo vender, no porque nadie quisiera comprar. Se trata como demanda censurada, no como cero ni como hueco.
¿Se pueden rellenar huecos con otra herramienta antes de enviaros los datos?
Mejor no. Si los huecos se rellenan antes sin dejar marca, perdemos la información de cuáles eran estimaciones. Envía los datos tal cual salen del programa y los tratamos nosotros dejando constancia.