Quiero predecir las ventas en las máquinas expendedoras de alimentos (para evitar, en última instancia, el desperdicio de alimentos). Trabajo con scikit learn
.
Mis modelos actuales no son demasiado malos, pero muestran patrones estacionales de infrapredicción (y recíprocamente de sobrepredicción). El gráfico muestra la relación mensual de (underprediction==True)/(observations)
para un modelo (regresión lineal):
El gráfico es similar para los otros modelos que he probado ( Ridge(), Lasso(), AdaBoostRegressor(), GradientBoostingRegressor(), ExtraTreesRegressor(), RandomForestRegressor(), ElasticNet(), KNeighborsRegressor(), DecisionTreeRegressor()
). En todas partes veo patrones como que la proporción de infraprecios en mayo y junio es mayor que en abril y julio. O que la proporción es siempre mayor en diciembre que en enero.
¿Qué puedo hacer para que el modelo recoja este patrón?
Para, en última instancia, reducir la infra y la sobrepredicción y aumentar el ajuste del modelo.
Tal vez añadir una característica/tendencia, pero ¿cómo?
Algunos datos estilizados:
- Objetivo:
food items sold (per day)
- Características:
company, month, day in month, location within company (categorical), canteen (binary), no. of employees, company type, school holiday (binary), bank holiday (binary), day of week
- Observaciones: 34.000 (42 máquinas expendedoras)
- Rango de tiempo: 2010-2015
Pasos previstos tras la modelización de la falta de predicción:
- Ajuste los modelos mencionados con los parámetros por defecto en la validación cruzada y elija el modelo con el menor MSE medio y el menor error estándar (
cross_validation.KFold(n=rows, n_folds=5, shuffle=True)
) - Ejecutar la búsqueda de cuadrícula en el modelo elegido para el ajuste de los hiperparámetros