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

线性回归模型评估异常:高误差指标与低R²值的问题排查

汽车价格预测模型问题分析与解答

数据集与任务背景

  • 数据集规模:10000行5列,初始列名包括id、mileage_per_year、model_year、price、sold
  • 数据异常:price列存在两个负值记录(id4200为-270.77,id4796为-840.36),尚未处理
  • 价格统计:最大值118929.72,均值64842
  • 核心任务:完成探索性分析、英制单位转公制、列名/标签英文转葡萄牙语,最终预测2005款总里程172095.3km的汽车价格

已完成的数据处理操作

已完成列重命名、单位转换、标签翻译、新增总里程列,代码如下:

df['KM total'] = 1

novo = ['Indice', 'KM por ano', 'Ano do modelo', 'Preço', 'Vendido']
df = df.rename(columns={list(df.columns.values)[i] : novo[i] for i in range(len(novo))})

for i in range(len(df)):
    df['KM por ano'][i] = int(float(df["KM por ano"][i] * 1.60934))
    if df['Vendido'][i] == 'yes':
        df['Vendido'][i] = 'Sim'
    else:
        df['Vendido'][i] = 'Nao'

    df['KM total'][i] = int(df['KM por ano'][i] *  (2023 - df['Ano do modelo'][i]))

多线性回归模型构建

后续构建模型并执行预测,代码如下:

X = df[['KM por ano','KM total','Ano do modelo']]
y = df[['Preço']]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

lr = LinearRegression()
lr.fit(X_train, y_train)
km_ano = 172095.3 / (2023-2005)
preds = lr.predict([[km_ano, 172095.3, 2005]])

模型结果与疑问

  • 预测价格:66347美元
  • 评估指标异常:MAE=20849.715,MSE(squared=False)=24571.520,RMSE(squared=False)=156.753,R²=0.04946931214392558
  • 疑问:
    • 操作是否存在错误?
    • 多线性回归是否适用于该场景?
    • 仅靠R²能否信任模型?

问题解答

1. 操作层面的潜在错误

  • 数据处理效率与正确性问题:用for循环遍历修改DataFrame的方式效率极低,还可能触发SettingWithCopyWarning,建议用向量化操作替代:
    # 英制转公制
    df['KM por ano'] = (df['KM por ano'] * 1.60934).astype(int)
    # 标签翻译
    df['Vendido'] = df['Vendido'].map({'yes': 'Sim', 'no': 'Nao'})
    # 计算总里程
    df['KM total'] = (df['KM por ano'] * (2023 - df['Ano do modelo'])).astype(int)
    
  • 特征冗余问题:KM por ano和KM total存在强线性关联(KM total = KM por ano × 使用年限),这种多重共线性会严重干扰线性回归的系数估计,导致模型不稳定,也是R²极低的核心原因之一。
  • 异常值未处理:price列的两个负值属于明显异常值,会拉低整体均值,干扰模型对正常价格区间的学习,必须处理(删除对应行、用均值/中位数填充或标记为异常)。
  • 预测输入格式问题:lr.predict([[km_ano, 172095.3, 2005]])在新版scikit-learn中可能报错,建议用pd.DataFrame构造输入,确保特征顺序与训练集一致:
    input_df = pd.DataFrame({'KM por ano': [km_ano], 'KM total': [172095.3], 'Ano do modelo': [2005]})
    preds = lr.predict(input_df)
    

2. 多线性回归的适用性判断

线性回归的适用前提是特征与目标变量存在线性关系,且满足无多重共线性、残差正态分布等假设。当前模型R²仅0.05,说明特征仅能解释5%的价格变异,线性关系极弱,原因可能包括:

  • 遗漏关键特征:汽车品牌、车型、车况、配置等才是影响价格的核心因素,仅靠里程和年份不足以构建有效模型;
  • 非线性关系:汽车价格随使用年限、里程的变化通常是非线性的(比如前几年贬值快,后期放缓),线性模型无法捕捉这种趋势。

因此,当前场景下多线性回归不是合适选择,建议尝试:

  • 补充更多核心特征;
  • 尝试非线性模型(如决策树、随机森林、梯度提升树),这类模型能自动捕捉非线性关系,对特征冗余的容忍度更高;
  • 对现有特征做非线性变换(如对里程、年份取对数,或添加交互项)。

3. 能否仅靠R²信任模型

绝对不能。R²仅衡量特征对目标变异的解释程度,存在诸多局限性:

  • 添加无关特征时,R²不会下降甚至可能轻微上升;
  • 样本量极大时,即使R²很小,模型也可能通过统计显著性检验,但实际预测能力极差;
  • 无法反映预测的误差大小(比如你的MAE高达2万多,远超价格均值的30%,说明预测误差极大)。

评估模型必须结合多个指标:

  • 误差指标:MAE(反映平均偏差大小)、RMSE(对大误差更敏感),直观体现预测精准度;
  • R²:辅助判断特征的解释力;
  • 残差分析:查看残差是否随机分布,验证模型假设是否成立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:52:49