Como lidar com valores atípicos
Parte da seção Estatística para ML do Journey de Machine Learning da Coddy. Lição 27 de 64.
Dez apartamentos usaram cerca de 10 m³ de água cada, mas um vazamento elevou o consumo de um deles para 64. Você pode removê-lo ou limitá-lo à cerca mais próxima:
np.clip(a, low, high) limita um array inteiro:
water = np.array([8, 11, 9, 10, 12, 9, 64, 10, 11, 8])
low, high = 6.0, 14.0 # os limites do IQR
dropped = water[(water >= low) & (water <= high)]
capped = np.clip(water, low, high)
print(len(dropped), len(capped))
print(capped)Isso imprime:
9 10
[ 8. 11. 9. 10. 12. 9. 14. 10. 11. 8.]Um modelo poderia se ajustar demais a esse único valor plano, então decida antes do treinamento. Corrija ou remova erros de digitação; mantenha ou limite extremos reais. Nunca exclua silenciosamente: informe quantos você alterou.
Desafio
MédioUm aplicativo de ciclismo registrou as velocidades médias de 15 viagens em speeds; duas parecem estranhas. O código inicial colocou os limites do IQR em low e high.
- Crie
dropped, com as velocidades dentro dos limites (incluindo ambos), ecapped. - Imprima uma linha para cada método: keep, drop e cap: as viagens, a média e o
.std(), arredondados para 2 casas decimais. - Imprima quantas viagens foram alteradas pelo método cap.
Para as 10 viagens de outro ciclista:
Keep: 10 rides, mean 21.38, std 6.58
Drop: 9 rides, mean 19.2, std 0.77
Cap: 10 rides, mean 19.45, std 1.04
Capping changed 1 of 10 ridesExperimente você mesmo
import numpy as np
# Retorna os limites inferior e superior do IQR de um array
def iqr_fences(a):
q1 = np.percentile(a, 25)
q3 = np.percentile(a, 75)
iqr = q3 - q1
return q1 - 1.5 * iqr, q3 + 1.5 * iqr
speeds = np.array([24.5, 22.8, 26.1, 23.9, 3.1, 25.4, 21.7, 24.2, 27.3, 78.4, 23.1, 25.8, 22.4, 24.9, 26.6])
low, high = iqr_fences(speeds)
# Escreva seu código abaixo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Estatística para ML
1Centro e dispersão
Média e medianaPercentis e quartisVariância e desvio padrãoAmostra ou população?O valor mais frequenteRevisão: tempos de entrega4Amostras e Populações
População e AmostraAs médias amostrais variamA distribuição amostralAmostras maiores, menos ruídoRevisão: pesquisa de opinião em uma cidade7Linhas de tendência
ResíduosAjuste por mínimos quadradosTraçando o ajusteFazendo previsões com uma linhaQuão bom é o ajuste?Revisão: horas de prática10Codificação de Categorias
Categorias como NúmerosCodificação One-HotAgrupamento de Números em FaixasRecapitulação: Anúncios de Carros2Distribuições
Histogramas de densidadeFormatos dos dadosA curva normalA regra 68-95-99,7Escores ZRecapitulando: duração da bateria5Valores atípicos
Diagramas de caixaA regra do IQRA regra do Z-scoreComo lidar com valores atípicosRevisão: falhas nos sensores8Comparando grupos
Gráficos de caixa por grupoDiferença entre médiasPode ser acaso?Valores-pO teste tRevisão: teste A/B11Explorando um conjunto de dados
Um primeiro olharTodos os atributos de uma vezAtributos em relação ao rótuloOs dois melhores atributosRevisão: dados de diabetes3Probabilidade por Simulação
Probabilidade como frequênciaA Lei dos Grandes NúmerosSomas de dadosValor esperadoProbabilidade condicionalRevisão: chances na barraca de dados6Relações
Lendo gráficos de dispersãoCorrelaçãoMatriz de correlaçãoMapas de calor de correlaçãoCorrelação não é causalidadeRevisão: sorvete e sol9Escalonamento de Recursos
Por que escalar os recursosEscalonamento Min-MaxPadronizaçãoStandardScalerRevisão: Parceiros de escaladaPratique por conta própria: Compilador de Python online