本文是《智能风控原理、算法和工程实践》第3章学习笔记。算法推导部分较难,就没有列出来,因为我也看不懂。
冷启动
冷启动是指在没有或只有很少量数据的情况下,从0到1建立业务模型的过程。在风控业务中,早期缺乏数据积累,迁移学习和异常检测技术都可以用来处理部分冷启动问题。
应用场景
- 新开了某个业务,只有少量样本,需要用其他场景的数据来建模。此时其他场景为源域,新业务场景为目标域。
- 业务被迫停止3个月后重启,大部分训练样本比较老旧。大部分旧样本为源域,新的少量训练样本为目标域。
- 在某个国家开展类似国内的业务。国内业务积累的数据为源域,新国家场景为目标域。
概括起来,源域样本和目标域样本分布有区别,目标域样本量又不够。
概念介绍
迁移学习是一种通过调用不同场景中的数据来建立模型的方法。通过迁移学习可以将知识从源域迁移到目标域。
一个简单的例子,假如现在有大量英短银渐层和少量英短高地的图片,期望训练一个能够识别当前的猫是不是英短高地的学习器。这时可以用英短银渐层图片来训练一个卷积神经网络,并将这个网络的中间结点取出来作为目标模型的前半部分,然后在少量英短高地的样本上再继续训练学习后面的几层网络。
卷积神经网络前几层学习的是轮廓和局部形状等猫的共性特征,通过前面网络的学习模型就掌握了猫的共性,再通过后续网络对英短高地学习。
常见迁移学习算法
- TrAdaBoost。
赋予源域中的样本某种权重,使其分布靠近目标域。 - 联合分布适配方法(JDA)。
寻找一个低维子空间,使源域和目标域的数据样本在映射到该子空间后服从相同或相近的分布。 - 迁移极限学习机(DTELM)。
利用低秩矩阵重构数据点,实现域之间的鲁棒自适应。
第一种算法因为不在特征空间上做任何扭曲变化,可以很好地保留模型的解释性,所以应该更为广泛。第二、第三种算法在解释性上有一定不足,但不需要在目标场景有真实的样本标签,对于初期的业务支持度更好。
TrAdaBoost模型
将不同分布的训练集放在一起训练,这种方法也叫作基于实例的迁移学习方法。
TraAdaBoost是有AdaBoost演变而来。在一个包含源域训练数据和目标域样本的训练集中,TrAdaBoost会对训练样本进行权重调整。
- 对目标域样本,如果被误分类,根据目标域样本的分类错误率进行调整,增加其权重,使得下次训练时更关注错分的目标域样本。
- 对源域样本,如果被误分类,则会认为它们是与目标数据不同分布的,会降低其权重。
跨场景迁移模型
在新场景下开展小额现金贷产品,积累了1200条有标签的样本,尝试对原有大额产品的存量客户进行迁移。有4个在旧业务上表现较好的特征,保证原有场景和目标场景都有这个特征且含义一致。
import pandas as pd
from sklearn.metrics import roc_auc_score,roc_curve,auc
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
import numpy as np
import random
import math
from sklearn.calibration import CalibratedClassifierCV
data = pd.read_excel('./data/tra_sample.xlsx')
data.head()
type的三种标签分别代表着目标域、源域和时间外样本集。根据标签划分样本集。
feature_lst = ['zx_score','msg_cnt','phone_num_cnt','register_days']
train = data[data.type == 'target'].reset_index().copy()
diff = data[data.type == 'origin'].reset_index().copy()
val = data[data.type == 'offtime'].reset_index().copy()
#trans_S, trans_A, label_S, label_A, test
train = train.loc[:1200]
trans_S = train[feature_lst]