Source code for nannyml.performance_estimation.direct_loss_estimation.result

import copy
from typing import Any, Dict, List, Optional

import pandas as pd
from plotly.graph_objects import Figure

from nannyml import Chunker
from nannyml.base import AbstractEstimatorResult
from nannyml.exceptions import InvalidArgumentsException
from nannyml.performance_estimation.direct_loss_estimation.metrics import Metric
from nannyml.plots.blueprints.metrics import plot_metric_list
from nannyml.usage_logging import UsageEvent, log_usage


[docs]class Result(AbstractEstimatorResult): def __init__( self, results_data: pd.DataFrame, metrics: List[Metric], feature_column_names: List[str], y_pred: str, y_true: str, chunker: Chunker, tune_hyperparameters: bool, hyperparameter_tuning_config: Dict[str, Any], hyperparameters: Optional[Dict[str, Any]], timestamp_column_name: Optional[str] = None, ): super().__init__(results_data) self.metrics = metrics self.feature_column_names = feature_column_names self.y_pred = y_pred self.y_true = y_true self.timestamp_column_name = timestamp_column_name self.chunker = chunker self.tune_hyperparameters = tune_hyperparameters self.hyperparameter_tuning_config = (hyperparameter_tuning_config,) self.hyperparameters = hyperparameters def _filter(self, period: str, metrics: Optional[List[str]] = None, *args, **kwargs) -> AbstractEstimatorResult: if metrics is None: metrics = [metric.column_name for metric in self.metrics] data = pd.concat([self.data.loc[:, (['chunk'])], self.data.loc[:, (metrics,)]], axis=1) if period != 'all': data = self.data.loc[self.data.loc[:, ('chunk', 'period')] == period, :] data = data.reset_index(drop=True) res = copy.deepcopy(self) res.data = data res.metrics = [m for m in self.metrics if m.column_name in metrics] return res
[docs] @log_usage(UsageEvent.DLE_PLOT, metadata_from_kwargs=['kind']) def plot( self, kind: str = 'performance', *args, **kwargs, ) -> Figure: if kind == 'performance': return plot_metric_list( self, title='Estimated performance <b>(DLE)</b>', subplot_title_format='Estimated <b>{metric_name}</b>' ) else: raise InvalidArgumentsException(f"unknown plot kind '{kind}'. " f"Please provide on of: ['performance'].")