在接下来的几年里,我有像这样的pyspark数据帧中的数据。week_start_dt是我开始预测的时候。和start_month是前12个月。
+--------------------+------------------+----------------------+----------------+
| start_month | week_start_dt| predictions| actuals |
+--------------------+------------------+----------------------+----------------+
| 2019-01| 2019-11-11| 12| 11|
| 2018-12| 2019-11-11| 13| 11|
| 2019-08| 2019-11-11| 9| 11|
| 2019-11| 2019-11-11| 12| 11|
| 2019-11| 2019-11-11| 1970| 1440|
| 2019-11| 2019-11-11| 478| 501|
+--------------------+------------------+----------------------+----------------+我想用start_month和week_start_dt上的groupby来计算RMSE。我认为它需要一个用户定义的聚合函数。在熊猫中类似的东西:Python Dataframe: Calculating R^2 and RMSE Using Groupby on One Column
我使用以下代码来获取groupby的实际和预测的汇总计数。
df_startmonth_week = actuals_compare.groupby('start_month', 'week_start_dt').agg(f.sum('predictions'), f.sum('actuals'))为了计算预测值和实际值之间的RMSE,我在聚合步骤中做了哪些更改?我需要一个UDF来做这件事吗?
下面是我在excel中创建的最终目标的一个示例。
| week_start_dt | start_month | RMSE |
|---------------|-------------|------|
| 20-01-2020 | 2019-02 | 2345 |
| 20-01-2020 | 2019-03 | 2343 |
| 20-01-2020 | 2019-04 | 2341 |
| 20-01-2020 | 2019-05 | 2100 |
| 20-01-2020 | 2019-06 | 1234 |发布于 2020-04-14 00:41:00
我看不出problem here有什么不同,所以我调整了解决方案,使其适用于略有不同的变量名:
import pyspark.sql.functions as psf
def compute_RMSE(expected_col, actual_col):
rmse = old_df.withColumn("squarederror",
psf.pow(psf.col(actual_col) - psf.col(expected_col),
psf.lit(2)
))
.groupby('start_month', 'week_start_dt')
.agg(psf.avg(psf.col("squarederror")).alias("mse"))
.withColumn("rmse", psf.sqrt(psf.col("mse")))
return(rmse)
compute_RMSE("predictions", "actuals")如果我漏掉了问题中的细微差别,请告诉我
https://stackoverflow.com/questions/61162907
复制相似问题