La guía más divertida para aprender modelado predictivo usando Google Colab, datos CSV y sklearn
Objetivo: Predecir las ventas de helado según la temperatura. ¡El calor derrite hasta los bolsillos!
🎯 Interpretación: Por cada grado que sube la temperatura, las ventas aumentan ~12 dólares.
# Importar librerías
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 1. Generar datos sintéticos y guardar CSV
np.random.seed(42)
temperaturas = np.random.uniform(15, 40, 100)
ventas = 200 + 12 * temperaturas + np.random.normal(0, 30, 100)
df = pd.DataFrame({'temperatura': temperaturas, 'ventas': ventas})
df.to_csv('heladeria.csv', index=False)
# 2. Cargar datos desde CSV (como en un proyecto real)
datos = pd.read_csv('heladeria.csv')
X = datos[['temperatura']] # Variable independiente (debe ser 2D)
y = datos['ventas'] # Variable dependiente
# 3. Crear y entrenar el modelo
modelo = LinearRegression()
modelo.fit(X, y)
# 4. Mostrar resultados
print(f"Intercepto (b0): {modelo.intercept_:.2f}")
print(f"Pendiente (b1): {modelo.coef_[0]:.2f}")
# 5. Predecir para una nueva temperatura
nueva_temp = 32
prediccion = modelo.predict([[nueva_temp]])
print(f"Para {nueva_temp}°C se esperan ${prediccion[0]:.2f} en ventas.")
# 6. Visualización
plt.scatter(X, y, alpha=0.6, label='Datos')
plt.plot(X, modelo.predict(X), color='red', linewidth=2, label='Recta')
plt.xlabel('Temperatura (°C)')
plt.ylabel('Ventas ($)')
plt.legend()
plt.title('Regresión Simple - Heladería')
plt.show()
Objetivo: Predecir el valor mediano de una vivienda en California usando tres variables: ingreso mediano, antigüedad de la casa y número medio de habitaciones.
# Importar todo lo necesario
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing
import matplotlib.pyplot as plt
# 1. Obtener datos reales y guardarlos como CSV (para simular carga)
housing = fetch_california_housing(as_frame=True)
df = housing.frame
df.to_csv('housing.csv', index=False)
# 2. Cargar desde CSV
datos = pd.read_csv('housing.csv')
# Seleccionamos 3 predictores clave
X = datos[['MedInc', 'HouseAge', 'AveRooms']]
y = datos['MedHouseVal']
# 3. Dividir en entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 4. Entrenar el modelo múltiple
modelo_multi = LinearRegression()
modelo_multi.fit(X_train, y_train)
# 5. Mostrar coeficientes
coef = pd.DataFrame({
'Variable': X.columns,
'Coeficiente': modelo_multi.coef_
})
print(coef)
print(f"Intercepto: {modelo_multi.intercept_:.3f}")
# 6. Evaluación en prueba
predicciones = modelo_multi.predict(X_test)
r2 = modelo_multi.score(X_test, y_test)
print(f"R² en prueba: {r2:.3f}")
# 7. Visualización de predicciones vs reales
plt.scatter(y_test, predicciones, alpha=0.4)
plt.plot([0, 5], [0, 5], 'r--')
plt.xlabel('Valor real (cientos de miles $)')
plt.ylabel('Predicción')
plt.title('Predicciones vs. Valores Reales')
plt.show()
💡 Un mayor ingreso incrementa fuertemente el valor; la antigüedad apenas lo mueve, y más habitaciones (sin otros ajustes) pueden incluso reducirlo.
Objetivo: Predecir el salario según años de experiencia y nivel educativo (Bachillerato, Licenciatura, Maestría, Doctorado).
Convertimos la educación en columnas binarias (dummies) y dejamos “Bachillerato” como categoría base.
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
# 1. Generar datos sintéticos
np.random.seed(7)
n = 150
experiencia = np.random.uniform(0, 20, n)
niveles = np.random.choice(
['Bachillerato', 'Licenciatura', 'Maestría', 'Doctorado'],
size=n, p=[0.2, 0.4, 0.25, 0.15]
)
# Mapa de plus salarial según nivel
bonus_edu = {'Bachillerato': 0, 'Licenciatura': 10000,
'Maestría': 25000, 'Doctorado': 45000}
salario = 30000 + 5000 * experiencia + np.vectorize(bonus_edu.get)(niveles)
salario += np.random.normal(0, 5000, n) # ruido
df = pd.DataFrame({'experiencia': experiencia,
'educacion': niveles,
'salario': salario})
df.to_csv('salarios.csv', index=False)
# 2. Cargar y preparar datos
datos = pd.read_csv('salarios.csv')
# Crear dummies (one-hot encoding) sin la primera categoría
df_dummies = pd.get_dummies(datos, columns=['educacion'], drop_first=True)
X = df_dummies.drop('salario', axis=1)
y = df_dummies['salario']
# 3. Modelo de regresión
modelo = LinearRegression()
modelo.fit(X, y)
# 4. Resultados
coef = pd.DataFrame({
'Variable': X.columns,
'Coeficiente': modelo.coef_
})
print(coef)
print(f"Intercepto (Bachillerato, 0 exp): {modelo.intercept_:.2f}")
# 5. Predicción para un perfil concreto
perfil = pd.DataFrame({
'experiencia': [7],
'educacion_Licenciatura': [1], # Licenciatura
'educacion_Maestría': [0],
'educacion_Doctorado': [0]
})
pred = modelo.predict(perfil)
print(f"Salario estimado: ${pred[0]:,.2f}")