CRISP es un marco general para proyectos de análisis/minería de datos. Define etapas lógicas y agnósticas de herramienta:
CRISP ayuda a no “perderse en el código” y a mantener el norte del negocio.
starwars
(paso a paso)Objetivo juguete: estimar
mass
a partir deheight
.
# 1) Entender el problema (negocio)
# - Pregunta: ¿podemos aproximar mass usando height?
# - Resultado esperado: relación positiva razonable.
# 2) Entender los datos
sw <- dplyr::starwars %>%
janitor::clean_names() %>% # nombres limpios
select(name, species, height, mass) # columnas relevantes
summary(sw) # primer vistazo (NA, rangos)
## name species height mass
## Length:87 Length:87 Min. : 66.0 Min. : 15.00
## Class :character Class :character 1st Qu.:167.0 1st Qu.: 55.60
## Mode :character Mode :character Median :180.0 Median : 79.00
## Mean :174.6 Mean : 97.31
## 3rd Qu.:191.0 3rd Qu.: 84.50
## Max. :264.0 Max. :1358.00
## NA's :6 NA's :28
# 3) Preparar los datos
sw_prep <- sw %>%
mutate(
height = as.numeric(height),
mass = as.numeric(mass)
) %>%
filter(!is.na(height), !is.na(mass)) %>% # remover NA para demo
filter(height > 50, height < 300, # reglas de rango simples
mass > 10, mass < 5000)
# 4) Modelar (sencillo)
mod_crisp <- lm(mass ~ height, data = sw_prep)
# 5) Evaluar (rápido)
summary(mod_crisp) # coeficientes y R^2
##
## Call:
## lm(formula = mass ~ height, data = sw_prep)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.95 -29.51 -20.83 -17.65 1260.29
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11.4868 111.3842 -0.103 0.918
## height 0.6240 0.6262 0.997 0.323
##
## Residual standard error: 169.5 on 57 degrees of freedom
## Multiple R-squared: 0.01712, Adjusted R-squared: -0.0001194
## F-statistic: 0.9931 on 1 and 57 DF, p-value: 0.3232
# 6) Usar (mini demostración)
predict(mod_crisp, data.frame(height = c(160, 180, 200)))
## 1 2 3
## 88.35372 100.83378 113.31385
Ventajas: visión macro alineada a objetivos
actuariales (tarifación, reservas, solvencia), favorece
trazabilidad y comunicación con áreas de
riesgo/negocio.
Desventajas: al ser general, requiere bajar a
artefactos concretos (plan, KPIs, criterios de
validación) para evitar quedarse en lo conceptual.
CRISP-DM define 6 fases con entregables claros:
Es el estándar de facto en la industria por su equilibrio entre método y practicidad.
starwars
(fase a fase)# Fase 1: Business Understanding
# - Objetivo: estimar mass con height.
# - Criterio: signo esperado del coeficiente y ajuste razonable (demo).
# Fase 2: Data Understanding
sw <- dplyr::starwars %>%
janitor::clean_names() %>%
select(name, species, height, mass)
summary(sw) # NA, rangos, consistencia
## name species height mass
## Length:87 Length:87 Min. : 66.0 Min. : 15.00
## Class :character Class :character 1st Qu.:167.0 1st Qu.: 55.60
## Mode :character Mode :character Median :180.0 Median : 79.00
## Mean :174.6 Mean : 97.31
## 3rd Qu.:191.0 3rd Qu.: 84.50
## Max. :264.0 Max. :1358.00
## NA's :6 NA's :28
# Fase 3: Data Preparation
sw_final <- sw %>%
mutate(height = as.numeric(height), mass = as.numeric(mass)) %>%
filter(!is.na(height), !is.na(mass)) %>%
filter(height > 50, height < 300, mass > 10, mass < 5000) %>%
distinct(name, .keep_all = TRUE)
# Fase 4: Modeling
mod_cd <- lm(mass ~ height, data = sw_final)
# Fase 5: Evaluation
summary(mod_cd)
##
## Call:
## lm(formula = mass ~ height, data = sw_final)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.95 -29.51 -20.83 -17.65 1260.29
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11.4868 111.3842 -0.103 0.918
## height 0.6240 0.6262 0.997 0.323
##
## Residual standard error: 169.5 on 57 degrees of freedom
## Multiple R-squared: 0.01712, Adjusted R-squared: -0.0001194
## F-statistic: 0.9931 on 1 and 57 DF, p-value: 0.3232
# Fase 6: Deployment (mini): una función de predicción
predecir_mass <- function(h) predict(mod_cd, data.frame(height = h))
predecir_mass(c(160, 170, 200))
## 1 2 3
## 88.35372 94.59375 113.31385
Ventajas: define artefactos y
evidencia por fase (útil para auditoría, regulador, comités de riesgo),
fortalece gobernanza de modelos.
Desventajas: puede vivirse como carga
documental si no se ajusta con criterio; requiere disciplina
para mantener checklist, diccionarios y bitácoras.
KDD se enfoca en descubrir conocimiento útil a partir de datos:
Es un proceso más académico/exploratorio, raíz de prácticas modernas.
starwars
# 1) Selección
kdd_sel <- dplyr::starwars %>%
janitor::clean_names() %>%
select(name, species, height, mass)
# 2) Preprocesamiento
kdd_pre <- kdd_sel %>%
mutate(height = as.numeric(height), mass = as.numeric(mass)) %>%
filter(!is.na(height), !is.na(mass))
# 3) Transformación (feature simple)
kdd_tra <- kdd_pre %>%
mutate(bmi_aprox = mass / ((height/100)^2))
# 4) Minería de datos (modelo básico)
mod_kdd <- lm(mass ~ height, data = kdd_tra)
# 5) Interpretación/Evaluación
summary(mod_kdd)
##
## Call:
## lm(formula = mass ~ height, data = kdd_tra)
##
## Residuals:
## Min 1Q Median 3Q Max
## -60.95 -29.51 -20.83 -17.65 1260.29
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -11.4868 111.3842 -0.103 0.918
## height 0.6240 0.6262 0.997 0.323
##
## Residual standard error: 169.5 on 57 degrees of freedom
## Multiple R-squared: 0.01712, Adjusted R-squared: -0.0001194
## F-statistic: 0.9931 on 1 and 57 DF, p-value: 0.3232
coef(mod_kdd)
## (Intercept) height
## -11.4868157 0.6240033
predict(mod_kdd, data.frame(height = c(160, 180, 200)))
## 1 2 3
## 88.35372 100.83378 113.31385
Ventajas: promueve exploración y hallazgo de
patrones (tarifación, detección de fraude, segmentación), útil
para crear features.
Desventajas: si se usa solo, puede faltar
gobernanza y alineación a objetivos; combínalo con
CRISP-DM para trazabilidad.
Tu misión: aplicar CRISP, CRISP-DM y KDD a una base actuarial simulada. No hay gráficos (los veremos en otra sesión). Debes explicar en texto tus decisiones y dejar bitácora (data lineage básico) de cada fase.
set.seed(101)
n <- 1000
polizas <- tibble::tibble(
id = 1:n,
edad = sample(18:85, n, replace = TRUE),
genero = sample(c("M","F"), n, replace = TRUE),
siniestros = rpois(n, lambda = 0.25),
valor_aseg = round(rnorm(n, mean = 120000, sd = 25000), 0),
prima = 600 + 15*edad + 250*siniestros + rnorm(n, 0, 400)
)
# Introducimos "ruido" realista
polizas$edad[sample(1:n, 8)] <- c(-3, 0, 130, 200, 500, 5, 150, -10) # rangos imposibles
polizas$valor_aseg[sample(1:n, 10)] <- NA # faltantes
polizas <- polizas %>% janitor::clean_names()
# Vista rápida
head(polizas)
summary(polizas)
## id edad genero siniestros
## Min. : 1.0 Min. :-10.00 Length:1000 Min. :0.000
## 1st Qu.: 250.8 1st Qu.: 33.00 Class :character 1st Qu.:0.000
## Median : 500.5 Median : 51.00 Mode :character Median :0.000
## Mean : 500.5 Mean : 52.51 Mean :0.258
## 3rd Qu.: 750.2 3rd Qu.: 70.00 3rd Qu.:0.000
## Max. :1000.0 Max. :500.00 Max. :3.000
##
## valor_aseg prima
## Min. : 37762 Min. :-121.4
## 1st Qu.:105932 1st Qu.:1098.4
## Median :120944 Median :1434.3
## Mean :122056 Mean :1445.2
## 3rd Qu.:137780 3rd Qu.:1793.8
## Max. :207871 Max. :3039.5
## NA's :10
Objetivo sugerido: explicar prima
con
edad
y siniestros
(y opcionalmente
valor_aseg
).
Tu trabajo: completa los pasos. Deja comentarios de por qué haces cada decisión.
# 1) Entender el problema (negocio)
# TODO: escribe el objetivo y criterio de éxito.
# 2) Entender los datos
# TODO: explora NA, rangos y posibles sesgos.
# 3) Preparar los datos
# TODO: define reglas de rango para edad; decide tratamiento de NA en valor_aseg.
# 4) Modelar
# TODO: ajusta un modelo (p. ej., lm(prima ~ edad + siniestros [+ valor_aseg])).
# 5) Evaluar
# TODO: interpreta signos, magnitudes, R^2 y sentido actuarial.
# 6) Usar
# TODO: crea una mini función o tabla de predicción para 2–3 perfiles.
Preguntas guía (responde en texto): 1. ¿Cuál es el
criterio de éxito actuarial de tu modelo?
2. ¿Qué supuestos hiciste sobre los datos (rangos,
NA)?
3. ¿Qué harías distinto si el uso fuera tarifación real
y no una demo?
Sigue la plantilla y deja evidencia (texto + código) de cada fase.
# Fase 1: Business Understanding
# TODO: define objetivo, restricciones y criterio de éxito.
# Fase 2: Data Understanding
# TODO: resumen de calidad (NA, duplicados, rangos) y riesgos de sesgo.
# Fase 3: Data Preparation
# TODO: decisiones de limpieza, imputación, features y *data lineage*.
# Fase 4: Modeling
# TODO: ajusta y documenta tu(s) modelo(s).
# Fase 5: Evaluation
# TODO: valida técnica y negocio; ¿sirve para la decisión?
# Fase 6: Deployment
# TODO: propone cómo se usaría (reporte, script, API, dashboard) y qué monitorear.
Preguntas guía: 1. ¿Qué artefactos
dejarías para auditoría (checklist, diccionario, bitácora)?
2. ¿Qué riesgos operativos o de modelo anticipas y cómo
los mitigarías?
Apunta a descubrir conocimiento que complemente lo predictivo: crea features y busca patrones.
# 1) Selección
# TODO: elige variables y justifica por qué.
# 2) Preprocesamiento
# TODO: trata NA y rangos; deja nota de decisiones.
# 3) Transformación
# TODO: crea al menos 2 features (ej.: prima_por_mil, siniestros_bin, edad_grupo).
# 4) Minería de datos
# TODO: ajusta 1–2 modelos/patrones (p. ej., lm, reglas simples, segmentación básica).
# 5) Interpretación/Evaluación
# TODO: interpreta hallazgos: ¿qué variables explican mejor y por qué?
Preguntas guía: 1. ¿Qué nuevas
variables resultaron más informativas y cómo lo
comprobaste?
2. ¿Qué patrones descubriste que no eran evidentes en
la descriptiva?