|
@@ -8,6 +8,7 @@ import pandas as pd
|
|
|
from sklearn.preprocessing import KBinsDiscretizer
|
|
|
from entitys import DataSplitEntity
|
|
|
from enums import BinsStrategyEnum
|
|
|
+import toad as td
|
|
|
|
|
|
|
|
|
def f_get_bins(data: DataSplitEntity, feat: str, strategy: str='quantile', nbins: int=10) -> pd.DataFrame:
|
|
@@ -20,8 +21,15 @@ def f_get_bins(data: DataSplitEntity, feat: str, strategy: str='quantile', nbins
|
|
|
if strategy == BinsStrategyEnum.WIDTH.value:
|
|
|
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)])
|
|
|
-
|
|
|
-
|
|
|
+ # 使用toad分箱
|
|
|
+ '''
|
|
|
+ c = td.transfrom.Combiner()
|
|
|
+ # method参数需要根据toad指定的几种方法名称选择
|
|
|
+ c.fit(data, y = 'target', method = strategy, min_samples=None, n_bins = nbins, empty_separate = False)
|
|
|
+ # 返回toad分箱combiner,用于训练集和测试集的分箱
|
|
|
+ # 可使用c.export()[feature]查看某一特征的分箱临界值
|
|
|
+ return c
|
|
|
+ '''
|
|
|
def f_get_woe(data: DataSplitEntity) -> pd.DataFrame:
|
|
|
pass
|
|
|
|