Menu
CoddyTech

O limiar de decisão

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 17 de 58.

predict diz sim quando a probabilidade ultrapassa 0.5, o limiar. Mas deixar passar uma tela com defeito pode custar mais do que dar uma segunda olhada. Diminua o limiar:

Quatorze telas de celular em uma linha, ordenadas pela probabilidade de estarem com defeito: seis quadrados com defeito, oito pontos em bom estado. No limiar 0.5, 4 de 6 defeitos são detectados com 1 falso alarme; em 0.3, os 6 são detectados com 4 falsos alarmes

Um falso alarme é uma tela sinalizada por engano. Escolha seu próprio limite usando uma comparação:

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

Mais baixo, ele detecta mais casos reais e gera mais falsos alarmes; mais alto, ocorre o contrário. As chances nunca mudam, apenas o limite.

Escolha com base no custo de cada erro.

challenge icon

Desafio

Médio

Uma companhia aérea realoca passageiros com probabilidade de perder a conexão antes mesmo de eles pousarem. O código inicial ajusta um modelo usando connections.csv e lê um limiar.

  1. Obtenha as chances de os passageiros de teste perderem a conexão.
  2. Para 0.5 e, em seguida, para o limiar, conte os passageiros realocados, as perdas reais evitadas (de todas as perdas) e as realocações desnecessárias.
  3. Imprima uma linha por limiar.

Para outra companhia aérea e 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

Experimente você mesmo

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

# Uma linha por passageiro: tempo de conexão e atraso do voo de chegada em minutos, troca de terminal (1 ou 0), bagagens despachadas; missed é 1 ou 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())

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online