1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # -*- 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
|