Experiment Tracking¶
Endgame provides pluggable experiment tracking through the endgame.tracking
module. Track model parameters, metrics, and artifacts using MLflow or a
lightweight console logger.
Quick Start¶
from endgame.tracking import ConsoleLogger
with ConsoleLogger() as logger:
logger.log_params({"model": "lgbm", "n_estimators": 2000})
logger.log_metrics({"roc_auc": 0.934, "accuracy": 0.91})
MLflow Integration¶
Install the tracking extra:
pip install endgame-ml[tracking]
from endgame.tracking import MLflowLogger
with MLflowLogger(experiment_name="my_project") as logger:
logger.log_params({"model": "lgbm", "lr": 0.05})
logger.log_metrics({"roc_auc": 0.934})
logger.log_model(fitted_model, "best_model")
View results in the MLflow UI:
mlflow ui
# Open http://localhost:5000
AutoML Integration¶
Pass a logger to TabularPredictor to automatically track training:
from endgame.automl import TabularPredictor
from endgame.tracking import MLflowLogger
logger = MLflowLogger(experiment_name="automl_runs")
with logger:
predictor = TabularPredictor(label="target", logger=logger)
predictor.fit(train_df)
Parameters (preset, time limit, data shape) and metrics (best score, CV score, training time) are logged automatically.
Quick API Integration¶
The classify(), regress(), and compare() functions also accept a logger:
from endgame.quick import classify
from endgame.tracking import ConsoleLogger
with ConsoleLogger() as logger:
result = classify(X, y, logger=logger)
Console Logger¶
For lightweight tracking without external dependencies:
from endgame.tracking import ConsoleLogger
# Print to console
logger = ConsoleLogger()
# Log to file (JSON lines format)
logger = ConsoleLogger(log_file="experiments.jsonl")
# Silent (file only)
logger = ConsoleLogger(log_file="experiments.jsonl", verbose=False)
Factory Function¶
Use get_logger() for backend-agnostic code:
from endgame.tracking import get_logger
# Defaults to console
logger = get_logger("console")
# Switch to MLflow
logger = get_logger("mlflow", experiment_name="my_project")
Custom Logger¶
Implement the ExperimentLogger interface for custom backends
(e.g., Weights & Biases, Neptune):
from endgame.tracking.base import ExperimentLogger
class WandbLogger(ExperimentLogger):
def start_run(self, run_name=None, tags=None):
import wandb
self._run = wandb.init(project="endgame", name=run_name, tags=tags)
return self._run.id
def end_run(self, status="FINISHED"):
self._run.finish()
def log_params(self, params):
import wandb
wandb.config.update(params)
def log_metrics(self, metrics, step=None):
import wandb
wandb.log(metrics, step=step)
def log_artifact(self, local_path, artifact_path=None):
import wandb
wandb.save(local_path)
def log_model(self, model, artifact_path="model", **kwargs):
pass # W&B handles models via artifacts
def set_experiment(self, name):
pass # W&B uses project names
API Reference¶
Class |
Description |
|---|---|
|
Abstract base class |
|
Print/file logger (no dependencies) |
|
MLflow backend |
|
Factory function |