Entendiendo el método AHP-Sort II
Cómo INFUNI calcula tu destino ideal con rigor matemático.
📚 Contenidos
- ¿Qué es AHP?
- Los 7 criterios y cómo se mapean a la BD
- La matriz de Saaty
- Cálculo del vector de prioridades
- Razón de Consistencia (CR)
- Fase de puntuación de alternativas
- Fase Sort II: clasificación por perfiles límite
- Vetos: cuando una métrica es decisiva
- Alertas de sensibilidad
- Resumen del flujo de datos
1. ¿Qué es AHP?
El Proceso Analítico Jerárquico (Analytic Hierarchy Process, AHP) es una técnica estructurada para tomar decisiones complejas con múltiples criterios. En lugar de elegir "al azar", AHP permite comparar criterios entre sí (por ejemplo, Seguridad frente a Ocio) de forma relativa para entender qué es lo que realmente te importa.
AHP-Sort II es una variante que, además de ordenar alternativas, las clasifica en categorías ordinales (Élite, Muy Recomendado, Aceptable, etc.) comparándolas con perfiles de referencia. INFUNI implementa esta variante en ahp-engine.js y la integra en script.js.
2. Los 7 criterios y cómo se mapean a la BD
El sistema maneja 7 criterios. Su nombre en la interfaz no siempre coincide con el campo real almacenado en MongoDB:
| Criterio (interfaz) | Campo en metricas.* (BD) | Notas |
|---|---|---|
transporte | calidadTransporte | — |
ocio | turismo | — |
ocioNocturno | ambienteNocturno | — |
seguridad | seguridad | — |
calidadAcademica | calidadAcademica | — |
conectividad | conectividad | — |
asequibilidad | costeAlquilerMedio | Invertida: a mayor coste, menor score. |
La asequibilidad se normaliza dinámicamente al rango 1–5 sobre el conjunto de ciudades cargadas:
De este modo, la ciudad más barata obtiene un 5 y la más cara un 1, sin necesidad de fijar umbrales arbitrarios.
3. La matriz de Saaty (modo experto)
En el panel de experto, comparas cada criterio frente al resto. Si dices que la Seguridad es "Mucho más importante" que el Ocio, el sistema asigna un valor alto (p. ej. 7). La escala 1–9 de Saaty es la siguiente:
| Valor | Definición |
|---|---|
| 1 | Igual importancia |
| 3 | Importancia moderada de uno sobre otro |
| 5 | Importancia fuerte |
| 7 | Importancia muy fuerte o demostrada |
| 9 | Importancia extrema |
La matriz A es recíproca: si afirmas que i es 7 veces más importante que j, automáticamente se asume que j es 1/7 frente a i.
4. Cálculo del vector de prioridades
Para obtener los pesos (w) a partir de la matriz, el motor utiliza la Media Geométrica Normalizada, una aproximación del autovector principal que es estable y fácil de calcular:
2) Normalizar: w_i = GM_i / Σ GM_k
3) Reescalar 1–5: w_i^slider = w_i / max_k(w_k) · 5
El último paso reescala los pesos al rango 1–5 para que sean compatibles con los sliders de la interfaz, manteniendo las proporciones relativas entre criterios.
5. Razón de Consistencia (CR)
AHP verifica que tus comparaciones no se contradigan. Si afirmas que A > B y B > C, entonces A debe ser > C. El motor calcula:
CR = CI / RI
donde RI es el Índice Aleatorio de Saaty para una matriz de tamaño n:
| n | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|
| RI | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 |
- Si n ≤ 2, la consistencia es perfecta por definición (CR = 0).
- Si CR < 0.1, la matriz se considera consistente. ✅
- Si CR ≥ 0.1, el motor identifica el par de criterios más inconsistente (el que tiene mayor error logarítmico relativo |log(a_ij) − log(w_i / w_j)|) y resalta esa celda en rojo en la tabla para que la revises.
6. Fase de puntuación de alternativas
Cada ciudad recibe una puntuación global a partir de sus métricas y los pesos calculados. Solo se suman los criterios para los que la ciudad tiene datos disponibles en la BD (los faltantes se omiten en numerador y denominador):
Las métricas son los valores 1–5 almacenados en metricas.*. Los pesos son los w_i^slider calculados en la fase AHP (también en escala 1–5).
7. Fase Sort II: clasificación por perfiles límite
A diferencia del AHP tradicional que solo ordena, AHP-Sort II clasifica las ciudades en categorías comparándolas con perfiles límite (b1, b2, …): alternativas hipotéticas que marcan la frontera inferior de cada categoría.
Perfil límite de "🌟 Destino de Élite"
El umbral de cada categoría se calcula con la misma fórmula que para una ciudad real, usando los pesos del usuario:
Algoritmo de clasificación
Las categorías se recorren de mejor a peor. La ciudad recibe la primera cuyo umbral cumple:
8. Vetos: cuando una métrica es decisiva
La suma ponderada del paso 6 es compensatoria: una métrica baja se puede compensar con otra alta. Eso a veces no es deseable. Por ejemplo, una ciudad con una seguridad mínima no debería poder ser clasificada como "Élite" por mucha vida nocturna que tenga.
Para esos casos, se aplica un veto que capa la categoría máxima alcanzable, independientemente del score:
| Criterio | Umbral | Capa a |
|---|---|---|
seguridad | < 2.0 | 🆗 Aceptable |
9. Alertas de sensibilidad
Tras la clasificación, el sistema detecta situaciones límite frente a los umbrales dinámicos:
10. Resumen del flujo de datos
- Entrada: matriz de Saaty (modo experto) o sliders con pesos directos.
- Procesamiento AHP: Media Geométrica Normalizada → test de consistencia (CR) → reescalado a 1–5.
- Agregación: suma ponderada sobre las métricas disponibles en BD, aplicando el mapeo interfaz → BD.
- Cálculo de umbrales dinámicos: el score de cada perfil límite se recalcula con los pesos actuales.
- Clasificación Sort II: comparación del score con los umbrales.
- Veto: métricas críticas (seguridad) por debajo del umbral capan la categoría máxima.
- Alertas de umbral: detección de ciudades cerca del borde (suprimidas si hay veto).
- Salida: ranking visual con clasificación, alertas y vetos; mapa interactivo con marcadores de color por posición.
📖 Ejemplo visual rápido
Seguridad es mucho más importante
Seguridad: 87% | Ocio: 13%