En esta página se explica la previsión jerárquica, sus objetivos y las estrategias de entrenamiento que puede emplear para reducir el sesgo en sus modelos de previsión.
Para obtener instrucciones detalladas sobre cómo configurar la previsión jerárquica al entrenar tu modelo de previsión con la API, consulta Entrenar un modelo de previsión.
¿Qué es la previsión jerárquica?
Las series temporales suelen estructurarse en una jerarquía anidada. Por ejemplo, todo el inventario de productos de un comercio se puede dividir en categorías de productos. Las categorías se pueden dividir en productos individuales. Al predecir las ventas futuras, las previsiones de los productos de una categoría deben sumar la previsión de la categoría en sí, y así sucesivamente en la jerarquía.
Del mismo modo, la dimensión temporal de una serie temporal también puede mostrar una jerarquía. Por ejemplo, las ventas previstas de un producto concreto a nivel diario deben sumar las ventas semanales previstas del producto. En la siguiente figura se muestra este grupo y la jerarquía temporal como una matriz:
La previsión jerárquica tiene tres objetivos:
- Reduce el sesgo general para mejorar las métricas de todas las series temporales (ventas totales).
- Reduce el sesgo temporal para mejorar las métricas a largo plazo (ventas de temporada).
- Reduce el sesgo a nivel de grupo para mejorar las métricas de un grupo de series temporales (ventas de artículos).
En Vertex AI, la previsión jerárquica tiene en cuenta la estructura jerárquica de las series temporales incorporando términos de pérdida adicionales para las inferencias agregadas.
Hierarchical loss = (1 x loss) +
(temporal total weight x temporal total loss) +
(group total weight x group total loss) +
(group temporal total weight x group temporal total loss)
Por ejemplo, si el grupo jerárquico es "categoría", las inferencias a nivel de "categoría" son la suma de las inferencias de todos los "productos" de la categoría. Si el objetivo del modelo es el error absoluto medio (MAE), la pérdida incluye el MAE de las inferencias a nivel de "producto" y de "categoría". Esto ayuda a mejorar la coherencia de las previsiones en los diferentes niveles de la jerarquía y, en algunos casos, incluso puede mejorar las métricas del nivel más bajo.
Configurar la agregación jerárquica para el entrenamiento de modelos
Configura la agregación jerárquica al entrenar tus modelos de previsión. Para ello, configura AutoMLForecastingTrainingJob
en el SDK de Vertex AI o configura hierarchyConfig
en la API de Vertex AI.
Los parámetros disponibles para AutoMLForecastingTrainingJob
y hierarchyConfig
son los siguientes:
group_columns
group_total_weight
temporal_total_weight
group_temporal_total_weight
Los parámetros permiten diferentes combinaciones de pérdidas agregadas por grupo y por tiempo. También te permiten asignar pesos para aumentar la prioridad de minimizar la pérdida agregada en relación con la pérdida individual. Por ejemplo, si el peso es 2.0
, se le asigna el doble de peso que a la pérdida individual.
group_columns
Los nombres de las columnas de la tabla de entrada de entrenamiento identifican la agrupación del nivel de jerarquía. Las columnas deben ser time_series_attribute_columns
. Si no define la columna de grupo, todas las series temporales se tratarán como parte del mismo grupo y se agregarán en todas las series temporales.
group_total_weight
Peso de la pérdida agregada del grupo en relación con la pérdida individual. Inhabilitada si se le asigna el valor 0.0
o no se le asigna ningún valor.
temporal_total_weight
Peso de la pérdida agregada en el tiempo en relación con la pérdida individual. Inhabilitada si se le asigna el valor 0.0
o no se le asigna ningún valor.
group_temporal_total_weight
Peso de la pérdida agregada total (grupo x tiempo) en relación con la pérdida individual. Se inhabilita si se le asigna el valor 0.0
o no se le asigna ningún valor. Si no define la columna de grupo, todas las series temporales se tratarán como parte del mismo grupo y se agregarán en todas las series temporales.
Estrategias para reducir los sesgos
Empieza con un tipo de agregación (grupo o tiempo) con un peso de 10.0
y, a continuación, reduce o duplica el valor en función de los resultados.
Reducir el sesgo general
En las previsiones detalladas para distribuir el stock en las tiendas, donde se usa el error porcentual absoluto ponderado (EPAP) a nivel de producto, tienda y fecha como métrica de previsión, las previsiones suelen ser inferiores a los niveles agregados. Para compensar este sesgo general, prueba lo siguiente:
- Asigna el valor
10.0
agroup_total_weight
. - No definas
group_columns
. - Deja el resto de los pesos sin definir.
De esta forma, se agregan todas las series temporales y se reduce el sesgo general.
Reducir el sesgo temporal
En la planificación a largo plazo, las previsiones se pueden hacer a nivel de producto, región y semana, pero las métricas relevantes se pueden medir con respecto a los totales de temporada. Para compensar este sesgo temporal, prueba lo siguiente:
- Asigna el valor
10.0
atemporal_total_weight
. - No definas
group_columns
. - Deja el resto de los pesos sin definir.
Agrega todos los datos del horizonte de una serie temporal y reduce el sesgo temporal.
Reducir el sesgo a nivel de grupo
En el caso de las previsiones que tienen varios propósitos en el proceso de reposición, las previsiones detalladas a nivel de producto, tienda y fecha o semana pueden agregarse a niveles de producto, centro de distribución y fecha para la distribución, o a niveles de categoría de producto y fecha para los pedidos de materiales. Para ello, sigue estos pasos:
- Asigna el valor
10.0
agroup_total_weight
. - Define
group_columns
; por ejemplo, ["region"] o ["region", "category"]. Si se definen varias columnas de grupo, se usará el valor combinado de estas para definir el grupo. Para obtener los mejores resultados, usa columnas de grupo con 100 valores combinados distintos o menos. - Deja el resto de los pesos sin definir.
Agrega todas las series temporales del mismo grupo para la misma fecha y reduce el sesgo a nivel de grupo.
Límites
- Solo se admite un nivel de agregación de series temporales. Si especifica más de una columna de agrupación, como "producto, tienda", las series temporales estarán en el mismo grupo solo si comparten los mismos valores de "producto" y "tienda".
- Te recomendamos que uses 100 grupos o menos.