html
Implementación y Evaluación de Regresión Lineal en Python: Una Guía Integral

Introducción a la Regresión Lineal
La regresión lineal es uno de los algoritmos más fundamentales y ampliamente utilizados en el aprendizaje automático y el análisis de datos. Modela la relación entre una variable dependiente y una o más variables independientes ajustando una ecuación lineal a los datos observados. En esta guía, te llevaremos a través de la implementación de la regresión lineal en Python utilizando la biblioteca scikit-learn, comparando los resultados reales versus los predichos y evaluando el desempeño del modelo utilizando la métrica R-cuadrado.
Ya seas un entusiasta de la ciencia de datos o un profesional experimentado, este tutorial integral te proporcionará el conocimiento y las habilidades prácticas para construir y evaluar un modelo de regresión lineal de manera efectiva.
Tabla de Contenidos
- Descripción del Conjunto de Datos
- Configuración de Tu Entorno
- Importación de las Librerías Necesarias
- Carga y Exploración de los Datos
- Visualización de los Datos
- Preparación de los Datos para el Entrenamiento
- Construcción del Modelo de Regresión Lineal
- Realización de Predicciones
- Comparación de Resultados Reales vs. Predichos
- Evaluación del Modelo con R-cuadrado
- Conclusión
- Lecturas Adicionales
Descripción del Conjunto de Datos
Para este tutorial, utilizaremos el conjunto de datos Canada Per Capita Income de Kaggle. Este conjunto de datos proporciona información sobre el ingreso per cápita anual en Canadá durante varios años, lo que nos permite analizar tendencias de ingresos y construir un modelo predictivo.
Configuración de Tu Entorno
Antes de sumergirte en el código, asegúrate de tener Python instalado en tu sistema. Se recomienda usar un entorno virtual para gestionar las dependencias de tu proyecto. Puedes configurar un entorno virtual usando venv
o herramientas como conda
.
123456
# Using venvpython -m venv linear_regression_envsource linear_regression_env/bin/activate # On Windows: linear_regression_env\Scripts\activate # Install necessary packagespip install numpy pandas matplotlib seaborn scikit-learn
Importación de las Librerías Necesarias
Comenzaremos importando las librerías esenciales necesarias para la manipulación de datos, visualización y construcción de nuestro modelo de regresión.
12345678910
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import r2_score # Set seaborn style for better aestheticssns.set()
Carga y Exploración de los Datos
A continuación, cargaremos el conjunto de datos en un DataFrame de Pandas y echaremos un vistazo preliminar a su estructura.
12345
# Import Datadata = pd.read_csv('canada_per_capita_income.csv') # Preview the first few rows of the datasetprint(data.head())
Salida:
123456
year per capita income (US$)0 1970 3399.2990371 1971 3768.2979352 1972 4251.1754843 1973 4804.4632484 1974 5576.514583
A partir de la salida, podemos observar que el conjunto de datos contiene dos columnas: year
y per capita income (US$)
.
Visualización de los Datos
La visualización ayuda a entender los patrones y relaciones subyacentes dentro de los datos. Crearemos un diagrama de dispersión para visualizar la relación entre el año y el ingreso per cápita.
12345
sns.scatterplot(data=data, x='per capita income (US$)', y='year')plt.title('Per Capita Income Over Years in Canada')plt.xlabel('Per Capita Income (US$)')plt.ylabel('Year')plt.show()

