feat: 3-variable macro model (USDKRW+RETAIL_SALES+INVEST_RATE), forced_vars support, methodology sync
This commit is contained in:
@@ -52,7 +52,8 @@ class MacroZtModel:
|
||||
zt_series: pd.Series,
|
||||
macro_data: pd.DataFrame,
|
||||
method: str = "stepwise_aic",
|
||||
standardize: bool = True
|
||||
standardize: bool = False,
|
||||
forced_vars: Optional[List[str]] = None
|
||||
) -> "MacroZtModel":
|
||||
"""
|
||||
Zt ~ 거시변수 회귀모형 적합
|
||||
@@ -98,7 +99,14 @@ class MacroZtModel:
|
||||
X = X.drop(columns=[col])
|
||||
|
||||
# 변수 선택
|
||||
if method == "all":
|
||||
if forced_vars:
|
||||
available = [v for v in forced_vars if v in X.columns]
|
||||
if len(available) != len(forced_vars):
|
||||
missing = set(forced_vars) - set(available)
|
||||
logger.warning(f"강제 지정 변수 중 누락: {missing}")
|
||||
self.selected_vars = available
|
||||
logger.info(f"강제 지정 변수 사용: {self.selected_vars}")
|
||||
elif method == "all":
|
||||
self.selected_vars = list(X.columns)
|
||||
elif method.startswith("stepwise"):
|
||||
criterion = "aic" if "aic" in method else "bic"
|
||||
@@ -280,7 +288,8 @@ class MacroZtModel:
|
||||
def build_macro_zt_model(
|
||||
zt_dict: Dict[int, float],
|
||||
macro_df: pd.DataFrame,
|
||||
method: str = "stepwise_aic"
|
||||
method: str = "stepwise_aic",
|
||||
forced_vars: Optional[List[str]] = None
|
||||
) -> MacroZtModel:
|
||||
"""
|
||||
편의 함수: Zt 딕셔너리 + 거시 DataFrame → 회귀모형 구축
|
||||
@@ -293,6 +302,8 @@ def build_macro_zt_model(
|
||||
index=연도, columns=거시변수
|
||||
method : str
|
||||
변수 선택 방법
|
||||
forced_vars : List[str], optional
|
||||
강제 지정 변수 (지정 시 method 무시)
|
||||
|
||||
Returns
|
||||
-------
|
||||
@@ -302,6 +313,6 @@ def build_macro_zt_model(
|
||||
zt_series.index.name = "YEAR"
|
||||
|
||||
model = MacroZtModel()
|
||||
model.fit(zt_series, macro_df, method=method)
|
||||
model.fit(zt_series, macro_df, method=method, forced_vars=forced_vars)
|
||||
|
||||
return model
|
||||
|
||||
Reference in New Issue
Block a user