changeover
changeover ¤
ChangeoverEvents ¤
ChangeoverEvents(
dataframe: DataFrame,
*,
event_uuid: str = "prod:changeover",
time_column: str = "systime"
)
Bases: Base
Production: Changeover
Detect product/recipe changes and compute changeover windows without requiring a dedicated 'first good' signal.
Methods: - detect_changeover: point events when product/recipe changes. - changeover_window: derive an end time via fixed window or 'stable_band' metrics.
detect_changeover ¤
detect_changeover(
product_uuid: str,
*,
value_column: str = "value_string",
min_hold: str = "0s"
) -> pd.DataFrame
Emit point events when the product/recipe changes value.
Uses a hold check: the new product must persist for at least min_hold until the next change.
changeover_window ¤
changeover_window(
product_uuid: str,
*,
value_column: str = "value_string",
start_time: Optional[Timestamp] = None,
until: str = "fixed_window",
config: Optional[Dict[str, Any]] = None,
fallback: Optional[Dict[str, Any]] = None
) -> pd.DataFrame
Compute changeover windows per product change with enhanced configurability.
until
- fixed_window: end = start + config['duration'] (e.g., '10m')
- stable_band: end when all metrics stabilize within band for hold: config = { 'metrics': [ {'uuid': 'm1', 'value_column': 'value_double', 'band': 0.2, 'hold': '2m'}, ... ], 'reference_method': 'expanding_median' | 'rolling_mean' | 'ewma' | 'target_value', 'rolling_window': 5, # for rolling_mean (number of points) 'ewma_span': 10, # for ewma 'target_values': {'m1': 100.0, ...} # for target_value }
fallback: {'default_duration': '10m', 'completed': False}
changeover_quality_metrics ¤
changeover_quality_metrics(
product_uuid: str, *, value_column: str = "value_string"
) -> pd.DataFrame
Compute quality metrics for changeovers.
Returns metrics including: - changeover duration patterns - frequency statistics - time between changeovers - product-specific metrics