1. Método SEMMA

1.1. Descripción teórica

El método SEMMA fue propuesto por el SAS Institute como una guía estructurada para desarrollar proyectos de minería de datos.
Su nombre proviene de las iniciales de las cinco fases principales del proceso:

  1. Sample (Muestrear): seleccionar los datos y dividirlos en subconjuntos para entrenamiento y prueba.
  2. Explore (Explorar): analizar visual y estadísticamente los datos para identificar patrones, relaciones y valores atípicos.
  3. Modify (Modificar): transformar, limpiar o crear variables que mejoren la capacidad del modelo.
  4. Model (Modelar): ajustar un modelo estadístico o de predicción.
  5. Assess (Evaluar): medir el desempeño del modelo y validar sus resultados.

El objetivo de SEMMA es ofrecer una estructura clara para pasar del análisis exploratorio al modelado, asegurando que los resultados sean confiables.


1.2. Ejemplo práctico con una regresión lineal

En este ejemplo se aplicará el método SEMMA usando el conjunto de datos mtcars, que contiene información sobre automóviles, su peso (wt), potencia (hp) y rendimiento en millas por galón (mpg).

El propósito es predecir el rendimiento (mpg) a partir del peso del vehículo.

# ======== SAMPLE ========
data("mtcars")

set.seed(123)
n <- nrow(mtcars)
indice <- sample(1:n, size = 0.7*n)
train <- mtcars[indice, ]
test  <- mtcars[-indice, ]

# ======== EXPLORE ========
plot(train$wt, train$mpg,
     main = "Relación entre peso y rendimiento",
     xlab = "Peso del vehículo (wt)",
     ylab = "Millas por galón (mpg)",
     pch = 19, col = "darkblue")
abline(lm(mpg ~ wt, data = train), col = "red", lwd = 2)

# ======== MODIFY ========
train$wt2 <- train$wt^2
test$wt2  <- test$wt^2

# ======== MODEL ========
modelo <- lm(mpg ~ wt + wt2, data = train)
summary(modelo)
# 
# Call:
# lm(formula = mpg ~ wt + wt2, data = train)
# 
# Residuals:
#    Min     1Q Median     3Q    Max 
# -3.255 -1.981 -1.133  1.577  6.099 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  52.3230     5.0997  10.260 3.47e-09 ***
# wt          -14.8521     3.1669  -4.690  0.00016 ***
# wt2           1.3746     0.4663   2.948  0.00826 ** 
# ---
# Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 
# Residual standard error: 2.924 on 19 degrees of freedom
# Multiple R-squared:  0.826,   Adjusted R-squared:  0.8077 
# F-statistic:  45.1 on 2 and 19 DF,  p-value: 6.091e-08

El modelo ajustado indica que existe una relación negativa y curvilínea entre el peso del vehículo y su rendimiento en millas por galón. El coeficiente asociado al peso (wt) es negativo y significativo, lo que confirma que los autos más pesados tienden a consumir más combustible. Sin embargo, el término cuadrático (wt²) también resulta significativo y positivo, lo que sugiere que la disminución del rendimiento no es completamente lineal: a medida que el peso aumenta, el efecto negativo se atenúa ligeramente. En conjunto, el modelo explica aproximadamente el 82 % de la variabilidad del rendimiento (R² = 0.826) y presenta un error promedio de alrededor de 2.9 mpg, lo que se considera una precisión aceptable. Estos resultados muestran que el peso del vehículo es un factor determinante del consumo, aunque con un comportamiento no estrictamente lineal.

# ======== ASSESS ========
predicciones <- predict(modelo, newdata = test)

rmse <- sqrt(mean((test$mpg - predicciones)^2))
r2   <- 1 - sum((test$mpg - predicciones)^2) / sum((test$mpg - mean(test$mpg))^2)

cat("RMSE =", round(rmse, 2), "   R² =", round(r2, 3))
# RMSE = 2.09    R² = 0.653
plot(test$mpg, predicciones,
     main = "Valores observados vs. predichos",
     xlab = "Rendimiento real (mpg)",
     ylab = "Predicción del modelo",
     pch = 19, col = "darkgreen")
abline(0, 1, col = "red", lwd = 2, lty = 2)

