Predicción del número de vehículos registrados en el RUNT

1. Introducción

\(\hspace{1 cm}\)

El Registro Único Nacional de Tránsito RUNT, se define como un sistema de información que permite registrar y mantener actualizada, centralizada, autorizada y validada la misma sobre los registros de automotores, conductores, licencias de tránsito, empresas de transporte público, infractores, accidentes de tránsito, seguros, remolques y semirremolques, maquinaría agrícola y de construcción autopropulsada y de personas naturales o jurídicas que prestan servicio al sector(art. 8 y 9 de la Ley 769 de 2002 y la parte pertinente de la Ley 1005 de 2006).

En este trabajo se abordará el problema de crear un modelo para predecir el número de vehículos registrados diariamente en el RUNT. Los datos es una serie temporal del número de vehículos registrados diariamente durante los años 2012 a 2017. Para el análisis y modelamiento se incluyeron algunas variables que consideramos relevantes. En total, trabajaremos con un conjunto de datos que tiene 2192 observaciones y 9 variables.

Los datos y el código que se uso en este trabajo se encuentra el siguiente repositorio GitHub

1.1 Variables

Las variables que se considerarán para el modelo son las siguientes:

\(\hspace{1 cm}\)

  • Units: Número de vehículos registrados en el RUNT.
  • Date: Fecha Año/Mes/Dia.
  • Year: Año.
  • Month: Mes.
  • Wday: Dia de la semana.
  • Mday: Dia en el mes.
  • Yday: Dia en el año.
  • Holiday: Indica si es festivo o no (1 para dia festivo).
  • Colombia: Indica si ese dia la selección colombia jugó un partido oficial de la FIFA (1 si ese dia hubo partido).

\(\hspace{1 cm}\)

Las primeras 7 variables se obtienen a partir de la base de datos suministrada. La variable Holiday se incorporá ya que las instalaciones donde se hacen los trámites de registros del RUNT no laboran en días festivos. La variable Colombia se agregó ya que esperamos que en estos días disminuya el número de registros.

\(\hspace{1 cm}\)

1.2 Encabezado de la base de datos.

\(\hspace{1 cm}\)

Tabla 1. Datos
Date Units Holiday Colombia Year Month Wday Mday Yday
2012-01-01 0 1 0 2012 enero domingo 1 1
2012-01-02 188 0 0 2012 enero lunes 2 2
2012-01-03 482 0 0 2012 enero martes 3 3
2012-01-04 927 0 0 2012 enero miércoles 4 4
2012-01-05 1159 0 0 2012 enero jueves 5 5
2012-01-06 996 0 0 2012 enero viernes 6 6

2. Analisis descriptivo

Este módulo se presenta con la intención de poder entender los datos, identificar patrones y plantear hipótesis.

\(\hspace{1 cm}\)

2.1 Dia de la semana y año

Registros de vehiculos en el RUNT por día de la semana

\(\hspace{1 cm}\)

Durante los días martes a viernes no se presentan disimilitudes significativas en el número de registros, es evidente que el día sábado el número de registros disminuyen notablemente. Además, la mayoría de los registros del domingo son nulos. La caída de los registros del día lunes en comparación a los otros días de la semana podemos asociarlos a los festivos. Por último, para cada día de la semana se visualizan observaciones atípicas.

\(\hspace{1 cm}\)

2.2 Registros de vehiculos en el RUNT por día y año

\(\hspace{1 cm}\)

Para cada año se observa el mismo comportamiento visto en el item anterior, sin embargo hay una tendencia decreciente en función del año. Las cajas de los primeros años obedecen a un mayor número de registros.

Lo anterior mostrado en una tabla

\(\hspace{1 cm}\)

Tabla 2. Mediana de Registros por año y día de la semana
Year lunes martes miércoles jueves viernes sábado domingo
2012 845 1100 1200 1299 1320 370 1
2013 800 1062 1158 1236 1247 328 0
2014 848 1163 1223 1288 1322 365 1
2015 736 1050 1116 1145 1141 329 0
2016 656 840 912 952 967 228 0
2017 632 786 878 895 886 218 0

\(\hspace{1 cm}\)

Desviación estándar de Registros por año y día de la semana

La siguiente tabla muestra la desviación estándar en el número de registros en función de los días de la semana y los años, se observa que el 2014 es el año con mayor variabilidad.

\(\hspace{1 cm}\)

tabla 3. Desviación estándar de Registros por año y día de la semana
Year lunes martes miércoles jueves viernes sábado domingo
2012 405 341 197 288 368 165 13
2013 414 267 346 287 290 143 6
2014 455 476 345 478 442 209 10
2015 430 333 328 307 437 153 7
2016 408 326 464 510 347 184 4
2017 403 407 373 562 435 158 2