El diagrama de dispersión revela la tendencia del aumento del ingreso per cápita a lo largo de los años. Sin embargo, la relación puede no ser perfectamente lineal, lo que indica una posible variabilidad en los datos.
Preparación de los Datos para el Entrenamiento
Antes de entrenar nuestro modelo, necesitamos preparar los datos separando las características (variables independientes) de la variable objetivo (variable dependiente).
123
# Define features and target variableX = data.iloc[:, :-1] # All columns except the last oneY = data.iloc[:, -1] # The last column
En este caso, X
contiene la columna year
y Y
contiene la columna per capita income (US$)
.
Construcción del Modelo de Regresión Lineal
Ahora dividiremos los datos en conjuntos de entrenamiento y prueba para evaluar el desempeño de nuestro modelo en datos no vistos.
12
# Train-test splitX_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=1)
Explicación:
- X_train & y_train: Se utilizan para entrenar el modelo.
- X_test & y_test: Se utilizan para probar el desempeño del modelo.
- test_size=0.20: El 20% de los datos se reserva para pruebas.
- random_state=1: Asegura la reproducibilidad de la división.
Ahora, instanciemos y entrenemos el modelo de Regresión Lineal.
12345678
# Initialize the Linear Regression modelmodel = LinearRegression() # Fit the model to the training datamodel.fit(X_train, y_train) # Output the model detailsprint(model)
Salida:
1
LinearRegression()
Realización de Predicciones
Con el modelo entrenado, ahora podemos hacer predicciones sobre el conjunto de pruebas.
12345
# Make predictions on the test datay_pred = model.predict(X_test) # Display the predicted valuesprint(y_pred)
Salida:
123
[20349.94572643 18613.49135581 33373.35350612 29900.44476487 1248.94764955 2117.17483487 24691.081653 27295.76320894 38582.716618 22086.40009706]
Estos valores representan las predicciones del modelo sobre el ingreso per cápita basado en los años de entrada en el conjunto de pruebas.
Comparación de Resultados Reales vs. Predichos
Para evaluar qué tan bien está desempeñando nuestro modelo, compararemos los valores reales (y_test
) con los valores predichos (y_pred
).
1234567
# Create a DataFrame to compare actual and predicted valuescomparison = pd.DataFrame()comparison['Actual'] = y_testcomparison['Predicted'] = y_pred # Display the comparisonprint(comparison)
Salida:
1234567891011
Actual Predicted24 15755.820270 20349.94572622 16412.083090 18613.49135639 32755.176820 33373.35350635 29198.055690 29900.4447652 4251.175484 1248.9476503 4804.463248 2117.17483529 17581.024140 24691.08165332 19232.175560 27295.76320945 35175.188980 38582.71661826 16699.826680 22086.400097
Análisis:
- Buenas Predicciones: Las entradas donde los valores de
Actual
y Predicted
están cerca indican que el modelo está funcionando bien.
- Discrepancias: Diferencias significativas resaltan áreas donde el modelo puede necesitar mejoras o donde la relación no es perfectamente lineal.
Por ejemplo, mientras que la mayoría de las predicciones están razonablemente cerca de los valores reales, algunas discrepancias, como un valor real de 4,251.18 frente a un valor predicho de 1,248.95, sugieren una variabilidad que el modelo no pudo capturar.
Evaluación del Modelo con R-cuadrado
Para evaluar cuantitativamente el desempeño del modelo, usaremos la métrica R-cuadrado (R²). R-cuadrado representa la proporción de la variabilidad de la variable dependiente que es explicada por la(s) variable(s) independiente(s) en el modelo.
1234
# Calculate R-squared scorer2 = r2_score(y_test, y_pred) print(f"R-squared Score: {r2:.2f}")
Salida:
1
R-squared Score: 0.80
Interpretación:
- Un valor de R-cuadrado de 0.80 indica que el 80% de la variabilidad en el ingreso per cápita es explicada por el año.
- Mientras que 80% es una indicación fuerte de un buen ajuste, también implica que el 20% de la variabilidad permanece sin explicar, posiblemente debido a otros factores no considerados en el modelo o a la variabilidad inherente de los datos.
Comprendiendo los Valores de R-cuadrado:
- 1: Ajuste perfecto. El modelo explica toda la variabilidad.
- 0: Sin poder explicativo. El modelo no explica ninguna variabilidad.
- Valores Negativos: Indican que el modelo funciona peor que una línea horizontal (media de la variable objetivo).
Conclusión
En esta guía, hemos implementado exitosamente un modelo de Regresión Lineal en Python para predecir el ingreso per cápita de Canadá a lo largo de los años. Siguiendo estos pasos, puedes:
- Cargar y Explorar Datos: Comprender la estructura del conjunto de datos y las tendencias iniciales.
- Visualizar Relaciones: Utilizar diagramas de dispersión para identificar posibles relaciones lineales.
- Preparar Datos: Dividir los datos en conjuntos de entrenamiento y prueba para una evaluación imparcial.
- Construir y Entrenar el Modelo: Utilizar
LinearRegression
de scikit-learn para ajustar el modelo.
- Realizar Predicciones: Generar predicciones usando el modelo entrenado.
- Comparar Resultados: Analizar qué tan bien los valores predichos se alinean con los datos reales.
- Evaluar el Desempeño: Usar R-cuadrado para cuantificar el poder explicativo del modelo.
Aunque el modelo demuestra un valor de R-cuadrado encomiable, hay margen de mejora. Explorar características adicionales, transformar variables o emplear algoritmos más complejos puede potencialmente mejorar el desempeño predictivo.
Lecturas Adicionales
- Documentación de Scikit-learn
- Comprendiendo R-cuadrado
- Supuestos de la Regresión Lineal
- Mejorando el Desempeño del Modelo
Emprender este viaje de regresión lineal te equipa con habilidades fundamentales aplicables en diversos dominios orientados a los datos. Continúa practicando con conjuntos de datos diversos para profundizar tu comprensión y competencia en el aprendizaje automático.
#LinearRegression #Python #MachineLearning #DataScience #ScikitLearn #R2Score #DataVisualization #PredictiveModeling #PythonTutorial