From 52ca34606c73305fc770499514c3cab6cae92c0f Mon Sep 17 00:00:00 2001 From: peterdudfield Date: Thu, 14 Dec 2023 21:43:58 +0000 Subject: [PATCH] fix metrics --- quartz_solar_forecast/eval/metrics.py | 28 ++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/quartz_solar_forecast/eval/metrics.py b/quartz_solar_forecast/eval/metrics.py index 7a2742ea..b71766f1 100644 --- a/quartz_solar_forecast/eval/metrics.py +++ b/quartz_solar_forecast/eval/metrics.py @@ -1,4 +1,8 @@ -def metrics(results_df): +import numpy as np +import pandas as pd + + +def metrics(results_df: pd.DataFrame): """ Calculate and print metrics: MAE @@ -11,7 +15,7 @@ def metrics(results_df): """ - mae = (results_df["forecast_power"] - results_df['generation_power']).abs().mean().round(4) + mae = np.round((results_df["forecast_power"] - results_df["generation_power"]).abs().mean(), 4) print(f"MAE: {mae}") # calculate metrics over the different horizons hours @@ -20,12 +24,22 @@ def metrics(results_df): for horizon_hour in horizon_hours: # filter results_df to only include the horizon_hour results_df_horizon = results_df[results_df["horizon_hour"] == horizon_hour] - mae = (results_df_horizon["forecast_power"] - results_df_horizon['generation_power']).abs().mean().round(3) - sem = ((results_df_horizon["forecast_power"] - results_df_horizon['generation_power']).abs().std() / len(results_df_horizon)**0.5).round(3) + mae = np.round( + (results_df_horizon["forecast_power"] - results_df_horizon["generation_power"]) + .abs() + .mean(), + 3, + ) + sem = np.round( + ( + (results_df_horizon["forecast_power"] - results_df_horizon["generation_power"]) + .abs() + .std() + / len(results_df_horizon) ** 0.5 + ), + 3, + ) print(f"MAE for horizon {horizon_hour}: {mae} +- {1.96*sem}") # TODO add more metrics using ocf_ml_metrics - - -