\(\hspace{1 cm}\)

2.3 Registros durante mes y año

\(\hspace{1 cm}\)

En promedio la frecuencia de los registros de vehículos durante los primerios días del mes es más baja que durante los demás días. En contraste, la frecuencia promedio de los registros crece al final del mes.

El comportamiento para los días durante el año es similar al de los días del mes, es baja al inicio, relativamente constante durante gran parte del año y alta al final.

\(\hspace{1 cm}\)

2.4 Festivos

Como se había previsto anteriormente, el número de registros los días festivos es bajo o nulo. En las siguientes tablas se muestran algunas estadísticas que prueban la hipótesis.

\(\hspace{1 cm}\)

Registros en dias festivos

Registros en días festivos

\(\hspace{1 cm}\)

Tabla 4. Media de Registros
Dia Dia NO Festivo Dia Festivo
lunes 838 0
martes 1022 150
miércoles 1151 8
jueves 1199 2
viernes 1224 4
sábado 342 56
domingo 3 0

Cuantiles de días Festivos

Cuantiles de días festivos

Tabla 5. Registros RUNT por día
Festivo Cuantil lunes martes miércoles jueves viernes sábado domingo
NO 0 Q 45 116 223 164 117 0 0
NO 1 Q 674 794 947 984 974 240 0
NO 2 Q 809 994 1128 1183 1202 323 0
NO 3 Q 943 1173 1276 1334 1361 390 1
NO 4 Q 2106 3437 3109 3603 2920 1175 69
SI 0 Q 0 0 0 0 0 0 0
SI 1 Q 0 0 0 0 0 28 0
SI 2 Q 0 2 0 0 0 56 0
SI 3 Q 0 4 19 2 0 83 0
SI 4 Q 5 893 23 14 28 111 2

3. Modelamiento

Para la predicción de los registros de vehiculos diariamente en el RUNT consideramos 5 modelos:

  • Modelo lineal.
  • Modelo Poisson.
  • Modelo Ridge.
  • Modelo Lasso.

Para escoger el mejor modelo usamos como métrica la comparación del \(R^2\) de entreno y validación, es decir, \(Min\{R^2_{train}/R^2_{Validation}\}\). Los datos de entrenamiento son los registros del 01/01/2012 a 31/12/2016, validación los registros del 2017 y de prueba serán los datos del primer semestre del 2018.

3.1 Modelo Lineal

El modelo a ajustar es el siguiente:

\[\text{Units}_t = \beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3}\text{Month}_{t}+ \beta_{4}\text{Wday}_{4}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_7\text{Colombia}_t + \epsilon_t\]

Resumen del modelo Lineal

\(\hspace{1 cm}\)

  Estimate Std. Error t value Pr(>|t|)
(Intercept) 74904 7932 9.443 1.074e-20
Yday -57.1 12.3 -4.643 3.68e-06
Year -34.29 3.899 -8.795 3.267e-18
Monthagosto 6989 1501 4.658 3.434e-06
Monthdiciembre 14251 3001 4.749 2.203e-06
Monthenero -5307 1112 -4.772 1.969e-06
Monthfebrero -3409 731 -4.664 3.328e-06
Monthjulio 5204 1119 4.649 3.581e-06
Monthjunio 3499 750.6 4.661 3.37e-06
Monthmarzo -1765 382.2 -4.618 4.157e-06
Monthmayo 1715 369.9 4.637 3.784e-06
Monthnoviembre 12253 2632 4.656 3.466e-06
Monthoctubre 10456 2251 4.646 3.631e-06
Monthseptiembre 8761 1882 4.656 3.465e-06
Wdaymartes 188.9 21.26 8.888 1.478e-18
Wdaymiércoles 325.2 21.18 15.36 4.041e-50
Wdayjueves 356.1 21.08 16.89 1.54e-59
Wdayviernes 394 21.12 18.66 3.445e-71
Wdaysábado -495.7 21.26 -23.32 2.473e-105
Wdaydomingo -836.7 21.16 -39.55 6.752e-247
Mday 67.5 12.31 5.482 4.804e-08
Holiday1 -878 26.98 -32.54 3.747e-183
Colombia1 -70.78 36.47 -1.941 0.05245
Fitting linear model: Units ~ Yday + Year + Month + Wday + Mday + Holiday + Colombia
Observations Residual Std. Error \(R^2\) Adjusted \(R^2\)
1827 235.6 0.8201 0.8179

3.2 Modelo Poisson

El modelo a ajustar es el siguiente:

\[log(\text{Units}_t) = \beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3,k}\text{Month}_{t,k}+ \beta_{4,k}\text{Wday}_{4,k}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_7\text{Colombia}_t\]

Resumen del modelo Poisson

\(\hspace{1 cm}\)

  Estimate Std. Error z value Pr(>|z|)
(Intercept) 103.2 1.209 85.38 0
Yday -0.07896 0.001833 -43.08 0
Year -0.04446 0.000591 -75.24 0
Monthagosto 9.643 0.2237 43.11 0
Monthdiciembre 19.59 0.4472 43.81 0
Monthenero -7.371 0.1657 -44.48 0
Monthfebrero -4.727 0.1089 -43.4 0
Monthjulio 7.168 0.1668 42.98 0
Monthjunio 4.807 0.1119 42.95 0
Monthmarzo -2.44 0.05693 -42.87 0
Monthmayo 2.347 0.05514 42.56 0
Monthnoviembre 16.91 0.3923 43.11 0
Monthoctubre 14.43 0.3354 43.03 0
Monthseptiembre 12.1 0.2805 43.13 0
Wdaymartes 0.2179 0.003048 71.49 0
Wdaymiércoles 0.344 0.002975 115.6 0
Wdayjueves 0.3752 0.00297 126.3 0
Wdayviernes 0.4057 0.002955 137.3 0
Wdaysábado -0.8501 0.004035 -210.7 0
Wdaydomingo -5.54 0.03446 -160.8 0
Mday 0.0923 0.001836 50.27 0
Holiday1 -5.738 0.06325 -90.73 0

(Dispersion parameter for poisson family taken to be 1 )

Null deviance: 913454 on 1826 degrees of freedom
Residual deviance: 80938 on 1805 degrees of freedom

3.3 Modelo ridge

Modelo Ridge

Para la estimación del modelo Ridge se minimiza \(RSS_{Ridge}\) en función de los parámetros \(\beta_j\).

\[RSS_{Ridge}=\sum_{i=1}^n(y_i-f(x_i))^2+\lambda\sum_{i=1}^p\beta_j^2\]

donde:

\[f(x_i) =\beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3,k}\text{Month}_{t,k}+ \beta_{4,k}\text{Wday}_{4}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_7\text{Colombia}_t\]

\(\hspace{1 cm}\)

Coeficientes modelo Ridge

\(\hspace{1 cm}\)

Tabla 6. Coeficientes Modelo Ridge
coef
(Intercept) 77887.43585
Holiday1 -787.79433
Colombia1 -36.41953
Year -38.37032
Monthagosto -15.88899
Monthdiciembre 213.27823
Monthenero -95.82999
Monthfebrero 6.78560
Monthjulio -18.52804
Monthjunio -7.60810
Monthmarzo 15.97138
Monthmayo -7.38659
Monthnoviembre -29.17446
Monthoctubre -48.14506
Monthseptiembre -27.16869
Wdaymartes 187.32823
Wdaymiércoles 306.03513
Wdayjueves 342.59913
Wdayviernes 366.27608
Wdaysábado -457.38400
Wdaydomingo -765.61002
Mday 11.26137
Yday 0.31983

3.4 Modelo Lasso

Para la estimación del modelo Lasso se minimiza \(RSS_{Lasso}\) en función de los parametros \(\beta_j\).

\[RSS_{Lasso}=\sum_{i=1}^n(y_i-f(x_i))^2+\lambda\sum_{i=1}^p|\beta_j|\]

donde:

\[f(x_i) =\beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3}\text{Month}_{t}+ \beta_{4}\text{Wday}_{4}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_7\text{Colombia}_t\]

\(\hspace{1 cm}\)

Coeficientes modelo Lasso

\(\hspace{1 cm}\)

Tabla 7. Coeficientes Modelo Lasso
coef
(Intercept) 67063.32690
Holiday1 -873.22174
Colombia1 -55.00429
Year -32.96314
Monthagosto 0.00000
Monthdiciembre 278.23974
Monthenero -126.59079
Monthfebrero -3.29997
Monthjulio 0.00000
Monthjunio 0.00000
Monthmarzo 1.90132
Monthmayo 0.00000
Monthnoviembre 0.00000
Monthoctubre -13.11698
Monthseptiembre 0.00000
Wdaymartes 173.76322
Wdaymiércoles 310.48428
Wdayjueves 340.96039
Wdayviernes 378.68519
Wdaysábado -500.67707
Wdaydomingo -841.43400
Mday 10.06590
Yday 0.13864

