Cómo construir un punto de referencia para sus modelos

Tengo consultor de ciencias durante los últimos tres años, y he tenido la oportunidad de trabajar en múltiples proyectos en varias industrias. Sin embargo, noté un denominador común entre la mayoría de los clientes con los que trabajé:

Raramente tienen una idea clara del objetivo del proyecto.

Este es uno de los principales obstáculos que enfrentan los datos de los datos, especialmente ahora que Gen AI se está haciendo cargo de cada dominio.

Pero supongamos que después de algunos de ida y vuelta, el objetivo se vuelve claro. Logramos precisar una pregunta específica para responder. Por ejemplo:

Quiero clasificar a mis clientes en dos grupos de acuerdo con su probabilidad de convertirlo: “alta probabilidad de ser agotada” y “baja probabilidad de agitar”

Bueno, ¿ahora qué? ¡Fácil, comencemos a construir algunos modelos!

¡Equivocado!

Si tener un objetivo claro es raro, tener un confiable punto de referencia es aún más raro.

En mi opinión, uno de los pasos más importantes para entregar un proyecto de ciencia de datos es definir y acordar un conjunto de puntos de referencia con el cliente.

En esta publicación de blog, explicaré:

  • Que es un punto de referencia,
  • Por qué es importante tener un punto de referencia,
  • Cómo construiría uno usando un escenario de ejemplo y
  • Algunos inconvenientes potenciales a tener en cuenta

¿Qué es un punto de referencia?

A punto de referencia es una forma estandarizada de evaluar el rendimiento de un modelo. Proporciona un punto de referencia contra el cual se pueden comparar nuevos modelos.

Un punto de referencia necesita dos componentes clave para considerarse completos:

  1. Un conjunto de métricas para evaluar el rendimiento
  2. Un conjunto de modelos simples para usar como líneas de base

El concepto en su núcleo es simple: cada vez que desarrollo un nuevo modelo lo comparo con versiones anteriores y modelos de referencia. Esto asegura que las mejoras sean reales y rastreadas.

Es esencial comprender que esta línea de base no debe ser específica de modelos o conjuntos de datos, sino más bien específicos para el negocio. Debería ser un punto de referencia general para un caso comercial determinado.

Si encuentro un nuevo conjunto de datos, con el mismo objetivo comercial, este punto de referencia debería ser un punto de referencia confiable.


Por qué es importante construir un punto de referencia

Ahora que hemos definido qué es un punto de referencia, sumergamos por qué vale la pena pasar una semana adicional del proyecto en el desarrollo de un punto de referencia fuerte.

  1. Sin un punto de referencia, estás apuntando a la perfección – Si está trabajando sin un punto de referencia claro, cualquier resultado perderá significado. “Mi modelo tiene un MAE de 30,000” ¿Eso es bueno? ¡NO SÉ! Tal vez con un simple medio que obtendrías un MAE de 25,000. Comparando su modelo con un basepuedes medir ambos actuación y mejora.
  2. Mejora la comunicación con los clientes – Los clientes y los equipos comerciales pueden no entender de inmediato el resultado estándar de un modelo. Sin embargo, al involucrarlos con líneas de base simples desde el principio, se hace más fácil demostrar mejoras más adelante. En muchos casos, los puntos de referencia podrían provenir directamente del negocio en diferentes formas o formas.
  3. Ayuda en la selección de modelos – Un punto de referencia da un punto de partida para comparar múltiples modelos de manera justa. Sin él, puede perder el tiempo probando modelos que no valen la pena considerar.
  4. Detección y monitoreo de la deriva del modelo – Los modelos pueden degradar con el tiempo. Al tener un punto de referencia, es posible que pueda interceptar Drifts temprano Al comparar nuevos resultados de modelo con puntos de referencia y líneas de base anteriores.
  5. Consistencia entre diferentes conjuntos de datos – Los conjuntos de datos evolucionan. Al tener un conjunto fijo de métricas y modelos, se asegura de que las comparaciones de rendimiento sigan siendo válidas con el tiempo.

Con un claro punto de referencia, cada paso en el desarrollo del modelo proporcionará Comentarios inmediatoshaciendo que todo el proceso sea más intencional y basado en datos.


Cómo construiría un punto de referencia

Espero haberte convencido de la importancia de tener un punto de referencia. Ahora, realmente construamos uno.

Comencemos desde la pregunta comercial que presentamos al comienzo de esta publicación de blog:

