PySpark DataFrameのgroupByでAUCを算出する(pandas_udfで集計関数を定義する)
はじめに
PySparkでAUCを算出する際、BinaryClassificationEvaluator
クラスを利用すれば簡単に求めることが出来る。
ただし、そのままではモデル間の違いを把握するために、テストデータ全体ではなく、セグメントごとにAUCを算出したいというニーズに対応することが出来ない。
この対処法として、pandas_udf
を使ってAUCを算出する集計関数を定義し、agg
メソッドで算出することを行った。
実装例
サンプルは以下の通り。
事前に正解ラベル(true
)と予測スコア(pred
)を算出の上、それを参照してAUCを算出する集計関数を定義している。
agg
メソッドの中で、pandas_udf
で定義した集計関数は、sparkで用意された集計関数と併用することはできないので注意。
(併用しようとすると、Cannot use a mixture of aggregate function and group aggregate pandas UDF
というエラーが出る)
UDF定義
from sklearn.metrics import roc_auc_score
from pyspark.sql.types import DoubleType
from pyspark.sql.functions import pandas_udf, PandasUDFType
@pandas_udf(DoubleType(), functionType=PandasUDFType.GROUPED_AGG)
def auc_udf(true, pred):
return roc_auc_score(true, pred)
算出方法
data.groupBy(key).agg(auc_udf('true', 'pred').alias('auc'))
参考
Author And Source
この問題について(PySpark DataFrameのgroupByでAUCを算出する(pandas_udfで集計関数を定義する)), 我々は、より多くの情報をここで見つけました https://qiita.com/calderarie/items/fd299b5e6a402ffa0bec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .