From af31fa2587314958eb558ca907c7f29ebca96c32 Mon Sep 17 00:00:00 2001 From: workpc Date: Tue, 12 Aug 2025 18:13:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=8A=A5=E5=91=8A=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tools.py | 20 ++++++++++++++------ models/nerulforcastmodels.py | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/tools.py b/lib/tools.py index 5a4a043..a893b1d 100644 --- a/lib/tools.py +++ b/lib/tools.py @@ -930,7 +930,7 @@ def find_best_models(date='', global_config=None): true_price_value = monthtrueprice else: true_price_value = true_price[true_price['ds'] - == date]['y'].values[0] + == last_trading_day_str]['y'].values[0] if not price.empty: price.loc[:, 'trueprice'] = true_price_value @@ -963,7 +963,7 @@ def find_best_models(date='', global_config=None): price = df[['data_date', wd, 'model_id']] price = price[(price['data_date'] == ciridate) | (price['data_date'] == date)] - trend = 1 if true_price[true_price['ds'] == date]['y'].values[0] - \ + trend = 1 if true_price[true_price['ds'] == ciridate]['y'].values[0] - \ true_price[true_price['ds'] == ciridate]['y'].values[0] > 0 else -1 best_model_id, best_model_name = calculate_best_model(price, trend) best_models[wd]['model_id'] = best_model_id @@ -987,11 +987,11 @@ def find_best_models(date='', global_config=None): pd.Timedelta(days=7)).strftime('%Y-%m-%d') global_config['logger'].info(f'计算预测{last_trading_day}的五天前{benzhoudate}最佳模型') global_config['logger'].info( - f'{date}真实价格:{true_price[true_price["ds"] == date]["y"].values[0]}') + f'{date}真实价格:{true_price[true_price["ds"] == last_trading_day_str]["y"].values[0]}') price = df[['data_date', wd, 'model_id']] price = price[(price['data_date'] == benzhoudate) | (price['data_date'] == date)] - trend = 1 if true_price[true_price['ds'] == date]['y'].values[0] - \ + trend = 1 if true_price[true_price['ds'] == last_trading_day_str]['y'].values[0] - \ true_price[true_price['ds'] == benzhoudate]['y'].values[0] > 0 else -1 best_model_id, best_model_name = calculate_best_model(price, trend) best_models[wd]['model_id'] = best_model_id @@ -1113,18 +1113,26 @@ def plot_pp_predict_result(y_hat, global_config,wd='yuedu'): fig = plt.figure(figsize=(16, 22)) ax = fig.add_axes([0.05, 0.55, 0.9, 0.25]) # 16:9核心参数 + # 添加网格线 + ax.grid(True, linestyle='--', alpha=0.7) + # 对日期列进行排序,确保日期大的在右边 y_y_hat = y_y_hat.sort_values(by='ds') y = y.sort_values(by='ds') # 绘制 y_hat 的折线图,颜色为橙色 sns.lineplot(x=y_y_hat['ds'], y=y_y_hat['predictresult'], - color='orange', label='预测值', ax=ax, linestyle='--') + color='orange', label='预测值', ax=ax, linestyle='--', linewidth=2) + # 绘制散点图 + sns.scatterplot(x=y_y_hat['ds'], y=y_y_hat['predictresult'], + color='orange', ax=ax, marker='o', s=100) + + # 绘制 y 的折线图,颜色为蓝色 sns.lineplot(x=y['ds'], y=y['y'], color='blue', label='真实值', ax=ax) # date_str = pd.Timestamp(y_hat["ds"].iloc[0]).strftime('%Y-%m-%d') - ax.set_title(f'{global_config["end_time"]} PP期货八大维度 预测价格走势', fontsize=24) + ax.set_title(f'{datetime.datetime.now().strftime("%Y-%m-%d")} PP期货十一大维度 预测价格走势', fontsize=24) ax.set_xlabel('日期') ax.set_ylabel('预测结果') ax.tick_params(axis='x', rotation=45) diff --git a/models/nerulforcastmodels.py b/models/nerulforcastmodels.py index 0dd5e35..3ebe94e 100644 --- a/models/nerulforcastmodels.py +++ b/models/nerulforcastmodels.py @@ -3577,7 +3577,7 @@ def pp_bdwd_png(global_config): five_days_predict_price.rename( columns={week_price_modelname: 'predictresult'}, inplace=True) # 设置索引 次日 次二日 次三日 次四日 次五日 - index_labels = ["次日", "次二日", "次三日", "次四日", "次五日"] + index_labels = ["当日", "次日", "次二日", "次三日", "次四日"] five_days_predict_price.index = index_labels y_hat_riduzhoudu = pd.concat( [y_hat_zhoudu, five_days_predict_price], axis=0)