feat: add fANOVA parameter importance via random forest

Implement functional ANOVA decomposition behind the `fanova` feature
flag. A self-contained random forest is trained on trial data, then
marginal predictions are used to compute per-parameter main effects
and pairwise interaction effects, normalized to sum to 1.0.

Adds Study::fanova() / fanova_with_config(), FanovaResult, and
FanovaConfig. Includes unit and integration tests covering dominant
parameters, interaction detection, consistency with correlation-based
importance, and error handling.
This commit is contained in:
Manuel Raimann
2026-02-11 20:51:24 +01:00
parent e359392a00
commit dff58340a4
5 changed files with 735 additions and 0 deletions
+6
View File
@@ -219,6 +219,8 @@ macro_rules! trace_debug {
mod distribution;
mod error;
#[cfg(feature = "fanova")]
mod fanova;
mod importance;
mod kde;
pub mod multi_objective;
@@ -234,6 +236,8 @@ mod types;
mod visualization;
pub use error::{Error, Result, TrialPruned};
#[cfg(feature = "fanova")]
pub use fanova::{FanovaConfig, FanovaResult};
pub use multi_objective::{MultiObjectiveSampler, MultiObjectiveStudy, MultiObjectiveTrial};
#[cfg(feature = "derive")]
pub use optimizer_derive::Categorical;
@@ -274,6 +278,8 @@ pub mod prelude {
pub use optimizer_derive::Categorical as DeriveCategory;
pub use crate::error::{Error, Result, TrialPruned};
#[cfg(feature = "fanova")]
pub use crate::fanova::{FanovaConfig, FanovaResult};
pub use crate::multi_objective::{MultiObjectiveStudy, MultiObjectiveTrial};
pub use crate::param::ParamValue;
pub use crate::parameter::{