Ejemplo: Retail Demand Forecast
Predicción de demanda semanal con LSTM para un retailer de e-commerce.
godml.yml
name: retail-demand-forecast
version: 1.0.0
provider: mlflow
dataset:
uri: ./data/weekly_sales.csv
target: units_sold
dataprep:
# inputs/outputs son obligatorios en la receta embebida (mismo schema que
# una receta de dataprep standalone). godml sobreescribe dataset.uri con el
# resultado, así que el output de aquí puede apuntar al mismo archivo.
inputs:
- name: raw
connector: csv
uri: ./data/weekly_sales.csv
outputs:
- name: clean
connector: csv
uri: ./data/weekly_sales.csv
steps:
- op: drop_columns
params:
columns: [store_id, sku_description]
# fillna no calcula media/mediana automáticamente: calcula el valor
# con pandas antes y pásalo explícito por columna.
- op: fillna
params:
columns: [price]
value: 0
- op: fillna
params:
columns: [discount_pct]
value: 0
- op: fillna
params:
columns: [stock_level]
value: 0
- op: minmax_scale
params:
columns: [price, discount_pct, stock_level, promo_spend]
feature_range: [0, 1]
governance:
owner: equipo-supply-chain
tags:
- domain: retail
- task: demand-forecast
model:
type: lstm_forecast
hyperparameters:
look_back: 5 # tamaño de la ventana de secuencia
units: 50 # neuronas en la capa LSTM
learning_rate: 0.001
epochs: 100
batch_size: 16
metrics:
- name: r2
threshold: -1.0 # ajusta hacia arriba (p.ej. 0.5) según epochs/datos reales
deploy:
batch_output: ./output/demand_forecast.csv
model_output: ./output/lstm_model.pkl
lstm_forecast es un modelo de regresión: godml calcula mse, mae y r2 (no auc/accuracy). Usa r2 en metrics — igual que auc, un valor mayor al threshold se considera un pase.
lstm_forecast no usa los mismos hiperparámetros que los modelos de árboles (eta, max_depth, n_estimators). Los campos que realmente lee son look_back, units, learning_rate, epochs y batch_size.
Al terminar, el resultado del dataprep embebido se guarda de vuelta en dataset.uri (./data/weekly_sales.csv). Si vuelves a correr el pipeline sin regenerar el CSV crudo, drop_columns fallará porque store_id/sku_description ya no existen tras la corrida anterior.
Instalar y ejecutar
pip install godml[deep] # incluye TensorFlow + Keras
godml run -f godml.yml
Alternativa tabular (sin GPU)
random_forest y xgboost en godml están implementados como clasificadores (RandomForestClassifier/XGBClassifier), así que no sirven como alternativa para un target continuo como units_sold. Para un forecast tabular sin GPU, usa linear_regression:
model:
type: linear_regression
hyperparameters: {} # LinearRegression de sklearn no toma max_depth/eta/etc.
pip install godml
godml run -f godml.yml
Notebook (notebook_api)
from godml import notebook_api as nb
nb.quick_train(
model_type="lstm_forecast",
hyperparameters={"look_back": 5, "units": 50, "learning_rate": 0.001, "epochs": 100, "batch_size": 16},
dataset_path="./data/weekly_sales_clean.csv",
target="units_sold",
)