Я могу вычислить Медианную абсолютную ошибку с помощью этой функции:
from pyspark.sql import Window
def compute_Median_Abs_Err(df, expected_col, actual_col):
grp_window = Window.partitionBy('grp')
magic_percentile = F.expr('percentile_approx(abserror, 0.5)')
med_abs_err = df.withColumn("abserror",
f.abs(f.col(actual_col) - f.col(expected_col)
)).groupby('start_month', 'start_dt'
).agg(magic_percentile.alias("med_abs_error")
)
return(med_abs_err)
Что можно рассчитать с помощью этого уравнения:
MEDIAN(abs(predictions - actuals))
Я хотел бы иметь возможность рассчитать среднюю абсолютную ошибку в процентах, рассчитанную по этому уравнению:
MEDIAN( abs(predictions - actuals) / actuals )
Я думал, что у меня это правильно:
from pyspark.sql import Window
def compute_Median_Perc_Err(df, expected_col, actual_col):
grp_window = Window.partitionBy('grp')
magic_percentile = f.expr('percentile_approx(abserror, 0.5)')
med_perc_err = df.withColumn("abserror",
f.abs(f.col(actual_col) - f.col(expected_col)
)).groupby('start_month', 'start_dt'
).agg(magic_percentile.alias("med_abs_error"), f.avg(f.col(actual_col)).alias("mean")
).withColumn("med_perc_error", f.col("med_abs_error") / f.col("mean"))
return(med_perc_err)
Но я понял с этим, я не делю на actuals
, прежде чем взять median
. Я должен сначала поделить на фактические значения, а затем взять медиану этого столбца.
Как мне написать этот фрагмент кода, чтобы сначала разделить на фактические значения, поскольку мне все еще нужно взять .agg(f.avg(f.col("actuals"))
после того, как groupby получит точное значение?