En este caso, los resultados muestran que el modelo explica alrededor del 65 % de la variabilidad del rendimiento de los vehículos (R² = 0.653), lo que indica una relación moderadamente fuerte entre el peso y el consumo, pero con un margen importante de variación no explicada por el modelo. El RMSE = 2.09 sugiere que, en promedio, las predicciones difieren de los valores reales del rendimiento en unas 2 millas por galón, lo que puede considerarse un error aceptable para un modelo simple. En conjunto, estos valores reflejan que el peso es un factor relevante para estimar el rendimiento, aunque existen otros elementos (como la aerodinámica, la potencia o el tipo de transmisión) que también influyen y no están incluidos en este modelo básico.

2. Método TDSP

2.1. Descripción teórica

El Team Data Science Process (TDSP) fue desarrollado por Microsoft para guiar proyectos de ciencia de datos de forma integral.
Su propósito es conectar la pregunta de negocio con el análisis técnico y la implementación práctica del modelo.

Las fases principales del TDSP son:

  1. Business Understanding (Comprensión del negocio)
  2. Data Acquisition & Understanding (Adquisición y comprensión de los datos)
  3. Modeling (Modelado)
  4. Deployment (Despliegue)
  5. Customer Acceptance (Validación del cliente)

El TDSP busca asegurar que el proceso sea reproducible, medible y útil para la toma de decisiones.


2.2. Ejemplo práctico con una regresión logística

Se usará nuevamente el conjunto de datos mtcars.
El objetivo será predecir si un vehículo tiene alto consumo de combustible, considerando que un automóvil con menos de 20 millas por galón (mpg < 20) se considera de alto consumo.

# ======== BUSINESS UNDERSTANDING ========
mtcars$alto_consumo <- ifelse(mtcars$mpg < 20, 1, 0)

# ======== DATA ACQUISITION & UNDERSTANDING ========
plot(mtcars$wt, mtcars$mpg,
     main = "Peso vs. rendimiento (mpg)",
     xlab = "Peso del vehículo", ylab = "Millas por galón",
     pch = 19, col = "darkblue")

# ======== MODELING ========
modelo_log <- glm(alto_consumo ~ wt + hp, data = mtcars, family = binomial())
summary(modelo_log)
# 
# Call:
# glm(formula = alto_consumo ~ wt + hp, family = binomial(), data = mtcars)
# 
# Coefficients:
#               Estimate Std. Error z value Pr(>|z|)
# (Intercept)   -894.228 365884.162  -0.002    0.998
# wt             202.865  84688.218   0.002    0.998
# hp               2.021    858.062   0.002    0.998
# 
# (Dispersion parameter for binomial family taken to be 1)
# 
#     Null deviance: 4.3860e+01  on 31  degrees of freedom
# Residual deviance: 1.1156e-08  on 29  degrees of freedom
# AIC: 6
# 
# Number of Fisher Scoring iterations: 25

El resultado muestra que el modelo de regresión logística logró clasificar perfectamente los vehículos entre alto y bajo consumo, pero esto produjo un problema conocido como separación perfecta. En este caso, el peso y la potencia distinguen sin error los grupos, haciendo que los coeficientes crezcan hasta valores extremadamente grandes y los errores estándar sean desproporcionados. Por ello, aunque el modelo presenta una desviancia residual prácticamente nula (lo que sugiere ajuste perfecto), sus parámetros no son estadísticamente interpretables: los valores-p cercanos a 1 indican falta de significancia y los signos o magnitudes de los coeficientes carecen de sentido práctico. En síntesis, el modelo predice bien en esta muestra, pero no es estable ni generalizable, por lo que no puede considerarse un modelo válido para interpretación o uso predictivo fuera del conjunto de datos.

# ======== ASSESS ========
prob <- predict(modelo_log, type = "response")
pred_clase <- ifelse(prob >= 0.5, 1, 0)

exactitud <- mean(pred_clase == mtcars$alto_consumo)

TP <- sum(pred_clase == 1 & mtcars$alto_consumo == 1)
FN <- sum(pred_clase == 0 & mtcars$alto_consumo == 1)
sensibilidad <- TP / (TP + FN)

cat("Exactitud =", round(exactitud, 2),
    "   Sensibilidad =", round(sensibilidad, 2))
# Exactitud = 1    Sensibilidad = 1
plot(prob, mtcars$alto_consumo,
     main = "Probabilidad estimada de alto consumo",
     xlab = "Probabilidad predicha", ylab = "Clase real (0=no, 1=sí)",
     pch = 19, col = "darkred")
