Hipotesis: Se tiene una base de datos con 24 vehiculos de diferentes marcas, cada vehiculo cuenta con su potencia, consumo, peso, cilindraje y modelo, a el consecionario que vende estos vehiculos le han llegado multiples quejas de clientes alegando que el consumo de sus vehiculos no es adecuado para el cilindraje y la potencia de esos mismos; el consecionario afirma que el consumo de sus vehiculos es proporcional a su cilindraje y potencia.
1). Importar los siguientes módulos o paquetes:
import pandas as pd # Se trabaja todo lo que es la estructura de los datos
import statsmodels.formula.api as smf # Permite ajustar modelos estadísticos utilizando fórmulas de estilo R
import numpy as np # representa matrices multidimensionales, equivalentes a las matrices del R
from matplotlib import pyplot # Permite la generación de gráficos
from mpl_toolkits.mplot3d import Axes3D # Permite agregar eje tridimensionales
from sklearn.linear_model import LinearRegression # sklearn es una libreria que cuenta con algoritmos de clasificación, regresión, clustering y reducción de dimensionalidad
from sklearn import metrics # sklearn es una libreria que cuenta con algoritmos de clasificación, regresión, clustering y reducción de dimensionalidad
2). Leer la base de datos:
from google.colab import files
uploaded = files.upload() # Importamos los datos dentro del colab
3). Estructura y primeras observaciones de la base de datos:
df = pd.read_csv('cars.csv') # Lo convertimos en un DataFrame
La base de datos utilizada almacena las caracteristicas de un vehiculo siendo estas el modelo, cilindraje, potencia, peso y consumo, teniendo el cuenta el tamaño de la muestra de los datos nos decantaremos por usar el test de shapiro, pero antes ejecutaremos un analisis grafico para determinar si vale la pena implementar un test numerico.
df # Observamos el DataSet
df.describe() # Observamos su estructura
4). Diagrama de dispersión y test grafico.
fig = pyplot.figure(figsize=(8, 6)) # Ajustes del gráfico
ax = Axes3D(fig)
x1 = df['cilindraje'] # Variable exogena
x2 = df['potencia'] # Datos eje Y
y = df['consumo'] # Datos eje Z (Var. Respuesta)
ax.scatter(x1, x2, y, marker='*', c='r')
ax.set_xlabel('Cilindraje del vehiculo') # Etiqueta del eje X1
ax.set_ylabel('Potencia del vehiculo') # Etiqueta del eje X2
ax.set_zlabel('Consumo del vehiculo') # Etiqueta del eje Y
5). Correlacion entre variables
df.corr() # Podemos observar un alto indice de correlacion entre cada variable
6). Generamos el Ordinary Least Square o el modelo
reg = smf.ols('consumo ~ cilindraje + potencia',data=df) # Se establece la regrecion con el Ordinary Least Square dictando que el consumo
res = reg.fit() # va a ser aproximandamente igual a la suma del cilindraje y potencia.
print(res.summary()) # Imprimimos los resultados
print(res.rsquared)
print(res.params)
7). Ecuacion y prediccion
lm = LinearRegression()
X = df[['cilindraje','potencia']]
lm.fit(X,y)
prediccion = lm.predict(X)
a = lm.intercept_
b = lm.coef_
print('Prediccion')
print('*'*100)
print(prediccion) # Valores segun la prediccion
print('*'*100)
print(y) # Valores actuales del consumo
print(lm.score(X,y)) # Retornamos el coeficiente de determinacion en la prediccion
8). Comparativas y Error estandar
resultados ={'Real':df['consumo'],'Prediccion':prediccion}
result = pd.DataFrame(data=resultados)
print(result)
ECM = metrics.mean_squared_error(df['consumo'],prediccion)
print(ECM) # Error estandar
r_cuadrado = metrics.r2_score(df['consumo'],prediccion)
print(r_cuadrado) # R cuandrado o coeficiente de determinacion
9). Graficasion de la prediccion
fig = pyplot.figure(figsize=(8, 6)) # Ajustes del gráfico
ax = Axes3D(fig)
x1 = df['cilindraje'] # Variable exogena
x2 = df['potencia'] # Datos eje Y
y = df['consumo'] # Datos eje Z (Var. Respuesta)
ax.scatter(x1, x2, y, marker='*', c='r') # Datos actuales
ax.scatter(x1, x2, prediccion, marker='+', c='b') # Datos segun la prediccion
ax.set_xlabel('Cilindraje del vehiculo') # Etiqueta del eje X1
ax.set_ylabel('Potencia del vehiculo') # Etiqueta del eje X2
ax.set_zlabel('Consumo del vehiculo') # Etiqueta del eje Y
Podemos observar que como existe una estrecha correlacion entre cada valor de la base de datos, el modelo predictivo indica un constante crecimiento del consumo de cada vehiculo en funcion de su cilindraje y potencia descartando la hipotesis alternativa presentada por los clientes del concesionario sugiriendo que el consumo no era el adecuado para sus vehiculos.
Error Tipo 1: Se hace caso a las quejas de los clientes y se detiene el proceso de importacion y exportacion de vehiculos generando perdidas en el negocio tratando de encotrar defectos en los vehiculos comprados a los dristribuidores.
Error Tipo 2: Se les comenta a los clientes que no hay defecto alguno en los vehiculos vendidos y se genera desconfianza en los productos del concesionario debido a la mala calidad de sus vehiculos.