Unidad 5 / 11

Ingeniería de funciones: generar variantes, codificar, escalar y evitar fugas

Ganancias:

  • Capacidad para producir características derivadas significativas con conocimiento del dominio y codificar categorías categóricas con métodos apropiados (one-hot, label, target)
  • Capacidad para escalar variables numéricas según el tipo de modelo (estandarización, normalización) y evitar escalamientos innecesarios o incompletos.
  • Capacidad para evitar la fuga de funciones aprendiendo todas las transformaciones después de la división entre entrenamiento y prueba y solo a partir del entrenamiento.

Hay un viejo dicho sobre el aprendizaje automático: "El aprendizaje automático aplicado es esencialmente ingeniería de funciones". Porque el éxito de un modelo a menudo proviene de las entradas que se le dan al modelo, en lugar del algoritmo que se elige. La ingeniería de características es el arte de producir señales significativas a partir de datos sin procesar de los que el modelo puede aprender. La inteligencia artificial es una rica fuente de ideas en esta etapa: cuando se pregunta "qué características se pueden producir a partir de estos datos", se enumeran docenas de sugerencias. Pero algunas de estas sugerencias pueden ser valiosas, otras pueden ser inútiles y otras pueden ser peligrosas (fugas). Es tu trabajo solucionarlo.

Por qué la ingeniería de funciones

Los datos brutos rara vez llegan al modelo en su mejor forma. Si bien la columna "fecha de nacimiento" por sí sola no tiene sentido, el valor de "edad" generado a partir de ella es una señal fuerte. Puede extraer atributos como "día de la semana", "día/noche", "es feriado" de la "marca de tiempo del pedido". Puede combinar dos columnas para producir una relación ("relación deuda/ingresos"). Aquí, la ingeniería de características traduce el conocimiento del dominio en señales matemáticas; Y precisamente por eso es la etapa que requiere mayor inteligencia humana.

Convertir variables categóricas a números: codificación

Los modelos generalmente funcionan con números, no con texto. La conversión de variables categóricas (como ciudad, color, tipo de producto) en números se denomina codificación. Tres métodos comunes:

Codificación one-hot: abre una columna separada con un valor de 0/1 para cada categoría. Para "ciudad", se forman columnas de Estambul, Ankara, Izmir; Si un cliente es de Estambul, solo esa columna será 1. Ideal cuando el número de categorías es pequeño; Si hay demasiadas categorías, se producen cientos de columnas (esto se denomina "explosión de tamaño").

Codificación de etiquetas: proporciona un número a cada categoría (Estambul=0, Ankara=1). Es simple, pero accidentalmente puede enseñarle al modelo una secuencia (como Ankara > Estambul); por lo que se utiliza con precaución en categorías desordenadas.

Codificación de destino: reemplaza cada categoría con el promedio de la variable de destino en esa categoría. Es una fuente de fuga muy poderosa, pero la más peligrosa: si se tiene en cuenta el objetivo de los datos de prueba, el modelo ve el futuro. Debe calcularse únicamente a partir de datos de entrenamiento y con cuidado (dentro de la validación cruzada).

Escalado: los números grandes no abruman al modelo

Algunos modelos (los basados en distancia, modelos lineales, redes neuronales) son sensibles a la escala de las variables. Si los "ingresos" (0-500.000) y la "edad" (0-100) siguen el mismo patrón, los ingresos pueden dominar simplemente porque son mayores. La escala soluciona este problema. Dos métodos comunes: estandarización (convierte cada valor a "cuántas desviaciones estándar se alejan de la media") y normalización (normalización mínima-máxima: comprime los valores en el rango 0-1). Los modelos basados ​​en árboles (árboles de decisión, bosque aleatorio) no son sensibles a la escala, no requieren escalamiento.

Precaución: Los parámetros de escala y codificación (media, desviación estándar, mapeo de categoría-media) solo deben calcularse a partir de los datos de entrenamiento, luego se debe aplicar lo mismo a los datos de prueba. Incluir datos de prueba es una fuga y hace que su modelo se vea mejor de lo que realmente es.

El corazón de las fugas en la ingeniería de funciones

La generación de funciones es donde se origina con mayor frecuencia la fuga de datos. Dos errores típicos: Pérdida de tiempo: producir una función que incluya información futura (incluidos los días posteriores al día previsto al calcular el “promedio de los últimos 30 días”). Fuga de estadísticas: cálculo de una característica (promedio de escala, valor de codificación objetivo) a partir de todos los datos antes de la división entre entrenamiento y prueba. Regla: aprenda cada transformación después de realizar la división de entrenamiento/prueba primero y solo a partir de los datos de entrenamiento. La forma más segura de hacer esto con regularidad es utilizar una canalización, una estructura que recopila todas las transformaciones en una sola cadena y las aplica después de la división.

Método

para que

Riesgo de fuga

nota

Codificación one-hot

Variable con pocas categorías.

bajo

Explota el tamaño en múltiples categorías.

Codificación de etiquetas

categoría ordenada

bajo

Fuera de orden enseña el orden incorrecto

codificación de destino

Señal fuerte y multicategoría

muy alto

Sólo de educación, en CV

estandarización

Modelos lineales/distanciadores

medio

El parámetro depende sólo de la educación.

Función de ventana de tiempo

serie de tiempo

alto

Añade el futuro

tres mini casos

Caso 1: Propiedad valiosa. Un equipo de crédito generó la función "relación deuda-ingresos" a partir de las columnas brutas de "ingresos mensuales" y "pagos mensuales de deuda". Esta única característica derivada aumentó la precisión del modelo del 71% al 79%; porque era la tasa, no el ingreso absoluto, lo que realmente determinaba el riesgo. Lección: los ratios generados por el conocimiento del dominio son señales fuertes.

