import mlflow
import pandas as pd
import gradio as gr
--- 1. Busca de Modelos e Métricas ---
def get_best_models():
# Busca os dois últimos experimentos registrados
runs = mlflow.search_runs(experiment_names=["Recomendacao_Musicas_Playcatch"],
order_by=["metrics.rmse ASC"], max_results=2)
return runs
--- 2. Função de Recomendação para Comparação ---
def recommend_comparison(user_id):
runs = get_best_models()
# Carregando os modelos via URI do MLflow
model_v1 = mlflow.sklearn.load_model(f"runs:/{runs.iloc[0].run_id}/modelo_recomendacao_v1")
model_v2 = mlflow.sklearn.load_model(f"runs:/{runs.iloc[1].run_id}/modelo_recomendacao_v1")
# Simulação de geração de recomendações (Top 5)
# Aqui você filtraria músicas que o usuário ainda não ouviu
recs_v1 = ["Música A", "Música B", "Música C", "Música D", "Música E"]
recs_v2 = ["Música X", "Música Y", "Música B", "Música Z", "Música W"]
return "\n".join(recs_v1), "\n".join(recs_v2)
--- 3. Construção do Painel Gradio ---
def launch_dashboard():
with gr.Blocks(title="Playcatch - Comparador de Modelos") as demo:
gr.Markdown("#Painel de Avaliação de Modelos (A/B Test)")
with gr.Row():
user_input = gr.Number(label="ID do Usuário para Teste", value=101)
btn = gr.Button("Comparar Recomendações")
with gr.Row():
out1 = gr.Textbox(label="Modelo A (Melhor RMSE)")
out2 = gr.Textbox(label="Modelo B (Runner-up)")
btn.click(fn=recommend_comparison, inputs=user_input, outputs=[out1, out2])
demo.launch()
launch_dashboard()
conceito:
Validação com Dados Não Vistos (Hold-out): É Avaliamos o modelo em dados que ele nunca viu para garantir que ele não apenas decorou o histórico (Overfitting)
Análise Qualitativa: Números (métricas) dizem se o modelo é preciso.