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

构建ML模型预测net_quantity时测试集NaN报错问题求助

解决LinearRegression预测销量时的NaN报错问题

问题根源

你报错的核心不是测试集net_quantity全为NaN(预测未知确实是模型的核心逻辑),而是代码里没明确定义X_train、y_train和test_data,或者测试集的特征输入不完整——模型预测只需要特征数据,不需要目标变量(也就是net_quantity),但你得给模型喂它训练时用到的那些特征。

修正后的完整步骤

1. 明确特征与目标变量

  • 目标变量y:训练集里的net_quantity(非NaN的销量值)
  • 特征X:选和销量相关的字段,比如产品代码、周期ID、产品类别等,注意分类特征(如产品代码)要先做编码处理,不然线性模型无法识别。

2. 修正代码逻辑

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.linear_model import LinearRegression

# 读取数据
data = pd.read_csv("raw-data.csv")

# 处理分类特征:编码产品代码(统一训练和测试集的编码规则)
le = LabelEncoder()
data['product_code_encoded'] = le.fit_transform(data['product_code'])

# 拆分训练集(剔除net_quantity为NaN的样本)和测试集(只保留period_id=1且net_quantity为NaN的样本)
df_train = data.dropna(subset=['net_quantity'])
df_test = data[(data['net_quantity'].isna()) & (data['period_id'] == 1)]

# 定义训练用的特征和目标
# 这里示例用编码后的产品代码和period_id作为特征,你可以根据实际数据添加更多有效特征
X_train = df_train[['product_code_encoded', 'period_id']]
y_train = df_train['net_quantity']

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 准备测试集的特征(必须和训练集特征完全一致)
X_test = df_test[['product_code_encoded', 'period_id']]

# 执行预测(此时不需要用到测试集的net_quantity列)
predictions = model.predict(X_test)

# 将预测结果回填到测试集,并合并回原数据
df_test['net_quantity'] = predictions
final_data = pd.concat([df_train, df_test], ignore_index=True)

3. 优化建议

  • 单一线性回归对分产品的销量预测效果有限,建议针对每个产品单独建模,或者使用支持分组特征的模型(如LightGBM、XGBoost),能更好捕捉不同产品的销量规律。
  • 提前检查并处理特征列的缺失值:测试集的特征列不能有NaN,否则模型预测时仍会报错,可采用均值填充、类别填充等方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:03:30