构建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
相关产品推荐
相关产品推荐

