File size: 1,903 Bytes
c40c447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""
Interface para transformaci贸n de datos.

Define la abstracci贸n para convertir datos entre diferentes formatos,
cumpliendo con ISP (Interface Segregation Principle).
"""

from abc import ABC, abstractmethod
from typing import List, Optional, Dict, Any
import pandas as pd


class IDataTransformer(ABC):
    """
    Interface para transformaci贸n de datos de series temporales.
    
    Esta interface est谩 segregada para contener solo m茅todos relacionados
    con transformaci贸n de datos (ISP).
    """
    
    @abstractmethod
    def build_context_df(
        self,
        values: List[float],
        timestamps: Optional[List[str]] = None,
        series_id: str = "series_0",
        freq: str = "D"
    ) -> pd.DataFrame:
        """
        Construye un DataFrame de contexto para forecasting.
        
        Args:
            values: Lista de valores hist贸ricos
            timestamps: Lista de timestamps (opcional, se generan si es None)
            series_id: Identificador de la serie
            freq: Frecuencia temporal (D=daily, H=hourly, etc.)
        
        Returns:
            pd.DataFrame: DataFrame con columnas id, timestamp, target
        
        Raises:
            ValueError: Si valores y timestamps tienen longitudes diferentes
        """
        pass
    
    @abstractmethod
    def parse_prediction_result(
        self,
        pred_df: pd.DataFrame,
        quantile_levels: List[float]
    ) -> Dict[str, Any]:
        """
        Parsea el resultado de predicci贸n a un formato est谩ndar.
        
        Args:
            pred_df: DataFrame con predicciones del modelo
            quantile_levels: Cuantiles calculados
        
        Returns:
            Dict con:
                - timestamps: Lista de timestamps
                - median: Lista de valores medianos
                - quantiles: Dict {cuantil: [valores]}
        """
        pass