digraph MLFlow { rankdir=LR; bgcolor="#1a1a2e"; node [shape=box, style="filled,rounded", fontname="Helvetica", fontsize=11, fontcolor="white", penwidth=2]; edge [color="#53a8b6", penwidth=1.5, fontname="Helvetica", fontsize=9, fontcolor="#a8a8b3"]; D [label="labeled_results\n.json", shape=cylinder, fillcolor="#e94560"]; FE [label="Feature\nExtraction\n(8 features)", fillcolor="#1a1a6c"]; SPL [label="Train/Test\nSplit\n80/20\nStratified", fillcolor="#4a1a6c"]; TR [label="Random Forest\nTraining\n(100 trees)", fillcolor="#6c3a1a"]; EV [label="Evaluation\nAccuracy, F1\nConfusion Matrix", fillcolor="#1a6c3a"]; CV [label="5-Fold\nCross-Val", fillcolor="#1a4a6c"]; M [label="model.pkl", shape=cylinder, fillcolor="#e94560"]; REP [label="TrainingReport\n(dataclass)", fillcolor="#6c1a4a"]; D -> FE; FE -> SPL [label="X, y"]; SPL -> TR [label="X_train\ny_train"]; SPL -> EV [label="X_test\ny_test"]; TR -> EV [label="y_pred"]; FE -> CV [label="X, y"]; TR -> M [label="joblib.dump"]; EV -> REP; CV -> REP [label="cv_scores"]; }