teste_docs / models /model_data.py
Guilherme Silberfarb Costa
Initial deployment for Hugging Face Space
5240148
Raw
History Blame Contribute Delete
2.49 kB
"""
Dataclass tipada para os dados do modelo de avaliação.
Os dados são carregados de arquivos .dai (joblib).
"""
from dataclasses import dataclass, field
from typing import Dict, List, Any, Optional
from pathlib import Path
import pandas as pd
@dataclass
class ModelData:
"""Representa os dados estatísticos de um modelo de avaliação."""
nome: str
path: Path
# Dados do banco de dados
xy_preview: pd.DataFrame = field(default_factory=pd.DataFrame)
top_x_esc: pd.DataFrame = field(default_factory=pd.DataFrame)
top_y_esc: pd.Series = field(default_factory=pd.Series)
# Estatísticas descritivas
estatisticas: pd.DataFrame = field(default_factory=pd.DataFrame)
# Modelo de regressão
tabelas_coef: pd.DataFrame = field(default_factory=pd.DataFrame)
tabelas_obs_calc: pd.DataFrame = field(default_factory=pd.DataFrame)
modelos_resumos: Dict[str, Any] = field(default_factory=dict)
modelos_sm: Any = None # RegressionResultsWrapper
# Transformações e gráficos
formatted_top_transformation_info: List[Any] = field(default_factory=list)
variaveis_dicotomicas: List[str] = field(default_factory=list)
periodo_dados_mercado: Dict[str, Any] = field(default_factory=dict)
graf_model: str = ""
@property
def r2(self) -> Optional[float]:
"""Retorna o coeficiente de determinação R²."""
return self.modelos_resumos.get('r2')
@property
def r2_ajustado(self) -> Optional[float]:
"""Retorna o R² ajustado."""
return self.modelos_resumos.get('r2_ajustado')
@property
def equacao(self) -> Optional[str]:
"""Retorna a equação do modelo."""
return self.modelos_resumos.get('equacao')
@property
def variaveis(self) -> List[str]:
"""Retorna lista de variáveis do modelo."""
if self.tabelas_coef.empty:
return []
return [v for v in self.tabelas_coef.index.tolist() if v != 'const']
@property
def n_amostras(self) -> int:
"""Retorna número de amostras no banco de dados."""
total = self.modelos_resumos.get('n')
try:
if total is not None and int(total) > 0:
return int(total)
except (TypeError, ValueError):
pass
return len(self.xy_preview.index)
@property
def n_variaveis(self) -> int:
"""Retorna número de variáveis do modelo."""
return self.modelos_resumos.get('k', 0)