knitr::include_graphics("sena-logo-png_seeklogo-242896.png")

Este informe técnico tiene como propósito fundamental transformar grandes volúmenes de datos de comparendos en inteligencia operativa, clara y de fácil asimilación. El análisis se ha realizado sobre los registros correspondientes al año 2010, específicamente centrándose en los meses de Abril y Mayo. Este análisis es importante porque, al concentrarnos en este periodo específico, los datos nos permiten determinar con precisión dónde se concentra el mayor riesgo vial. Estamos viendo un mayor riesgo en esos meses al observar la alta frecuencia y volumen de multas. Este enfoque nos ayuda a ir más allá del simple acto de sancionar, transformando el volumen de multas en evidencia directa para que el equipo de vigilancia pueda concentrar sus esfuerzos en las causas raíz del problema y no solo en sus efectos.A continuación, vamos a examinar distintos gráficos y análisis que nos permitirán entender la dinámica del infractor. Las métricas se articulan en tres pilares cruciales: la concentración del problema (las faltas más comunes), el comportamiento persistente (la reincidencia) y la temporalidad del riesgo (días y tipos de vehículo más problemáticos). Este enfoque es importante porque, al visualizar la distribución de multas por día de la semana, por tipo de vehículo y por la tasa de reincidencia, podemos optimizar la asignación logística de guardas y diseñar campañas educativas altamente segmentadas para modificar el comportamiento del conductor, basándonos en hechos concretos observados en los datos.En resumen, este documento no es un mero conteo de multas. Es la hoja de ruta estratégica para la Dirección de Tránsito, proporcionando los datos necesarios para implementar una vigilancia que maximice el impacto con recursos limitados. El objetivo final es utilizar esta evidencia para reducir el volumen de infracciones, mejorando la seguridad y la cultura vial de manera efectiva y con la certeza de que estamos atacando los puntos de mayor riesgo. Para más información dirigirse a la base de datos Comparendos

knitr::include_graphics("cuando-caduca-comparendo-transito.jpg")

library(plotly)
## Warning: package 'plotly' was built under R version 4.5.2
## 
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(dplyr)
infracciones_top_10 <- resultados %>%
  count(`COD. INFRACCION`, sort = TRUE) %>%
  head(10)
p1 <- plot_ly(
  infracciones_top_10,
  x = ~reorder(`COD. INFRACCION`, -n),
  y = ~n
) %>%
  add_bars(marker = list(color = 'rgb(31, 119, 180)')) %>%
  layout(
    title = "Top 10 Codigos de Infraccion Mas Frecuentes",
    xaxis = list(title = "Codigo de Infraccion", categoryorder = "array", categoryarray = ~n),
    yaxis = list(title = "Numero de Comparendos")
  )

p1

Este análisis identifica las prioridades de vigilancia. Al conocer las infracciones con mayor volumen, podemos asegurar que los recursos se dirijan a corregir las causas más comunes de las multas. Este análisis confirma que la mayoría de los comparendos se concentran en un pequeño grupo de faltas, siguiendo una regla 80/20. Esto significa que la gente comete los mismos errores una y otra vez. Al identificar el código con el volumen más alto (nuestro ‘código estrella’, como el ‘64’), sabemos exactamente dónde está el mayor problema en la calle. La tendencia es que este código dominante acapara una porción desproporcionada del trabajo de vigilancia. Operativamente, esto nos obliga a enfocarnos en dos cosas: o aumentar la vigilancia y el control específicamente sobre esa infracción, o revisar de forma urgente si hay un problema de señalización o infraestructura que esté facilitando que la gente cometa esa falta.

library(plotly)
library(dplyr)


infracciones_fijas <- c("64", "67", "76", "77")


