1 Análisis de Datos de Waze para Planeación

2 Marco Teórico

El análisis de datos de tráfico es esencial en el contexto urbano actual para mejorar la movilidad y la seguridad vial. Con el crecimiento constante de las ciudades y el aumento en el número de vehículos, es crucial utilizar herramientas y metodologías avanzadas para gestionar el tráfico de manera eficiente.

Las aplicaciones de navegación colaborativa como Waze han revolucionado la recopilación de datos de tráfico. A través de la participación activa de los usuarios, Waze proporciona información en tiempo real sobre las condiciones de las vías, incluyendo reportes de congestión, accidentes, peligros y cierres de vías. Estos datos son valiosos para las autoridades y planificadores urbanos, ya que permiten tomar decisiones informadas basadas en información actual y precisa.

El análisis de datos geoespaciales y la minería de datos son fundamentales para extraer conocimiento de grandes volúmenes de información. Herramientas como R y librerías especializadas como leaflet, spatstat y ggplot2 facilitan el procesamiento y visualización de datos espaciales, permitiendo identificar patrones y tendencias que pueden guiar estrategias para mejorar la infraestructura vial y la gestión del tráfico.


3 Introducción

El presente análisis se enfoca en el estudio de los eventos reportados por los usuarios a través de la aplicación Waze, considerando la totalidad del periodo disponible en el dataset (26 al 28 de septiembre de 2024) sin restricción de fecha. Se analiza cada tipo de evento de forma independiente: peligros (702), cierres de vías (1021), accidentes (122) y congestión (3151).

4 Objetivo

Estudiar la distribución espacial y temporal de todos los eventos reportados en Waze, por tipo de evento y sobre el periodo completo de datos. Se generan mapas interactivos, mapas de calor, análisis de patrones espaciales con test de cuadrantes y función K de Ripley, mapas de densidad para cada categoría, y una visualización 3D de densidad para los eventos con mayor volumen.


5 Metodología CRISP-DM

Fase Descripción
1. Comprensión del Negocio Mejorar la movilidad y seguridad vial mediante el análisis de datos de Waze.
2. Comprensión de los Datos Recopilación y exploración inicial de eventos reportados.
3. Preparación de los Datos Limpieza, conversión de fechas y estandarización de coordenadas.
4. Modelado Mapas interactivos, mapas de calor, análisis de patrones espaciales y visualización 3D.
5. Evaluación Interpretación de resultados y validación de hallazgos.
6. Despliegue Presentación de resultados e implementación de recomendaciones.

6 Metodología

  1. Obtención de Datos: Datos exportados desde Waze en formato Excel, con la totalidad del periodo disponible.
  2. Carga y Preparación: Limpieza, conversión de fechas y estandarización de coordenadas.
  3. Análisis Descriptivo: Frecuencia y distribución de tipos de eventos a lo largo del tiempo.
  4. Análisis Geoespacial: Mapa interactivo y mapa de calor por tipo de evento.
  5. Análisis de Patrones Espaciales: Test de cuadrantes y función K de Ripley.
  6. Mapas de Densidad: Estimación de densidad espacial con spatstat y terra, con sigma ajustado al volumen real de puntos de cada tipo de evento.
  7. Visualización 3D: Superficie de densidad tridimensional para PELIGRO, CONGESTIÓN y ACCIDENTE usando plotly.
  8. Consolidación: Vista sincronizada de los cuatro tipos de eventos.

7 Carga de Datos y Librerías

# ── Librerías ──────────────────────────────────────────────────────────────────
library(readxl)         # Carga de datos desde archivos Excel
library(dplyr)          # Manipulación y transformación de datos
library(lubridate)      # Manejo de fechas y tiempos
library(leaflet)        # Mapas interactivos
library(sf)             # Datos geoespaciales
library(spatstat)       # Análisis de patrones espaciales
library(terra)          # Datos raster y análisis espacial
library(leaflet.extras) # Heatmap en leaflet
library(ggplot2)        # Gráficos
library(leafsync)       # Sincronización de mapas
library(plotly)         # Visualización 3D interactiva
# ── Carga del archivo Excel ────────────────────────────────────────────────────
# Ajusta la ruta si tu archivo está en otra ubicación
#Trama_Waze <- read_excel("C:/Users/User/Downloads/Trama Waze.xlsx")
Trama_Waze <- read_excel("C:/Users/USER ADMIN/Downloads/Trama Waze.xlsx")

# ── Conversión de fechas y extracción de componentes temporales ────────────────
fecha_hora           <- ymd_hms(Trama_Waze$creation_Date)
Trama_Waze$fecha     <- as.Date(fecha_hora)
Trama_Waze$hora      <- hour(fecha_hora)
Trama_Waze$dia       <- day(fecha_hora)
Trama_Waze$mes       <- month(fecha_hora, label = TRUE)

# ── Traducción de tipos de eventos al español ──────────────────────────────────
Trama_Waze$tipo_evento <- recode(Trama_Waze$type,
                                 "ACCIDENT"    = "ACCIDENTE",
                                 "HAZARD"      = "PELIGRO",
                                 "JAM"         = "CONGESTIÓN",
                                 "ROAD_CLOSED" = "VÍA CERRADA")

# ── Vista previa ───────────────────────────────────────────────────────────────
head(Trama_Waze)
## # A tibble: 6 × 22
##      id waze_json_trama_id country reportRating reportByMunicipalityUser
##   <dbl>              <dbl> <chr>          <dbl> <lgl>                   
## 1    16                 14 CO                 2 FALSE                   
## 2    17                 14 CO                 3 FALSE                   
## 3    18                 14 CO                 0 FALSE                   
## 4    20                 15 CO                 2 FALSE                   
## 5    21                 15 CO                 3 FALSE                   
## 6    22                 15 CO                 0 FALSE                   
## # ℹ 17 more variables: confidence <dbl>, reliability <dbl>, type <chr>,
## #   uuid <chr>, roadType <dbl>, magvar <dbl>, subtype <chr>, street <chr>,
## #   location_x <dbl>, location_y <dbl>, pubMillis <dbl>, creation_Date <chr>,
## #   fecha <date>, hora <int>, dia <int>, mes <ord>, tipo_evento <chr>