\(\hspace{1 cm}\)

3.5 Residuos y ajuste

Residuales

A continuacón se presentan los residuos de cada uno de los modelos ajustados versus el tiempo. Al final de cada año todos los modelos presentan una mayor dispersión en el error de ajuste. Además, entre los años se observan ciertos picos, esto puede ser a causa de que a final de mes ocurren un mayor número de registros. Aunque los residuos de todos los modelos tienen un comportamiento similar, el modelo Poisson es el que presenta una menor variabilidad.

\(\hspace{1 cm}\)

\(\hspace{1 cm}\)

Registros RUNT vs Predicciones

\(\hspace{1 cm}\)

  • En general, para registros inferiores a 1500 todos los modelos presentan una sobreestimación, especialmente en el conjunto de validación. Por otro lado para las observaciones atipicas las predicciones generalmente son inferiores a los valores reales.

  • En general, para registros inferiores a 1500 todos los modelos presentan una sobreestimación, especialmente en el conjunto de validación. Por otro lado, para las observaciones atípicas las predicciones generalmente son inferiores a los valores reales.

  • Los modelos Lineal, Ridge y Lasso hacen predicciones negativas, las cuales dado el contexto del problema no son posibles.

  • Por lo anterior, el modelo Poisson es adecuado para la predicción de los registros en el RUNT.

\(\hspace{1 cm}\)

3.6 Metricas

Métricas

Como se esperaba, el modelo Poisson es el que mejor ajuste tiene, con el se obtiene un mayor \(R^2\) tanto en entreno como en validación. Además, tiene el menor cociente \(R^2_{Train}/R^2_{Validation}\).

\(\hspace{1 cm}\)

Tabla 8. \(R^2\) de entreno y prueba
Train Validation Ratio
Lineal 0.82009 0.63103 1.29961
Poisson 0.85437 0.70942 1.20431
Ridge 0.81791 0.64045 1.27709
Lasso 0.81768 0.64099 1.27565

3.7 Mejorando el modelo Poisson

Dado que el Poisson fue el mejor modelo, se agregará una nueva variable con la intención de disminuir la brecha entre el \(R^2\) de entreno y validación.

\(\hspace{1 cm}\)

Variable dummy

Considrando que durante los primeros días del mes los registros en el RUNT son bajos y al final de mes son altos, se crea una función que capture este comportamiento. En este sentido, para la varaible \(**\text{Mday}**\) se le aplicará la siguiente función.

\(\hspace{1 cm}\)

\[f(\text{x})= \left\{ \begin{array}{lcc} -(0.5x-5)^2 & si & x \leq 10 \\ \\ 0 & si & 10 < x < 21\\ \\ (0.5x-10)^2 & si & x \geq 21 \end{array} \right.\]

\(\hspace{1 cm}\)

3.8 Modelo Poisson con la nueva variable

El modelo a ajustar es el siguiente:

\[log(\text{Units}_t) = \beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3,k}\text{Month}_{t,k}+ \beta_{4,k}\text{Wday}_{4,k}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_8\text{Dummy}_t\]

Resumen del modelo

\(\hspace{1 cm}\)

  Estimate Std. Error z value Pr(>|z|)
(Intercept) 103.2 1.209 85.38 0
Yday -0.07896 0.001833 -43.08 0
Year -0.04446 0.000591 -75.24 0
Monthagosto 9.643 0.2237 43.11 0
Monthdiciembre 19.59 0.4472 43.81 0
Monthenero -7.371 0.1657 -44.48 0
Monthfebrero -4.727 0.1089 -43.4 0
Monthjulio 7.168 0.1668 42.98 0
Monthjunio 4.807 0.1119 42.95 0
Monthmarzo -2.44 0.05693 -42.87 0
Monthmayo 2.347 0.05514 42.56 0
Monthnoviembre 16.91 0.3923 43.11 0
Monthoctubre 14.43 0.3354 43.03 0
Monthseptiembre 12.1 0.2805 43.13 0
Wdaymartes 0.2179 0.003048 71.49 0
Wdaymiércoles 0.344 0.002975 115.6 0
Wdayjueves 0.3752 0.00297 126.3 0
Wdayviernes 0.4057 0.002955 137.3 0
Wdaysábado -0.8501 0.004035 -210.7 0
Wdaydomingo -5.54 0.03446 -160.8 0
Mday 0.0923 0.001836 50.27 0
Holiday1 -5.738 0.06325 -90.73 0

(Dispersion parameter for poisson family taken to be 1 )

Null deviance: 913454 on 1826 degrees of freedom
Residual deviance: 80938 on 1805 degrees of freedom

