Dataset Shift and Robustness Auditing

Dataset shift is not one scalar drift score. gp3ml keeps predictor-distribution shift, missingness shift, prevalence shift, calibration drift, and performance degradation conceptually separate.

development <- data.frame(
  fixation_duration = 180 + 1:30,
  condition = rep(c("A", "B"), 15)
)
external <- data.frame(
  fixation_duration = 205 + 1:30,
  condition = rep(c("A", "C"), 15)
)

shift <- audit_gazepoint_dataset_shift(
  development,
  external,
  predictors = c("fixation_duration", "condition")
)

missingness <- audit_gazepoint_missingness_shift(
  development,
  external,
  predictors = c("fixation_duration", "condition")
)

summarize_gazepoint_shift(shift, missingness)
#> $dataset_shift_status
#> [1] "fail"
#> 
#> $dataset_shift_counts
#>   status n_predictors
#> 1   fail            2
#> 
#> $missingness_shift_status
#> [1] "pass"
#> 
#> $missingness_shift_counts
#>   status n_predictors
#> 1   pass            2
#> 
#> attr(,"class")
#> [1] "gp3ml_shift_summary"
plot(shift)

Robustness diagnostics should examine dependence on seeds, folds, features, thresholds, missingness scenarios, and other declared analytical choices rather than relabelling one successful analysis as robust.