Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| from pathlib import Path | |
| from sklearn.model_selection import TimeSeriesSplit | |
| from typing import Tuple | |
| import sys | |
| sys.path.append(str(Path(__file__).resolve().parents[3])) | |
| from src.logger import get_logger | |
| logger = get_logger("ieee_cis.splitter") | |
| TIME_COL = "TransactionDT" | |
| VAL_RATIO = 0.20 | |
| def temporal_split( | |
| df: pd.DataFrame, | |
| val_ratio: float = VAL_RATIO, | |
| ) -> Tuple[pd.DataFrame, pd.DataFrame]: | |
| logger.info("Starting temporal split...") | |
| logger.info(f"Input shape: {df.shape}") | |
| df_sorted = df.sort_values(TIME_COL).reset_index(drop=True) | |
| n = len(df_sorted) | |
| val_start = int(n * (1 - val_ratio)) | |
| train = df_sorted.iloc[:val_start].reset_index(drop=True) | |
| val = df_sorted.iloc[val_start:].reset_index(drop=True) | |
| logger.info(f"Train shape : {train.shape} | Date range: {train[TIME_COL].min()} → {train[TIME_COL].max()}") | |
| logger.info(f"Val shape : {val.shape} | Date range: {val[TIME_COL].min()} → {val[TIME_COL].max()}") | |
| if "isFraud" in train.columns: | |
| logger.info(f"Train fraud rate: {train['isFraud'].mean()*100:.2f}%") | |
| logger.info(f"Val fraud rate : {val['isFraud'].mean()*100:.2f}%") | |
| return train, val | |
| def get_tscv(n_splits: int = 5) -> TimeSeriesSplit: | |
| logger.info(f"Creating TimeSeriesSplit with {n_splits} folds") | |
| return TimeSeriesSplit(n_splits=n_splits) |