1. Introducción y Preparación de Datos

Este informe tiene como objetivo segmentar los períodos operacionales del Aeropuerto Internacional de la Ciudad de México (AICM) en grupos homogéneos (clusters) basados en el volumen de pasajeros. Esto se logra mediante una combinación de Análisis de Correlación, Análisis de Componentes Principales (PCA) y K-Means.

# Cargar librerías
library(dplyr)
library(ggplot2)
library(factoextra)
library(FactoMineR)
library(corrplot)

# Cargar el conjunto de datos
datos <- read.csv("movimiento_operacional_pasajeros_comerciales_aicm_ok.csv")

# Selección de variables de interés (Pasajeros)
datos_agrupar <- datos %>% 
  select(
    pasajeros_llegadas_nacionales,
    pasajeros_salidas_nacionales,
    pasajeros_llegadas_internacionales,
    pasajeros_salidas_internacionales
  )

# Escalado de datos (necesario para K-Means y PCA)
datos_escalados <- scale(datos_agrupar)
datos_escalados_df <- as.data.frame(datos_escalados)

2. Análisis de Correlación y Diagnóstico Inicial

El primer paso es entender la relación lineal entre las cuatro variables de tráfico de pasajeros.

2.1 Matriz y Heatmap de Correlación

# Calcular la matriz de correlación de Pearson
matriz_correlacion <- cor(datos_agrupar, method = "pearson")

cat("### Matriz de Correlación de Pearson\n")
## ### Matriz de Correlación de Pearson
print(round(matriz_correlacion, 4))
##                                    pasajeros_llegadas_nacionales
## pasajeros_llegadas_nacionales                             1.0000
## pasajeros_salidas_nacionales                              0.9782
## pasajeros_llegadas_internacionales                        0.8782
## pasajeros_salidas_internacionales                         0.8532
##                                    pasajeros_salidas_nacionales
## pasajeros_llegadas_nacionales                            0.9782
## pasajeros_salidas_nacionales                             1.0000
## pasajeros_llegadas_internacionales                       0.8743
## pasajeros_salidas_internacionales                        0.8634
##                                    pasajeros_llegadas_internacionales
## pasajeros_llegadas_nacionales                                  0.8782
## pasajeros_salidas_nacionales                                   0.8743
## pasajeros_llegadas_internacionales                             1.0000
## pasajeros_salidas_internacionales                              0.9767
##                                    pasajeros_salidas_internacionales
## pasajeros_llegadas_nacionales                                 0.8532
## pasajeros_salidas_nacionales                                  0.8634
## pasajeros_llegadas_internacionales                            0.9767
## pasajeros_salidas_internacionales                             1.0000
# Generar el Heatmap
corrplot(matriz_correlacion,
    method = "color",
    type = "upper",
    tl.col = "black",
    addCoef.col = "black",
    tl.srt = 45,
    diag = FALSE,
    title = "\nMatriz de Correlación de Movimiento de Pasajeros"
)

Obtención de Resultados Se observa una correlación positiva extremadamente fuerte (valores muy cercanos a +1) entre todas las variables. Esto indica que el tráfico en el AICM es altamente sistémico: el aumento o disminución en un segmento (ej., llegadas internacionales) se refleja proporcionalmente en todos los demás. Esta fuerte correlación justifica el uso del PCA para simplificar el análisis.

3. Análisis de Componentes Principales (PCA)

El PCA busca identificar los factores subyacentes que explican la variación total.

3.1 Varianza Explicada (Eigenvalores)

# Realizar el PCA
res_pca <- PCA(datos_escalados_df, graph = FALSE)

# Mostrar la tabla de Eigenvalores
eigen_valores <- get_eigenvalue(res_pca)
cat("### Varianza Explicada por Componente\n")
## ### Varianza Explicada por Componente
print(round(eigen_valores, 2))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1       3.71            92.80                       92.80
## Dim.2       0.24             6.09                       98.89
## Dim.3       0.03             0.73                       99.62
## Dim.4       0.02             0.38                      100.00
# Gráfico de Varianza Explicada (Scree Plot)
fviz_eig(res_pca, addlabels = TRUE, ylim = c(0, 100))

