En Python, la regresión se utiliza para encontrar la relación entre variables. En el aprendizaje automático y la modelización estadística, esta relación se utiliza para predecir resultados futuros.
La regresión lineal utiliza la relación entre los puntos de datos para trazar una línea recta a través de ellos. Esta línea se puede utilizar para predecir valores futuros.
Cómo funciona la regresión lineal en Python
Python tiene métodos para encontrar una relación entre puntos de datos y trazar una línea de regresión lineal. Mostraremos cómo usar estos métodos en lugar de profundizar en la fórmula matemática.
En el siguiente ejemplo, el eje x representa la edad y el eje y representa la velocidad. Hemos registrado la edad y la velocidad de 13 automóviles mientras pasaban por una caseta de peaje. Veamos si los datos que recopilamos podrían utilizarse en una regresión lineal:
# Importar la biblioteca Matplotlib import matplotlib.pyplot as plt # Datos para el diagrama de dispersión x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16] # Crear el diagrama de dispersión plt.scatter(x, y) plt.xlabel("Eje X") plt.ylabel("Eje Y") plt.title("Diagrama de Dispersión") plt.grid(True) plt.show()
Resultado:

Explicación del Ejemplo
- Importamos la biblioteca Matplotlib para trazar gráficos.
- Creamos dos listas x e y que representan la edad y la velocidad de los automóviles.
- Dibujamos un diagrama de dispersión para visualizar nuestros datos.
# Importar las bibliotecas necesarias import matplotlib.pyplot as plt from scipy import stats # Datos de ejemplo x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16] # Realizar la regresión lineal slope, intercept, r, p, std_err = stats.linregress(x, y) # Definir una función lineal def myfunc(x): return slope * x + intercept # Calcular los valores ajustados mymodel = list(map(myfunc, x)) # Crear un gráfico de dispersión y la línea de regresión plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Resultado:

Explicación del Ejemplo
- Importamos la biblioteca Matplotlib para trazar gráficos y la biblioteca SciPy para realizar análisis estadísticos.
- Creamos dos listas x e y que representan la edad y la velocidad de los automóviles.
- Calculamos la pendiente, la intercepción, el coeficiente de correlación r, el valor p y el error estándar utilizando stats.linregress.
- Definimos una función myfunc que utiliza la pendiente e intercepción para calcular la velocidad prevista.
- Creamos un nuevo conjunto de datos mymodel aplicando la función myfunc a cada valor de x.
- Dibujamos el diagrama de dispersión original y la línea de regresión lineal.
Coeficiente de Correlación (r) en Python
Es importante saber cuál es la relación entre los valores del eje x y los valores del eje y. Si no existe una relación, la regresión lineal no puede utilizarse para predecir nada. Este valor de relación, llamado coeficiente de correlación r, varía de -1 a 1, donde 0 significa que no hay relación y 1 (y -1) significa que está 100% relacionado. Python y el módulo SciPy calcularán este valor por ti, solo tienes que proporcionar los valores x e y.
# Importar la biblioteca SciPy from scipy import stats x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16] slope, intercept, r, p, std_err = stats.linregress(x, y) print(r)
Resultado:
-0.9662064783841053
El resultado -0.9662 indica que hay una fuerte relación inversa entre las variables 'x' e 'y', y esta relación está bastante cerca de ser perfectamente inversa (que sería -1.0). Por lo tanto, puedes utilizar la regresión lineal para hacer predicciones basadas en estos datos.
En resumen, el valor de 'r' cerca de -1 sugiere que a medida que 'x' aumenta, 'y' tiende a disminuir, y viceversa. Esto es lo que se espera de una relación lineal inversa.
Predicción de Valores Futuros en Python
Ahora podemos utilizar la información recopilada para predecir valores futuros.
Ejemplo: Intentemos predecir la velocidad de un automóvil de 10 años de edad.
Para hacerlo, necesitamos la misma función myfunc() del ejemplo anterior:
def myfunc(x): return slope * x + intercept
Ejemplo:
from scipy import stats x = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] y = [50, 42, 38, 30, 28, 24, 22, 20, 18, 16] slope, intercept, r, p, std_err = stats.linregress(x, y) def myfunc(x): return slope * x + intercept speed = myfunc(10) print(speed)
Resultado:
30.593939393939394
El resultado que has obtenido, 30.59 (aproximadamente), es el valor predicho para y (la variable dependiente) cuando x (la variable independiente) tiene un valor de 10. En otras palabras, cuando x es igual a 10, se estima que y será aproximadamente igual a 30.59 según la regresión lineal que has realizado en tu conjunto de datos.
Este resultado proviene de un análisis de regresión lineal, que busca encontrar una relación lineal entre las dos variables, x e y. El coeficiente de correlación (r) proporciona información sobre cuán fuerte es la relación lineal entre estas variables. En este caso, parece que hay una relación lineal negativa, lo que significa que a medida que x aumenta, y tiende a disminuir. Sin embargo, es importante recordar que la regresión lineal es un modelo simplificado y que otros factores pueden influir en la relación entre las variables.
Ajuste Deficiente
Creemos un ejemplo en el que la regresión lineal no sería el mejor método para predecir valores futuros.
Ejemplo:
Estos valores para los ejes x e y deberían resultar en un ajuste muy deficiente para la regresión lineal:
# Importar bibliotecas necesarias import matplotlib.pyplot as plt from scipy import stats # Datos de ejemplo x = [15, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115] y = [100, 98, 95, 90, 88, 80, 75, 70, 68, 65, 60, 58, 55, 50, 48, 45, 40, 38, 35, 30] # Calcular la regresión lineal slope, intercept, r, p, std_err = stats.linregress(x, y) # Función para la línea de regresión def myfunc(x): return slope * x + intercept # Calcular valores de la línea de regresión mymodel = list(map(myfunc, x)) # Graficar los datos y la línea de regresión plt.scatter(x, y) plt.plot(x, mymodel) plt.show()
Resultado:

Coeficiente de Correlación (r) para la Relación
Este ejemplo debería dar como resultado un valor r muy bajo:
# Importar las bibliotecas necesarias import numpy from scipy import stats # Datos de ejemplo x = [15, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115] y = [100, 98, 95, 90, 88, 80, 75, 70, 68, 65, 60, 58, 55, 50, 48, 45, 40, 38, 35, 30] # Realizar una regresión lineal slope, intercept, r, p, std_err = stats.linregress(x, y) # Imprimir el coeficiente de correlación (r) print(r)
Resultado:
-0.9958363917110191
El coeficiente de correlación (r) cuantifica la fuerza y la dirección de la relación entre dos variables. En este caso, el valor de r es -0.9958363917110191, lo que indica una correlación muy fuerte y negativa entre las variables x e y.
Una correlación negativa significa que cuando una variable aumenta, la otra tiende a disminuir. En otras palabras, a medida que los valores de x aumentan, los valores de y tienden a disminuir en una proporción muy cercana.
Dado que r es muy cercano a -1 (cercano a -1 indica una correlación fuerte negativa), esto sugiere que los valores de x e y están altamente inversamente relacionados. En este contexto, esto podría interpretarse como que a medida que x aumenta, y disminuye en casi la misma cantidad.
En resumen, el valor r = -0.9958363917110191 indica una correlación negativa extremadamente fuerte entre las variables x e y en el conjunto de datos proporcionado.