Análisis de un dataset de gastos médicos
Este proyecto analiza el clásico dataset de insurance.csv con el objetivo de predecir los costos médicos de personas aseguradas utilizando técnicas de regresión lineal, exploración de datos y un enfoque interpretativo basado en ciencia de datos y actuaría.
El análisis se realizó íntegramente en Python (pandas, seaborn, scikit-learn) y está diseñado para formar parte de un portafolio profesional de Machine Learning aplicado.
notebooks/- Exploración de Datos (EDA)
- Modelos de regresión lineal simple
- Regresión lineal múltiple
- Evaluación del modelo y análisis de residuos
data/- insurance.csv (datos originales)
src/- Funciones auxiliares (si decides modularizar)
README.mdrequirements.txt
Construir un modelo capaz de predecir los costos médicos (costos) a partir de variables demográficas y de estilo de vida:
- Edad (
edad) - Sexo (
sexo) - Índice de masa corporal (
imc) - Número de hijos (
niños) - Tabaquismo (
fumador) - Región geográfica (
región)
El análisis incluye regresiones lineales simples y una regresión lineal múltiple completa, junto con evaluación gráfica y cuantitativa.
Se realizó un análisis exploratorio para entender la estructura del dataset:
- Distribución de variables numéricas (edad, IMC, costos)
- Distribución categórica (sexo, fumador, región)
- Boxplots de costos por fumador, región y sexo
- Correlaciones entre las variables numéricas
- Scatterplots (edad vs costos, IMC vs costos, coloreados por fumador)
- La distribución de
costoses asimétrica con cola derecha, típica en gastos médicos. - Ser fumador incrementa de manera muy marcada los costos.
- IMC y edad muestran relación positiva con los costos.
- La región no tiene un efecto visualmente tan fuerte como el tabaquismo o el IMC.
Se entrenaron modelos simples:
edad → costosimc → costosfumador → costos
Hallazgos clave:
- Edad e IMC predicen costos de manera individual, aunque con error considerable.
- El efecto del tabaquismo es masivo incluso en regresión simple.
- La línea de ajuste de
fumadormuestra una diferencia notable entre fumadores y no fumadores.
Se entrenó un modelo completo utilizando:
edad + imc + niños + sexo + fumador + región ~ costos
Tras aplicar one-hot encoding a las categóricas, el modelo se entrenó con un 80% del dataset (train) y se evaluó en el 20% restante (test).
- MAE: ~4,000
- RMSE: ~6,000
- R²: ~0.78
Esto indica que el modelo explica cerca del 78% de la variabilidad en los gastos médicos.
El predictor más importante del modelo.
Aumenta los costos médicos en más de 20,000 unidades, dominando completamente al resto de variables.
Aporta un aumento lineal constante a los costos.
Personas de mayor edad incurren en más gastos médicos.
Incremento moderado pero claro: a mayor IMC, mayores costos.
Efecto positivo pequeño, consistente pero no dominante.
Coeficientes pequeños → influencia reducida en comparación con edad, IMC y tabaquismo.
Se generaron:
- Gráfico de valores reales vs predichos
- Gráfico de residuos vs predicciones
- Histograma de residuos
- QQ-plot (normalidad de residuos)
- El modelo funciona bien, pero los casos extremos generan errores grandes.
- Existe heterocedasticidad (variabilidad de residuos mayor en valores altos).
- Los residuos no siguen distribución normal → comportamiento típico en datos médicos.
Para mejorar el modelo:
- Transformar la variable objetivo:
log(costos) - Incluir interacciones como
imc × fumador - Probar modelos no lineales (Random Forest, XGBoost)
- Analizar outliers y perfiles de riesgo alto
- Aplicar técnicas actuariales para ajuste de distribuciones (Gamma, Lognormal)
El proyecto demuestra cómo un análisis de regresión lineal, bien estructurado, permite:
- Identificar factores clave en los gastos médicos
- Construir modelos interpretables
- Detectar perfiles de riesgo
- Establecer una base sólida para modelos más avanzados
Tabaquismo, edad e IMC emergen como los predictores más fuertes.
Este notebook representa un baseline profesional para modelar costos médicos y sirve como práctica de machine learning interpretativo.
- Python 3.10+
- pandas
- numpy
- seaborn
- matplotlib
- scikit-learn
- scipy
Proyecto realizado por Javier Martínez Gon´zlez .