La Regresión Lineal (práctica)
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:
Tenemos que:
Con los datos históricos se crea un modelo de regresión lineal y se obtienen los valores de
Entonces el modelo lineal es:
Con lo cual se podrá predecir los costes de alquiler de cualquier casa, por ejemplo, para 110 m2:
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:
El modelo lineal obtenido es:
Código para obtener los pvalores
Código:
lm.pvalues
Resultado:
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:
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:
Código para obtener una visión general
Código:
lm.rsquared_adj
Resultado:
Código para predecir las ventas usando el modelo
Código:
sales_pred = lm.predict(pd.DataFrame(data[“TV”]))
sales_pred
Resultado:
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:
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:
Código para obtener el promedio de ventas
Código:
sales_m = np.mean(data[“Sales”])
sales_m
Resultado:
Código:
error = RSE/sales_m
error
Resultado:
Código para imprimir histogramas
Código:
plt.hist((data[“Sales”]-data[“sales_pred”]))
Resultado:
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:
PValores de las 2 varibales
Código:
lm2.pvalues
Resultado:
Visión general
Código:
print(lm2.summary())
Resultado:
Regresión lineal para 2 variables (TV y Radio)
Código:
lm2 = smf.ols(formula = “Sales~TV+Radio”,data=data).fit()
Resultado:
Regresión para las 3 variables
Código:
lm2 = smf.ols(formula = “Sales~TV+Newspaper+Radio”,data=data).fit()
print(lm2.summary())
Resultado:
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:
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:
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:
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:
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:
Autores:
- Cristina Acosta
- Jonathan Gavilanes
- Lucia Loor
- Xavier Ortiz
Código — Andrea Escobar