Changelog
Source:NEWS.md
xplainfi (development version)
New features
- Use of a pre-trained
mlr3learner is now supported inPerturbationImportance(PFI,CFI,RFI) andSAGEmethods.- Requires the provided
Resamplingto be instantiated and consist of a single iteration, e.g. there must be only 1 test set. - Internally, a
ResampleResultwill be constructed from the givenlearner,task, andresamplingarguments, which is then consistent with the previous default of performingresample()to get trained learners for each resampling iteration.
- Requires the provided
Minor user-facing changes
- Bump the defaults for
n_repeatsin favor of stability- For
PerturbationImportancemethods (PFI,CFI,RFI):n_repeatsis now 30 -
LOCOandWVIM:n_repeatsis now 30 as well. - Since the refitting methods will be more expensive than the perturbation-based methods, users will have to decrease this value if runtime becomes impractical, but now at least the package default is no longer
n_repeats = 1, which is obviously too small.
- For
Testing improvements
- Replaced
rangerwithrpartin most tests where a flexible learner was unnecessary, reducing test runtime and removing conditionalskip_if_not_installed("ranger")guards so these tests always run. - Added omnibus
expect_method_output()expectation that validates all three main outputs ($importance(),$scores(),$obs_loss()) of a computed method. - Removed overly abstract test helper functions (
test_basic_workflow,test_with_resampling,test_custom_sampler) and inlined their logic at call sites for better readability. - Use
ConditionalGaussianSamplerinstead ofConditionalARFSamplerin tests that don’t specifically test ARF functionality. - Set explicit
n_repeatsvalues in all tests (1L for functional, 5L for plausibility).
Inference
- Parametric
ci_methods ("raw","nadeau_bengio") returnse,statistic,p.value,conf_lower, andconf_uppercolumns. The"quantile"method returns onlyconf_lowerandconf_upper(nose,statistic, orp.value). - Parametric
ci_methods supportalternative = "greater"(one-sided, the default) oralternative = "two.sided"to test H0: importance <= 0 vs H1: importance > 0, or H0: importance = 0 vs H1: importance != 0, respectively. For"quantile",alternativecontrols whether the confidence interval is one-sided ("greater": finite lower bound,conf_upper = Inf) or two-sided (both bounds finite). - Improved documentation for all CI methods in
FeatureImportanceMethod, explaining how p-values and confidence intervals are calculated for each method. - CFI documentation distinguishes between CPI (knockoff-based inference, Watson & Wright 2021) and cARFi (ARF-based inference, Blesch et al. 2025).
xplainfi 1.0.0 - Initial CRAN release
CRAN release: 2026-01-30
The major version bump is largely to mark the occasion that the package is now considered “released”.
Minor changes
- Removed the
fippycomparison article since a more comprehensive comparison is now available in xplainfi-benchmark. - Clean up various documentation issues and other metadata.
- Adjusted the
min_permutationsdefault inSAGEmethods to 10 rather than 3, since the previous value was found to lead to spurious early stopping. - Fix
sim_dgp_ewaldlading to erroneous variances when compared to their settings. - Reduce runtime of tests (mostly by using less ARF and mor Gaussian sampling)
- Remove
KnockoffSequentialSampleras theseqknockoffpackage is not available on CRAN or R-universe.KnockoffSamplerwith the correspondingknockoff_fun = seqknockoff::knockoffs_seqstill works.
xplainfi 0.2.1
- Simplify
sim_dgp_confounded, removingx2which doesn’t add anything interesting overx1. - Ensure integers are preserved in Gaussian samplers
- Fix compatibility with mlr3 >= 1.3.0 due to the change in the way
obs_loss()is computed (see https://github.com/mlr-org/mlr3/pull/1411). - Methods not allowing
measureto be unspecified and falling back to atask_type-specific default measure
xplainfi 0.2.0
User-facing API improvements
Importance aggregation and confidence intervals
-
$importance()gainsci_methodparameter for variance estimation (#40):-
"none"(default): Simple aggregation without confidence intervals -
"raw": Uncorrected variance estimates (informative only, CIs too narrow) -
"nadeau_bengio": Variance correction by Nadeau & Bengio (2003) as recommended by Molnar et al. (2023) -
"quantile": Empirical quantile-based confidence intervals -
"cpi": Conditional Predictive Impact for perturbation methods (PFI/CFI/RFI), supporting t-, Wilcoxon-, Fisher-, and binomial tests
-
- CPI is now properly scoped to
PerturbationImportancemethods only (not available for WVIM/LOCO or SAGE) -
$importance()gainsstandardizeparameter to normalize scores to [-1, 1] range -
$importance()and$scores()gainrelationparameter (default:"difference") to compute importances as difference or ratio of baseline and post-modification loss- Moved from
$compute()to avoid recomputing predictions/refits when changing aggregation method
- Moved from
Data simulation helpers
- Add focused simulation DGPs for testing importance methods:
-
sim_dgp_independent(): Baseline with additive independent effects -
sim_dgp_correlated(): Highly correlated features (PFI fails, CFI succeeds) -
sim_dgp_mediated(): Mediation structure (total vs direct effects) -
sim_dgp_confounded(): Confounding structure -
sim_dgp_interactions(): Interaction effects between features
-
- Each DGP illustrates specific methodological challenges for importance methods
Observation-wise losses and predictions
-
$obs_loss()computes observation-wise importance scores whenmeasurehas aMeasure$obs_loss()method -
$predictionsfield stores prediction objects for further analysis
Grouped feature importance
-
PerturbationImportanceandWVIMmethods supportgroupsparameter for grouped feature importance:- Example:
groups = list(effects = c("x1", "x2", "x3"), noise = c("noise1", "noise2")) - In output,
featurecolumn contains group names instead of individual features - Allows measuring importance of feature sets rather than individual features
- Example:
Method-specific improvements
WVIM (Williamson’s Variable Importance Measure)
- Generalizes LOCO (Leave-One-Covariate-Out) and LOCI (Leave-One-Covariate-In)
- Implemented using
mlr3fselectfor cleaner internals - Parameter renamed:
iters_refit→n_repeatsfor consistency
PerturbationImportance (PFI, CFI, RFI)
-
Performance improvements:
- Uses
learner$predict_newdata_fast()for faster predictions (requires mlr3 >= 1.1.0) - Batches permutation iterations internally to reduce
sampler$sample()calls - New
batch_sizeparameter to control memory usage with large datasets
- Uses
-
Parallelization support:
- Parallel execution via
miraiorfuturebackends - Set up with
mirai::daemons()orfuture::plan() - Parallelizes across features within each resampling iteration
- Parallel execution via
- Parameter renamed:
iters_perm→n_repeatsfor consistency
Feature Samplers
-
Breaking changes:
- Refactored API separates task-based vs external data sampling (#49):
-
$sample(feature, row_ids): Samples from stored task using row IDs -
$sample_newdata(feature, newdata): Samples from external data
-
- Renamed sampler classes for hierarchical consistency:
-
PermutationSampler→MarginalPermutationSampler -
ARFSampler→ConditionalARFSampler -
GaussianConditionalSampler→ConditionalGaussianSampler -
KNNConditionalSampler→ConditionalKNNSampler -
CtreeConditionalSampler→ConditionalCtreeSampler
-
- Standardized parameter name:
conditioning_setfor features to condition on
- Refactored API separates task-based vs external data sampling (#49):
-
New samplers:
-
MarginalSampler: Base class for marginal sampling methods -
MarginalReferenceSampler: Samples complete rows from reference data (for SAGE) -
KnockoffSampler: Knockoff-based sampling (#16 via @mnwright)- Convenience wrappers:
KnockoffGaussianSampler,KnockoffSequentialSampler - Supports
row_ids-based sampling -
itersparameter for multiple knockoff iterations - Compatible with CFI (not RFI/SAGE)
- Convenience wrappers:
-
SAGE (Shapley Additive Global Importance)
Bug fix:
ConditionalSAGEnow properly uses conditional sampling (was accidentally using marginal sampling)-
Performance improvements:
- Uses
learner$predict_newdata_fast()for faster predictions -
batch_sizeparameter controls memory usage for large coalitions
- Uses
-
Convergence tracking (#29, #33):
- Enable with
early_stopping = TRUE - Stops when relative standard error falls below
se_threshold(default: 0.01) - Requires at least
min_permutations(default: 3) - Checks convergence every
check_intervalpermutations (default: 1) - New fields:
-
$converged: Boolean indicating if convergence was reached -
$n_permutations_used: Actual permutations used (may be less than requested) -
$convergence_history: Per-feature importance and SE over permutations
-
-
$plot_convergence(): Visualize convergence curves - Convergence tracked for first resampling iteration only
- Enable with