Puede haber muchas razones para la presencia de valores atípicos en los datos. A veces los valores atípicos pueden ser genuinos, mientras que en otros casos pueden existir debido a errores de introducción de datos. Es importante comprender las razones de los valores atípicos antes de limpiarlos.
Comenzaremos el proceso de búsqueda de valores atípicos ejecutando las estadísticas resumidas de las variables. Esto se hace utilizando la función describe() a continuación, que proporciona un resumen estadístico de todas las variables cuantitativas.
1df.describe()
pitón
Salida:
12345678910| | Ingresos | Cantidad de préstamo | Plazo_meses | Puntuación de crédito | estado de aprobación | Edad ||||----------------------------------------------------------------------------- |------------------------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 600. 000000 | 600.000000 | 600.00000 | 600.000000 | 600.000000 | 600.000000 | media | 7210.720000 | 161.571667 | 367.10000 | 0.788333 | 0.686667 | 51.766667 | std | 8224.445086 | 93.467598 | 63.40892 | 0.408831 | 0. 464236 | 21.240704 | min | 200.000000 | 10.000000 | 36.00000 | 0.000000 | 0.000000 | 0.000000 | 25% | 3832.500000 | 111.000000 | 384.00000 | 1.000000 | 0.000000 | 36.000000 | 50% | 5075.000000 | 140.000000 | 384. 00000 | 1.000000 | 1.000000 | 51.000000 | 75% | 7641.500000 | 180.500000 | 384.00000 | 1.000000 | 1.000000 | 64.000000 | max | 108000.000000 | 778.000000 | 504.00000 | 1.000000 | 1.000000 | 200.000000 |
Mirando la variable «Edad», es fácil detectar valores atípicos resultantes de datos incorrectos. Las edades mínima y máxima son 0 y 200, respectivamente. Estos son incorrectos, y los trataremos más adelante en la guía. Estos valores atípicos fueron fáciles de detectar, pero no siempre será así. En otros casos, se deben utilizar técnicas matemáticas y de visualización. Estas técnicas se discuten en las siguientes secciones.
Identificación de valores atípicos con rango intercuartílico (IQR)
El rango intercuartílico (IQR) es una medida de la dispersión estadística y se calcula como la diferencia entre los percentiles 75 y 25. Se representa por la fórmula IQR = Q3 – Q1 . Las siguientes líneas de código calculan e imprimen el rango intercuartil para cada una de las variables del conjunto de datos.
1234Q1 = df.quantile(0.25)Q3 = df.quantile(0.75)IQR = Q3 - Q1print(IQR)
pitón
Salida:
1234567 Ingresos 3809.0 Monto_de_préstamo 69.5 Plazo_meses 0.0 Puntaje_de_crédito 0.0 estado_de_aprobación 1.0 Edad 28.0 dtype: float64
La salida anterior imprime las puntuaciones del IQR, que pueden ser utilizadas para detectar valores atípicos. El código de abajo genera una salida con los valores «Verdadero» y «Falso». Los puntos donde los valores son $0027Verdaderos$0027 representan la presencia de los valores atípicos.
1print(df <(Q1 -1.5* IQR))|(df >(Q3 +1.5* IQR))
pitón
Salida:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 Ingresos Monto del préstamo Plazo_meses Puntuación del crédito approval_status Edad 0 Falso Falso Falso Falso 1 Falso Falso Verdadero Falso Falso 2 Falso Falso Falso Falso 3 Falso Falso Falso Falso Falso 4 Falso Falso Falso Falso 5 Falso Falso Falso Falso 6 Falso Falso Falso Falso 7 Falso Falso Falso Falso 8 Falso Falso Falso Falso 9 Falso Falso Falso Falso Falso 10 Falso Falso Falso Falso 11 Falso Falso Falso Falso Falso 12 Falso Falso Verdadero Verdadero Falso 13 Falso Falso 13 Falso Falso 14 Falso Falso Falso 15 Falso Falso Falso Verdadero Falso 16 Falso Falso Falso 17 Falso Falso Falso 18 Falso Falso Falso Falso 19 Falso Falso Falso Verdadero Falso 20 Falso Falso Falso Falso 21 Falso Falso Falso Falso Falso 22 Falso Falso Verdadero Falso Falso 23 Falso Falso Falso Falso 24 Falso Falso Falso Falso 25 Falso Falso Falso Falso 26 Falso Falso Falso Falso 27 Falso Falso Verdadero Falso Falso 28 Falso Falso Falso Falso 29 Falso Falso Falso Falso Falso . . ... ... ... ... ... ... 570 Falso Falso Falso Falso 571 Falso Falso Falso Falso 572 Falso Falso Falso Falso 573 Falso Falso Falso Verdadero Falso Falso 574 Falso Falso Falso 575 Falso Falso Verdadero Falso 576 Falso Falso Falso Falso 577 Falso Falso Falso Falso Falso 578 Falso Falso Falso Falso 579 Falso Falso Falso 580 Falso Falso Falso 581 Falso Falso Verdadero Falso 582 Falso Falso Verdadero Falso 583 Falso Falso Falso 584 Falso Falso Verdadero Falso 585 Falso Falso Falso Falso Falso 586 Falso Falso Falso Falso 587 Falso Falso Falso Falso 588 Falso Falso Falso 589 Falso Falso Verdadero Falso 590 Falso Falso Falso Falso 591 Falso Falso Falso Falso 592 Falso Falso Verdadero Falso Falso 593 Falso Falso Falso Falso Falso 594 Falso Falso Falso Falso 595 Falso Falso Falso Falso 596 Falso Falso Falso Falso 597 Falso Falso Falso 598 Falso Falso Falso Verdadero Falso 599 Falso Falso Falso [600 filas x 6 columnas]
Identificar los valores atípicos con asimetría
Varios algoritmos de aprendizaje de máquinas suponen que los datos siguen una distribución normal (o gaussiana). Esto es fácil de comprobar con el valor de asimetría , que explica la medida en que los datos se distribuyen normalmente. Lo ideal sería que el valor de la asimetría estuviera entre -1 y +1, y cualquier desviación importante de este rango indica la presencia de valores extremos.
La primera línea de código de abajo imprime el valor de asimetría de la variable $0027Ingresos$0027, mientras que la segunda línea imprime las estadísticas de resumen.
12print(df[$0027Income$0027].skew())df[$0027Income$0027].describe()
pitón
Salida:
1234567891011 6.499 cuenta 600.000000 media 7210.720000 std 8224.445086 min 200.000000 25% 3832.500000 50% 5075.000000 75% 7641.500000 max 108000.000000 Nombre: Ingreso, tipo: float64
El valor de asimetría de 6,5 muestra que la variable $0027Ingresos$0027 tiene una distribución sesgada hacia la derecha, lo que indica la presencia de valores extremadamente altos. El valor máximo de $0027Ingresos$0027 de 108.000 dólares prueba este punto.
Identificar los valores atípicos con la visualización
En la sección anterior, utilizamos métodos cuantitativos para la identificación de valores atípicos. Esto también puede lograrse con la visualización. A continuación se examinan algunos de los gráficos comunes utilizados para la detección de valores atípicos.
1. Box Plot
La gráfica de caja es una forma estandarizada de mostrar la distribución de los datos basada en el resumen de cinco números (mínimo, primer cuartil (Q1), mediana, tercer cuartil (Q3) y máximo). Se utiliza a menudo para identificar la distribución de los datos y detectar los valores atípicos. La línea de código de abajo traza el gráfico de caja de la variable numérica $0027Loan_amount$0027.
12plt.boxplot(df["Loan_amount"])plt.show()
pitón
Salida:
En la salida anterior, los círculos indican los valores atípicos, y hay muchos. También es posible identificar los valores atípicos utilizando más de una variable. Podemos modificar el código anterior para visualizar los valores atípicos en la variable $0027Loan_amount$0027 por el estado de aprobación.
1df.boxplot(column=$0027Loan_amount$0027, by=$0027approval_status$0027)
pitón
Salida:
El resultado muestra que el número de valores atípicos es mayor para los solicitantes de préstamos aprobados (denotado por la etiqueta «1») que para los solicitantes rechazados (denotado por la etiqueta «0»).
2. Histograma
Un histograma se utiliza para visualizar la distribución de una variable numérica. Un valor atípico aparecerá fuera del patrón general de distribución. La línea de código de abajo traza un histograma de la variable $0027Ingresos$0027, usando la función hist() .
1df.Income.hist()
pitón
Salida:
El gráfico anterior muestra que la distribución está sesgada hacia la derecha, y hay valores extremadamente altos a la derecha del histograma. Este paso puede repetirse también para otras variables.
3. Diagrama de dispersión
Un diagrama de dispersión visualiza la relación entre dos variables cuantitativas. Los datos se muestran como una colección de puntos, y cualquier punto que quede fuera de la agrupación general de las dos variables puede indicar valores atípicos. Las líneas de código a continuación generan un gráfico de dispersión entre las variables $0027Ingresos$0027 y $0027Cantidad_de_préstamo$0027.
12345fig, ax = plt.subplots(figsize=(12,6))ax.scatter(df[$0027Ingresos$0027], df[$0027Monto_de_préstamo$0027])ax.set_xlabel($0027Ingresos de los solicitantes en USD$0027)ax.set_ylabel($0027Monto de préstamo solicitado en USD$0027)plt.show()
pitón
Salida:
El gráfico anterior indica que la mayoría de los puntos de datos están agrupados en la mitad inferior del gráfico. Los puntos situados en el extremo derecho del eje x o del eje y indican valores atípicos.