covariate shift

covariate shift

训练集和测试集的分布不一致,会导致train得到的estimator无法在test上有好的效果。

method

可以通过sample reweight方法来改变训练集的分布,从而达到实际训练的train分布和test分布一致。

权重计算一般可以采用这样的方式:

将train和test合在一起建模,label为case所属的数据集,train-1,test-0,通过五折交叉可以得到trian的每个case的预测得分,得分越高,说明越容易和test区分,也就是越不可能是test分布所产出的结果。故而得分取倒数在做归一化就可以得到train的每个case对应权重。

同时根据得分可以计算mcc指标,该指标可以作为train和test分布不一致性的一个度量指标,越大越不一致。

但是在个人实践中发现,sample reweight并不能带来更好的效果,反而有时效果还更差。

由于这个结果比较反常识,个人查阅了一些资料,发现确实有论文和实验强调sample reweight无效。具体见Understanding covariate shift in model performance

当然,可以不同的数据集适用不同的处理方法, 不能一概而论之。

另一种解决方法

可以考虑从分布不一致的根源上入手来解决问题。

个人面临的实际问题是业务策略频繁变动,导致同一个产品在不同时间的客群并不一样(对客群划分等级,然后这个星期将低等级用户分发给该产品,下个星期将高等级用户分发给该产品)。在这种情况下,如果使用历史样本进行建模,会发现在近期客群上效果很差。由于一般情况下,客群本身并不大可能在短时间频繁变动。因此,可以拉长采样的时间线,确保客群的不同类型都可以被纳入样本之中,如此一来,就可以保证模型对新客群(总体客群中的某一部分)具有适应性。在这个过程中,有一点需要注意,采样时应当保证客群各等级比例和实际情况应当一致,不然会受到产品策略的影响导致比重失衡。

reference