diff --git a/models/nerulforcastmodels.py b/models/nerulforcastmodels.py index 961fef2..6ffb249 100644 --- a/models/nerulforcastmodels.py +++ b/models/nerulforcastmodels.py @@ -463,11 +463,11 @@ def model_losss(sqlitedb,end_time): # 准确率基准与绘图上下界逻辑一致 # predict_y[['min_price','max_price']] = predict_y[['min_within_quantile','max_within_quantile']] # 模型评估前五均值 - predict_y['min_price'] = predict_y[modelnames].mean(axis=1) -1 - predict_y['max_price'] = predict_y[modelnames].mean(axis=1) +1 + # predict_y['min_price'] = predict_y[modelnames].mean(axis=1) -1 + # predict_y['max_price'] = predict_y[modelnames].mean(axis=1) +1 # 模型评估前十均值 - # predict_y['min_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) -1 - # predict_y['max_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) +1 + predict_y['min_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) -1.5 + predict_y['max_price'] = predict_y[allmodelnames[0:10]].mean(axis=1) +1.5 # 模型评估前十最大最小 # allmodelnames 和 predict_y 列 重复的 # allmodelnames = [col for col in allmodelnames if col in predict_y.columns] @@ -523,26 +523,26 @@ def model_losss(sqlitedb,end_time): endtime = end_time endtimeweek = datetime.datetime.strptime(endtime, '%Y-%m-%d') up_week = endtimeweek - datetime.timedelta(days=endtimeweek.weekday() + 14) - up_week_dates = [up_week + datetime.timedelta(days=i) for i in range(14)][4:-2] - up_week_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates] - return up_week_dates - up_week_dates = get_week_date(end_time) + up_week_dates = [up_week + datetime.timedelta(days=i) for i in range(14)] + create_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates[4:-3]] + ds_dates = [date.strftime('%Y-%m-%d') for date in up_week_dates[-7:-2]] + return create_dates,ds_dates + create_dates,ds_dates = get_week_date(end_time) # 计算准确率并保存结果 - def _get_accuracy_rate(df,up_week_dates,endtime): + def _get_accuracy_rate(df,create_dates,ds_dates): df3 = df.copy() - df3 = df3[df3['CREAT_DATE'].isin(up_week_dates)] - df3 = df3[df3['ds'].isin(up_week_dates)] + df3 = df3[df3['CREAT_DATE'].isin(create_dates)] + df3 = df3[df3['ds'].isin(ds_dates)] accuracy_rote = 0 - for i,group in df3.groupby('ds'): - print('权重:',weight_dict[len(group)-1]) - print('准确率:',(group['ACCURACY'].sum()/len(group))*weight_dict[len(group)-1]) + for i,group in df3.groupby('CREAT_DATE'): accuracy_rote += (group['ACCURACY'].sum()/len(group))*weight_dict[len(group)-1] - df3.to_csv(os.path.join(dataset,f'accuracy_{endtime}.csv'),index=False) df4 = pd.DataFrame(columns=['开始日期','结束日期','准确率']) - df4.loc[len(df4)] = {'开始日期':up_week_dates[0],'结束日期':up_week_dates[-1],'准确率':accuracy_rote} + df4.loc[len(df4)] = {'开始日期':ds_dates[0],'结束日期':ds_dates[-1],'准确率':accuracy_rote} df4.to_sql("accuracy_rote", con=sqlitedb.connection, if_exists='append', index=False) - _get_accuracy_rate(df,up_week_dates,end_time) + # return df4 + + _get_accuracy_rate(df,create_dates,ds_dates) def _add_abs_error_rate(): # 计算每个预测值与真实值之间的偏差率