/
LingLing
/
loan-default-prediction
Обзор
Документация
Войти
/
LingLing
/
loan-default-prediction
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/data/preprocessing.py
56 строк
2 KB
liza
Project update
06 авг 2026, 20:20
06 авг 2026, 20:20
b55a4f3
Код
Авторство
О чём код?
import pandas as pd import numpy as np from sklearn.base import BaseEstimator, TransformerMixin class Preprocessor(BaseEstimator, TransformerMixin): def __init__(self): self.extreme_utilization_threshold = 5.0 self.extreme_debt_threshold = 10.0 self.extreme_realastate_threshold = 5.0 self.age_median = None def fit(self, X, y=None): self.NumberOfTime30_59DaysPastDueNotWorse_ = X['NumberOfTime30-59DaysPastDueNotWorse'].quantile(0.99) self.NumberOfTime60_89DaysPastDueNotWorse_ = X['NumberOfTime60-89DaysPastDueNotWorse'].quantile(0.99) self.NumberOfTimes90DaysLate_ = X['NumberOfTimes90DaysLate'].quantile(0.99) self.age_median_ = X['age'].median() return self def transform(self, X, y=None): X = X.copy() base_X = X.copy() X.loc[X['age'] < 21, 'age'] = self.age_median_ columns = ['NumberOfTime30-59DaysPastDueNotWorse', 'NumberOfTimes90DaysLate', 'NumberOfTime60-89DaysPastDueNotWorse'] anom_mask = base_X[columns].apply(lambda row: row.nunique() == 1, axis=1) & base_X[columns].isin([96, 98]).any(axis=1) X.loc[anom_mask, 'NumberOfTime30-59DaysPastDueNotWorse'] = self.NumberOfTime30_59DaysPastDueNotWorse_ X.loc[anom_mask, 'NumberOfTime60-89DaysPastDueNotWorse'] = self.NumberOfTime60_89DaysPastDueNotWorse_ X.loc[anom_mask, 'NumberOfTimes90DaysLate'] = self.NumberOfTimes90DaysLate_ X['RevolvingUtilization_clean'] = base_X['RevolvingUtilizationOfUnsecuredLines'].clip(upper=self.extreme_utilization_threshold) X['DebtRatio_capped'] = base_X['DebtRatio'].clip(upper=self.extreme_debt_threshold) X['Realestate_capped'] = base_X['NumberRealEstateLoansOrLines'].clip(upper=self.extreme_realastate_threshold) cols_to_drop = [ 'RevolvingUtilizationOfUnsecuredLines', 'DebtRatio', 'NumberRealEstateLoansOrLines' ] X = X.drop(columns=cols_to_drop, errors='ignore') return X