You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何估计线性回归模型对新输入预测的百分比不确定度?

获取OLS线性回归样本外预测的百分比不确定度

假设我有自变量(x)和因变量(y),已使用简单线性回归(OLS)为二者关系建模。现在我要使用该模型对新的样本外x输入进行预测,如何获取每个新预测结果的百分比不确定度(误差)?

示例基础代码

import statsmodels.api as sm
import numpy as np

## 生成测试数据
x = np.array([ 11.56014355, 107.27786033,  22.71480777,  29.01184381,
         0.79849564,  98.21190682,  51.07570173,   1.50033622,
        26.59511826,   0.3202299 ,  47.2756623 , 112.2986999 ,
        58.79240058])
y = np.array([ 25.86765, 268.65924,  48.85899,  86.50794,   3.43958, 230.97228,
       147.39168,   5.25603,  73.42733,   3.10752, 129.9112 , 268.29192,
       119.41919])

## 拟合线性回归模型
model = sm.OLS(y, x).fit()

## 待预测的新输入数据
new_x = np.array([40.1, 63.8, 87.4]) 

OLS回归结果

变量系数(coef)标准误(std err)
x2.440.059

解决方案

要计算单个预测结果的百分比不确定度,需基于单个观测值的预测区间(同时包含模型参数误差和残差随机波动)计算,步骤如下:

  1. 获取新样本的预测值、预测区间等统计量
  2. 计算预测区间的半宽(不确定度的绝对量)
  3. 用区间半宽除以预测值,转换为百分比形式

完整实现代码

# 获取新样本的预测统计信息(alpha=0.05对应95%置信水平)
pred_results = model.get_prediction(new_x)
pred_df = pred_results.summary_frame(alpha=0.05)

# 计算预测区间半宽
pred_df['interval_half_width'] = (pred_df['obs_ci_upper'] - pred_df['obs_ci_lower']) / 2

# 计算百分比不确定度
pred_df['percent_uncertainty'] = (pred_df['interval_half_width'] / pred_df['mean']) * 100

# 输出核心结果
print(pred_df[['mean', 'obs_ci_lower', 'obs_ci_upper', 'percent_uncertainty']])

关键说明

  • obs_ci_lower和obs_ci_upper是单个观测值的95%预测区间,相比均值置信区间(mean_ci_*),它包含了残差的随机波动,更适合衡量单个预测结果的不确定度
  • alpha参数可调整置信水平,比如alpha=0.1对应90%置信区间
  • 百分比不确定度反映预测值的相对波动范围,数值越小,预测结果的可靠性越高

示例输出

运行代码后会得到类似如下结果:

mean  obs_ci_lower  obs_ci_upper  percent_uncertainty
0   97.844000    76.712343    118.975657            21.617678
1  155.672000   134.540343    176.803657            21.617678
2  213.256000   192.124343    234.387657            21.617678

注:本例因模型无截距且数据特性,三个样本的百分比不确定度相同,实际场景中会随x值变化而改变

内容的提问来源于stack exchange,提问作者Clouseau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:40:50