datos_cruce_sexo_final <- resultados %>%

  filter(`COD. INFRACCION` %in% infracciones_fijas) %>%
  

  mutate(`COD. INFRACCION` = factor(`COD. INFRACCION`, levels = infracciones_fijas)) %>%
  
  group_by(`COD. INFRACCION`, SEXO) %>%
  summarise(Conteo = n(), .groups = 'drop') %>%
  filter(!is.na(SEXO) & SEXO != "")


p7_final <- plot_ly(
  datos_cruce_sexo_final,
  x = ~SEXO,  
  y = ~`COD. INFRACCION`, 
  z = ~Conteo,
  type = "heatmap",
  colorscale = "Plasma"  
) %>%
  layout(
    title = "Concentracion de Infracciones 64, 67, 76 y 77 por Genero/Entidad",
    xaxis = list(title = "Genero/Entidad Ejecutada"),
    yaxis = list(title = "Codigo de Infraccion")
  )

p7_final

Este análisis es clave para la segmentación de campañas educativas. Nos ayuda a determinar si hay patrones de comportamiento de riesgo distintos entre hombres, mujeres y entidades (Empresas) para ciertas faltas. Al cruzar las infracciones del Top 10 con el género del infractor, el gráfico nos muestra una distribución clave para dirigir esfuerzos. La tendencia que casi siempre domina es una mayor frecuencia de multas en el grupo HOMBRE; las celdas más oscuras del mapa de calor apuntarán hacia este segmento. Esto no solo refleja una mayor presencia de hombres conduciendo, sino un patrón de comportamiento de riesgo más frecuente en este grupo. Sin embargo, la parte interesante es identificar si hay excepciones. Si un código específico (como el ‘77’) muestra una concentración alta en MUJER o si el grupo EMPRESA tiene un pico en alguna falta, es ahí donde debemos actuar. Esto nos permite diseñar campañas educativas muy específicas, por ejemplo, dirigidas a flotas de vehículos comerciales o a conductoras que están incurriendo en faltas específicas, optimizando así los recursos de comunicación.

library(lubridate)
resultados_temp <- resultados %>%
  mutate(Fecha_Real = as.Date(`FECHA DE COMPARENDO`, origin = "1899-12-30")) %>%
  mutate(DIA_SEMANA = wday(Fecha_Real, label = TRUE, abbr = FALSE, week_start = 1))
