Visualizar outliers con variables categóricas

| Última modificación: 2 de agosto de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Existe una manera de visualizar outliers que, si bien no es muy utilizada, resulta útil cuando se trabaja con variables categóricas o seudocategóricas. Hay que aclarar que para variables continuas este método no sirve para nada.

Recordemos que los valores atípicos o outliers son valores que se encuentran a una distancia anormal de otros valores de la muestra. Para visualizar outliers podemos utilizar un diagrama de dispersión o un diagrama de caja, estos permiten identificar dónde se encuentran los outliers.

Visualizar outliers

Vamos a a seguir trabajando con un dataset que ya hemos visto en otros artículos; este trata sobre la estimación del precio de viviendas en un sector de Estados Unidos. El conjunto de datos se encuentra alojado en Kaggle. Para cada vivienda se tienen los siguientes atributos:

AtributoDescripción
ididentificador de la vivienda
datefecha
priceprecio
bedroomsnúmero de habitaciones
bathroomsnúmero de baños/aseos
sqtf_livingsuperficie habitable (en pies al cuadrado)
sqft_lotsuperficie de la parcela (en pies al cuadrado)
floorsnúmero de plantas
waterfrontindica si la vivienda tiene acceso a un lago
viewtipo de vista (variable numérica)
conditioncondición de la vivienda (variable numérica)
grademedida de la calidad de la construcción (variable numérica)
sqft_abovesuperficie por encima del suelo (en pies al cuadrado)
sqft_basementsuperficie del sótano (en pies al cuadrado)
yr_builtaño de construcción de la vivienda
yr_renovatedaño de renovación de la vivienda
latlatitud de la parcela
longlongitud de la parcela
sqft_living15superficie habitable promedio de los 15 vecinos más cercanos
sqft_lot15superficie de la parcela promedio de los 15 vecinos más cercanos

La variable bedrooms es categórica, por tanto, trabajaremos con ella:

#Visualizar outliers
house_data ['bedrooms'].value_counts ()

3 9824

4 6882

2 2760

5 1601

6 272

1 199

7 38

8 13

0 13

9 6

10 3

11 1

33 1

Name: bedrooms, dtype: int64

Decimos que en las variables continuas no sirve para nada porque lo que hacemos es utilizar un value_counts, un método que nos devuelve una serie que contiene recuentos de valores únicos (como el resultado anterior). El resultado aparecerá en orden descendente, lo que quiere decir que el primer elemento que aparezca será el que se encuentre con más frecuencia. Por eso en nuestro resultado el 3 es el número que aparece primero, porque es el que tiene mayor número de ocurrencias. El value_count excluye valores NA por defecto; no obstante, podemos modificar esto por medio del parámetro dropna.

También existe una forma de simplificar los resultados que aparecen por medio de bins. Los bins son agrupaciones de datos; de este modo, si le decimos al algoritmo que bins = 2, nos devuelve unos resultados de dos líneas y en esas dos líneas agrupa los conjuntos de datos, digamos, por ejemplo, entre 3 y 7 y entre 7 y 33.

¿Cuáles de estos datos representan una anomalía? Esto es difícil de saber.

La forma de filtrar con Pandas es muy sencilla:

#visualizar outliers
#house_data_2 va a ser el dataset inicial, tal que las habitaciones son menores que 9
house_data_2 = house_data [house_data ['bedrooms'] < 9]

#Visualizar outliers
house_data_2.plot (kind = 'scatter', x = 'bedrooms', y = 'price')
plt.xlabel ('# bedrooms')
plt.ylabel ('pricee ($)')
plt.show ()
Visualizar outliers

Lo que observamos es que, al haber quitado los datos anómalos y al ser bedrooms una variable seudocategórica, vemos el gráfico que se propone como resultado.

La interpretación de este gráfico tiene ciertos problemas, ya que hay cierta tendencia a que, cuantas más habitaciones tenga la casa, más cara será. Esa tendencia se acaba en 5; en 6 hay algunas excepciones, pero 6, 7 y 8 parecen más baratas que 5, 4 e, incluso, que 3.

Ahora lo que faltaría es evaluar el porcentaje de registros eliminados. Esto se haría con la ecuación (registros iniciales – registros tras la eliminación) / registros totales * 100. Veamos:

#Visualizar outliers
print (f 'Porcentaje de registros eliminados: {((house_data.shape [0] - house_data_2.shape [0]) / house_data_shape [0]) * 100} %')

Porcentaje de registros eliminados: 0.050895294498691354%

Este es un buen número, teniendo en cuenta que estamos quitando anomalías.

#Visualizar outliers
house_data_2.shape

(21602, 19)

Ahora que hemos visto cómo visualizar outliers y cómo eliminarlos de los registros de resultados, podemos seguir aprendiendo sobre una de las disciplinas más demandadas de la actualidad: el Big Data. Para ello tenemos el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva en la cual tendrás la oportunidad de aprende todo lo necesario para incursionar en este mundillo. Los mejores profesionales te acompañarán en tu proceso de aprendizaje a nivel teórico y práctico. ¡Anímate y solicita más información ahora!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado