Toad Pipeline Proposal #106
Replies: 3 comments 7 replies
-
非常好的建议! 我的想法是,可以将 toad_pipe = Pipeline([
('selector', Selector(iv = 0.01, empty = 0.9)),
('combiner', Combiner(method = 'chi', min_samples = 0.05)),
('stepwise', StepwiseSelector(direction = 'both')),
])
toad_pipe['combiner'].update({...})
toad_pipe['selector'].set_params(...)
所以这样看下来,接下来可能主要是对已有的方法进行 class Selector(Transformer):
...
def fit(X, y):
...
from toad.selection import select
df = select(X, y, **self.get_params())
... 包括在 |
Beta Was this translation helpful? Give feedback.
-
绘图模块我觉得目前toad的改进空间还很大,这一部分我暂时还没有完成梳理好怎么样的形式比较好,包括之后使用哪个绘图库作为基础也都没有完全定好,目前可以先按上述的方案实现,具体的绘图模块的改进,可以单独再开一个讨论来把这块儿的内容定一下 😄 |
Beta Was this translation helpful? Give feedback.
-
toad pipeline proposal
Toad package is a very nice and easy to use package for score card models, and benefits variety of people from different areas, therefore, there is still a strong need for further developing the package. For example my idea is to construct a sklearn pipeline specifically for toad modules, and thus not only make it more friendly to use, but also introduce the possibilities for tuning parameters in GridSearchCV.
The Following are my ideas, and plz make comments and suggestions
1 Initiative
toad包提供了非常方便的高级方法,可以自动化的帮助用户做评分卡模型的操作。 这边在使用toad的过程中有以下体会。
以下是对 pipeline一些功能的预想。
2 源码中的Pipeline的组成
期望有一个pipeline的模块,这个pipeline只包含(selection, combiner, WOETransformer, step_wise) 这4个模块,不带上模型的部分,因为最终的模型可能不是逻辑回归。在源码中Pipeline可能是这样的
3 Pipeline的调用以及传参
4 Pipeline的训练方式
4.1 通用训练模型
这里是最开始训练的阶段,比如说完全不知道数据如何分组以及分组的情况,直接整体训练一遍
4.2 pipeline中主要模块的调用
在上面第一次使用之后,需要对pipeline中的模块进行调用,查看每个模型里面的中间结果,比如ts的中每个特征的iv值,combiner分箱的结果,等等。另外一点是在pipeline中,第一个模块和最后一个模块是关于特征筛选的。所以整体pipeline中增加一个columns2select属性,主要是给到用户这两个阶段中,到底哪些特征最终被保留下来了,想用(2, number_of_features)的dataframe来存这组数据。
4.2.1 selection.select
由于toad.selection.select是一个函数,直接输出特征结果,所以这里训练后只给出columns2select的属性
4.2.2 transform.Combiner
这个分箱的模块是toad的核心所在,工作中,估计大量的时间都是在对这个模块的dict做调整
4.2.3 plot.bin_plot
在使用原始的bin_plot的过程中,一个不是很好使用的地方是,bin_plot的参数和sklearn的transformers不一样。在sklearn的transformer中X和Y中是分开的,toad的transformer也是类似的,X和Y都是分开的,唯独bin_plot不行。并且是针对一个特征一个特征来给出图。计划设计成以下。
4.2.4 transform.WOETransformer
这个模块比较简单直接就是
4.2.5 selection.stepwise
这个模块,也是一个单个的函数,不是类,这里可能比较有用的信息可能只有两个,一个是在stepwise中,每一次到底有哪些特征被删掉了,或者被选中了。另外一个也就是到底有哪些特征被选中。
4.3 pipeline的bins重调
在使用toad的过程中,发现其中大量的工作其实是在combiner的部分,在符合业务以及符合单调的原则上,并且在尝试更新rules。
在调整toad之后,除了select的部分,combiner以及combiner以下的部分都需要重新fit一遍。这边其实为了不让pipe太过于复杂,还是整体的toad_pipe重新fit,这是因为一旦bins调整,那么woe的值,且stepwise可能会给出不同的结果。
4.3.1 所有的特征做调整
所有特征的rules全部保存在ALL_FEATURE_RULES,。此时,由于所有特征的bins已经提前手动分好,则不需要再让模型去自动算了,在combiner的阶段速度会有极大的提升。
4.3.2 只对部分的特征做调整
只更新部分重要的特征的dict, 这些特征不需要去学习了,combiner的部分直接跳过,然而直接其他的特还是要去让算法去学习
4.4 pipeline的模块的skip
pipeline的4个模块是一个大的整体,有的时候已经确定下来最优的特征,和最后的bins了,那么也就不需要使用最后的stepwise了,这个时候引入skip跳过这部分,不做额外的计算。
5 后续的模块
是否要再将toad和模型,再和card做一统化的进一步的流水线?这边暂时不建议做,还是保持初衷,pipe越简单越好。
pipe的最终的目标其实就是给出combiner, 再接着将combiner加入ScoreCard即可。但是有个重复训练的问题。
一般都是先做以下
在调整pipe的combiner的过程中,也是不断的再根据结果做调整。加入调试完毕之后,特征和bins确定下来后,scorecard又需要重新训练一遍。
是否可以直接将训练好的模型也加到score card中
Beta Was this translation helpful? Give feedback.
All reactions