# -*- coding:utf-8 -*- """ @author: yq @time: 2023/12/28 @desc: 特征工具类 """ import pandas as pd from sklearn.preprocessing import KBinsDiscretizer from entitys import DataSplitEntity def f_get_bins(data: DataSplitEntity, feat: str, strategy: str='quantile', nbins: int=10) -> pd.DataFrame: # 等频分箱 if strategy == 'quantile': kbin_encoder = KBinsDiscretizer(n_bins=nbins, encode='ordinal', strategy='quantile') feature_binned = kbin_encoder.fit_transform(data[feat]) return feature_binned.astype(int).astype(str) # 等宽分箱 if strategy == 'width': bin_width = (data[feat].max()-data[feat].min()) / nbins return pd.cut(data[feat], bins=nbins, labels=[f'Bin_{i}' for i in range(1, nbins+1)]) def f_get_woe(data: DataSplitEntity) -> pd.DataFrame: pass def f_get_iv(data: DataSplitEntity) -> pd.DataFrame: pass def f_get_psi(data: DataSplitEntity) -> pd.DataFrame: pass def f_get_corr(data: DataSplitEntity) -> pd.DataFrame: pass def f_get_ivf(data: DataSplitEntity) -> pd.DataFrame: pass