Menu
CoddyTech

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:

O consumo de água de 10 apartamentos em três linhas. Manter: nove pontos próximos de 10 e o vazamento em 64, média 15.2. Remover: o vazamento retirado, média 9.8. Limitar: o vazamento reduzido até a cerca em 14, média 10.2

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.

challenge icon

Desafio

Médio

Um 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.

  1. Crie dropped, com as velocidades dentro dos limites (incluindo ambos), e capped.
  2. Imprima uma linha para cada método: keep, drop e cap: as viagens, a média e o .std(), arredondados para 2 casas decimais.
  3. 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 rides

Experimente 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
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 Estatística para ML

Pratique por conta própria: Compilador de Python online