[PYTHON] Calculer AUC avec groupBy of PySpark DataFrame (définir la fonction d'agrégation avec pandas_udf)

introduction

Lors du calcul de l'AUC avec PySpark, il peut être facilement calculé en utilisant la classe BinaryClassificationEvaluator. Cependant, en l'état, il n'est pas possible de répondre au besoin de calculer l'AUC pour chaque segment au lieu de l'ensemble des données de test afin de comprendre les différences entre les modèles.

Pour contourner le problème, j'ai défini une fonction d'agrégation qui calcule l'AUC en utilisant pandas_udf et je l'ai calculée avec la méthode ʻagg`.

Exemple d'implémentation

L'échantillon est le suivant.

Après avoir calculé à l'avance l'étiquette de réponse correcte («true») et le score prévu («pred»), une fonction d'agrégation qui calcule l'AUC est définie en référence à celle-ci.

Notez que la fonction d'agrégation définie par pandas_udf dans la méthode ʻaggne peut pas être utilisée avec la fonction d'agrégation fournie par spark. (Si vous essayez de l'utiliser ensemble, vous obtiendrez l'erreurImpossible d'utiliser un mélange de fonction d'agrégation et de groupe de pandas d'agrégat UDF`)

Définition 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)

Méthode de calcul


data.groupBy(key).agg(auc_udf('true', 'pred').alias('auc'))

référence

Recommended Posts

Calculer AUC avec groupBy of PySpark DataFrame (définir la fonction d'agrégation avec pandas_udf)
Définissez votre propre fonction de distance avec k-means de scikit-learn