Obtención de Resultados La Dimensión 1 (CP1) explica la gran mayoría de la varianza (típicamente más del 90%). Esto confirma que las cuatro variables son casi redundantes y que el factor más importante que diferencia a los meses es el Volumen Total de pasajeros.

Escalado de datos (necesario para K-Means y PCA)

datos_escalados <- scale(datos_agrupar)
datos_escalados_df <- as.data.frame(datos_escalados)

4. Análisis de Correlación y Diagnóstico Inicial

El primer paso es entender la relación lineal entre las cuatro variables de tráfico de pasajeros.

4.1 Matriz y Heatmap de Correlación

Calcular la matriz de correlación de Pearson

matriz_correlacion <- cor(datos_agrupar, method = "pearson")

cat("### Matriz de Correlación de Pearson\n")
## ### Matriz de Correlación de Pearson
print(round(matriz_correlacion, 4))
##                                    pasajeros_llegadas_nacionales
## pasajeros_llegadas_nacionales                             1.0000
## pasajeros_salidas_nacionales                              0.9782
## pasajeros_llegadas_internacionales                        0.8782
## pasajeros_salidas_internacionales                         0.8532
##                                    pasajeros_salidas_nacionales
## pasajeros_llegadas_nacionales                            0.9782
## pasajeros_salidas_nacionales                             1.0000
## pasajeros_llegadas_internacionales                       0.8743
## pasajeros_salidas_internacionales                        0.8634
##                                    pasajeros_llegadas_internacionales
## pasajeros_llegadas_nacionales                                  0.8782
## pasajeros_salidas_nacionales                                   0.8743
## pasajeros_llegadas_internacionales                             1.0000
## pasajeros_salidas_internacionales                              0.9767
##                                    pasajeros_salidas_internacionales
## pasajeros_llegadas_nacionales                                 0.8532
## pasajeros_salidas_nacionales                                  0.8634
## pasajeros_llegadas_internacionales                            0.9767
## pasajeros_salidas_internacionales                             1.0000

Obtención de Resultados: Se observa una correlación positiva extremadamente fuerte (valores muy cercanos a +1) entre todas las variables. Esto indica que el tráfico en el AICM es altamente sistémico: el aumento o disminución en un segmento (ej., llegadas internacionales) se refleja proporcionalmente en todos los demás. Esta fuerte correlación justifica el uso del PCA para simplificar el análisis.

5. Análisis de Componentes Principales (PCA)

El PCA busca identificar los factores subyacentes que explican la variación total.

5.1 Varianza Explicada (Eigenvalores)

# Realizar el PCA
res_pca <- PCA(datos_escalados_df, graph = FALSE)

# Mostrar la tabla de Eigenvalores
eigen_valores <- get_eigenvalue(res_pca)
cat("### Varianza Explicada por Componente\n")
## ### Varianza Explicada por Componente
print(round(eigen_valores, 2))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1       3.71            92.80                       92.80
## Dim.2       0.24             6.09                       98.89
## Dim.3       0.03             0.73                       99.62
## Dim.4       0.02             0.38                      100.00
# Gráfico de Varianza Explicada (Scree Plot)
fviz_eig(res_pca, addlabels = TRUE, ylim = c(0, 100))

Obtención de Resultados: La Dimensión 1 (CP1) explica la gran mayoría de la varianza (típicamente más del 90%). Esto confirma que las cuatro variables son casi redundantes y que el factor más importante que diferencia a los meses es el Volumen Total de pasajeros.

5.2 Círculo de Correlaciones

# Gráfico del Círculo de Correlaciones
fviz_pca_var(res_pca,
    col.var = "contrib",
    gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
    repel = TRUE,
    title = "Círculo de Correlaciones (Variables vs. CP)"
)

