diff --git a/src/reporting/generate_qc/script.R b/src/reporting/generate_qc/script.R
index c53abaffc..0db0466f9 100644
--- a/src/reporting/generate_qc/script.R
+++ b/src/reporting/generate_qc/script.R
@@ -243,7 +243,8 @@ check_metric_scaling <- function(
results_long,
metric,
control_methods,
- task_name
+ task_name,
+ maximize
) {
`%||%` <- rlang::`%||%`
@@ -272,6 +273,8 @@ check_metric_scaling <- function(
dplyr::left_join(control_range, by = "dataset_name") |>
dplyr::mutate(
scaled_value = (metric_value - control_min) / (control_max - control_min),
+ # Reverse metric values if lower is better
+ scaled_value = ifelse(maximize, scaled_value, 1 - scaled_value),
outside = scaled_value < 0 | scaled_value > 1,
pct_outside = dplyr::case_when(
scaled_value < 0 ~ 0 - scaled_value,
@@ -381,7 +384,8 @@ check_method_metric_scaling <- function(
scaled_metrics,
method,
task_name,
- metric_name
+ metric_name,
+ maximize
) {
method_scaled_metrics <- scaled_metrics |>
dplyr::filter(method_name == method)
@@ -773,8 +777,10 @@ controls_metrics <- purrr::map(seq_len(nrow(metric_controls)), function(.idx) {
})
cat("\n>>> Checking metric scaling...\n")
+metric_maximize <- purrr::map_lgl(metric_info, "maximize") |>
+ purrr::set_names(metric_names)
scaling <- purrr::map(metric_names, function(.metric) {
- check_metric_scaling(results_long, .metric, control_methods, task_name)
+ check_metric_scaling(results_long, .metric, control_methods, task_name, maximize = metric_maximize[[.metric]])
}) |>
purrr::list_flatten()
diff --git a/src/reporting/render_report/logo.svg b/src/reporting/render_report/logo.svg
index 70228226e..67ef40b46 100644
--- a/src/reporting/render_report/logo.svg
+++ b/src/reporting/render_report/logo.svg
@@ -6,40 +6,20 @@
stroke-linecap="round"
stroke-linejoin="round"
class="size-4 m-2 h-8 w-auto md:max-lg:hidden "
- viewBox="0 0 999 168"
+ viewBox="0 0 999.00002 168"
fill="none"
iconclass="stroke-accent"
version="1.1"
id="svg2"
- sodipodi:docname="logo.svg"
- inkscape:version="1.4.2 (1:1.4.2+202505120737+ebf0e940d0)"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ width="264.31876mm"
+ height="44.450001mm"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
-
diff --git a/src/reporting/render_report/report-template.qmd b/src/reporting/render_report/report-template.qmd
index 79b53f8ca..76614d055 100644
--- a/src/reporting/render_report/report-template.qmd
+++ b/src/reporting/render_report/report-template.qmd
@@ -590,6 +590,11 @@ metric_details <- purrr::map_dfr(metric_info, function(.metric) {
}) |>
dplyr::arrange(metric)
+metric_maximize <- purrr::map_lgl(metric_info, "maximize") |>
+ purrr::set_names(metric_details$metric)
+
+metric_reverse <- names(metric_maximize)[metric_maximize == FALSE]
+
scores <- purrr::map_dfr(task_results$results, function(.result) {
if (!.result$succeeded) {
return(NULL)
@@ -609,7 +614,7 @@ scores <- purrr::map_dfr(task_results$results, function(.result) {
return(NULL)
}
- data.frame(
+ tibble::tibble(
dataset = .result$dataset_name,
method = .result$method,
metric = unlist(.result$metric_names),
@@ -630,7 +635,12 @@ control_ranges <- scores |>
scaled_scores <- scores |>
dplyr::left_join(control_ranges, by = c("dataset", "metric")) |>
dplyr::mutate(
- scaled_value = (value - control_min) / (control_max - control_min)
+ scaled_value = (value - control_min) / (control_max - control_min),
+ scaled_value = dplyr::if_else(
+ metric %in% metric_reverse,
+ 1 - scaled_value,
+ scaled_value
+ )
)
complete_scores <- tidyr::expand_grid(
@@ -1217,7 +1227,7 @@ reactable::reactable(
format = reactable::colFormat(digits = 3)
)
),
- purrr::map( metric_details$metric_label,
+ purrr::map(metric_details$metric_label,
function(.metric_label) {
reactable::colDef(
name = .metric_label,