File size: 1,010 Bytes
6f5a0e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3cc173b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
class EnsembleUncertaintyFilter:
    """Filter based on ensemble variance (ExtraTreesRegressor uncertainty)."""
    
    def __init__(self, percentile_threshold: float = 90):
        self.percentile_threshold = percentile_threshold
        self.variance_threshold = None
        self.is_calibrated = False
    
    def calibrate(self, validation_variances: np.ndarray):
        """Calibrate threshold from validation set variances."""
        self.variance_threshold = np.percentile(validation_variances, self.percentile_threshold)
        self.is_calibrated = True
        
        print(f"    Variance threshold ({self.percentile_threshold}th %ile): {self.variance_threshold:.4f}")
    
    def is_reliable(self, variances: np.ndarray) -> np.ndarray:
        """Check which predictions are reliable (low variance)."""
        if not self.is_calibrated:
            return np.ones(len(variances), dtype=bool)
        
        return variances <= self.variance_threshold