Ajustes al modelo de regresión lineal en lenguaje de programación
En ocasiones, te encontrarás con modelos que puedes volver más precisos si los divides en partes a través de Python. Para hacer ajustes a un modelo en Python es necesario descargar las siguientes bibliotecas: Numpy, Matplotlib, Statsmodels, Pandas, Math.
Preparación de datos iniciales.
Se utilizará el siguiente ejemplo: En tu empresa, te
entregan un archivo .csv con todo el historial del aumento salarial de los empleados,
te piden que los utilices para obtener la tendencia de los aumentos salariales
requeridos para cada empleado. Para cargar y preparar los datos, sigue estos
pasos:
· Importa las bibliotecas que serán necesarias para resolver el problema.
·
Carga los datos desde un .csv.
o data1=pd.read_csv(‘empleados.csv’)
·
Guarda los datos en sus
respectivas variables. En este caso x1 será para received y x2 para requested.
o x1=data1.received
o x2=data1.requested
·
Cuando tengas listos los datos
haz una gráfica de dispersión con los valores x1 y x2.
o fig=plt.plot(x2,x1,’x’)
o plt.axvline(div1,color=‘k’)
Programación del modelo medio.
Para programar el modelo medio sigue estos pasos:
·
Crea una función llamada
TrazaError, que reciba como parámetros los valores de x y y.
o def TrazaError(x,y)
·
Agrega una columna de valores
constantes para sumar los valores de x al modelo.
o x=sm.add_constant(x)
·
Crea el modelo con y y la nueva
x:
o model=sm.OLS(y,x).fit()
·
Guarda en la variable m la
pendiente y la intersección en la variable b.
o m=model.params[1]
o b=model.params[0]
Para calcular y trazar el error cuadrático medio dentro de la función TrazaError, sigue estos pasos:
·
Calcula la desviación estándar de
y.
o desvStd=np.std(y)
·
Calcula la constante de
correlación de x y de y.
o cCor=np.corrcoef(x,y)[0][1]
o El valor que necesitas se encuentra en la fila 0
columna 1.
·
Calcula el error multiplicando la
desviación estándar de y por la raíz cuadrada de 1 menos el cuadrado de la
constante de correlación.
o Err=desvStd*math.sart(1-cCor*cCor)
·
Agrega el límite en el eje x de
las rectas de error y la tendencia.
o Points=np.linspace(x.min(),xmax())
·
Traza la recta de tendencia.
o plt.plot(points,m*points+b)
·
Traza las rectas de error,
restando el error cuadrático medio que calculaste a la intersección.
o plt.plot(points,m*points+(b+err))
o plt.plot(points,m*points+(b-err))
o print (err)
Ajuste al modelo.
Como viste en el ejemplo pasado, hay puntos en donde
los datos comienzan a ser más dispersos, por lo cual tienes que hacer un ajuste
y crear 2 modelos lineales para hacer al modelo más preciso. Para crear los 2
modelos y graficarlos con la función que ya creaste, sigue estos pasos:
· Guarda el límite que dividirá a los 2 modelos en una variable llamada div.
o div=6.
·
Crea un filtro correspondiente al
primer modelo que elimine los datos mayores al límite propuesto, y que conserve
los datos menores o iguales a él.
o data2=data1[(data1.requested<=div1)]
·
Guarda los nuevos datos en sus
respectivas variables y con estas manda a llamar la función TrazaError.
o x2=data2.requested
o y2=data2.received
o TrazaError(x2,y2)
·
Crea un filtro para el 2° modelo
que elimine los registros menores e iguales al límite propuesto y que conserve
los datos mayores a él.
o data3=data1[(data1.requested>div1)]
·
Guarda los nuevos datos en sus
respectivas variables, y con estas manda a llamar la función TrazaError.
o x3=data.requested
o y3=data3.received
o TrazaError(x3,y3)
·
Por último, muestra la gráfica
completa con el método show
o plt.show()
Fundación Carlos Slim – Curso Analista de Datos.
Comentarios
Publicar un comentario