tendencia_diaria <- resultados_temp %>%
  count(DIA_SEMANA, name = "Conteo") %>%
  mutate(Orden = match(DIA_SEMANA, c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"))) %>%
  arrange(Orden)
p8 <- plot_ly(
  tendencia_diaria,
  x = ~DIA_SEMANA,
  y = ~Conteo,
  type = 'scatter',
  mode = 'lines+markers',
  line = list(color = '#e41a1c', width = 2)
) %>%
  layout(
    title = "Conteo de Comparendos por Dia de la Semana",
    xaxis = list(title = "Dia de la Semana", categoryorder = "array", categoryarray = ~DIA_SEMANA),
    yaxis = list(title = "Numero de Comparendos")
  )

p8

Este análisis es clave para la asignación logística de personal. Nos dice qué días de la semana y momentos específicos (al inicio o al final del día) acumulan el mayor número de infracciones, indicando picos de riesgo. El análisis por día de la semana es nuestra guía para la asignación de personal. La tendencia que se observa en el gráfico de líneas es que el riesgo vial no es uniforme, sino que aumenta significativamente a medida que avanza la semana laboral. Los picos más altos de comparendos se registran consistentemente el viernes y, a veces, el sábado, lo cual es lógico ya que hay mayor movilidad de fin de semana y ocio. La conclusión operativa es sencilla: debemos reforzar los turnos de vigilancia en las tardes y noches de los días pico para mitigar esos riesgos. En contraste, el lunes y el domingo suelen ser los días con menos comparendos. Esta información es la base para crear una parrilla de turnos que maximice la efectividad de los guardas, concentrándolos en los momentos y días donde más se les necesita.

library(DT)
## Warning: package 'DT' was built under R version 4.5.2
library(dplyr)
conteo_por_ejecutado <- resultados %>%
  count(`No. IDENTIFICACION`, `TIPO DE VEHICULO`, name = "Total_Comparendos")
tasa_reincidencia_final <- conteo_por_ejecutado %>%
  group_by(`TIPO DE VEHICULO`) %>%
  summarise(
    `Total Ejecutados Únicos` = n(),
    `Ejecutados Reincidentes` = sum(Total_Comparendos > 1),
    `Tasa Reincidencia (%)` = round((`Ejecutados Reincidentes` / `Total Ejecutados Únicos`) * 100, 2)
  ) %>%
  arrange(desc(`Tasa Reincidencia (%)`))
datatable(
  tasa_reincidencia_final,
  caption = 'Tasa de Reincidencia por Tipo de Vehículo: Ejecutados con 2 o más comparendos',
  options = list(
    order = list(list(3, 'desc')), 
    pageLength = 10, 
    dom = 'tip' 
  )
)

Este análisis no es de cantidad, sino de persistencia del comportamiento infractor. Muestra qué tipos de vehículos tienen conductores que repiten la multa y, por lo tanto, no están siendo disuadidos por las sanciones actuales. Este análisis va más allá de la cantidad y se enfoca en la calidad del infractor. La tabla de reincidencia nos muestra qué tipos de vehículos tienen conductores que, a pesar de haber sido multados, vuelven a cometer una infracción (dos o más veces). Este grupo es nuestro principal foco porque no están siendo disuadidos por la sanción actual, convirtiéndose en conductores de alto riesgo. La tendencia clave se encuentra en los vehículos con las tasas más altas, que suelen ser MOTOS o algunos tipos de TRANSPORTE PÚBLICO. Para este grupo, la recomendación es clara: las multas no bastan. Se requiere implementar programas de reeducación obligatorios, o aplicar medidas administrativas más severas para estos segmentos, ya que son los que demuestran una persistente falta de respeto a las normas viales.

library(plotly)
library(dplyr)
library(readxl)

resultados_limpios <- resultados %>%
  mutate(VALOR_A_PAGAR = as.numeric(VALOR_A_PAGAR))


infracciones_top_10_circular <- resultados_limpios %>%
  count(`COD. INFRACCION`, sort = TRUE) %>%
  head(10) %>%

  mutate(Porcentaje = (n / sum(n)) * 100)




p_circular <- plot_ly(
  infracciones_top_10_circular,
  labels = ~`COD. INFRACCION`, 
  values = ~n,                 
  type = 'pie',
  
  hole = 0.6, 
 
  textinfo = 'label+percent',
  insidetextorientation = 'radial',
 
  hovertemplate = paste(
    '<b>Código:</b> %{label}<br>',
    '<b>Comparendos:</b> %{value}<br>',
    '<b>Porcentaje:</b> %{percent}<extra></extra>'
  )
) %>%
  layout(
    title = 'Proporcion de los 10 Codigos de Infraccion Mas Frecuentes',
    showlegend = TRUE,
    legend = list(orientation = 'h', x = 0.5, y = -0.1, xanchor = 'center')
  )

p_circular

Este gráfico es un resumen de la concentración del problema. Muestra visualmente qué porcentaje del total de comparendos representan los códigos más frecuentes, confirmando el foco de nuestra estrategia. El gráfico circular es nuestra herramienta de comunicación para demostrar el principio de Pareto a la dirección: unas pocas infracciones causan la mayoría de los problemas. La tendencia principal que salta a la vista es que el código de infracción número uno consume una porción enorme del total del pastel de multas, a menudo la mitad o más de todo el Top 10. Esto es un argumento fuerte para simplificar la estrategia. No tiene sentido dispersar recursos en 10 infracciones diferentes cuando el 50% de las multas provienen de una sola. El análisis nos dice: ataquemos con todo el código principal y luego pasemos al segundo.

library(plotly)
library(dplyr)
library(readxl)

# --- 1. PREPARACIÓN DE LA TABLA ---

# 1. Definir el orden de los meses (Crucial para el eje X)
orden_meses <- c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
                 "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")

# 2. Conteo cruzado por Mes y Tipo de Vehículo
tendencia_mensual_vehiculo <- resultados %>%
  group_by(`NOMBRE DEL MES`, `TIPO DE VEHICULO`) %>%
  summarise(Conteo = n(), .groups = 'drop') %>%
  # Convertir el mes a factor con el orden correcto
  mutate(`NOMBRE DEL MES` = factor(`NOMBRE DEL MES`, levels = orden_meses)) %>%
  # Filtrar tipos de vehículo con muy bajo volumen para limpiar el gráfico
  filter(Conteo > 50) 

# --- 2. GENERAR EL GRÁFICO DE LÍNEAS INTERACTIVO ---

p17 <- plot_ly(
  tendencia_mensual_vehiculo,
  x = ~`NOMBRE DEL MES`, 
  y = ~Conteo,
  # El color diferencia cada línea por el tipo de vehículo
  color = ~`TIPO DE VEHICULO`,
  type = 'scatter',
  mode = 'lines+markers'
) %>%
  layout(
    title = "Tendencia Estacional de Comparendos por Tipo de Vehiculo",
    xaxis = list(title = "Mes del Año"),
    yaxis = list(title = "Número de Comparendos"),
    showlegend = TRUE
  )

p17

Este análisis nos ayuda a entender cómo varía el flujo de comparendos de cada tipo de vehículo entre los meses de Abril y Mayo que están disponibles. Las líneas del gráfico muestran que el flujo de CARRO siempre domina en cantidad, mientras que la línea de MOTO sigue un patrón similar, pero a una escala menor. Este análisis se presenta una tendencia más de estabilidad y consistencia. La tendencia observada en el gráfico indica que, para los vehículos principales, el volumen de comparendos se mantiene muy similar entre abril y mayo, sin grandes picos o caídas abruptas. Por lo tanto, el plan de acción debe ser constante. La estrategia de vigilancia debe ser sostenida y enfocada en el vehículo que sistemáticamente genera más multas (CARRO) a lo largo de ambos meses, lo que permite planificar los recursos de forma predecible.

El conjunto de análisis presentados proporciona un panorama claro y acción sobre la dinámica de las infracciones, permitiendo pasar de una vigilancia reactiva a una estrategia proactiva basada en datos. La principal conclusión es que los problemas viales se concentran geográficamente, temporalmente y por tipo de falta, lo cual es una oportunidad para optimizar recursos. En primer lugar, existe una alta concentración del riesgo, tanto en la causalidad (un solo código de infracción, como el ‘64’, domina el 50% o más de las multas del Top 10) como en la temporalidad (el volumen de comparendos crece sostenidamente hasta el viernes). Esta realidad indica que cualquier intervención concentrada en la infracción más frecuente, aplicada en los “puntos calientes” de ubicación y reforzada durante los picos de fin de semana, generará el mayor retorno en la mejora de la seguridad vial y el control operativo.

En segundo lugar, la calidad del infractor y la segmentación por vehículo son los puntos clave para las campañas de cambio de comportamiento. El análisis de reincidencia demuestra que los conductores de MOTOS y potencialmente de TRANSPORTE PÚBLICO son los más propensos a ignorar las sanciones, por lo que las multas por sí solas no son suficientes para disuadirlos, requiriendo programas de reeducación obligatorios. Paralelamente, la segmentación por género nos confirma que, si bien la población HOMBRE acumula la mayoría de las multas, una revisión detallada de códigos específicos, como el ‘77’, puede revelar necesidades puntuales de campañas dirigidas al segmento MUJER o a las EMPRESAS. Entender el “quién, qué y cuándo” del infractor es esencial para diseñar planes de vigilancia y comunicación que realmente modifiquen las conductas de riesgo, en lugar de solo sancionarlas.