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

OLS与IV2SLS预测结果异常问题求助

问题分析与解决方案

核心错误根源

你所有的问题都来自模型设定完全错误:把Price同时作为因变量和自变量,这违背了回归模型的基本逻辑,导致回归结果无意义,自然无法得到预期的预测值。从你预期结果约340来看,你实际应该是要预测Quantity(数据中Quantity的范围是241-800,符合340的量级),而非Price。


一、OLS回归的正确实现与预测

正确模型设定

以Quantity为因变量,Price和Cost为自变量,并添加常数项(Statsmodels默认不自动包含常数项,需手动处理):

import statsmodels.api as sm

# 生成含常数项的自变量矩阵
X = sm.add_constant(annual[['Price', 'Cost']])
# 构建并拟合OLS模型
ols_model = sm.OLS(annual['Quantity'], X).fit()

正确预测方式

预测时需按照「常数项→Price→Cost」的顺序输入值,例如预测Price=10、Cost=1.83的情况:

# 手动输入参数(顺序对应X的列:const, Price, Cost)
print(ols_model.predict([1, 10, 1.83]))

# 更稳妥的方式:用DataFrame输入,避免顺序错误
import pandas as pd
predict_data = pd.DataFrame({'const': [1], 'Price': [10], 'Cost': [1.83]})
print(ols_model.predict(predict_data))

二、IV2SLS回归的正确实现与预测

IV2SLS用于处理内生性问题(例如你认为Price是内生变量,Cost是其有效工具变量),正确的模型设定如下(推荐使用linearmodels库的IV2SLS,语法更直观):

正确模型设定

from linearmodels import IV2SLS

# 用公式语法构建模型:Quantity ~ 常数项 + 内生变量Price + [内生变量Price ~ 工具变量Cost]
iv_model = IV2SLS.from_formula(
    'Quantity ~ 1 + Price + [Price ~ Cost]',
    data=annual
)
iv_results = iv_model.fit()

正确预测方式

预测时仅需输入内生变量和外生变量的值,工具变量无需输入(模型仅在拟合阶段使用工具变量):

# 用DataFrame输入预测参数
predict_data = pd.DataFrame({'Price': [10], 'Cost': [1.83]})
# linearmodels会自动处理常数项,无需手动添加
print(iv_results.predict(predict_data))

你之前错误的原因解释

  1. OLS错误:你将Price同时作为因变量和自变量,回归后Price的系数会被强制拟合为1,Quantity的系数为0,因此输入[1,10]时,预测结果为1*1 + 10*0 = 1,即你得到的[1.]。
  2. IV2SLS错误:同样混淆了因变量和自变量,且工具变量设定逻辑错误,导致预测时仅读取了输入的第一个值作为结果,即[1.83]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:25:20