Source code for energy_analysis_toolbox.timeseries.profiles.thresholds.relative_std

"""Module for computing threshold profiles based on relative standard deviations.

This module provides tools to calculate profiles that deviate from the mean profile
by a user-defined multiple of the standard deviation derived from historical data.
The profiles aim to capture variability while maintaining a consistent baseline.
"""

import pandas as pd

from energy_analysis_toolbox.timeseries.profiles.mean_profile import MeanProfile


[docs] class RelativeSTDThreshold(MeanProfile): """A class which implements a statistical deviation from the mean profile.""" def __init__( self, offset_std: float = 3, **kwargs, ) -> None: """Initialize RelativeSTDThreshold. Parameters ---------- offset_std : float, optional Number of standard deviations VS the computed reference to obtain the threshold profile. Default is 3 (profile is 3 standard deviations from reference) """ self.offset_std = offset_std super().__init__(**kwargs)
[docs] def compute( self, history: pd.Series, time: pd.Timestamp, **kwargs, ) -> pd.Series: """Return a threshold profile. The threshold profile is obtained using a user-defined relative variation from the mean profile built from history. Parameters ---------- history : pd.Series Consumption history used to computed the reference profile. time : pd.Timestamp The time at which the profile is of interest. Only the information about the date is used in the passed timestamp. Returns ------- profile : pd.Series Profile threshold with same resolution as the history data Notes ----- The profile threshold is obtained as the mean profile obtained from history + ``tshd`` times the standard deviation profile. """ profile_groups = self.group(history) reference = super().compute(history, time, **kwargs) offset = self.offset_std * profile_groups.std() offset.index = reference.index return reference + offset