|
@@ -362,12 +362,7 @@ def evaluate_and_predict(model, scaler, X_tr, y_tr, X_te, y_te, X_fu, use_tuning
|
|
|
'test_r2': test_r2
|
|
|
}
|
|
|
|
|
|
- # 保存为JSON
|
|
|
- with open(METRICS_JSON, 'w', encoding='utf-8') as f:
|
|
|
- json.dump([metrics], f, ensure_ascii=False, indent=4)
|
|
|
- print(f"评估指标已保存至 {METRICS_JSON}")
|
|
|
-
|
|
|
- return y_tr_pred, y_te_pred, y_fu_pred
|
|
|
+ return y_tr_pred, y_te_pred, y_fu_pred, metrics
|
|
|
|
|
|
|
|
|
# ------------ 结果后处理(生成日度 & 月度 DataFrame) ------------
|
|
@@ -417,6 +412,7 @@ def merge_and_prepare_df(train, test, future, y_te_pred, y_fu_pred):
|
|
|
def generate_and_fill_excel(
|
|
|
daily_df,
|
|
|
monthly_df,
|
|
|
+ metrics, # 新增参数
|
|
|
target_name, # 写入的"预测标的"显示名
|
|
|
classification, # 列表页-分类
|
|
|
model_framework, # 列表页-模型框架
|
|
@@ -476,6 +472,23 @@ def generate_and_fill_excel(
|
|
|
ws_daily.write(0, 0, target_name)
|
|
|
ws_daily.write_row(1, 0, ['指标日期','实际值','预测值'])
|
|
|
|
|
|
+ # ========= 训练结果页 =========
|
|
|
+ ws_metrics = workbook.add_worksheet('训练结果页')
|
|
|
+ writer.sheets['训练结果页'] = ws_metrics
|
|
|
+
|
|
|
+ metrics_headers = ['指标名称', '指标值']
|
|
|
+ ws_metrics.write_row(0, 0, metrics_headers)
|
|
|
+
|
|
|
+ metrics_rows = [
|
|
|
+ ['训练集 MSE', metrics['train_mse']],
|
|
|
+ ['测试集 MSE', metrics['test_mse']],
|
|
|
+ ['训练集 R²', metrics['train_r2']],
|
|
|
+ ['测试集 R²', metrics['test_r2'] if metrics['test_r2'] is not None else '']
|
|
|
+ ]
|
|
|
+
|
|
|
+ for i, row in enumerate(metrics_rows, start=1):
|
|
|
+ ws_metrics.write_row(i, 0, row)
|
|
|
+
|
|
|
print(f"已生成并填充 {output_path}")
|
|
|
|
|
|
|
|
@@ -560,7 +573,7 @@ def main():
|
|
|
|
|
|
model = train_model_with_tuning(X_tr_s, y_tr, X_te_s, y_te, weights, USE_HYPERPARAM_TUNING)
|
|
|
|
|
|
- y_tr_pred, y_te_pred, y_fu_pred = evaluate_and_predict(model, scaler, X_tr, y_tr, X_te, y_te, X_fu, USE_HYPERPARAM_TUNING)
|
|
|
+ y_tr_pred, y_te_pred, y_fu_pred, metrics = evaluate_and_predict(model, scaler, X_tr, y_tr, X_te, y_te, X_fu, USE_HYPERPARAM_TUNING)
|
|
|
|
|
|
daily_df, monthly_df = merge_and_prepare_df(train, test, future, y_te_pred, y_fu_pred)
|
|
|
|
|
@@ -570,13 +583,14 @@ def main():
|
|
|
generate_and_fill_excel(
|
|
|
daily_df,
|
|
|
monthly_df,
|
|
|
- target_name= TARGET_NAME,
|
|
|
- classification= CLASSIFICATION,
|
|
|
- model_framework= MODEL_FRAMEWORK,
|
|
|
- creator= CREATOR,
|
|
|
- pred_date= PRED_DATE,
|
|
|
- frequency= FREQUENCY,
|
|
|
- output_path= OUTPUT_PATH
|
|
|
+ metrics, # 新增参数
|
|
|
+ target_name=TARGET_NAME,
|
|
|
+ classification=CLASSIFICATION,
|
|
|
+ model_framework=MODEL_FRAMEWORK,
|
|
|
+ creator=CREATOR,
|
|
|
+ pred_date=PRED_DATE,
|
|
|
+ frequency=FREQUENCY,
|
|
|
+ output_path=OUTPUT_PATH
|
|
|
)
|
|
|
|
|
|
full_model, y_fu_full, scaler_full = train_full_model_and_predict(X_tr, y_tr, X_te, y_te, X_fu)
|