8 Función Auxiliar: Preparación de Coordenadas

preparar_coords <- function(datos,
                            lat_min  =  4, lat_max  =  5,
                            long_min = -75, long_max = -73) {
  datos$lat  <- datos$location_y / 10^(nchar(datos$location_y) - 1)
  datos$long <- datos$location_x / 10^(nchar(datos$location_x) - 3)
  datos <- datos[datos$lat  > lat_min  & datos$lat  < lat_max  &
                 datos$long > long_min & datos$long < long_max, ]
  return(datos)
}

9 Análisis Temporal de los Eventos

ggplot(Trama_Waze, aes(x = factor(hora, levels = 0:23))) +
  geom_bar(fill = "orange", color = "black") +
  labs(title = "Frecuencia de Eventos por Hora del Día — Periodo Completo",
       x = "Hora del Día", y = "Frecuencia") +
  theme_minimal() +
  scale_x_discrete(drop = FALSE)

cat("Distribución de eventos por tipo:\n")
## Distribución de eventos por tipo:
print(table(Trama_Waze$tipo_evento))
## 
##   ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
##         125        3205         719        1021

Frecuencia de Eventos por Hora del Día: El gráfico muestra que los eventos de Waze se concentran principalmente durante las horas de mayor actividad vehicular, con picos visibles en las franjas de la mañana (6–9 h) y tarde (16–19 h), que corresponden a las horas pico de movilidad urbana. La franja nocturna (23–5 h) registra la menor cantidad de reportes, lo que es consistente con la reducción del tráfico en ese horario. Los eventos de congestión, al ser el tipo más frecuente (3151 registros), dominan el patrón general de la distribución horaria. El periodo analizado cubre únicamente tres días (26–28 de septiembre de 2024), por lo que los patrones observados pueden estar influenciados por condiciones específicas de esos días. Es posible que los picos horarios reflejen tanto la concentración real de incidentes como la mayor disposición de conductores a reportar eventos durante horas de alta afluencia.


10 Distribución General de Eventos

frecuencia_eventos <- Trama_Waze %>%
  group_by(tipo_evento) %>%
  summarise(Frecuencia = n()) %>%
  arrange(desc(Frecuencia))

ggplot(frecuencia_eventos, aes(x = reorder(tipo_evento, -Frecuencia),
                               y = Frecuencia,
                               fill = tipo_evento)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Distribución de Tipos de Eventos — Periodo Completo",
       x = "Tipo de Evento", y = "Frecuencia", fill = "Tipo de Evento") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_brewer(palette = "Set2")

Distribución de Tipos de Eventos: La congestión es con diferencia el evento más reportado, con 3151 casos, representando cerca del 63 % del total de reportes en el periodo analizado. Los cierres de vías ocupan el segundo lugar con 1021 registros (20%, aproximadamente), lo que indica una alta actividad de intervenciones viales o eventos que bloquean carriles durante el periodo. Los peligros suman 719 reportes (≈14 %), reflejando condiciones de riesgo en vías como objetos en la calzada, vehículos detenidos o superficies dañadas. Los accidentes son el tipo menos frecuente con apenas 122 casos (≈2 %), aunque su impacto sobre la seguridad vial es desproporcionadamente mayor que su volumen sugiere. La proporción elevada de cierres de vías respecto a accidentes sugiere que muchas interrupciones del flujo no se deben a siniestros sino a obras o eventos planificados. Este perfil de distribución es clave para priorizar recursos: la congestión requiere estrategias de gestión del flujo, mientras los accidentes exigen intervenciones de seguridad vial.


11 Análisis de Eventos PELIGRO

11.1 Filtrado

peligro <- Trama_Waze %>%
  filter(tipo_evento == "PELIGRO") %>%
  preparar_coords()

cat("Total eventos PELIGRO:", nrow(peligro), "\n")
## Total eventos PELIGRO: 702
cat("Periodo:", as.character(min(peligro$fecha, na.rm = TRUE)),
    "→", as.character(max(peligro$fecha, na.rm = TRUE)), "\n")
## Periodo: 2024-09-26 → 2024-09-28
# Margen global usado en todos los owin
margen <- 0.001

11.2 Mapa Interactivo — PELIGRO

m_peligro <- leaflet(peligro) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~paste("Hora:", hora, "| Fecha:", fecha)
  ) %>%
  addControl(html = "<h3>Mapa de Riesgos</h3>", position = "topleft")

m_peligro

Mapa Interactivo de Riesgos: El mapa interactivo muestra la distribución de los 702 eventos PELIGRO en el área de estudio, concentrados principalmente en las vías principales cerca de Cajicá por donde se debe pasar para ir desde Bogotá hacia los municipios más al norte del país (VAriante Cajicá y Vía Bogotá Tunja).

Al hacer zoom se identifican zonas con mayor densidad de marcadores, especialmente en intersecciones principales y vías de alta velocidad donde los peligros son más frecuentes. La función de agrupamiento (clustering) facilita la exploración visual: los clústeres más grandes señalan sectores con múltiples reportes simultáneos o recurrentes. La información de hora disponible en las etiquetas permite identificar si ciertos puntos concentran reportes en franjas horarias específicas, indicando riesgos vinculados al tráfico pico. La distribución no es uniforme: algunas zonas presentan alta concentración mientras otras zonas amplias quedan sin reportes, lo que puede reflejar tanto diferencias reales en riesgo como sesgos en la cobertura de usuarios de Waze. Este mapa es una herramienta de exploración inicial; los mapas de calor y densidad a continuación permiten una cuantificación más rigurosa.