Comparando los dos modelos Poisson

Al ajustar el modelo Poisson con una variable dummy, visualmente se aprecia una reducción en la varianza. Sin embargo, aun el modelo se equivoca el resultado de final de año.

3.9 ECM y R2 para el modelo Poisson

Al agregar la variable dummy al modelo se consigue mejorar el \(R2\) de validación, sim embargo se baja en un \(2\%\) el \(R^2\) de entreno. además, la nueva variable logra disminuir el ratio \(Min\{R^2_{train}/R^2_{Validation}\}\).

Tabla 9. ECM, R2 Modelo Poisso
Train Test Ratio
ECM 42370.613 65950.974 1.557
R2 0.861 0.764 1.127

4 modelo Residuos

Al ser una serie de tiempo, se espera que haya un comportamiento estacional y posible correlación entre los errores. además, se observa que el modelo no es capaz de capturar los finales de año y sospechamos que al final de algunos meses. Inicialmente se propone un modelo autorregresivo (no se encuentra en este trabajo) para los residuos, sin embargo, estos modelos pierden precisión cuando se quiere predecir en un horizonte temporal alto a largo plazo. En este sentido se propone un modelo de bosques aleatorios para modelar los residuos y poder tener una mayor precisión en el conjunto de validación y de prueba. Con esto se quiere modelar la estacionalidad y no la autocorrelación.

4.1 Escogiendo los parametros de randomForest.

Se usará la función randomForest::randomForest(). Esta funcion tiene varios hiper-parámetros , pero en este caso solo ajustaremos tres:

  • mtry
  • node_size
  • sampe_size
Tabla 10. Datos
mtry node_size sampe_size OOB_RMSE
7 7 1 204
7 9 1 204
7 3 1 204
3 9 1 204

4.2 Resultados con Random Forest.

Modelando los residuos se puede capturar algunos comportamientos y patrones que no fueron posibles percibir con el modelo Poisson, esto se puede probar con los resultados de la siguiente tabla. Pues el valor del \(R^2\) de validación solo supera en un \(3.3\%\) el de entreno.

Tabla 11. ECM, R2 Modelo Poisso
Train Test Ratio
ECM 42372.598 45826.774 1.082
R2 0.861 0.836 1.030

4.3 Modelo definitivo

El modelo con el cual consideramos que y el cual nos servirá para modelar los vehículos inscritos en el RUNT será:

\[log(\text{Units}_t) = \beta_0+\beta_1\text{Yday}_t+\beta_2\text{Year}_t+\beta_{3,k}\text{Month}_{t,k}+ \beta_{4,k}\text{Wday}_{4,k}+\beta_5\text{Mday}_t+\beta_6\text{Holiday}_t+\beta_8\text{Dummy}_t+\epsilon_t\]

Donde \(\epsilon_t\) se modela con un bosque aleatorio y así corregir algunos patrones de estacionalidad que no logra capturar el modelo de regresión Poisson. además, considerando la naturaleza de los datos y dado que durante días festivos y domingos el número de registros es casi nulo en la mayoría de casos, independiente del valor que predijo esos días los volveremos ceros.

4.4 Predicción.

Para el modelo anterior, se uso como conjunto de entreno los datos del 2012 al 2017 y de prueba el primer semestre del 2018.

A continuación, se presenta la comparación en la distribución de las predicciones. los resultados de estas se pueden consultar el siguiente link.

5 Repositorio y Referencias

5.1 Repositorio

Todo lo el codigo de este trabajo se encuentra en el repositorio de Github, cada una de las carpetas tiene lo siguiente:

  1. Datos
  • FESTIVOS.xlsx : dataset que contiene los festivos en Colombia para las fechas del 2012-2018.
  • data.rds : datos de entreno que se usaron para el modelo.
  • data_2018.rds : datos de prueba.
  • registros_autos_entrenamiento.xlsx : dataset que contine los registros diarios de vehículos en el RUNT.
  • results.csv : partidos de futbol oficiales de la FIFA de selecciones.
  1. Funciones
  • Funciones para el cálculo de ECM, R2 y creación de algunas variables.
  1. Predicciones
  • prediccion_12_17.txt : Archivo de texto con las predicciones del 2012 al 2017.
  • prediccion_2018.txt : Archivo de texto con las predicciones para el 2018.
  1. Scripts
  • Informe.Rmd : Código de R donde se encuentra el informe del trabajo.
  • Informe.html : salida HTML del reporte.
  • Preprocesamiento.R : Script de R donde se hace el preprocesamiento de datos, creación de modelos, funciones etc.

5.2 Referencias