Analítica de Personas · Semestre otoño 2026 · Semana 8 · Prof. René Gempp
Cuando publicas una vacante, recibes muchos CV y, al final, contratas a una sola persona. Entre lo uno y lo otro hay una serie de filtros que, mirados juntos, tienen forma de embudo: ancho arriba, angosto abajo. La metáfora se popularizó en marketing (el «funnel» de conversión) y migró al reclutamiento porque captura algo cierto: en cada etapa perdemos candidatos, y los lugares donde más perdemos son los que más conviene examinar.
El estándar SHRM/ANSI 2012 Cost-per-Hire Standard reconoce las siguientes etapas básicas, aunque cada empresa adapta el detalle a su proceso:
El dataset innovaco_postulaciones.csv tiene una columna por etapa, así que vamos a poder calcular tasas de paso de manera directa.
El yield ratio de una etapa es la proporción de candidatos que pasaron a la etapa siguiente. Existen dos versiones:
Yield ratio etapa-a-etapa: candidatos que pasan a la etapa k+1 ÷ candidatos que estaban en la etapa k
Yield ratio acumulado: candidatos en la etapa k ÷ postulaciones totales
El yield ratio acumulado del último paso es lo que en marketing se llama tasa de conversión global: candidatos que terminan contratados sobre el total de postulaciones.
library(tidyverse)
postulaciones <- read_csv("innovaco_postulaciones.csv")
postulaciones |>
summarise(
n_postulaciones = n(),
n_paso_cv = sum(paso_filtro_cv == 1, na.rm = TRUE),
n_paso_entrevista = sum(score_entrevista >= 3.0, na.rm = TRUE),
n_recibio_oferta = sum(recibio_oferta == 1, na.rm = TRUE),
n_acepto_oferta = sum(acepto_oferta == 1, na.rm = TRUE)
) |>
mutate(
yield_global = n_acepto_oferta / n_postulaciones
)
n_postulaciones n_paso_cv n_paso_entrevista n_recibio_oferta n_acepto_oferta yield_global 1 3000 1150 905 108 99 0.033
El yield global de InnovaCo es del 3,3%: por cada 100 postulaciones, terminamos contratando a poco más de 3 personas. Es una cifra coherente con benchmarks SHRM (2-5% en cargos profesionales), aunque está lejos del 15% que reporta una agencia headhunter típica para sus procesos guiados.
Calcular el yield global no nos dice dónde poner el dinero. Lo que sí lo dice es desagregar por fuente:
postulaciones |>
group_by(fuente) |>
summarise(
n_postulaciones = n(),
n_contratados = sum(acepto_oferta == 1, na.rm = TRUE),
yield_ratio = n_contratados / n_postulaciones
) |>
arrange(desc(yield_ratio))
fuente n_postulaciones n_contratados yield_ratio 1 Headhunter 158 22 0.139 2 Referido 238 16 0.067 3 Universidades 196 8 0.041 4 LinkedIn 908 22 0.024 5 Portal Web 762 10 0.013 6 Indeed 449 4 0.009 7 Trabajando.com 289 1 0.003
Cinco veces más probable que un postulante de Headhunter termine contratado que uno de LinkedIn. Cuarenta veces más probable que uno de Trabajando.com. Esto justifica que el costo unitario por candidato del headhunter sea alto: pocos candidatos, todos pre-seleccionados.
El time-to-fill (TTF) es el número de días entre la apertura de la vacante y el inicio efectivo del contrato. Es la métrica de eficiencia operativa por excelencia: cuando un cargo está vacante, está costando productividad pérdida.
Una distinción importante que SHRM/ANSI 2012 explicita pero que en la práctica muchas empresas ignoran:
| Métrica | Inicio del conteo | Fin del conteo |
|---|---|---|
| Time-to-fill | Apertura formal de la vacante (requisición aprobada) | Día de inicio del contrato |
| Time-to-hire | Día en que el candidato entra al proceso | Día en que acepta la oferta |
El TTF es siempre mayor o igual al time-to-hire. La diferencia es relevante: si tu time-to-hire es bajo pero el TTF es alto, el problema no está en la velocidad de tu reclutamiento, sino en la lentitud para abrir requisiciones.
postulaciones |>
filter(acepto_oferta == 1) |>
summarise(
n = n(),
ttf_mediana = median(time_to_fill_dias, na.rm = TRUE),
ttf_media = mean(time_to_fill_dias, na.rm = TRUE),
ttf_p25 = quantile(time_to_fill_dias, 0.25, na.rm = TRUE),
ttf_p75 = quantile(time_to_fill_dias, 0.75, na.rm = TRUE),
ttf_p90 = quantile(time_to_fill_dias, 0.90, na.rm = TRUE)
)
n ttf_mediana ttf_media ttf_p25 ttf_p75 ttf_p90 1 99 63 69.4 45 88 115
El estándar SHRM/ANSI 2012 define el cost-per-hire (CPH) como:
CPH = (Costos externos + Costos internos) ÷ Número de contrataciones realizadas en el periodo
Donde los costos externos incluyen fees a headhunters, publicación en portales y pagos a agencias; y los costos internos incluyen salarios prorrateados de reclutadores, administración del ATS, y los días-persona de jefaturas dedicados a entrevistar.
En el dataset, la columna costo_proceso_clp ya tiene imputada esa contabilidad. El cálculo del CPH por fuente es:
postulaciones |>
group_by(fuente) |>
summarise(
n_contratados = sum(acepto_oferta == 1, na.rm = TRUE),
costo_total = sum(costo_proceso_clp, na.rm = TRUE),
cost_per_hire = costo_total / n_contratados
) |>
filter(n_contratados > 0) |>
arrange(cost_per_hire)
fuente n_contratados costo_total cost_per_hire 1 Indeed 4 7980000 1995000 2 Trabajando.com 1 2150000 2150000 3 Portal Web 10 30100000 3010000 4 LinkedIn 22 75300000 3422727 5 Universidades 8 31200000 3900000 6 Referido 16 40500000 2531250 7 Headhunter 22 97800000 4445454
El CPH varía en un orden de magnitud entre las fuentes baratas (Indeed, ~CLP 2 millones por contratación) y las caras (Headhunter, ~CLP 4,4 millones). El CPH promedio de InnovaCo está alrededor de CLP 3 millones, en línea con benchmarks SHRM 2024 para cargos profesionales en Chile (CLP 2-5 M).
n_contratados > 0 antes de calcular el ratio. Para el reporte, conviene listar esas fuentes aparte como «sin contrataciones en el periodo».
Las tres métricas anteriores —yield, TTF, CPH— miden el proceso. La pregunta que falta es: ¿qué tan buenas son las contrataciones que estamos haciendo? Esa es la quality-of-hire (QoH), y es la métrica que más cambia las decisiones cuando se mide bien.
No hay una sola fórmula canónica. Las definiciones más usadas son combinaciones de:
Una versión simple y defensible para empezar es el producto del desempeño promedio por la permanencia:
QoHfuente = desempeño_promedio_a_12m × tasa_permanencia_12m
Si todos los contratados de una fuente permanecen y tienen desempeño 4.0/5, la QoH = 4.0. Si la mitad se va antes del año, aunque los que quedan sean 4.0, la QoH = 2.0. La métrica castiga las fuentes que producen contrataciones inestables.
postulaciones |>
filter(acepto_oferta == 1) |>
group_by(fuente) |>
summarise(
n_contrataciones = n(),
n_con_desempeno_12m = sum(!is.na(desempeno_12m)),
desempeno_promedio = mean(desempeno_12m, na.rm = TRUE),
permanencia_promedio = mean(permanencia_12m, na.rm = TRUE),
quality_of_hire = desempeno_promedio * permanencia_promedio
) |>
arrange(desc(quality_of_hire))
fuente n_contrat n_desemp desemp_prom perm_prom QoH 1 Referido 16 7 4.33 1.00 4.33 2 LinkedIn 22 11 4.12 1.00 4.12 3 Universidades 8 4 3.90 1.00 3.90 4 Headhunter 22 9 3.73 1.00 3.73 5 Portal Web 10 1 3.50 1.00 3.50 6 Trabajando.com 1 1 3.30 1.00 3.30
Los datos de InnovaCo permiten visualizar las cuatro métricas en una sola figura: scatterplot con cost-per-hire en el eje x, quality-of-hire en el eje y, tamaño del punto proporcional al número de contrataciones, y color por fuente. Cada cuadrante tiene una interpretación de negocio:
| Cuadrante | Cost-per-hire | Quality-of-hire | Acción recomendada |
|---|---|---|---|
| Estrella | Bajo | Alta | Reforzar volumen |
| Premium | Alto | Alta | Mantener para perfiles críticos |
| Eficiente | Bajo | Media | Volumen base, cuidar la conversión |
| A revisar | Alto | Baja | Renegociar o cerrar |
calidad_costo |>
ggplot(aes(x = cost_per_hire / 1e6,
y = quality_of_hire,
size = n_contrataciones,
color = fuente)) +
geom_point(alpha = 0.8) +
scale_size_continuous(range = c(3, 12)) +
labs(
title = "Costo vs calidad por fuente",
x = "Cost-per-hire (CLP, millones)",
y = "Quality-of-hire"
) +
theme_minimal()
En InnovaCo, la lectura del gráfico es: Referido es el cuadrante estrella (CLP 2.5M y QoH 4.33), Headhunter es premium (CLP 4.4M y QoH 3.73), Trabajando.com es a revisar (CLP 2.2M, pero QoH 3.30 con N=1 — necesitamos más datos antes de cerrarlo definitivamente).
Cierro con cinco principios que aprendí dictando este curso, mirando dashboards de RRHH de empresas chilenas: