from sklearn.base import BaseEstimator, TransformerMixin class ColumnSelectorTransformer(BaseEstimator, TransformerMixin): """Selects and orders columns for consistent pipeline""" # Updated column lists NUMERIC_COLS = [ "Age", "DurationOfPitch", "MonthlyIncome", "NumberOfTrips", "NumberOfPersonVisiting", "NumberOfFollowups", "PreferredPropertyStar", "PitchSatisfactionScore", "NumberOfChildrenVisiting", "CityTier", ] CATEGORICAL_COLS = [ "TypeofContact", "Occupation", "Gender", "MaritalStatus", "Passport", "OwnCar", "ProductPitched", "Designation", ] FEATURE_COLS = NUMERIC_COLS + CATEGORICAL_COLS def __init__(self): pass def fit(self, X, y=None): return self def transform(self, X): return X[self.FEATURE_COLS] class CastCategoricalTransformer(BaseEstimator, TransformerMixin): """Handles categorical columns for LightGBM""" def __init__(self, categorical_cols): self.categorical_cols = categorical_cols def fit(self, X, y=None): return self def transform(self, X): X = X.copy() for col in self.categorical_cols: X[col] = X[col].astype("category") return X