Skip to content

Commit 8caf873

Browse files
authored
[AI][FIX] 백테스트 누수 문제 해결 (#338)
1 parent abd0d5a commit 8caf873

2 files changed

Lines changed: 16 additions & 3 deletions

File tree

AI/pipelines/components/data_processor.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,22 @@ def _collect_required_features(model_wrappers: Dict[str, Any]) -> set[str]:
1818
return required_features
1919

2020

21-
def _merge_common_features(loader: DataLoader, df: pd.DataFrame) -> pd.DataFrame:
21+
def _merge_common_features(
22+
loader: DataLoader,
23+
df: pd.DataFrame,
24+
allow_backward_fill: bool = True,
25+
) -> pd.DataFrame:
2226
merged = df.copy()
2327

2428
if not loader.macro_df.empty:
2529
merged = pd.merge(merged, loader.macro_df, on="date", how="left")
2630
if not loader.breadth_df.empty:
2731
merged = pd.merge(merged, loader.breadth_df, on="date", how="left")
2832

29-
return merged.ffill().bfill()
33+
merged = merged.ffill()
34+
if allow_backward_fill:
35+
merged = merged.bfill()
36+
return merged
3037

3138

3239
def load_and_preprocess_data(
@@ -36,6 +43,7 @@ def load_and_preprocess_data(
3643
pipeline_config: PipelineConfig,
3744
data_config: DataConfig,
3845
model_wrappers: Dict[str, Any],
46+
allow_backward_fill: bool = True,
3947
) -> dict[str, pd.DataFrame]:
4048
"""
4149
Load price data once, then enrich each ticker only with the features required
@@ -62,7 +70,11 @@ def load_and_preprocess_data(
6270
continue
6371

6472
try:
65-
df = _merge_common_features(loader, df)
73+
df = _merge_common_features(
74+
loader,
75+
df,
76+
allow_backward_fill=allow_backward_fill,
77+
)
6678
df = add_technical_indicators(df)
6779
df = add_multi_timeframe_features(df)
6880
df.set_index("date", inplace=True)

AI/tests/run_backtest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ def _run_dryrun_backfill_backtest(
397397
pipeline_config=trading_config.pipeline,
398398
data_config=trading_config.data,
399399
model_wrappers=model_wrappers,
400+
allow_backward_fill=False,
400401
)
401402
if not preprocessed_data_map:
402403
print("[Backtest] No valid data available after preprocessing. Stopping.")

0 commit comments

Comments
 (0)