11.3 Mapa de Calor — PELIGRO

leaflet(peligro) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng    = ~long,
    lat    = ~lat,
    blur   = 20,
    max    = 0.05,
    radius = 15
  ) %>%
  addLegend("bottomright",
            title  = "Mapa de Calor de Riesgos",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

Mapa de Calor de Riesgos: El mapa de calor revela núcleos de alta densidad de peligros (zonas rojas y amarillas) ubicados en corredores viales específicos, con gradientes de intensidad que permiten identificar jerarquías de riesgo. Las zonas rojas representan los focos de mayor acumulación de reportes y deben ser priorizadas para inspección y mantenimiento preventivo de infraestructura. Las zonas verdes y azules indican baja incidencia de peligros, aunque no necesariamente ausencia de riesgo real, pues pueden reflejar zonas con menor densidad de usuarios de Waze. La extensión espacial del calor sugiere que los riesgos no se concentran en puntos aislados sino en segmentos de vía con longitud considerable, lo que apunta a problemas estructurales o de mantenimiento de tramos completos. En la parte final del documento, se pretende mostrar un mapa de densidad con una estimación similar pero en 3D. El mapa de calor sobre las vías es más visual, pero menos preciso cuantitativamente. Por lo cual se presentan ambos para que se observe de mejor forma la importancia del efecto.

11.4 Análisis Espacial — PELIGRO

zona_p <- owin(
  xrange = c(min(peligro$long) - margen, max(peligro$long) + margen),
  yrange = c(min(peligro$lat)  - margen, max(peligro$lat)  + margen)
)

patron_p <- ppp(x = peligro$long, y = peligro$lat, window = zona_p)

plot(quadratcount(patron_p, nx = 5, ny = 5),
     main = "Patrón de Puntos y Test de Cuadrantes — PELIGRO")
points(patron_p, col = "red")

plot(Kest(patron_p), main = "Función K-Estimación — PELIGRO")

Test de Cuadrantes y Función K (PELIGRO): El test de cuadrantes divide el área de estudio en 25 celdas (5×5) y cuenta los eventos en cada una; las diferencias entre celdas confirman que los peligros no se distribuyen de forma aleatoria en el espacio: hay celdas con concentraciones notablemente superiores al promedio. Los cuadrantes con mayor recuento corresponden a las zonas de mayor actividad vial, como intersecciones de vías principales o corredores con alto volumen de tránsito. La función K de Ripley compara la distribución observada (línea negra) con la esperada bajo completa aleatoriedad espacial (línea roja punteada): cuando la curva observada supera la teórica, indica agrupamiento espacial de los eventos. Para PELIGRO, la curva K empírica se ubica consistentemente por encima de la teórica a todas las distancias evaluadas, lo que confirma que los peligros tienden a concentrarse en clusters geográficos en lugar de dispersarse aleatoriamente. Este agrupamiento tiene implicaciones directas de planificación: en lugar de distribuir recursos de mantenimiento uniformemente, las intervenciones deben focalizarse en los sectores donde la función K evidencia mayor concentración.

El gradiente de color permite diferenciar entre zonas de riesgo alto, moderado y bajo, facilitando la jerarquización territorial de intervenciones con recursos limitados. La forma y extensión de los núcleos de densidad alta sugiere que los riesgos siguen trazados viales concretos (corredores lineales, de mayor velocidad y tránsito) más que distribuciones puntuales aisladas.


12 Análisis de Cierres de Vías

12.1 Filtrado

via_cerrada <- Trama_Waze %>%
  filter(tipo_evento == "VÍA CERRADA") %>%
  preparar_coords()

cat("Total eventos VÍA CERRADA:", nrow(via_cerrada), "\n")
## Total eventos VÍA CERRADA: 1021
cat("Periodo:", as.character(min(via_cerrada$fecha, na.rm = TRUE)),
    "→", as.character(max(via_cerrada$fecha, na.rm = TRUE)), "\n")
## Periodo: 2024-09-26 → 2024-09-28

12.2 Mapa Interactivo — VÍA CERRADA

m_via_cerrada <- leaflet(via_cerrada) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~paste("Hora:", hora, "| Fecha:", fecha)
  ) %>%
  addControl(html = "<h3>Mapa de Cierre de Vías</h3>", position = "topleft")

m_via_cerrada

Mapa Interactivo de Cierre de Vías: Con 1021 eventos registrados, los cierres de vías son el segundo tipo de evento más frecuente, y su distribución espacial muestra una concentración marcada en zonas específicas del área de estudio. La visualización en clústeres revela que muchos cierres ocurren en proximidad geográfica, lo que puede indicar zonas con obras en curso, eventos masivos o vías con mantenimiento recurrente. La exploración interactiva permite identificar segmentos de vía donde los cierres se repiten en diferentes momentos del día, evidenciando problemas crónicos de gestión vial. Algunos puntos aislados fuera de los clústeres principales pueden corresponder a cierres de emergencia o incidentes no planificados que afectan vías secundarias. La comparación visual con el mapa de congestión es reveladora: muchos focos de cierre de vías coinciden espacialmente con los focos de congestión, confirmando la relación causal entre ambos fenómenos. Este mapa es especialmente útil para planificadores de rutas alternativas: los sectores con mayor densidad de cierres deben tener rutas de desvío preestablecidas y señalizadas.

12.3 Mapa de Calor — VÍA CERRADA