Quiero clasificar a mis clientes en dos grupos de acuerdo con su probabilidad de convertirlo: “alta probabilidad de ser agotada” y “baja probabilidad de agitar”

Por simplicidad, asumiré Sin restricciones comerciales adicionales, Pero en escenarios del mundo real, a menudo existen limitaciones.

Para este ejemplo, estoy usando este conjunto de datos (CC0: dominio público). Los datos contienen algunos atributos de la base de clientes de una empresa (por ejemplo, edad, sexo, número de productos, …) junto con su estado de rotación.

Ahora que tenemos algo en lo que trabajar, construamos el punto de referencia:

1. Definición de las métricas

Estamos tratando con un caso de uso de giro, en particular, este es un problema de clasificación binaria. Por lo tanto, las métricas principales que podríamos usar son:

  • Precisión – Porcentaje de agotadores predichos correctamente entre todos los Resistentes pronosticados
  • Recordar – Porcentaje de agotadores reales identificados correctamente
  • Puntuación F1 – Equilibra la precisión y el recuerdo
  • Verdaderos positivos, falsos positivos, verdaderos negativos negativos y falsos

Estas son algunas de las métricas “simples” que podrían usarse para evaluar la salida de un modelo.

Sin embargono es una lista exhaustiva, las métricas estándar no siempre son suficientes. En muchos casos de uso, puede ser útil para construir métricas personalizadas.

Supongamos que en nuestro caso de negocios el A los clientes etiquetados como “alta probabilidad de rotación” se les ofrece un descuento. Esto crea:

  • A costo ($ 250) al ofrecer el descuento a un cliente que no se quita
  • A ganancia ($ 1000) al retener a un cliente agitado

Siguiendo esta definición, podemos construir una métrica personalizada que sea crucial en nuestro escenario:

# Defining the business case-specific reference metric
def financial_gain(y_true, y_pred):  
    loss_from_fp = np.sum(np.logical_and(y_pred == 1, y_true == 0)) * 250  
    gain_from_tp = np.sum(np.logical_and(y_pred == 1, y_true == 1)) * 1000  
    return gain_from_tp - loss_from_fp

Cuando estas construyendo métricas impulsadas por negocios Estos suelen ser los más relevantes. Dichas métricas podrían tomar cualquier forma o forma: objetivos financieros, requisitos mínimos, porcentaje de cobertura y más.

2. Definición de los puntos de referencia

Ahora que hemos definido nuestras métricas, podemos definir un conjunto de modelos de referencia para ser utilizados como referencia.

En esta fase, debe definir una lista de modelo de implicación simple en su configuración más simple posible. No hay razón en este estado para pasar tiempo y recursos en la optimización de estos modelos, mi mentalidad es:

Si tuviera 15 minutos, ¿cómo implementaría este modelo?

En fases posteriores del modelo, puede agregar modelos de referencia de modo a medida que avanza el proyecto.

En este caso, usaré los siguientes modelos:

  • Modelo aleatorio – Asigna etiquetas al azar
  • Modelo mayoritario – Siempre predice la clase más frecuente
  • XGB simple
  • Simple knn
import numpy as np  
import xgboost as xgb  
from sklearn.neighbors import KNeighborsClassifier  
  
class BinaryMean():  
    @staticmethod  
    def run_benchmark(df_train, df_test):  
        np.random.seed(21)  
        return np.random.choice(a=[1, 0], size=len(df_test), p=[df_train['y'].mean(), 1 - df_train['y'].mean()])  
      
class SimpleXbg():  
    @staticmethod  
    def run_benchmark(df_train, df_test):  
        model = xgb.XGBClassifier()  
        model.fit(df_train.select_dtypes(include=np.number).drop(columns='y'), df_train['y'])  
        return model.predict(df_test.select_dtypes(include=np.number).drop(columns='y'))  
      
class MajorityClass():  
    @staticmethod  
    def run_benchmark(df_train, df_test):  
        majority_class = df_train['y'].mode()[0]  
        return np.full(len(df_test), majority_class)  
  
class SimpleKNN():  
    @staticmethod  
    def run_benchmark(df_train, df_test):  
        model = KNeighborsClassifier()  
        model.fit(df_train.select_dtypes(include=np.number).drop(columns='y'), df_train['y'])  
        return model.predict(df_test.select_dtypes(include=np.number).drop(columns='y'))

Nuevamente, como en el caso de las métricas, podemos construir puntos de referencia personalizados.

Supongamos que en nuestro caso de negocios el El equipo de marketing contacta a cada cliente que:

  • Más de 50 años y
  • Eso es ya no activo

