SMOTE


以上是原始论文中给出的算法描述。
算法主要有两个函数构成,一个是SMOTE(T,N,k)用于找到少数label的k个最近邻,另一个是Populate(N,i,nnarray)用于生成N个人造样本。T是少数label的数量,k是找每个少数label的k个最近邻,N是个整数,如果N>=100,那么1个少数label生成int(N/100)个人造样本,如果N < 100,那么相当于在T个少数记录中进行随机抽样,只有抽样的样本来产生人造样本,比如抽样后sample size是T_sample,那么就再创造T_sample个人造样本。
算法文字步骤:
1、每个少数样本点找它的k个最近邻样本点
2、k个最近邻样本点中随机选取N个样本点(N < k)
3、N个样本点每个feature的值 减去 中心点对应feature的值 得到diff
4、中心点各feature的value +(对应diff 乘以 一个0到1间的随机数),产生新的人造样本点(这些人造样本点就是少数label)

总的说来,SMOTE比较简单,里面用到KNN的核心步骤(求K最近邻),求K最近邻涉及到欧式距离,欧式距离就涉及到特征的归一化(归一化可能涉及到离群值的剔除),而且只能处理数值型特征,类别型特征怎么处理?one-hot?SMOTE原始论文中第6章也提出了类别型变量的处理方式,但是我没读太懂。

再具体到风控建模这个领域,SMOTE真的有用吗?
因为SMOTE对于类别型变量难以处理,如果先WOE编码再做SMOTE,那就有点滞后了,如果类别不平衡,尤其postive绝对数比较少时,转WOE就不稳,这就有点矛盾了,如果我能直接转WOE,其实讲道理就没必要SMOTE。
还有1个问题就是基于哪一个特征集进行SMOTE?
1、入模变量都选好了再进行SMOTE?
2、全部特征进行WOE编码,再进行SMOTE?
想来应该是2更合理。
https://cloud.tencent.com/developer/article/1512812
这个链接是入模变量都确定了,WOE都转换了才用的SMOTE。
WOE后SMOTE还有一个比较扯的地方,等于说产生的人造样本点WOE其实在测试集上都是没有的,这里不会有什么问题吗?

SMOTE本身很简单,但是应用起来有诸多细节需要处理,感觉在风控领域用处不大,后期可以进行实验探索。






留言

熱門文章