leaflet(via_cerrada) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng    = ~long,
    lat    = ~lat,
    blur   = 15,
    max    = 0.08,
    radius = 18
  ) %>%
  addLegend("bottomright",
            title  = "Mapa de Calor de Cierres de Vías",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

Mapa de Calor de Cierres de Vías: El mapa de calor de cierres muestra una distribución espacial con focos bien definidos, lo que contrasta con la dispersión más amplia observada en los eventos de peligro. Las zonas rojas identifican corredores o intersecciones donde los cierres de vías son recurrentes, posiblemente asociados a obras de infraestructura, eventos culturales o deportivos en el periodo analizado. La intensidad máxima se concentra en áreas relativamente pequeñas, lo que sugiere que los cierres no afectan de manera uniforme toda la red vial sino que impactan puntos neurálgicos específicos. Los radios de calor más pequeños utilizados para este tipo permiten mayor precisión espacial comparado con el mapa de congestión, apropiado dado que los cierres son eventos puntuales. La superposición de este mapa con la red vial principal revelaría si los cierres afectan arterias primarias (mayor impacto en movilidad) o vías secundarias (impacto más localizado). La planificación de desvíos para los sectores en rojo debería ser parte de los protocolos estándar de gestión de tráfico del área metropolitana.

12.4 Análisis Espacial — VÍA CERRADA

zona_vc <- owin(
  xrange = c(min(via_cerrada$long) - margen, max(via_cerrada$long) + margen),
  yrange = c(min(via_cerrada$lat)  - margen, max(via_cerrada$lat)  + margen)
)

patron_vc <- ppp(x = via_cerrada$long, y = via_cerrada$lat, window = zona_vc)

plot(quadratcount(patron_vc, nx = 5, ny = 5),
     main = "Patrón de Puntos y Test de Cuadrantes — VÍA CERRADA")
points(patron_vc, col = "red")

plot(Kest(patron_vc), main = "Función K-Estimación — VÍA CERRADA")

Test de Cuadrantes y Función K (VÍA CERRADA): El test de cuadrantes para cierres de vías muestra una heterogeneidad espacial pronunciada: algunas celdas concentran cientos de eventos mientras la mayoría registra pocos o ninguno, evidenciando un patrón fuertemente agrupado. Esta concentración extrema en pocas celdas es más marcada que en PELIGRO, lo que confirma que los cierres responden a factores muy localizados (obras, eventos) en lugar de condiciones distribuidas por toda la red. La función K de Ripley para VÍA CERRADA muestra una desviación positiva muy pronunciada respecto a la aleatoriedad esperada, siendo la más intensa de todos los tipos de eventos analizados. Esta fuerte señal de agrupamiento indica que los cierres de vías se generan en procesos espacialmente dependientes: donde hay un cierre, hay alta probabilidad de que haya más cierres en los alrededores. Desde el punto de vista operativo, esto sugiere que las intervenciones de cierre tienden a implementarse en sectores delimitados del territorio (por ejemplo, zonas de obras lineales o polígonos de eventos).

Mapa de Densidad de Cierres de Vías: El mapa de densidad de cierres (sigma = 0.003°, ≈330 m) usa un suavizado más fino que el de peligros, lo que permite delimitar con mayor precisión los focos de cierre sin inflar artificialmente zonas sin eventos. Los picos de densidad máxima (zonas rojas) coinciden con los sectores identificados en el mapa de calor y el test de cuadrantes, validando la robustez del análisis espacial con diferentes métodos. La precisión de este mapa es especialmente útil para correlacionar los cierres con obras de infraestructura registradas en bases de datos municipales, permitiendo confirmar si los focos responden a causas planificadas o emergentes. Los sectores con densidad alta y sostenida a lo largo de un corredor lineal pueden indicar obras de larga duración que requieren planificación de desvíos permanentes durante el periodo de intervención. Cruzar este mapa con datos de tiempos de viaje y velocidades promedio permitiría cuantificar el impacto de los cierres en la movilidad general de la ciudad.


13 Análisis de Accidentes

13.1 Filtrado

accidente <- Trama_Waze %>%
  filter(tipo_evento == "ACCIDENTE") %>%
  preparar_coords()

cat("Total eventos ACCIDENTE:", nrow(accidente), "\n")
## Total eventos ACCIDENTE: 122
cat("Periodo:", as.character(min(accidente$fecha, na.rm = TRUE)),
    "→", as.character(max(accidente$fecha, na.rm = TRUE)), "\n")
## Periodo: 2024-09-26 → 2024-09-28

13.2 Mapa Interactivo — ACCIDENTE

m_accidente <- leaflet(accidente) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~paste("Hora:", hora, "| Fecha:", fecha)
  ) %>%
  addControl(html = "<h3>Mapa de Accidentes</h3>", position = "topleft")

m_accidente

Mapa Interactivo de Accidentes: Con solo 122 accidentes en el periodo analizado, los marcadores individuales son claramente visibles en el mapa, lo que permite explorar la ubicación exacta de cada siniestro. A pesar del bajo volumen, se observan zonas donde los accidentes se repiten, indicando intersecciones o segmentos de vía con condiciones que favorecen la siniestralidad de forma recurrente, como lo es la gran afluencia de tráfico en la variante de Cajicá. La distribución de accidentes no coincide necesariamente con las zonas de mayor congestión, lo que sugiere que los accidentes pueden ocurrir tanto en condiciones de tráfico intenso como en vías de alta velocidad con menor volumen de vehículos. La información horaria en las etiquetas permite identificar si los accidentes se concentran en momentos específicos del día (horas pico, madrugada), lo que orienta estrategias de prevención diferenciadas por franja horaria.

13.3 Mapa de Calor — ACCIDENTE

