Menu
CoddyTech

El umbral de decisión

Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 17 de 58.

predict dice que sí cuando la probabilidad supera 0.5, el umbral. Pero pasar por alto una pantalla defectuosa puede costar más que echarle un segundo vistazo. Baja el umbral:

Catorce pantallas de teléfono en una línea según su probabilidad de estar defectuosas: seis cuadrados defectuosos, ocho puntos en buen estado. Con un umbral de 0.5, se detectan 4 de los 6 defectos con 1 falsa alarma; con 0.3, los 6 con 4 falsas alarmas

Una falsa alarma es una pantalla correcta marcada. Elige tu propio umbral con una comparación:

proba = model.predict_proba(X_test)[:, 1]
flag = proba >= 0.3  # True: revisar esta pantalla

Más bajo, detecta más casos reales y genera más falsas alarmas; más alto, lo contrario. Las probabilidades nunca cambian, solo el umbral.

Elígelo según lo que cueste cada error.

challenge icon

Desafío

Intermedio

Una aerolínea vuelve a reservar a los pasajeros que probablemente perderán su conexión antes incluso de que aterricen. El código inicial ajusta un modelo con connections.csv y lee un umbral.

  1. Obtén las probabilidades de que los pasajeros de prueba pierdan su conexión.
  2. Para 0.5 y después para el umbral, cuenta los pasajeros a los que se les vuelve a reservar, las pérdidas reales de conexión detectadas (del total de pérdidas) y las reservas innecesarias.
  3. Imprime una línea por umbral.

Para otra aerolínea y 0.25:

Threshold 0.5: 9 rebooked, 7 of 15 misses caught, 2 needless rebookings
Threshold 0.25: 21 rebooked, 13 of 15 misses caught, 8 needless rebookings

Pruébalo tú mismo

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Una fila por pasajero: tiempo de conexión y retraso del vuelo entrante en minutos, cambio de terminal (1 o 0), equipaje facturado; missed es 1 o 0
trips = pd.read_csv("connections.csv")
features = ["layover_min", "delay_min", "terminal_change", "checked_bags"]
X_train, X_test, y_train, y_test = train_test_split(trips[features], trips["missed"], test_size=0.25, random_state=0)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
threshold = float(input())

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online