Spaces:
Sleeping
Sleeping
File size: 1,202 Bytes
8d36165 0d98fd5 8d36165 0d98fd5 8d36165 0d98fd5 | 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 | import pandas as pd
import numpy as np
import joblib
import logging
from pathlib import Path
logger = logging.getLogger(__name__)
class FraudPreprocessor:
def __init__(self):
self.scaler = None
self.feature_columns = []
self.is_fitted = False
def transform(self, df: pd.DataFrame) -> pd.DataFrame:
df = self._engineer_features(df.copy())
df['Amount_scaled'] = self.scaler.transform(df[['Amount']])
df.drop(['Time', 'Amount'], axis=1, inplace=True)
return df
def _engineer_features(self, df: pd.DataFrame) -> pd.DataFrame:
df['Hour'] = (df['Time'] // 3600) % 24
df['Amount_log'] = np.log1p(df['Amount'])
df['Is_round_amount'] = (df['Amount'] % 1 == 0).astype(int)
return df
@staticmethod
def load_from_components(models_dir: Path) -> 'FraudPreprocessor':
"""Load preprocessor from individual component files."""
p = FraudPreprocessor()
p.scaler = joblib.load(models_dir / 'scaler.pkl')
p.feature_columns = joblib.load(models_dir / 'feature_columns.pkl')
p.is_fitted = True
logger.info("Preprocessor loaded from components.")
return p |