abline(h = 0.5, col = "gray", lty = 2)

# ======== DEPLOYMENT ========
predecir_consumo <- function(peso, potencia, modelo){
  nueva_data <- data.frame(wt = peso, hp = potencia)
  probabilidad <- predict(modelo, newdata = nueva_data, type = "response")
  return(probabilidad)
}

predecir_consumo(3.0, 120, modelo_log)
#            1 
# 2.220446e-16

3. Conclusiones

  • El método SEMMA organiza el proceso analítico en etapas claras que facilitan la exploración y modelado de datos.
  • El proceso TDSP amplía la mirada, incluyendo la comprensión del problema y el uso del modelo en contextos reales.
  • Ambos métodos buscan ordenar el pensamiento analítico y fomentar el trabajo sistemático en ciencia de datos.

Taller Integrado (Actuarial): SEMMA + TDSP

Predicción del riesgo de siniestro en seguros de autos

1. Contexto

Una aseguradora desea comprender y predecir el riesgo de siniestro en su cartera de autos. Cada registro representa una póliza anual con características del conductor y del vehículo. El objetivo es analizar el riesgo y estimar la probabilidad de siniestro para apoyar decisiones de tarificación y gestión del riesgo.

Los estudiantes aplicarán dos enfoques complementarios:

  • SEMMA, para la exploración y modelado descriptivo del riesgo.
  • TDSP, para el desarrollo de un modelo predictivo de siniestros.

2. Objetivos

  1. Aplicar el método SEMMA para explorar, transformar y modelar de forma descriptiva el comportamiento del riesgo.
  2. Aplicar el proceso TDSP para construir un modelo predictivo (clasificación binaria) de ocurrencia de siniestro.
  3. Formular conclusiones actuariales útiles para la toma de decisiones en tarificación y prevención.

3. Estructura de los datos

Se utilizará un conjunto de datos con la siguiente estructura:

Variable Tipo Descripción
edad_conductor numérica Edad del conductor principal (18–75 años).
antiguedad_vehiculo numérica Años desde la fabricación del vehículo (0–20).
valor_vehiculo numérica Valor asegurado del vehículo (en millones).
region categórica Zona de residencia: Urbana o Rural.
num_siniestros entera Número de siniestros reportados en el año.
siniestro binaria 1 si hubo al menos un siniestro, 0 si no.

Nota: Si no existe la variable siniestro, puede derivarse de num_siniestros (1 si num_siniestros > 0).

# =====================================================
#   GENERACIÓN DE DATOS: RIESGO DE SINIESTRO (ACTUARIAL)
# =====================================================

set.seed(123)   # para reproducibilidad
n <- 3000        # tamaño de la muestra

# ---------------------------
# Variables principales
# ---------------------------
edad_conductor <- sample(18:75, n, replace = TRUE)
antiguedad_vehiculo <- sample(0:20, n, replace = TRUE)
valor_vehiculo <- round(runif(n, 20, 120), 1)  # millones
region <- sample(c("Urbana", "Rural"), n, replace = TRUE, prob = c(0.7, 0.3))

# ---------------------------
# Generación de siniestros
# ---------------------------
# modelo base para probabilidad de siniestro (logit)
# conductores más jóvenes y autos más viejos = mayor riesgo
logit_p <- -4 + 0.05*(60 - edad_conductor) + 
  0.08*antiguedad_vehiculo + 
  0.6*(region == "Urbana")

# convertir logit a probabilidad (logística inversa)
p_siniestro <- exp(logit_p) / (1 + exp(logit_p))

# número de siniestros según probabilidad esperada
num_siniestros <- rpois(n, lambda = p_siniestro * 2)

# variable binaria de siniestro (1 si hay al menos uno)
siniestro <- ifelse(num_siniestros > 0, 1, 0)

# ---------------------------
# Base de datos final
# ---------------------------
datos_siniestros <- data.frame(
  edad_conductor,
  antiguedad_vehiculo,
  valor_vehiculo,
  region,
  num_siniestros,
  siniestro
)

# Vista previa
head(datos_siniestros)

Parte A — Método SEMMA (análisis descriptivo del riesgo)

A.1 Sample

  • Dividir el conjunto de datos en dos subconjuntos: entrenamiento (70%) y prueba (30%).
  • Explicar por qué es importante separar los datos y qué riesgos se evitan al hacerlo.

