| name | model-evaluation |
| description | Model evaluation in R with performance metrics, calibration, ROC analysis, decision curves, and validation. |
Model Evaluation Patterns
Overview
Comprehensive model evaluation using yardstick and related packages. Covers metrics for classification, regression, and survival outcomes, plus calibration and uncertainty quantification.
Classification Metrics
Binary Classification
library(yardstick)
predictions |>
accuracy(truth = outcome, estimate = .pred_class)
predictions |>
sens(truth = outcome, estimate = .pred_class)
predictions |>
spec(truth = outcome, estimate = .pred_class)
predictions |>
ppv(truth = outcome, estimate = .pred_class)
predictions |>
npv(truth = outcome, estimate = .pred_class)
predictions |>
f_meas(truth = outcome, estimate = .pred_class)
predictions |>
kap(truth = outcome, estimate = .pred_class)
predictions |>
mcc(truth = outcome, estimate = .pred_class)
Probability-Based Metrics
predictions |>
roc_auc(truth = outcome, .pred_positive_class)
predictions |>
pr_auc(truth = outcome, .pred_positive_class)
predictions |>
brier_class(truth = outcome, .pred_positive_class)
predictions |>
mn_log_loss(truth = outcome, .pred_positive_class)
predictions |>
gain_capture(truth = outcome, .pred_positive_class)
Multi-Class Classification
predictions |>
accuracy(truth = outcome, estimate = .pred_class)
predictions |>
f_meas(truth = outcome, estimate = .pred_class, estimator = "macro")
predictions |>
f_meas(truth = outcome, estimate = .pred_class, estimator = "micro")
predictions |>
f_meas(truth = outcome, estimate = .pred_class, estimator = "macro_weighted")
predictions |>
roc_auc(truth = outcome, .pred_class1:.pred_classN)
Metric Sets
class_metrics <- metric_set(
accuracy,
sens,
spec,
ppv,
f_meas,
roc_auc
)
tune_results <- workflow |>
tune_grid(
resamples = cv_folds,
metrics = class_metrics
)
predictions |>
class_metrics(truth = outcome, estimate = .pred_class, .pred_positive)
Regression Metrics
Standard Metrics
predictions |>
rmse(truth = outcome, estimate = .pred)
predictions |>
mae(truth = outcome, estimate = .pred)
predictions |>
rsq(truth = outcome, estimate = .pred)
predictions |>
rsq_trad(truth = outcome, estimate = .pred)
predictions |>
mape(truth = outcome, estimate = .pred)
predictions |>
smape(truth = outcome, estimate = .pred)
Robust and Alternative Metrics
predictions |>
huber_loss(truth = outcome, estimate = .pred)
predictions |>
ccc(truth = outcome, estimate = .pred)
predictions |>
iic(truth = outcome, estimate = .pred)
Regression Metric Set
reg_metrics <- metric_set(
rmse,
mae,
rsq,
mape
)
predictions |>
reg_metrics(truth = outcome, estimate = .pred)
Visualization
ROC Curves
roc_data <- predictions |>
roc_curve(truth = outcome, .pred_positive)
autoplot(roc_data)
all_predictions |>
group_by(model) |>
roc_curve(truth = outcome, .pred_positive) |>
autoplot()
Precision-Recall Curves
pr_data <- predictions |>
pr_curve(truth = outcome, .pred_positive)
autoplot(pr_data)
Gain and Lift Curves
gain_data <- predictions |>
gain_curve(truth = outcome, .pred_positive)
autoplot(gain_data)
lift_data <- predictions |>
lift_curve(truth = outcome, .pred_positive)
autoplot(lift_data)
Calibration Plots
cal_data <- predictions |>
cal_plot_breaks(truth = outcome, .pred_positive, num_breaks = 10)
autoplot(cal_data)
cal_data <- predictions |>
cal_plot_windowed(truth = outcome, .pred_positive)
autoplot(cal_data)
Confusion Matrix
conf_mat <- predictions |>
conf_mat(truth = outcome, estimate = .pred_class)
autoplot(conf_mat, type = "heatmap")
autoplot(conf_mat, type = "mosaic")
summary(conf_mat)
Probability Calibration
Calibration Methods (probably package)
library(probably)
cal_obj <- predictions |>
cal_estimate_logistic(truth = outcome, .pred_positive)
calibrated <- predictions |>
cal_apply(cal_obj)
cal_obj <- predictions |>
cal_estimate_isotonic(truth = outcome, .pred_positive)
cal_obj <- predictions |>
cal_estimate_beta(truth = outcome, .pred_positive)
Calibration in Workflow
calibrated_wf <- workflow |>
add_model(model_spec) |>
add_recipe(recipe) |>
add_calibration()
Threshold Optimization
Finding Optimal Threshold
library(probably)
threshold_perf <- predictions |>
threshold_perf(
truth = outcome,
.pred_positive,
thresholds = seq(0.1, 0.9, by = 0.05),
metrics = metric_set(j_index, sens, spec)
)
best_threshold <- threshold_perf |>
filter(.metric == "j_index") |>
slice_max(.estimate)
predictions |>
mutate(.pred_class = make_two_class_pred(.pred_positive, levels(outcome), threshold = 0.4))
Cost-Sensitive Thresholds
cost_matrix <- matrix(c(0, 1, 5, 0), nrow = 2)
predictions |>
classification_cost(
truth = outcome,
.pred_positive,
costs = cost_matrix
)
Confidence and Prediction Intervals
Bootstrap Confidence Intervals
boot_metrics <- bootstraps(predictions, times = 1000) |>
mutate(
metrics = map(splits, ~ {
analysis(.x) |>
accuracy(truth = outcome, estimate = .pred_class)
})
) |>
unnest(metrics)
quantile(boot_metrics$.estimate, c(0.025, 0.975))
Prediction Intervals (Conformal)
library(probably)
conf_obj <- predictions |>
conformal_cv(outcome ~ ., data = train_data, cv_folds)
predict(conf_obj, new_data, level = 0.95)
Model Comparison
Comparing Resampled Models
wf_results <- workflow_set |>
workflow_map(resamples = cv_folds)
autoplot(wf_results)
rank_results(wf_results, rank_metric = "roc_auc")
collect_metrics(wf_results) |>
filter(.metric == "roc_auc") |>
ggplot(aes(x = wflow_id, y = mean, ymin = mean - std_err, ymax = mean + std_err)) +
geom_pointrange()
Paired Comparisons
library(tidyposterior)
perf_mod <- perf_mod(wf_results, metric = "roc_auc")
contrast_models(perf_mod, list_1 = "model_A", list_2 = "model_B")
Evaluation Best Practices
Training vs Test Performance
train_metrics <- collect_metrics(tune_results)
test_metrics <- final_fit |>
collect_metrics()
bind_rows(
train_metrics |> mutate(set = "CV"),
test_metrics |> mutate(set = "Test")
)
Stratified Evaluation
predictions |>
group_by(subgroup) |>
metrics(truth = outcome, estimate = .pred_class, .pred_positive)
Key Metrics by Problem Type
| Problem | Primary Metric | Secondary Metrics |
|---|
| Binary balanced | ROC AUC | Accuracy, F1 |
| Binary imbalanced | PR AUC, F1 | Sens, PPV |
| Multi-class | Macro F1 | Accuracy, Kappa |
| Regression | RMSE | MAE, R² |
| Regression with outliers | MAE, Huber | RMSE |
| Rare events | PR AUC | Sens, PPV |
| Medical diagnosis | Sens, Spec | NPV, PPV |