如何在GCP BigQueryML中执行逐步回归以筛选显著变量?
在GCP BigQueryML中实现逐步回归的方法
BigQueryML目前没有原生支持自动逐步回归的功能,但可以通过手动结合模型评估指标(如AIC、调整R²、变量显著性p值)来实现向前选择、向后剔除或双向淘汰式的逐步回归,以此筛选显著变量。
一、向前选择法(从单变量开始逐步添加)
1. 评估所有单变量模型,筛选初始最优变量
针对每个特征单独构建线性回归模型,通过评估指标选择表现最优的单变量作为初始模型基础:
-- 为每个特征创建单变量模型 CREATE OR REPLACE MODEL my_dataset.model_feat1 OPTIONS(model_type='linear_reg', split_eval_fraction=0.2) AS SELECT target_column, feature_1 FROM my_dataset.source_table; CREATE OR REPLACE MODEL my_dataset.model_feat2 OPTIONS(model_type='linear_reg', split_eval_fraction=0.2) AS SELECT target_column, feature_2 FROM my_dataset.source_table; -- 评估所有单变量模型,对比AIC、调整R²等指标 SELECT 'feature_1' AS feature, aic, adjusted_r2 FROM ML.EVALUATE(MODEL my_dataset.model_feat1); SELECT 'feature_2' AS feature, aic, adjusted_r2 FROM ML.EVALUATE(MODEL my_dataset.model_feat2);
选择AIC最低或调整R²最高的模型对应的特征作为初始变量。
2. 逐步添加剩余变量,验证模型提升
基于初始变量,依次加入剩余特征构建多变量模型,对比添加前后的模型指标,同时检查新加入变量的显著性:
-- 加入feature_2到初始模型(假设初始变量是feature_1) CREATE OR REPLACE MODEL my_dataset.model_feat1_feat2 OPTIONS(model_type='linear_reg', split_eval_fraction=0.2) AS SELECT target_column, feature_1, feature_2 FROM my_dataset.source_table; -- 评估新模型的指标 SELECT aic, adjusted_r2 FROM ML.EVALUATE(MODEL my_dataset.model_feat1_feat2); -- 查看变量的显著性p值 SELECT feature, p_value FROM ML.WEIGHTS(MODEL my_dataset.model_feat1_feat2) WHERE feature != '__INTERCEPT__';
如果添加后AIC降低、调整R²升高,且新变量的p值小于预设阈值(如0.05),则保留该变量;否则丢弃,继续测试下一个特征。重复此过程直到没有能提升模型的变量。
二、向后剔除法(从全变量模型开始逐步移除)
1. 构建全变量模型
先包含所有候选特征构建完整模型:
CREATE OR REPLACE MODEL my_dataset.model_full OPTIONS(model_type='linear_reg', split_eval_fraction=0.2) AS SELECT target_column, feature_1, feature_2, feature_3, feature_4 FROM my_dataset.source_table;
2. 识别不显著变量并逐步剔除
通过ML.WEIGHTS获取变量的p值,优先移除p值最高的不显著变量,然后重新建模并评估指标变化:
-- 查看所有变量的显著性 SELECT feature, p_value FROM ML.WEIGHTS(MODEL my_dataset.model_full) WHERE feature != '__INTERCEPT__'; -- 移除p值最高的变量(假设是feature_4),构建精简模型 CREATE OR REPLACE MODEL my_dataset.model_remove_feat4 OPTIONS(model_type='linear_reg', split_eval_fraction=0.2) AS SELECT target_column, feature_1, feature_2, feature_3 FROM my_dataset.source_table; -- 对比精简模型与原模型的指标 SELECT 'full_model' AS model, aic, adjusted_r2 FROM ML.EVALUATE(MODEL my_dataset.model_full); SELECT 'removed_feat4' AS model, aic, adjusted_r2 FROM ML.EVALUATE(MODEL my_dataset.model_remove_feat4);
如果精简模型的AIC更低、调整R²更高,则保留该模型,继续剔除下一个不显著变量;否则停止剔除。
三、关键注意事项
- 始终使用验证集指标(通过
split_eval_fraction拆分数据集)评估模型,避免过拟合。 - 变量显著性的p值阈值可根据业务需求调整(常用0.05或0.1)。
- 对于分类任务(如逻辑回归),可将评估指标替换为对数损失、AUC等,变量显著性仍通过
ML.WEIGHTS的p值判断。
内容的提问来源于stack exchange,提问作者rushabh shah
相关产品推荐
相关产品推荐