leaflet(accidente) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng    = ~long,
    lat    = ~lat,
    blur   = 15,
    max    = 0.08,
    radius = 16
  ) %>%
  addLegend("bottomright",
            title  = "Mapa de Calor de Accidentes",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

Mapa de Calor de Accidentes: El mapa de calor de accidentes permite identificar zonas de concentración a pesar del bajo volumen total, revelando sectores donde los siniestros tienden a repetirse en el espacio. Las zonas de mayor intensidad (amarillo a rojo) señalan intersecciones o segmentos de vía con condiciones estructurales que elevan el riesgo: geometría desfavorable, falta de señalización, visibilidad reducida o alta velocidad operacional. La dispersión espacial de los accidentes es mayor que la de los cierres de vías, lo que refleja la naturaleza más aleatoria e impredecible de los siniestros respecto a las intervenciones planificadas. Los parámetros de visualización (blur=15, radius=16) balancean entre precisión espacial y visibilidad: con solo 122 puntos, un radio mayor habría producido manchas engañosamente grandes. Las zonas con calor moderado (verde-amarillo) merecen atención preventiva antes de que acumulen más siniestros; en seguridad vial, actuar antes del umbral crítico es más costo-efectivo que intervenir después. La ausencia de calor en zonas con alto tráfico puede indicar infraestructura de buena calidad o simplemente baja cobertura de usuarios de Waze que reporten accidentes en esas áreas.

13.4 Análisis Espacial — ACCIDENTE

zona_ac <- owin(
  xrange = c(min(accidente$long) - margen, max(accidente$long) + margen),
  yrange = c(min(accidente$lat)  - margen, max(accidente$lat)  + margen)
)

patron_ac <- ppp(x = accidente$long, y = accidente$lat, window = zona_ac)

plot(quadratcount(patron_ac, nx = 5, ny = 5),
     main = "Patrón de Puntos y Test de Cuadrantes — ACCIDENTE")
points(patron_ac, col = "red")

plot(Kest(patron_ac), main = "Función K-Estimación — ACCIDENTE")

Test de Cuadrantes y Función K (ACCIDENTE): El test de cuadrantes para accidentes refleja la baja densidad del fenómeno: con solo 122 eventos en un área extensa, la mayoría de celdas tiene pocos puntos y algunas aparecen vacías, lo que limita la resolución del análisis pero no invalida las conclusiones. Las celdas con mayor recuento identifican zonas de siniestralidad concentrada que deben compararse con el conocimiento local de la red vial para confirmar si corresponden a puntos negros conocidos. La función K de Ripley para ACCIDENTE es la más informativa del análisis: si la curva empírica supera la teórica, confirma que incluso con pocos eventos los accidentes muestran agrupamiento espacial, lo que descarta la hipótesis de distribución puramente aleatoria. Un agrupamiento detectado en la función K implica que los accidentes responden a condicionantes espaciales locales (diseño vial, visibilidad, velocidad) y no a simple azar, lo cual justifica intervenciones de infraestructura focalizadas. La interpretación de la función K con pocos puntos requiere cautela estadística; los resultados son indicativos y deben complementarse con análisis multitemporal cuando se disponga de datos de periodos más largos. La combinación del test de cuadrantes y la función K proporciona evidencia espacial suficiente para argumentar la necesidad de auditorías de seguridad vial en los sectores identificados como focos de siniestralidad.

Mapa de Densidad de Accidentes: El mapa de densidad de accidentes usa el mismo sigma que PELIGRO (0.008°, ≈880 m) para garantizar visibilidad con el bajo volumen de eventos; este suavizado es intencionalmente mayor que el usado para cierres de vías. Las zonas rojas son relativamente escasas, lo que refleja fielmente el bajo número de accidentes; sin embargo, su posición geográfica es precisa y accionable para las autoridades de seguridad vial. Los núcleos de densidad alta identifican los puntos negros de accidentalidad del área: lugares donde la probabilidad estadística de que ocurra un accidente es significativamente superior al promedio. Las zonas con densidad moderada (verde-amarillo) que no han alcanzado el umbral de punto negro merecen monitoreo preventivo para evitar que la acumulación de incidentes las eleve a categoría crítica.


14 Análisis de Congestión

14.1 Filtrado

congestion <- Trama_Waze %>%
  filter(tipo_evento == "CONGESTIÓN") %>%
  preparar_coords()

cat("Total eventos CONGESTIÓN:", nrow(congestion), "\n")
## Total eventos CONGESTIÓN: 3151
cat("Periodo:", as.character(min(congestion$fecha, na.rm = TRUE)),
    "→", as.character(max(congestion$fecha, na.rm = TRUE)), "\n")
## Periodo: 2024-09-26 → 2024-09-28

14.2 Mapa Interactivo — CONGESTIÓN

m_congestion <- leaflet(congestion) %>%
  addTiles() %>%
  addCircleMarkers(
    lng            = ~long,
    lat            = ~lat,
    clusterOptions = markerClusterOptions(),
    label          = ~paste("Hora:", hora, "| Fecha:", fecha)
  ) %>%
  addControl(html = "<h3>Mapa de Congestión</h3>", position = "topleft")

m_congestion

Mapa Interactivo de Congestión: Con 3151 eventos, la congestión es el fenómeno dominante del dataset y su mapa interactivo muestra la red vial afectada con mayor claridad que cualquier otro tipo de evento analizado. Los clústeres de mayor tamaño revelan los corredores de mayor congestión recurrente: arterias principales, accesos a zonas comerciales o industriales y nodos de intercambio modal. Al hacer zoom hacia los clústeres más grandes, se pueden identificar intersecciones específicas donde la congestión se concentra, lo que orienta inversiones en semaforización inteligente o control de accesos. La distribución espacial de la congestión sigue claramente la traza de la red vial principal, a diferencia de los accidentes que presentan más dispersión; esto confirma que la congestión es un fenómeno estructural ligado al diseño de la red. La información de hora en las etiquetas permite distinguir si los clústeres se mantienen estables durante todo el día o si corresponden exclusivamente a horas pico, diferencia crítica para dimensionar las intervenciones necesarias. Este mapa es la base para la priorización de intervenciones: los clústeres más grandes en los corredores más importantes deben ser el punto de partida de cualquier plan de gestión de tráfico.

14.3 Mapa de Calor — CONGESTIÓN

Sin intensity para que cada punto contribuya por igual y el color refleje genuinamente dónde se acumula la congestión, sin sesgo por la hora del reporte.

leaflet(congestion) %>%
  addProviderTiles("OpenStreetMap") %>%
  addHeatmap(
    lng    = ~long,
    lat    = ~lat,
    blur   = 25,
    max    = 0.05,
    radius = 20
  ) %>%
  addLegend("bottomright",
            title  = "Mapa de Calor de Congestión",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))

