From 4868db0608b211d0e651962d401fb9afa50e727b Mon Sep 17 00:00:00 2001 From: Awa Khouna Date: Tue, 26 Aug 2025 16:31:29 -0400 Subject: [PATCH] fix: improve epsilon calculation for numeric features in MIPExplainer class --- ocean/mip/_explainer.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ocean/mip/_explainer.py b/ocean/mip/_explainer.py index 3373d8a..6731c39 100644 --- a/ocean/mip/_explainer.py +++ b/ocean/mip/_explainer.py @@ -2,6 +2,7 @@ import warnings import gurobipy as gp +import numpy as np from sklearn.ensemble import IsolationForest from ..abc import Mapper @@ -46,13 +47,23 @@ def __init__( max_samples=max_samples, name=name, env=env, - epsilon=epsilon, + epsilon=self.__find_best_num_epsilon(epsilon, mapper), num_epsilon=num_epsilon, model_type=model_type, flow_type=flow_type, ) self.build() + @staticmethod + def __find_best_num_epsilon( + epsilon: float, mapper: Mapper[Feature] + ) -> float: + eps = epsilon + for f in mapper.values(): + if f.is_numeric: + eps = min(eps, *np.diff(f.levels) / 2.0) + return eps + def get_objective_value(self) -> float: return self.ObjVal