[PYTHON] Berechnen Sie die AUC mit groupBy von PySpark DataFrame (definieren Sie die Aggregatfunktion mit pandas_udf).

Einführung

Bei der Berechnung der AUC mit PySpark kann diese einfach mithilfe der Klasse "BinaryClassificationEvaluator" berechnet werden. Es ist jedoch nicht möglich, die Notwendigkeit zu erfüllen, die AUC für jedes Segment anstelle der gesamten Testdaten zu berechnen, um die Unterschiede zwischen den Modellen zu verstehen.

Als Problemumgehung habe ich eine Aggregatfunktion definiert, die die AUC mit "pandas_udf" berechnet und mit der "agg" -Methode berechnet.

Implementierungsbeispiel

Das Beispiel ist wie folgt.

Nach der Berechnung des richtigen Antwortetiketts ("true") und der vorhergesagten Punktzahl ("pred") im Voraus wird eine Aggregatfunktion, die die AUC berechnet, unter Bezugnahme darauf definiert.

Beachten Sie, dass die durch "pandas_udf" in der "agg" -Methode definierte Aggregatfunktion nicht zusammen mit der durch spark bereitgestellten Aggregatfunktion verwendet werden kann. (Wenn Sie versuchen, es zusammen zu verwenden, wird der Fehler "Kann keine Mischung aus Aggregatfunktion und Gruppenaggregat-Pandas UDF verwenden" angezeigt.)

UDF-Definition


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)

Rechenmethode


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

Referenz

Recommended Posts

Berechnen Sie die AUC mit groupBy von PySpark DataFrame (definieren Sie die Aggregatfunktion mit pandas_udf).
Definieren Sie Ihre eigene Distanzfunktion mit k-Mitteln des Scikit-Lernens