Sklearn - Regresion Lineal, Ejemplo Practico Mitad
Sklearn - Regresion Lineal, Ejemplo Practico Mitad
Preprocesado
Exploramos las estadísticas descriptivas de las variables.
# Las estadísticas descriptivas son muy útiles para la exploración
inicial de las variables.
# Por defecto, solo se muestran descriptivas de las variables
numéricas.
# Para incluir los categóricos, debes especificar esto con un
argumento.
raw_data.describe(include='all')
Brand 0
Price 172
Body 0
Mileage 0
EngineV 150
Engine Type 0
Registration 0
Year 0
dtype: int64
<seaborn.axisgrid.FacetGrid at 0x256f9615120>
Lidiando con los outliers (valores atipicos)
# Obviamente hay algunos valores atípicos presentes
# Los valores atípicos son un gran problema para OLS, por lo que
debemos abordarlos de alguna manera
# Puede ser un ejercicio útil intentar entrenar un modelo sin eliminar
los valores atípicos
<seaborn.axisgrid.FacetGrid at 0x256f96174c0>
# Podemos tratar las otras variables numéricas de manera similar
sns.displot(data_no_mv['Mileage'])
<seaborn.axisgrid.FacetGrid at 0x25681562710>
q = data_1['Mileage'].quantile(0.99)
data_2 = data_1[data_1['Mileage']<q]
<seaborn.axisgrid.FacetGrid at 0x25681fb56f0>
# La situación con el volumen del motor es muy extraña.
# En tales casos, tiene sentido comprobar manualmente qué puede estar
causando el problema.
# En nuestro caso, el problema surge del hecho de que la mayoría de
los valores faltantes se indican con 99,99 o 99.
# También hay algunas entradas incorrectas como 75
sns.displot(data_no_mv['EngineV'])
<seaborn.axisgrid.FacetGrid at 0x256820aa740>
# Una simple búsqueda en Google puede indicar el dominio natural de
esta variable
# Los volúmenes de los motores de los automóviles suelen ser
(¿siempre?) inferiores a 6,5 litros.
# Este es un excelente ejemplo del hecho de que un experto en el campo
(una persona que trabaja en la industria automotriz)
# puede resultarle mucho más fácil determinar problemas con los datos
que un tercero
data_3 = data_2[data_2['EngineV']<6.5]
<seaborn.axisgrid.FacetGrid at 0x2568214a0e0>
# Finalmente, la situación con 'Year' es similar a 'Price' y 'Mileage'
# Sin embargo, los valores atípicos están en el extremo inferior.
sns.displot(data_no_mv['Year'])
<seaborn.axisgrid.FacetGrid at 0x256f9617c10>
# Simplemente los eliminamos
q = data_3['Year'].quantile(0.01)
data_4 = data_3[data_3['Year']>q]
<seaborn.axisgrid.FacetGrid at 0x25683763310>
# Cuando eliminamos observaciones, los índices originales se
conservan.
# Si eliminamos observaciones con índices 2 y 3, los índices quedarán
como: 0,1,4,5,6
# Eso es muy problemático ya que tendemos a olvidarlo
plt.show()
plt.show()
Multicolinealidad
# Vemos rápidamente las columnas de nuestro DF.
data_cleaned.columns.values
vif
VIF Features
0 3.791584 Mileage
1 10.354854 Year
2 7.662068 EngineV
# Dado que Year tiene el VIF más alto, lo elimino del modelo.
# ¡¡¡Esto reducirá el VIF de otras variables!!! pueden recalcular los
VIF y chequear
# Entonces, incluso si EngineV también parece tener un VIF alto, una
vez que "Año" desaparezca, ese ya no será el caso.
data_no_multicollinearity = data_cleaned.drop(['Year'],axis=1)
data_with_dummies.head()
EJERCICIO
Parte 1 Calcular los factores de inflación de la varianza para todas las variables contenidas
en data_preprocessed. ¿Algo extraño?
Parte 2 Como se mencionó en la clase, la tarea es calcular el factor de inflación de varianza
(VIF) de todas las variables, incluidas las variables dummies (pero sin la variable
dependiente).
Parte 3 Ahora calcule los VIF para un dataframe donde incluimos los dummies, sin
'log_price', pero SIN DROPEAR EL PRIMER DUMMY. ¿Algo extraño?