金融风控07
不均衡学习
数据不均衡:在很多真实场景下,数据集往往是不平衡的。也就是说,在数据集中,有一类含有的数据要远远多于其他类的数据(类别分布不平衡)。在贷款场景下,我们主要介绍二分类中的类别不平衡问题。 常识告诉我们一家信用正常客户的数据要远远多于欺诈客户的。
考虑一个简单的例子,10万正样本(正常客户标签为0)与1000个负样本(欺诈客户标签为1),正负样本比列为100:1,如果直接带入模型中去学习,每一次梯度下降如果使用全量样本,负样本的权重只有不到1/100,即使完全不学习负样本的信息,准确率也有超过99%,所以显然我们绝不能以准确率来衡量模型的效果。但是实践下面,我们其实也知道,即使用KS或者AUC来度量模型的表现,依然没法保证模型能将负样本很好的学习。而我们实际上需要得到一个分类器,既能对于正例有很高的准确率,同时又不会影响到负例的准确率。
解决方法:下探,半监督学习,标签分裂,代价敏感,采样算法
下探:最直接的方法,就是对评分较低被拒绝的人进行放款,牺牲一部分收益,来积累坏样本,供后续模型学习。
半监督学习:将被拒绝客户的数据通过半监督的方法逐渐生成标签,然后带入模型中进行训练。比较典型分方法有拒绝演绎、暴力半监督等等。
标签分裂:我们有时候会不止使用传统的逾期或者rollrate来定义好坏。而是通过一些聚类手段对数据进行切分,然后分别在自己的样本空间内单独学习。基于模型的比如kmeans,分层聚类等等。基于经验的比如将失联客户、欺诈客户拆开,单独建模。
代敏感学习:
代价敏感学习则是利用不同类别的样本被误分类而产生不同的代价,使用这种方法解决数据不平衡问题。而且有很多研究表明,代价敏感学习和样本不平衡问题有很强的联系,并且使用代价敏感学习的方法解决不平衡学习问题要优于使用随机采样的方法。
1) 把误分类代价作为数据集的权重,然后采用 Bootstrap 采样方法选择具有最好的数据分布的数据集;
2) 以集成学习的模式来实现代价最小化的技术,这种方法可以选择很多标准的学习算法作为集成学习中的弱分类器;
3) 把代价敏感函数或者特征直接合并到分类器的参数中,这样可以更好的拟合代价敏感函数。由于这类技术往往都具有特定的参数,因此这类方法没有统一的框架;
采样算法:朴素随机过采样,SMOTE,ADASYN
朴素随机过采样:
from sklearn.datasets import make_classification
from collections import Counter
X, y = make_classification(n_samples=5000, n_features=2, n_informative=2,
n_redundant=0, n_repeated=0, n_classes=2,
n_clusters_per_class=1,
weights=[0.01, 0.99],
class_sep=0.8, random_state=0)
Counter(y)
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_sample(X, y)
sorted(Counter(y_resampled).items())
SMOTE: 对于少数类样本a, 随机选择一个最近邻的样本b, 然后从a与b的连线上随机选取一个点c作为新的少数类样本; 但是,SMOTE容易出现过泛化和高方差的问题,而且,容易制造出重叠的数据。