La Regresión Lineal (práctica)

Image for post
Image for post

La Regresión Lineal

Es un modelo utilizado para obtener una variable de salida (la variable que queremos predecir) en base a una variable de entrada (variable predictora)

Un ejemplo para entender la regresión lineal es el valor de alquiler de un piso:

Image for post
Image for post

Tenemos que:

Image for post
Image for post

Con los datos históricos se crea un modelo de regresión lineal y se obtienen los valores de

Image for post
Image for post

Entonces el modelo lineal es:

Image for post
Image for post

Con lo cual se podrá predecir los costes de alquiler de cualquier casa, por ejemplo, para 110 m2:

Image for post
Image for post

La técnica de mínimos cuadrados

El objetivo de la regresión lineal es que los valores reales se acerquen lo mas posible a los datos calculados, entonces se utilizan métodos de compensación para minimizar esos errores.

Código para el modelo de regresión lineal

Código:

data = pd.read_csv(“Advertising.csv”)

data.head()

Resultado:

Código:

import statsmodels.formula.api as smf

lm = smf.ols(formula = “Sales~TV”,data=data).fit()

lm.params

Resultado:

Image for post
Image for post

El modelo lineal obtenido es:

Image for post
Image for post

Código para obtener los pvalores

Código:

lm.pvalues

Resultado:

Image for post
Image for post

Para saber si una variable que hemos ingresado a nuestro es estadisticamente significativa o no es estadisticamente significativa vamos a pedir nuestros P valores, lo normal es decir que si nuestro P valor es menor que 0.05 (confianza 95%) nuestra variable es sigificativa por lo que, si explica parte de mi modelo, mientras que si es mayor a 0.05 entonces no es significativa

Código para obtener el nivel de ajuste del modelo

Código:

lm.rsquared

Resultado:

Image for post
Image for post

La inversión en publicidad en TV explica que el 61% de la variabilidad de las ventas

Código para el ajuste con modificación a los elementos (más efectivo)

Código:

lm.rsquared_adj

Resultado:

Image for post
Image for post

Código para obtener una visión general

Código:

lm.rsquared_adj

Resultado:

Image for post
Image for post

Código para predecir las ventas usando el modelo

Código:

sales_pred = lm.predict(pd.DataFrame(data[“TV”]))

sales_pred

Resultado:

Image for post
Image for post

Código para imprimir la grafica de las predicciones

Código:

import matplotlib.pyplot as plt

%matplotlib inline

data.plot(kind = “scatter”, x = “TV”, y =”Sales”)

plt.plot(pd.DataFrame(data[“TV”]), sales_pred, c=”red”, linewidth = 2)

Resultado:

Image for post
Image for post

Código para calcular el error

Código:

data[“sales_pred”] = 7.032594 + 0.047537*data[“TV”]

data[“RSE”] = (data[“Sales”]-data[“sales_pred”])**2

SSD = sum(data[“RSE”])

RSE = np.sqrt(SSD/(len(data)-2))

RSE

Resultado:

Image for post
Image for post

Código para obtener el promedio de ventas

Código:

sales_m = np.mean(data[“Sales”])

sales_m

Resultado:

Image for post
Image for post

Código:

error = RSE/sales_m

error

Resultado:

Image for post
Image for post

Código para imprimir histogramas

Código:

plt.hist((data[“Sales”]-data[“sales_pred”]))

Resultado:

Image for post
Image for post

Regresiones lineales múltiples

Regresiones lineales de 2 variables de entrada (TV y Newspaper)

Código:

lm2 = smf.ols(formula = “Sales~TV+Newspaper”,data=data).fit()

lm2.params

Resultado:

Image for post
Image for post

PValores de las 2 varibales

Código:

lm2.pvalues

Resultado:

Image for post
Image for post
Image for post
Image for post

Visión general

Código:

print(lm2.summary())

Resultado:

Image for post
Image for post

Regresión lineal para 2 variables (TV y Radio)

Código:

lm2 = smf.ols(formula = “Sales~TV+Radio”,data=data).fit()

Resultado:

Image for post
Image for post

Regresión para las 3 variables

Código:

lm2 = smf.ols(formula = “Sales~TV+Newspaper+Radio”,data=data).fit()

print(lm2.summary())

Resultado:

Image for post
Image for post

Factor de inflación de la varianza (Newspaper respecto a TV y Radio)

Correlacion entre variables predictoras Si bien es baja, pero es signficiativa

Hay que ir a mas detalle e investigar, no se pueden tener a las dos

  • VIF = 1 : Las variables no están correlacionadas
  • VIF < 5 : Las variables tienen una correlación moderada y se pueden quedar en el modelo
  • VIF >5 : Las variables están altamente correlacionadas y deben desaparecer del modelo.

Código:

lm_n = smf.ols(formula=”Newspaper~TV+Radio”,data=data).fit()

rsquared_n = lm_n.rsquared

VIF = 1/(1-rsquared_n)

VIF

Resultado:

Image for post
Image for post

Factor de inflación de la varianza (TV respecto a Newspaper y Radio)

Código:

lm_n = smf.ols(formula=”TV~Newspaper+Radio”,data=data).fit()

rsquared_n = lm_n.rsquared

VIF = 1/(1-rsquared_n)

VIF

Resultado:

Image for post
Image for post

Factor de inflación de la varianza (Radio respecto a Newspaper y TV)

Código:

lm_n = smf.ols(formula=”Radio~TV+Newspaper”,data=data).fit()

rsquared_n = lm_n.rsquared

VIF = 1/(1-rsquared_n)

VIF

Resultado:

Image for post
Image for post

Se puede notar que se puede dejar de depende de Newspaper para las regresiones

Código para implementar los estimadores

Código:

from sklearn.feature_selection import RFE

from sklearn.svm import SVR

featur_cols = [“TV”, “Radio”,”Newspaper”]

X = data[featur_cols]

Y = data[“Sales”]

estimator = SVR(kernel = “linear”)

selector = RFE(estimator,2,step=1)

selector = selector.fit(X,Y)

selector.support_

Resultado:

Image for post
Image for post

El algoritmo no toma en cuenta a Newspaper

Código:

from sklearn.linear_model import LinearRegression

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error

feature_cols = [“TV”,”Radio”]

X = data[featur_cols]

Y = data[“Sales”]

X_train, X_test, Y_train, Y_test = train_test_split(X,Y, test_size=0.33, random_state = 324)

Y_test.describe()

Resultado:

Image for post
Image for post

Autores:

  • Cristina Acosta
  • Jonathan Gavilanes
  • Lucia Loor
  • Xavier Ortiz

Código — Andrea Escobar

Conoce más:

Registrate en el programa de Python for Data Science.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store