AI产量预测配置:从数据准备到模型上线的零基础教程
AI产量预测配置的核心是把历史生产数据转换成可训练的特征,再通过模型训练和部署形成预测服务。
对于零基础用户,建议先跑通一个最小可用流程,再逐步优化。
本文以 Python 和 scikit-learn 为例,环境为 Linux 服务器(Ubuntu 22.04 或 CentOS 7+),需要提前安装 Python 3.8+ 和 pip。
环境准备与数据检查
开始配置前,确保服务器已安装 Python 和常用科学计算库。
执行以下命令检查版本:
python3 --version
pip3 --version
如果缺少依赖,用 pip 安装:
pip3 install pandas scikit-learn flask joblib
数据方面,至少需要一张包含时间、产量和相关影响字段(如设备运行时长、原料投入量、环境温度等)的 CSV 文件。
字段命名建议用英文,避免中文列名导致编码问题。
用 pandas 快速检查数据质量:
import pandas as pd
df = pd.read_csv('production.csv')
print(df.head())
print(df.isnull().sum())
避坑: 如果时间列不是标准日期格式,先用 pd.to_datetime 转换,否则后续按时间切分训练集和测试集会出错。
缺失值超过 30% 的列建议直接删除,少量缺失可以用均值或前向填充。
特征工程与模型训练
产量预测通常是有监督回归问题。
把目标列(产量)单独取出,其余数值列作为特征。
对于类别型字段(如班次、产线编号),用 pd.get_dummies 做独热编码。
示例代码:
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
X = df.drop(columns=['output', 'date'])
y = df['output']
X = pd.get_dummies(X, drop_first=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
pred = model.predict(X_test)
print('MAE:', mean_absolute_error(y_test, pred))
训练完成后用 joblib.dump(model, 'model.pkl') 保存模型。注意: 如果 MAE 明显大于产量波动范围,
先检查特征是否包含未来信息(如用当天产量预测当天产量),
这类泄漏会导致评估结果虚高。
部署预测接口与调用验证
用 Flask 暴露一个简单 API,方便其他系统调用。
创建 app.py:
from flask import Flask, request, jsonify
import joblib
import pandas as pd
app = Flask(__name__)
model = joblib.load('model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json()
df = pd.DataFrame([data])
df = pd.get_dummies(df).reindex(columns=model.feature_names_in_, fill_value=0)
result = model.predict(df)[0]
return jsonify({'predicted_output': round(float(result), 2)})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
启动服务后,用 curl 验证:
curl -X POST http://127.0.0.1:5000/predict -H 'Content-Type: application/json' -d '{"runtime_hours": 8, "material_input": 1200, "temperature": 25}'
预期返回类似 {"predicted_output": 3560.5} 的 JSON。
如果报错 KeyError,检查传入字段是否与训练特征一致,缺少的字段会被补 0,但过多无关字段需要手动过滤。
避坑指南与效果验证
配置过程中最容易踩的坑有三个:一是训练集和测试集按时间随机切分,导致模型看到未来数据;
正确做法是按时间排序后取前 80% 训练、后 20% 测试。二是特征编码不一致,训练时用了独热编码,预测时忘记对齐列,可以用 model.feature_names_in_ 强制对齐。三是直接暴露公网接口,建议用 Nginx 反向代理并加访问频率限制,或者只在内网调用。
上线后每周对比预测值和实际值,计算滚动 MAE。
如果误差持续上升,说明生产条件发生变化,需要重新采集数据并重训模型。不要在没验证的情况下直接把模型用于排产决策,先小范围试运行一个月。
如果服务启动时报 Address already in use,用 lsof -i:5000 查看占用进程并更换端口。
如果模型文件加载失败,检查 joblib 版本是否与训练时一致。
常见疑问
预测接口返回的数值明显偏离实际,先查什么? 先检查输入数据的单位和量纲是否与训练数据一致,比如训练时温度是摄氏度,调用时传了华氏度。
训练数据量多大才够用? 没有固定标准,一般建议至少覆盖 3 个月的生产记录,且包含不同班次和工况,否则模型容易过拟合。
能不能用深度学习替代随机森林? 数据量少于 1 万条时,随机森林或梯度提升树通常更稳定,调参成本也低。
数据量足够且特征复杂时再考虑神经网络。
完成以上步骤后,你已经拥有一个可调用的产量预测服务。
后续优化方向包括增加滑动窗口特征、引入外部因素(如订单量),以及用定时任务每天自动重训模型。