A complete end-to-end coding guide for MLflow experiment tracking, hyperparameter optimization, model evaluation, and live model deployment.

by
0 comments
A complete end-to-end coding guide for MLflow experiment tracking, hyperparameter optimization, model evaluation, and live model deployment.

best_C = best("params")("C")
best_solver = best("params")("solver")


final_pipe = Pipeline((
   ("scaler", StandardScaler()),
   ("clf", LogisticRegression(
       C=best_C,
       solver=best_solver,
       penalty="l2",
       max_iter=2000,
       random_state=42
   ))
))


with mlflow.start_run(run_name="final_model_run") as final_run:
   final_pipe.fit(X_train, y_train)


   proba = final_pipe.predict_proba(X_test)(:, 1)
   pred = (proba >= 0.5).astype(int)


   metrics = {
       "test_auc": float(roc_auc_score(y_test, proba)),
       "test_accuracy": float(accuracy_score(y_test, pred)),
       "test_precision": float(precision_score(y_test, pred, zero_division=0)),
       "test_recall": float(recall_score(y_test, pred, zero_division=0)),
       "test_f1": float(f1_score(y_test, pred, zero_division=0)),
   }
   mlflow.log_metrics(metrics)
   mlflow.log_params({"C": best_C, "solver": best_solver, "model": "LogisticRegression+StandardScaler"})


   input_example = X_test.iloc(:5).copy()
   signature = infer_signature(input_example, final_pipe.predict_proba(input_example)(:, 1))


   model_info = mlflow.sklearn.log_model(
       sk_model=final_pipe,
       artifact_path="model",
       signature=signature,
       input_example=input_example,
       registered_model_name=None,
   )


   print("Final run_id:", final_run.info.run_id)
   print("Logged model URI:", model_info.model_uri)


   eval_df = X_test.copy()
   eval_df("label") = y_test.values


   eval_result = mlflow.models.evaluate(
       model=model_info.model_uri,
       data=eval_df,
       targets="label",
       model_type="classifier",
       evaluators="default",
   )


   eval_summary = {
       "metrics": {k: float(v) if isinstance(v, (int, float, np.floating)) else str(v)
                   for k, v in eval_result.metrics.items()},
       "artifacts": {k: str(v) for k, v in eval_result.artifacts.items()},
   }
   mlflow.log_dict(eval_summary, "evaluation/eval_summary.json")

Related Articles

Leave a Comment