我有一个问题陈述,其中商品的百分比(用 0 表示)为 95%,而对于坏货(用 1 表示)只有 5%。一种方法是对商品进行欠采样,以便模型正确理解这两个部分的模式。但是采样不足会导致大量数据丢失,这将直接降低我的模型性能。因此,我选择了对坏品进行过度采样,但过度采样也有其自身的问题:
检查此代码段:
from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state = 33)
x = train_data.drop(['target'], axis = 1)
y = train_data[['target']]
x_new, y_new = sm.fit_sample(x, y)
y.target.value_counts() # 0 -> 26454 1-> 2499
y_new.target.value_counts() # 0 -> 26454 1-> 26454
过采样后,我得到了相同的结果。商品和坏品,但问题是变量分布受到影响。
例如,我有“年龄”变量,在好的情况下,桶变量分布是
1 - 25 years - 20%
26 - 50 years - 35%
50+ years - 45%
坏的分布是(过采样之前):
1 - 25 years - 50%
26 - 50 years - 30%
50+ years - 20%
但是过采样后坏的分布正在发生变化:
1 - 25 years - 40%
26 - 50 years - 35%
50+ years - 25%
所以现在这个变量对于好与坏的分布并不像以前那样有效(在过采样之前)。
有什么方法可以使过采样不会影响我的变量分布?