Caso 2: fuga de codificación de destino. Un equipo convirtió el "código postal" en un número con la codificación objetivo (la tasa de abandono promedio en esa área), pero lo hizo a partir de todos los datos antes de dividirlos. El modelo dio un 94% en el conjunto de prueba, cayendo al 68% en producción. 6 semanas de esfuerzo en vano. Lección: la codificación de objetivos se realiza con cuidado, solo durante el entrenamiento.

Caso 3: Aumento del olvido. Un analista introdujo los ingresos (0-400.000) y la edad del cliente (18-75) en un modelo basado en la distancia sin escalar. El modelo analizó casi exclusivamente los ingresos, aplastando el efecto de la edad. Cuando se agregó la escala, la segmentación se volvió significativa. Lección: el escalado no se descuida en los modelos lineales/a distancia.

Cuatro plantillas copiables

1) Generación de ideas de funciones (la eliminación depende de usted):

Su función: asistente de ingeniería de funciones. Mis columnas df: fecha_nacimiento, hora_pedido (marca de tiempo), tl_ingresos, tl_deuda, ciudad, categoría_producto. Objetivo: "¿se reembolsará el préstamo" (0/1). Sugiera 15 funciones que se pueden generar a partir de estas columnas; especifique el riesgo de fuga (bajo/medio/alto) para cada uno. Marque claramente aquellos que contengan información futura.

2) Codificación segura (post-split):

Escriba código que codifique one-hot "ciudad" y "categoría_producto". IMPORTANTE: ajuste la codificación solo a los datos de entrenamiento, luego transforme los datos de prueba (con sklearn OneHotEncoder). Explique cómo maneja la categoría invisible (handle_unknown) en educación.

3) Conversión sin fugas con Pipeline:

Configure sklearn Pipeline: aplique StandardScaler a columnas numéricas, OneHotEncoder a columnas categóricas, agregue un clasificador al final. Asegúrese de que todas las transformaciones se aprendan DESPUÉS de la división entrenamiento/prueba y solo durante el entrenamiento. Explique el código y por qué no tiene fugas.

4) Función de ventana de tiempo (control de fugas):

Genera el atributo "número de pedidos en los últimos 30 días" para cada cliente, pero NUNCA incluyas datos posteriores al día previsto. Explique línea por línea que el código no mira hacia el futuro. Proporcionaré la columna de fecha de referencia.

Aviso débil / Aviso fuerte

Aviso débil:

Agregue buenas propiedades a estos datos.

“Bueno” no está definido, el objetivo no está claro y no hay control de fugas. La IA genera características aleatorias, quizás con fugas.

Potente mensaje:

Su función: ingeniero de funciones. Objetivo: "abandono en 30 días" (0/1), fecha de referencia estimada: save_date. Hay un historial de transacciones en df.Tarea: Genere 8 funciones, responda la pregunta "¿Tengo esta información en el momento de la predicción" para CADA UNA? Agregar la fecha después de la fecha de referencia en las funciones de la ventana de tiempo. Escriba el código de forma compatible con la canalización para ejecutarlo después de la sección de entrenamiento/prueba.

Aquí se definen desde el principio el objetivo, el tiempo de referencia y el control de fugas.

Errores comunes

  • Aprender la transformación de todos los datos antes de la división. Si el parámetro de escala/codificación ve los datos de la prueba, se produce una fuga.
  • Uso descuidado de la codificación de objetivos. Es el método más poderoso pero con más fugas; solo desde el entrenamiento, en validación cruzada.
  • Agregar el futuro con una función de ventana de tiempo. Si el cálculo de los "últimos 30 días" se ingresa después del día de pronóstico, el modelo ve el futuro.
  • Escalado innecesario en el modelo de árbol y escalado incompleto en el modelo lineal. Las decisiones de escala se toman según el tipo de modelo.
  • Agregando todas las sugerencias de funciones de AI sin lugar a dudas. Las sugerencias pueden incluir funciones inútiles y con fugas.
Consejo: Escribe una sola pregunta por cada característica que generes: “¿Puedo calcular este valor con la información que tengo en el momento de hacer la predicción?” Si la respuesta no es un "sí" claro, no utilice la función. Esta única disciplina elimina la mayoría de las filtraciones relacionadas con funciones.

En resumen

La ingeniería de características es el arte de generar señales significativas a partir de datos sin procesar y, a menudo, determina el éxito del modelo más que el algoritmo. Las herramientas básicas son codificar categóricos (one-hot, etiqueta, objetivo), escalar números (estandarización, normalización) y producir características derivadas con conocimiento del dominio. Pero esta fase también es el centro de la filtración: todas las transformaciones deben aprenderse después de la división entre entrenamiento y prueba y solo a partir de los datos de entrenamiento. La IA genera muchas ideas; Es el juicio humano el que distingue lo valioso de lo peligroso.

Tarea de aplicación

Elija una variable objetivo y diseñe al menos cinco características derivadas de las columnas que tiene. Para cada uno de ellos, responda por escrito a la pregunta "¿estoy disponible en el momento de la predicción" y elimine al menos uno como "alto riesgo de fuga". Luego codifique las funciones seguras en una canalización que se implementará después de la partición.

lista de verificación

  • [] ¿Apliqué todas las transformaciones después de la división tren/prueba?
  • [] ¿Solo aprendí parámetros de escalado/codificación durante el entrenamiento?
  • [] ¿He respondido a la pregunta "¿lo tengo en el momento de la predicción" para cada característica?
  • [] ¿He tenido especial cuidado con los métodos de alto riesgo, como la codificación de objetivos?
  • [] ¿He decidido escalar adecuadamente para el tipo de modelo (árbol/lineal)?