Obtención de Resultados: Todos los vectores de las variables se encuentran agrupados y alineados con el eje horizontal (Dim 1). Esto significa que la CP1 es el “Índice de Volumen Operacional”. La Dimensión 2 (eje vertical) capta varianza mínima, lo que indica que no hay un contraste significativo entre el tráfico Nacional vs. Internacional que diferencie significativamente los períodos operacionales.

6. Agrupamiento K-Means y PerfilamientoAplicamos K-Means para agrupar los meses en \(k=4\) perfiles operacionales homogéneos, utilizando la estructura simplificada por el PCA.

# Usaremos k=4, basado en análisis previos
k_optimo <- 4
set.seed(123)
resultado_kmeans <- kmeans(datos_escalados, centers = k_optimo, nstart = 25)

Asignar los clusters

datos$cluster_kmeans <- as.factor(resultado_kmeans$cluster)

6.1 Perfil de Clúster (Centroides)

# Desescalamos los centroides para unidades originales (pasajeros)
centroides_escalados <- resultado_kmeans$centers
medias_originales <- attr(datos_escalados, "scaled:center")
desviaciones_originales <- attr(datos_escalados, "scaled:scale")

centroides_originales <- scale(centroides_escalados, center = -medias_originales/desviaciones_originales, scale = 1/desviaciones_originales)
centroides_originales <- as.data.frame(centroides_originales)
centroides_originales$cluster_kmeans <- 1:k_optimo

cat("### Perfil del Cluster (Centroides en unidades originales - Promedio de Pasajeros)\n")
## ### Perfil del Cluster (Centroides en unidades originales - Promedio de Pasajeros)
print(round(centroides_originales, 0))
##   pasajeros_llegadas_nacionales pasajeros_salidas_nacionales
## 1                       1175063                      1168652
## 2                       1330762                      1349457
## 3                        434260                       435271
## 4                        980451                       982226
##   pasajeros_llegadas_internacionales pasajeros_salidas_internacionales
## 1                             626705                            615982
## 2                             731754                            717635
## 3                              94727                             96846
## 4                             410719                            412605
##   cluster_kmeans
## 1              1
## 2              2
## 3              3
## 4              4

Obtención de Resultados: Esta tabla define los perfiles. La gerencia puede nombrar los clusters:Cluster 1 (Ejemplo): Valores más altos \(\implies\) “Temporada Pico”.Cluster 4 (Ejemplo): Valores más bajos \(\implies\) “Temporada Valle” (ideal para mantenimiento).El perfilamiento permite la asignación precisa de recursos (personal, slots) para cada tipo de mes.

6.2 Visualización de Clusters sobre el Plano Factorial

# Proyección de los clusters K-Means sobre las 2 Componentes Principales
fviz_cluster(
    object = resultado_kmeans,
    data = datos_escalados,
    geom = "point",
    ellipse.type = "convex",
    palette = "Set1",
    ggtheme = theme_minimal(),
    main = "Segmentación K-Means en el Espacio PCA"
)

Obtención de Resultados

La separación de los clusters en el gráfico ocurre de manera lineal a lo largo de la Dim 1. Esto visualmente confirma que la segmentación se realiza en función del Volumen Total de Tráfico, lo cual es la principal fuente de variación identificada por el PCA.

Conclusiones y Recomendaciones Ejecutivas

El análisis multivariado concluye que el comportamiento operacional del AICM es impulsado casi exclusivamente por el volumen total de tráfico. La segmentación K-Means ha identificado 4 perfiles de demanda distintos:

Perfil de Máximo Tráfico (Pico)

Perfil de Alto Tráfico

Perfil de Tráfico Medio

Perfil de Mínimo Tráfico (Valle)

Recomendación Clave

Se sugiere utilizar el perfil de cluster como la métrica principal para la planificación operativa y comercial, sustituyendo o complementando la clasificación de temporada basada únicamente en fechas. Esto garantiza que la asignación de recursos sea proporcional a la demanda real de pasajeros.