Mapa de Calor de Congestión: El mapa de calor de congestión es el más informativo del conjunto: con 3151 eventos distribuidos en el área de estudio, muestra con claridad la topografía del tráfico urbano durante el periodo analizado. Las zonas rojas identifican los corredores de congestión crónica donde la frecuencia de reportes es máxima, señalando los cuellos de botella estructurales de la red vial que requieren soluciones a mediano y largo plazo. Es decir las vías principales por las cuales pasan los vehículos para municipios al norte de Cajicá, en particular la variante y la salida a la vía Bogotá Tunja. La forma alargada de los focos de calor (siguiendo la dirección de las vías) confirma que la congestión es un fenómeno de corredor, no puntual, lo que requiere soluciones a escala de tramo completo.

14.4 Análisis Espacial — CONGESTIÓN

zona_cg <- owin(
  xrange = c(min(congestion$long) - margen, max(congestion$long) + margen),
  yrange = c(min(congestion$lat)  - margen, max(congestion$lat)  + margen)
)

patron_cg <- ppp(x = congestion$long, y = congestion$lat, window = zona_cg)

plot(quadratcount(patron_cg, nx = 5, ny = 5),
     main = "Patrón de Puntos y Test de Cuadrantes — CONGESTIÓN")
points(patron_cg, col = "red")

plot(Kest(patron_cg), main = "Función K-Estimación — CONGESTIÓN")

Test de Cuadrantes y Función K (CONGESTIÓN): Con 3151 puntos, el test de cuadrantes de congestión produce los recuentos más altos y estables del análisis: las celdas con más eventos llegan a concentrar decenas o cientos de reportes, mostrando la densidad del fenómeno. La distribución entre celdas no es uniforme: los cuadrantes que cubren los corredores principales acumulan varios veces más eventos que los que cubren zonas residenciales o periféricas, evidenciando la estructura radial o en corredor de la congestión urbana. La función K de Ripley para CONGESTIÓN muestra el agrupamiento espacial más robusto de todos los tipos analizados, dado el alto número de puntos: la curva empírica supera ampliamente la teórica en todas las distancias evaluadas. El exceso de la curva K observada respecto a la teórica es estadísticamente muy significativo con 3151 puntos, confirmando sin ambigüedad que la congestión no es aleatoria en el espacio sino que responde a la estructura de la red vial. La escala a la que la función K muestra mayor separación entre curvas indica el radio de influencia de los corredores congestionados: zonas extensas donde la congestión en un punto se propaga y correlaciona con la de los puntos vecinos. Este resultado es la base estadística que justifica los programas de gestión de demanda (restricciones de circulación, pico y placa, incentivos al transporte público, peajes internos) como estrategias sistémicas en lugar de intervenciones punto a punto.


15 Consolidación de Mapas

Vista sincronizada de los cuatro tipos de eventos. Al desplazarse o hacer zoom en uno, los demás se sincronizan automáticamente.

leafsync::sync(m_peligro, m_accidente, m_congestion, m_via_cerrada)

Vista Consolidada de los Cuatro Tipos de Eventos: La vista sincronizada permite comparar simultáneamente la distribución espacial de todos los tipos de eventos, revelando patrones de co-ocurrencia y diferencias estructurales entre fenómenos. Se observa que la congestión y los cierres de vías tienden a solaparse espacialmente en varios corredores, lo que confirma la relación causal entre ambos: los cierres generan congestión aguas arriba y en las rutas alternativas. Los accidentes muestran una distribución diferente: algunos focos coinciden con zonas de alta congestión (accidentes relacionados con el tráfico denso) pero otros aparecen en zonas con pocos eventos de otros tipos (accidentes en vías de alta velocidad o con visibilidad reducida). Los peligros tienen su propio patrón espacial, parcialmente superpuesto con la congestión pero con núcleos propios que pueden corresponder a deterioro de infraestructura en zonas que no necesariamente son las más congestionadas. La sincronización de zoom facilita la identificación de zonas de riesgo compuesto: sectores donde coinciden alta congestión, peligros frecuentes y accidentes, que deben ser la prioridad de intervención integral.


16 Visualización 3D de Densidad Espacial

La superficie tridimensional permite ver la topografía del riesgo: los picos representan las zonas de mayor concentración de eventos. El eje Z muestra la densidad estimada normalizada (0 = sin eventos, 1 = máxima concentración).

im_p_3d <- density(patron_p, sigma = 0.008, dimyx = c(80, 80))
z_p <- t(im_p_3d$v)
x_p <- im_p_3d$xcol
y_p <- im_p_3d$yrow
z_p <- (z_p - min(z_p, na.rm = TRUE)) /
       (max(z_p, na.rm = TRUE) - min(z_p, na.rm = TRUE))

