SAS 中针对逻辑回归中罕见事件的抵消过采样
Offsetting Oversampling in SAS for rare events in Logistic Regression
任何人都可以帮助我理解在逻辑回归中使用偏移方法(最好在 Proc Logistic 和 Scoring 中的 Base SAS 中)对过采样的模型前和模型后调整。
我举个例子。考虑到银行的传统信用评分模型,假设我们有 10000 名客户,其中 50000 名好客户和 2000 名坏客户。现在,对于我的逻辑回归,我使用了所有 2000 个坏客户和 2000 个好客户的随机样本。我如何在 Proc Logistic 中使用 Offset 等选项以及在评分期间调整此过采样。你有关于这个主题的插图参考吗?
预先感谢您的帮助!
好的,这是我的 2 美分。
有时,目标变量是罕见事件,例如欺诈。在这种情况下,由于事件数据不足,使用逻辑回归会产生明显的样本偏差。由于其简单性,过采样是一种常用方法。
然而,当分数用于决策时需要模型校准(这是你的情况)——但是如果模型仅用于排名排序,则无需执行任何操作(请记住,概率会被夸大,但顺序仍然一样)。
协变量的参数和比值比估计(及其置信限)不受此类抽样(或过抽样)的影响,因此不需要加权。但是,截距估计受采样影响,因此任何基于全套参数估计的计算都是不正确的。
假设真实模型为:ln(y/(1-y))=b0+b1*x.
使用过采样时,b1′
与真实模型一致,但b0′
不等于bo
。
通常有两种方法:
- 加权逻辑回归,
- 简单地添加偏移量。
我将仅根据您的问题解释偏移版本。
让我们创建一些虚拟数据,其中您的 DP (y) 和您的 IV (iv) 之间的真实关系是 ln(y/(1-y)) = -6+2iv
data dummy_data;
do j=1 to 1000;
iv=rannor(10000); *independent variable;
p=1/(1+exp(-(-6+2*iv))); * event probability;
y=ranbin(10000,1,p); * independent variable 1/0;
drop j;
output;
end;
run;
让我们看看您的事件发生率:
proc freq data=dummy_data;
tables y;
run;
Cumulative Cumulative
y Frequency Percent Frequency Percent
------------------------------------------------------
0 979 97.90 979 97.90
1 21 2.10 1000 100.00
与您的问题类似,事件发生率为 p=0.0210,换句话说非常罕见
让我们使用 poc logistic 来估计参数
proc logistic data=dummy_data;
model y(event="1")=iv;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -5.4337 0.4874 124.3027 <.0001
iv 1 1.8356 0.2776 43.7116 <.0001
Logistic 结果非常接近真实模型,但基本假设并不成立。
现在让我们通过选择 p=0.2
的所有事件案例和非事件案例来对原始数据集进行过采样
data oversampling;
set dummy_data;
if y=1 then output;
if y=0 then do;
if ranuni(10000)<1/20 then output;
end;
run;
proc freq data=oversampling;
tables y;
run;
Cumulative Cumulative
y Frequency Percent Frequency Percent
------------------------------------------------------
0 54 72.00 54 72.00
1 21 28.00 75 100.00
您的事件发生率已(神奇地)从 2.1%
跃升至 28%
。让我们 运行 再次处理逻辑。
proc logistic data=oversampling;
model y(event="1")=iv;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -2.9836 0.6982 18.2622 <.0001
iv 1 2.0068 0.5139 15.2519 <.0001
如您所见,iv 估计值仍然接近真实值,但您的截距已从 -5.43
变为 -2.98
,这与我们 -6
的真实值有很大不同。
这里是偏移发挥作用的地方。偏移量是已知总体和样本事件概率之间比率的对数,并根据事件的真实分布而不是样本分布(过采样数据集)调整截距。
Offset = log(0.28)/(1-0.28)*(0.0210)/(1-0.0210) = 2.897548
因此您的截距调整将是 intercept = -2.9836-2.897548= -5.88115
,这非常接近实际值。
或者在 proc logistic 中使用偏移选项:
data oversampling_with_offset;
set oversampling;
off= log((0.28/(1-0.28))*((1-0.0210)/0.0210)) ;
run;
proc logistic data=oversampling_with_offset;
model y(event="1")=iv / offset=off;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -5.8811 0.6982 70.9582 <.0001
iv 1 2.0068 0.5138 15.2518 <.0001
off 1 1.0000 0 . .
从这里你的所有估计都得到了正确的调整,分析和解释应该正常进行。
希望对您有所帮助。
这个解释很好。
当您在罕见事件实验中过采样或欠采样时,截距会受到影响,而不是斜率。因此,在最终输出中,您只需通过在 SAS 的 proc logistic 中添加 offset 语句来调整截距。概率受到过采样的影响,但同样,如上所述,排名不受影响。
如果您的目标是将数据打分到十分位,则无需调整偏移量,可以根据过度采样模型的概率对观察值进行排序,然后将它们放入十分位(正常使用 Proc Rank) .但是,实际概率分数会受到影响,因此您不能使用实际概率值。 ROC 曲线也不受影响。
任何人都可以帮助我理解在逻辑回归中使用偏移方法(最好在 Proc Logistic 和 Scoring 中的 Base SAS 中)对过采样的模型前和模型后调整。
我举个例子。考虑到银行的传统信用评分模型,假设我们有 10000 名客户,其中 50000 名好客户和 2000 名坏客户。现在,对于我的逻辑回归,我使用了所有 2000 个坏客户和 2000 个好客户的随机样本。我如何在 Proc Logistic 中使用 Offset 等选项以及在评分期间调整此过采样。你有关于这个主题的插图参考吗? 预先感谢您的帮助!
好的,这是我的 2 美分。
有时,目标变量是罕见事件,例如欺诈。在这种情况下,由于事件数据不足,使用逻辑回归会产生明显的样本偏差。由于其简单性,过采样是一种常用方法。
然而,当分数用于决策时需要模型校准(这是你的情况)——但是如果模型仅用于排名排序,则无需执行任何操作(请记住,概率会被夸大,但顺序仍然一样)。
协变量的参数和比值比估计(及其置信限)不受此类抽样(或过抽样)的影响,因此不需要加权。但是,截距估计受采样影响,因此任何基于全套参数估计的计算都是不正确的。
假设真实模型为:ln(y/(1-y))=b0+b1*x.
使用过采样时,b1′
与真实模型一致,但b0′
不等于bo
。
通常有两种方法:
- 加权逻辑回归,
- 简单地添加偏移量。
我将仅根据您的问题解释偏移版本。
让我们创建一些虚拟数据,其中您的 DP (y) 和您的 IV (iv) 之间的真实关系是 ln(y/(1-y)) = -6+2iv
data dummy_data;
do j=1 to 1000;
iv=rannor(10000); *independent variable;
p=1/(1+exp(-(-6+2*iv))); * event probability;
y=ranbin(10000,1,p); * independent variable 1/0;
drop j;
output;
end;
run;
让我们看看您的事件发生率:
proc freq data=dummy_data;
tables y;
run;
Cumulative Cumulative
y Frequency Percent Frequency Percent
------------------------------------------------------
0 979 97.90 979 97.90
1 21 2.10 1000 100.00
与您的问题类似,事件发生率为 p=0.0210,换句话说非常罕见
让我们使用 poc logistic 来估计参数
proc logistic data=dummy_data;
model y(event="1")=iv;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -5.4337 0.4874 124.3027 <.0001
iv 1 1.8356 0.2776 43.7116 <.0001
Logistic 结果非常接近真实模型,但基本假设并不成立。
现在让我们通过选择 p=0.2
的所有事件案例和非事件案例来对原始数据集进行过采样data oversampling;
set dummy_data;
if y=1 then output;
if y=0 then do;
if ranuni(10000)<1/20 then output;
end;
run;
proc freq data=oversampling;
tables y;
run;
Cumulative Cumulative
y Frequency Percent Frequency Percent
------------------------------------------------------
0 54 72.00 54 72.00
1 21 28.00 75 100.00
您的事件发生率已(神奇地)从 2.1%
跃升至 28%
。让我们 运行 再次处理逻辑。
proc logistic data=oversampling;
model y(event="1")=iv;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -2.9836 0.6982 18.2622 <.0001
iv 1 2.0068 0.5139 15.2519 <.0001
如您所见,iv 估计值仍然接近真实值,但您的截距已从 -5.43
变为 -2.98
,这与我们 -6
的真实值有很大不同。
这里是偏移发挥作用的地方。偏移量是已知总体和样本事件概率之间比率的对数,并根据事件的真实分布而不是样本分布(过采样数据集)调整截距。
Offset = log(0.28)/(1-0.28)*(0.0210)/(1-0.0210) = 2.897548
因此您的截距调整将是 intercept = -2.9836-2.897548= -5.88115
,这非常接近实际值。
或者在 proc logistic 中使用偏移选项:
data oversampling_with_offset;
set oversampling;
off= log((0.28/(1-0.28))*((1-0.0210)/0.0210)) ;
run;
proc logistic data=oversampling_with_offset;
model y(event="1")=iv / offset=off;
run;
Standard Wald
Parameter DF Estimate Error Chi-Square Pr > ChiSq
Intercept 1 -5.8811 0.6982 70.9582 <.0001
iv 1 2.0068 0.5138 15.2518 <.0001
off 1 1.0000 0 . .
从这里你的所有估计都得到了正确的调整,分析和解释应该正常进行。
希望对您有所帮助。
这个解释很好。
当您在罕见事件实验中过采样或欠采样时,截距会受到影响,而不是斜率。因此,在最终输出中,您只需通过在 SAS 的 proc logistic 中添加 offset 语句来调整截距。概率受到过采样的影响,但同样,如上所述,排名不受影响。
如果您的目标是将数据打分到十分位,则无需调整偏移量,可以根据过度采样模型的概率对观察值进行排序,然后将它们放入十分位(正常使用 Proc Rank) .但是,实际概率分数会受到影响,因此您不能使用实际概率值。 ROC 曲线也不受影响。