Siguiendo esta regla podemos construir este modelo:

# Defining the business case-specific benchmark
class BusinessBenchmark():  
    @staticmethod  
    def run_benchmark(df_train, df_test):  
        df = df_test.copy()  
        df.loc[:,'y_hat'] = 0  
        df.loc[(df['IsActiveMember'] == 0) & (df['Age'] >= 50), 'y_hat'] = 1  
        return df['y_hat']

Ejecutando el punto de referencia

Para ejecutar el punto de referencia, usaré la siguiente clase. El punto de entrada es el método compare_with_benchmark() Eso, dada una predicción, ejecuta todos los modelos y calcula todas las métricas.

import numpy as np  
  
class ChurnBinaryBenchmark():  
    def __init__(        
	    self,  
        metrics = [],  
        benchmark_models = [],        
        ):  
        self.metrics = metrics  
        self.benchmark_models = benchmark_models  
  
    def compare_pred_with_benchmark(        
	    self,  
        df_train,  
        df_test,  
        my_predictions,    
        ):  
       
        output_metrics = {  
            'Prediction': self._calculate_metrics(df_test['y'], my_predictions)  
        }  
        dct_benchmarks = {}  
  
        for model in self.benchmark_models:  
            dct_benchmarks[model.__name__] = model.run_benchmark(df_train = df_train, df_test = df_test)  
            output_metrics[f'Benchmark - {model.__name__}'] = self._calculate_metrics(df_test['y'], dct_benchmarks[model.__name__])  
  
        return output_metrics  
      
    def _calculate_metrics(self, y_true, y_pred):  
        return {getattr(func, '__name__', 'Unknown') : func(y_true = y_true, y_pred = y_pred) for func in self.metrics}

Ahora todo lo que necesitamos es una predicción. Para este ejemplo, hice una ingeniería de características rápidas y un poco de ajuste de hiperparámetro.

El último paso es solo ejecutar el punto de referencia:

binary_benchmark = ChurnBinaryBenchmark(  
    metrics=[f1_score, precision_score, recall_score, tp, tn, fp, fn, financial_gain],  
    benchmark_models=[BinaryMean, SimpleXbg, MajorityClass, SimpleKNN, BusinessBenchmark]  
    )  
  
res = binary_benchmark.compare_pred_with_benchmark(  
    df_train=df_train,  
    df_test=df_test,  
    my_predictions=preds,  
)  
  
pd.DataFrame(res)
Comparación de métricas de referencia | Imagen del autor

Esto genera un tabla de comparación de todos los modelos en todas las métricas. Usando esta tabla, es posible sacar conclusiones concretas sobre las predicciones del modelo y tomar decisiones informadas sobre los siguientes pasos del proceso.


Algunos inconvenientes

Como hemos visto, hay muchas razones por las que es útil tener un punto de referencia. Sin embargo, aunque los puntos de referencia son increíblemente útiles, hay algunos trampas Para tener en cuenta:

  1. Punto de referencia no informativo – Cuando las métricas o modelos están mal definidos, el impacto marginal de tener un punto de referencia disminuye. Siempre defina líneas de base significativas.
  2. Interpretación errónea por parte de las partes interesadas – La comunicación con el cliente es esencial, es importante establecer claramente lo que las métricas están midiendo. El mejor modelo podría no ser el mejor en todas las métricas definidas.
  3. Sobrecargado del punto de referencia – Puede terminar tratando de crear características que sean demasiado específicas, que podrían superar el punto de referencia, pero no generalizar bien en la predicción. No se concentre en superar el punto de referencia, sino en crear la mejor solución posible para el problema.
  4. Cambio de objetivo – Los objetivos definidos pueden cambiar, debido a la falta de comunicación o los cambios en los planes. Mantenga su punto de referencia flexible para que pueda adaptarse cuando sea necesario.

Pensamientos finales

Los puntos de referencia proporcionan claridad, aseguran que las mejoras sean medibles y creen un punto de referencia compartido entre científicos de datos y clientes. Ayudan a evitar la trampa de asumir que un modelo funciona bien sin pruebas y garantiza que cada iteración traiga un valor real.

También actúan como un herramienta de comunicaciónhaciendo que sea más fácil explicar el progreso a los clientes. En lugar de solo presentar números, puede mostrar comparaciones claras que resaltan mejoras.

Aquí puede encontrar un cuaderno con una implementación completa de esta publicación de blog..