plot_ly(x = ~x_p, y = ~y_p, z = ~z_p, type = "surface",
  colorscale = list(c(0,"rgb(0,0,128)"), c(0.3,"rgb(0,128,0)"),
                    c(0.6,"rgb(255,255,0)"), c(1,"rgb(255,0,0)")),
  showscale = TRUE,
  colorbar  = list(title = "Densidad\nnormalizada")) %>%
  layout(title = "Superficie de Densidad 3D — PELIGRO",
    scene = list(xaxis = list(title = "Longitud"),
                 yaxis = list(title = "Latitud"),
                 zaxis = list(title = "Densidad"),
                 camera = list(eye = list(x = 1.5, y = -1.8, z = 1.2))))

Superficie 3D de Densidad (PELIGRO): La superficie tridimensional de densidad de peligros convierte los datos espaciales en una representación intuitiva donde la altura de los picos es proporcional a la concentración local de eventos. Los picos más elevados (color rojo, altura máxima) corresponden exactamente a los núcleos identificados en los mapas 2D, validando la consistencia del análisis y añadiendo una dimensión visual que facilita la comunicación de resultados. La forma y extensión de los picos revela si los focos de peligro son puntuales (picos estrechos y agudos) o de corredor (crestas alargadas), información que orienta el tipo de intervención más adecuada. Las zonas de la superficie con altura cercana a cero corresponden al fondo difuso del área sin eventos significativos; el corte de intensidad > 0.01 aplicado previamente elimina este ruido de la visualización 2D pero en 3D se aprecia todo el gradiente.

im_cg_3d <- density(patron_cg, dimyx = c(80, 80))
z_cg <- t(im_cg_3d$v)
x_cg <- im_cg_3d$xcol
y_cg <- im_cg_3d$yrow
z_cg <- (z_cg - min(z_cg, na.rm = TRUE)) /
        (max(z_cg, na.rm = TRUE) - min(z_cg, na.rm = TRUE))

plot_ly(x = ~x_cg, y = ~y_cg, z = ~z_cg, type = "surface",
  colorscale = list(c(0,"rgb(0,0,128)"), c(0.3,"rgb(0,128,0)"),
                    c(0.6,"rgb(255,255,0)"), c(1,"rgb(255,0,0)")),
  showscale = TRUE,
  colorbar  = list(title = "Densidad\nnormalizada")) %>%
  layout(title = "Superficie de Densidad 3D — CONGESTIÓN",
    scene = list(xaxis = list(title = "Longitud"),
                 yaxis = list(title = "Latitud"),
                 zaxis = list(title = "Densidad"),
                 camera = list(eye = list(x = 1.5, y = -1.8, z = 1.2))))

Superficie 3D de Densidad (CONGESTIÓN): La superficie 3D de congestión es visualmente la más compleja del análisis: con 3151 puntos, genera una topografía de múltiples picos y crestas que refleja la estructura de la red vial congestionada. Las crestas lineales (elevaciones alargadas que siguen una dirección) corresponden a corredores viales con congestión sostenida a lo largo de su trazado, mientras los picos aislados señalan intersecciones o nodos de alta concentración. La altura relativa de los picos permite comparar directamente la intensidad de la congestión entre diferentes corredores: los picos más altos son los cuellos de botella que generan el mayor impacto en la movilidad urbana. La topografía 3D revela zonas de “llanura” (densidad uniforme y moderada) que pueden corresponder a redes de calles secundarias con congestión distribuida, diferente de los corredores principales con picos pronunciados.

im_ac_3d <- density(patron_ac, sigma = 0.008, dimyx = c(80, 80))
z_ac <- t(im_ac_3d$v)
x_ac <- im_ac_3d$xcol
y_ac <- im_ac_3d$yrow
z_ac <- (z_ac - min(z_ac, na.rm = TRUE)) /
        (max(z_ac, na.rm = TRUE) - min(z_ac, na.rm = TRUE))

plot_ly(x = ~x_ac, y = ~y_ac, z = ~z_ac, type = "surface",
  colorscale = list(c(0,"rgb(0,0,128)"), c(0.3,"rgb(0,128,0)"),
                    c(0.6,"rgb(255,255,0)"), c(1,"rgb(255,0,0)")),
  showscale = TRUE,
  colorbar  = list(title = "Densidad\nnormalizada")) %>%
  layout(title = "Superficie de Densidad 3D — ACCIDENTE",
    scene = list(xaxis = list(title = "Longitud"),
                 yaxis = list(title = "Latitud"),
                 zaxis = list(title = "Densidad"),
                 camera = list(eye = list(x = 1.5, y = -1.8, z = 1.2))))

Superficie 3D de Densidad (ACCIDENTE): La superficie 3D de accidentes contrasta marcadamente con la de congestión: con solo 122 eventos, presenta pocos picos bien diferenciados sobre una llanura casi plana, lo que refleja fielmente la rareza relativa del fenómeno. Los picos que emergen de la superficie plana son los puntos negros de accidentalidad: lugares donde la probabilidad de siniestro es estadísticamente superior al resto del territorio y que justifican intervenciones urgentes de seguridad vial. La altura de los picos está normalizada entre 0 y 1, por lo que el pico máximo representa el punto de mayor concentración relativa de accidentes, independientemente del volumen absoluto (bajo en comparación con la congestión). La visualización 3D es especialmente útil para accidentes porque permite ver simultáneamente la escasez general del fenómeno (superficie plana) y la existencia de focos concretos (picos), comunicando mejor la heterogeneidad espacial que un mapa 2D. Los picos de accidentes que se superponen visualmente con picos de otros tipos (al comparar las tres superficies) señalan zonas de riesgo compuesto donde intervenciones integrales (infraestructura + señalización + gestión de tráfico) son necesarias. La baja densidad de picos y su altura moderada confirma que los accidentes, aunque graves individualmente, no conforman un problema territorialmente masivo sino focalizado en puntos específicos que pueden ser intervenidos de forma costo-efectiva.


