Modelos Soportados
godml incluye una librería de modelos listos para usar. Configura el tipo con model.type en el YAML.
Resumen
model.type | Algoritmo | Tarea | provider: mlflow | provider: sagemaker |
|---|---|---|---|---|
xgboost | XGBClassifier | Clasificación | ✅ | ✅ |
random_forest | RandomForestClassifier | Clasificación | ✅ | ✅ |
logistic_regression | LogisticRegression | Clasificación | ✅ | ✅ |
linear_regression | LinearRegression | Regresión | ✅ | ❌ |
lstm_forecast | LSTM (Keras) | Regresión / series de tiempo | ✅ (godml[deep]) | ❌ |
lightgbm | LightGBM | Clasificación | ❌ | ✅ |
xgboost y random_forest están implementados como clasificadores — no sirven para un target continuo pese a que XGBoost/RandomForest en general sí soportan regresión. Para regresión usa linear_regression o lstm_forecast.
XGBoost
model:
type: xgboost
hyperparameters:
max_depth: 6
eta: 0.3 # learning rate
n_estimators: 200
objective: binary:logistic # el AutoTuner lo completa si lo omites
random_state: 42
Random Forest
model:
type: random_forest
hyperparameters:
n_estimators: 100
max_depth: 10 # null = sin límite
max_features: sqrt # sqrt | log2 | null
random_state: 42
Logistic Regression
model:
type: logistic_regression
hyperparameters:
random_state: 42
logistic_regression y linear_regression pasan hyperparameters sin filtrar a sklearn.linear_model.LogisticRegression/LinearRegression. Un campo que esas clases no acepten (p.ej. max_depth) hace fallar el entrenamiento.
Linear Regression
model:
type: linear_regression
hyperparameters: {} # LinearRegression de sklearn no acepta max_depth/eta/n_estimators/random_state
LSTM Forecast (series de tiempo)
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
Requiere:
pip install godml[deep] # incluye TensorFlow + Keras
Métricas calculadas: mse, mae, r2 (no auc/accuracy).
LightGBM
Solo disponible con provider: sagemaker (_SUPPORTED_MODELS del executor de SageMaker). Con provider: mlflow, model.type: lightgbm falla porque no está en el registro de modelos core.
AutoTuner
godml detecta si el target es clasificación binaria, multiclase o regresión y completa los hiperparámetros de objective/eval_metric/criterion/solver que falten — nunca pisa un valor que ya definiste:
| Modelo | Binaria | Multiclase | Regresión |
|---|---|---|---|
xgboost | objective: binary:logistic, eval_metric: auc | objective: multi:softprob, num_class, eval_metric: mlogloss | objective: reg:squarederror |
random_forest | criterion: entropy | criterion: gini | criterion: squared_error |
logistic_regression | solver: liblinear | multi_class: ovr, solver: lbfgs | — |
lstm_forecast | — | — | completa epochs/batch_size si faltan |
No ajusta hiperparámetros según tamaño del dataset ni detecta desbalance de clases (scale_pos_weight) todavía.
Modelo personalizado
Implementa BaseClassificationModel o BaseRegressionModel (de godml.model_service.base_model_interface) — heredar de la subclase correcta hace que godml calcule las métricas adecuadas (clasificación vs. regresión) automáticamente.
Restricciones de source: local:
- El archivo debe vivir en
<proyecto>/models/<nombre>.py. model.type(y el nombre del archivo) solo puede sercustom_model,user_modeloproject_model— no un nombre arbitrario.- Importa el módulo base con alias, no la clase directamente: si haces
from ... import BaseClassificationModelen tu archivo, godml puede detectar esa clase base importada en vez de la tuya (escanea el módulo alfabéticamente buscando la primera subclase deBaseModel) y falla al instanciarla por ser abstracta.
import godml.model_service.base_model_interface as bmi
class MiModelo(bmi.BaseClassificationModel):
def train(self, X_train, y_train, X_test, y_test, params):
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(random_state=params.get("random_state"))
model.fit(X_train, y_train)
preds = model.predict_proba(X_test)[:, 1]
return model, preds, {} # (modelo, predicciones, métricas — {} deja que godml las calcule)
def predict(self, X):
return self.model.predict(X)
model:
type: custom_model
source: local
Métricas calculadas automáticamente
Para clasificación binaria:
auc— Area Under ROC Curveaccuracy— Exactitudprecision— Precisiónrecall— Exhaustividadf1— F1-Score
Para regresión (linear_regression, lstm_forecast):
mse— Error cuadrático mediomae— Error absoluto medior2— Coeficiente de determinación