A.2 Explore

  • Analizar las distribuciones y relaciones entre variables.
  • Graficar el número de siniestros según:
    • la edad del conductor,
    • la región (Urbana o Rural),
    • y la antigüedad del vehículo.
  • Redactar observaciones sobre los patrones encontrados.

A.3 Modify

  • Crear al menos dos nuevas variables o transformaciones que consideren relevantes (por ejemplo, grupos de edad, logaritmo del valor del vehículo, o interacciones).
  • Justificar cómo estas variables podrían mejorar el análisis o la comprensión del riesgo.

A.4 Model

  • Ajustar un modelo descriptivo (por ejemplo, una regresión lineal simple o múltiple) que explique el número de siniestros o una medida de riesgo definida.
  • Comentar los signos esperados de los coeficientes y si coinciden con la intuición actuarial.

A.5 Assess

  • Evaluar el desempeño del modelo con métricas apropiadas (por ejemplo, R² o RMSE).
  • Incluir al menos un gráfico de diagnóstico (residuos, observados vs. predichos, etc.).
  • Interpretar los resultados en términos de riesgo: ¿qué tipo de conductor o vehículo presenta mayor probabilidad de siniestros?

Entregable A: un breve informe con las visualizaciones, interpretación y conclusiones sobre las variables más influyentes en el riesgo observado.


Parte B — Proceso TDSP (modelo predictivo de siniestro)

B.1 Business Understanding

El objetivo es predecir si ocurrirá un siniestro durante el año de la póliza, usando características conocidas del conductor y del vehículo.
La aseguradora desea identificar clientes de alto riesgo para ajustar sus primas o reforzar las estrategias de prevención.

Defina: - Una métrica de éxito (por ejemplo, alcanzar al menos 70 % de exactitud o una sensibilidad mínima de 0.60).
- Un umbral inicial de clasificación (por ejemplo, 0.5).

Comente: ¿Qué implica, en este contexto, clasificar erróneamente a un cliente?


B.2 Data Understanding

  • Revise la estructura del conjunto de datos.
  • Verifique la coherencia de las variables (sin valores faltantes ni negativos).
  • Asegúrese de que todas las variables explicativas se conozcan antes del evento de siniestro (por ejemplo, edad o antigüedad del vehículo).
  • Observe cuántos casos con siniestro = 1 hay; si son muy pocos, comente qué problema podría generar eso en el modelado.

B.3 Modeling

Ajuste un modelo de regresión logística donde la variable dependiente sea siniestro y los predictores sean algunas de las variables explicativas (por ejemplo, edad_conductor, antiguedad_vehiculo, valor_vehiculo y region).

Incluya: 1. El comando de ajuste (glm(...))
2. Un resumen del modelo (summary(...))
3. Una interpretación básica de los signos de los coeficientes: - ¿A mayor antigüedad del vehículo, aumenta o disminuye la probabilidad de siniestro? - ¿La zona urbana presenta más riesgo?


B.4 Assess

Con las probabilidades estimadas, clasifique los casos según el umbral definido (por ejemplo, 0.5).
Luego:

  1. Calcule:
    • Exactitud (Accuracy) → proporción de predicciones correctas.
    • Sensibilidad (True Positive Rate) → proporción de siniestros correctamente identificados.
  2. Repita el cálculo usando un nuevo umbral (0.3 o 0.7).
  3. Compare ambos resultados y responda:
    • ¿Qué cambia al usar un umbral más bajo?
    • ¿Qué sería más importante para la aseguradora: evitar falsos negativos (no detectar un siniestro) o falsos positivos (alertar donde no hay riesgo)?

B.5 Deployment (aplicación práctica)

Describa en pocas líneas cómo se podría usar el modelo dentro de la aseguradora:

  • Para establecer tarifas diferenciadas según el riesgo.
  • Para ofrecer descuentos o educación vial a conductores de bajo riesgo.
  • Para prevenir pérdidas al identificar clientes propensos a siniestros.

Incluya también una reflexión sobre las limitaciones del modelo, como el tamaño de la muestra, variables omitidas o posibles sesgos.


Entregable B:
Un informe corto con las métricas principales del modelo, una breve interpretación de los coeficientes y una propuesta sencilla de cómo usar los resultados en decisiones actuariales.