17 Conclusión

El análisis realizado sobre los datos de Waze del 26 al 28 de septiembre de 2024 proporciona evidencia espacial y estadística sólida sobre los patrones de movilidad y seguridad vial del área de estudio.

17.1 Hallazgos Cuantitativos Clave

El dataset comprende 5019 eventos totales distribuidos en cuatro categorías con perfiles muy diferentes:

  • Congestión (3151 eventos, 63%): Fenómeno dominante con distribución espacial fuertemente agrupada que sigue los corredores viales principales. La función K de Ripley confirma agrupamiento estadísticamente significativo a todas las escalas espaciales evaluadas.
  • Cierres de vías (1021 eventos, 20%): Segundo tipo más frecuente, con el agrupamiento espacial más intenso de todos los tipos analizados. Su concentración en zonas muy específicas sugiere que responden principalmente a obras o eventos planificados en sectores delimitados.
  • Peligros (702 eventos, 14%): Distribución espacial propia que no siempre coincide con los corredores de mayor congestión, indicando problemas de mantenimiento de infraestructura en zonas diversas de la red vial.
  • Accidentes (122 eventos, 2%): Bajo en volumen pero alto en impacto. Pese a la baja frecuencia, el análisis espacial detecta agrupamiento no aleatorio, identificando puntos negros de siniestralidad prioritarios para intervención.

17.2 Evidencia Estadística Espacial

Los análisis con spatstat demuestran de forma consistente que ninguno de los cuatro tipos de eventos se distribuye aleatoriamente en el espacio. En todos los casos, la función K de Ripley empírica supera la esperada bajo aleatoriedad completa, con diferentes intensidades:

  • La congestión muestra el agrupamiento más pronunciado y robusto estadísticamente, coherente con su dependencia de la estructura de la red vial.
  • Los cierres de vías exhiben agrupamiento extremadamente concentrado en pocas zonas, coherente con la naturaleza planificada de obras e intervenciones viales.
  • Los peligros presentan agrupamiento moderado a múltiples escalas, indicando tanto focos puntuales como corredores con condiciones de riesgo sostenido.
  • Los accidentes muestran señales de agrupamiento a pesar del bajo volumen, lo que tiene alto valor para la identificación de puntos negros.

17.3 Relaciones Espaciales entre Tipos de Eventos

La vista sincronizada y la comparación de mapas de densidad permiten identificar tres tipos de relación espacial:

  1. Co-ocurrencia cierres–congestión: La superposición espacial es evidente en múltiples corredores, confirmando la cadena causal cierre → desvío → congestión en rutas alternativas.
  2. Correlación parcial peligros–congestión: Algunos focos de peligro coinciden con zonas congestionadas (vías deterioradas por alto volumen), pero otros son independientes, sugiriendo causas distintas.
  3. Distribución diferencial de accidentes: Los puntos negros de accidentalidad no coinciden necesariamente con los mayores focos de congestión, lo que indica que la seguridad vial no depende únicamente del volumen de tráfico.

17.4 Limitaciones del Análisis

  • El periodo de tres días (26–28 septiembre 2024) es demasiado corto para confirmar si los patrones observados son estructurales o coyunturales; se requieren al menos 3–6 meses de datos para análisis definitivos.
  • Los datos de Waze presentan sesgo de cobertura: zonas con menos usuarios de la aplicación generan menos reportes independientemente del nivel real de riesgo o congestión.
  • La ausencia de información sobre gravedad de accidentes, velocidades de tráfico o tiempos de recorrido limita la cuantificación del impacto económico de los eventos registrados.

17.5 Recomendaciones

  1. Intervención prioritaria en corredores de riesgo compuesto: Los sectores donde coinciden congestión alta, peligros frecuentes y proximidad a accidentes deben recibir atención integral: mantenimiento de vía, señalización reforzada y gestión activa del flujo vehicular.

  2. Plan de rutas alternativas para zonas de cierre recurrente: Los focos de alta densidad de cierres identificados en el mapa de densidad deben contar con rutas de desvío preestablecidas, señalizadas y comunicadas proactivamente a los usuarios antes de que los cierres ocurran.

  3. Auditorías de seguridad vial en puntos negros de accidentalidad: Los picos identificados en la superficie 3D y el mapa de densidad de accidentes deben ser objeto de revisión técnica (geometría, visibilidad, señalización, velocidad operacional) independientemente del volumen de tráfico del sector.

  4. Semaforización inteligente en intersecciones críticas de congestión: Los nodos identificados como picos en la superficie 3D de congestión son candidatos prioritarios para implementación de semáforos adaptativos con gestión en tiempo real basada en datos de Waze u otras fuentes de tráfico.

  5. Ampliación del periodo de análisis: Incorporar al menos 90 días de datos para distinguir patrones estructurales de eventos puntuales, y añadir variables temporales (día de semana, festividades, condiciones climáticas) para enriquecer el análisis multivariado.

  6. Monitoreo continuo con alertas automáticas: Implementar un sistema de actualización periódica (semanal o mensual) del análisis para detectar cambios en los patrones de movilidad en tiempo próximo al real, permitiendo respuestas más ágiles de las autoridades de tránsito.


Análisis realizado con R y la metodología CRISP-DM. Datos fuente: Waze — Trama Waze.xlsx. Periodo: 26–28 de septiembre de 2024.