use super::{DatasetMonitor, DriftReport};
use crate::binning::ContinuousBinning;
use crate::distribution::{LiveFeature, ReferenceDistribution};
use crate::error::Result;
pub const PREDICTION_FEATURE: &str = "prediction";
pub struct PredictionDriftMonitor {
monitor: DatasetMonitor,
}
impl PredictionDriftMonitor {
pub fn new(reference_predictions: &[f64], binning: impl ContinuousBinning) -> Result<Self> {
let reference = ReferenceDistribution::fit_continuous(
PREDICTION_FEATURE,
reference_predictions,
binning,
)?;
let mut monitor = DatasetMonitor::new();
monitor.add_feature(reference);
Ok(Self { monitor })
}
pub fn from_monitor(monitor: DatasetMonitor) -> Self {
Self { monitor }
}
pub fn monitor_mut(&mut self) -> &mut DatasetMonitor {
&mut self.monitor
}
pub fn check(&self, live_predictions: &[f64]) -> Result<DriftReport> {
self.monitor.check(&[(
PREDICTION_FEATURE,
LiveFeature::Continuous(live_predictions),
)])
}
}