INDICE
INTRODUCCION
METODOLOGIA
DESCRIPCION DE LA SERIE TEMPORAL
RESULTADOS DEL MODELO ARIMA
CONCLUSIONES
BIBLIOGRAFIA
Introducción:
El presente documento tendrá como eje principal analizar la dinámica en la demanda de servicios de taxi de la ciudad de Cali, conocida como una de las ciudades más importantes en Colombia. La ciudad de Cali, es la capital del Departamento del Valle del Cauca, es la tercera ciudad más poblada del país, con una población estimada de 2,28 millones de habitantes. En Cali, como en muchas otras ciudades colombianas, la seguridad es una preocupación constante, y muchas personas prefieren usar taxis en lugar de caminar largas distancias o usar transporte público en ciertas horas del día. así como la urbanización (proceso en el cual una zona rural pasa a ser urbana por cambios en la infraestructura, densidad poblacional y demás) ha tenido últimamente una tendencia de crecimiento. Como segundo punto, se piensa desde un punto de vista económico en el turismo por su fama como “la capital de la salsa” y las zonas industriales, comerciales y de negocios ubicadas en el territorio que generan una alta demanda de transporte. Por otro lado, se encuentra una ciudad con una infraestructura vial extensa que enfrenta problemas de congestión en horas pico, lo que afecta la demanda de taxis. Así como, el sistema de transporte masivo MIO cubre gran parte de la ciudad, pero la eficiencia y cobertura pueden ser limitadas, lo que lleva a un mayor uso de taxis.
Ahora bien, se menciona que la dinámica de la demanda de taxis varía entre las zonas comerciales y residenciales, entre eventos culturales o deportivos y temporadas festivas, la seguridad que le transmite a la población este sistema en comparación con la competencia actual de las plataformas virtuales como “uber”, “inDriver” u otras, y por último, la innovación que ha permitido solicitar un servicio de taxi virtual o que se acepten distintos medios de pago.
Dado que el uso de taxis es de gran importancia en la ciudad Cali y en todas las ciudades de Colombia, el Ministerio de Transporte implementó un programa de identificación de taxis y taxistas mediante el Decreto 1553 de agosto de 1998. Además, el Decreto 172 del 5 de febrero de 2001 establece la ‘tarjeta de control de conductores’ como mecanismo de registro y control, la cual debe renovarse anualmente. En Cali, el Centro de Diagnóstico Automotor del Valle fue designado por las empresas de taxis para emitir este documento y gestionar el sistema. Esta tarjeta ha permitido identificar que en Cali circulan aproximadamente 16.000 taxis, operados por unos 26.000 taxistas.
Es importante la planificación y gestión del transporte urbano dentro de la ciudad, ya que las empresas que comprenden y predicen la demanda pueden disminuir sus costos operativos, en el caso de las empresas de taxis se realiza mediante una mejor planificación de rutas y horarios para los conductores y al mismo tiempo permite que la empresa asigne los recursos de manera eficiente para satisfacer los servicios solicitados, mejorando así la experiencia del cliente al reducir los tiempos de espera y aumentando la disponibilidad en áreas y momentos de alta demanda. Además que, en un entorno donde los servicios de transporte por aplicaciones móviles están ganando terreno, las empresas de taxis tradicionales necesitan datos precisos para competir eficazmente. La predicción de la demanda puede ayudar a implementar estrategias que aseguren la sostenibilidad del negocio a largo plazo, pudiendo ajustarse rápidamente a cambios en el comportamiento de los usuarios y a situaciones imprevistas, como emergencias o eventos masivos, garantizando una respuesta más ágil y eficiente.
Metodología:
Una serie de tiempo, según el DANE, “es un conjunto de datos ordenados cronológicamente sobre una variable de interés. El manejo de esta serie permite realizar análisis estructurales, así como el control y pronóstico de la variable estudiada.” Con esta información podemos entender que las series de tiempo nos permiten conocer un determinado fenómeno en sucesivos momentos del tiempo, es por esto que en el presente trabajo se ha seleccionado la serie temporal de servicios solicitado de taxis en la ciudad de Cali, donde se nos proporciona información desde el 01 de noviembre del año 2018 hasta el 17 de mayo del 2019, los últimos 6 meses (180 días), de una base de datos que cuenta con una columna para la fecha y otra para los números de servicios de taxis pedidos, con el fin de hacer predicciones futuras basadas en patrones históricos, donde se cumple la definición de serie de tiempo.
# Instalar y cargar el paquete necesario
library(readxl)
library(lubridate)
library(dplyr)
library(tidyverse)
# Leer los datos del archivo Excel
datos <- read_excel("Taxis.xlsx")
# Visualizar la estructura de los datos, se eligieron los datos de los últimos 6 meses
View(datos)
# Mostrar los nombres de las columnas
names(datos)
## [1] "date" "Servicios"
# Almacenar el número de servicios de taxis en un objeto separado
num_servicios_taxis <- datos$Servicios
# Visualizar la longitud de la serie de servicios de taxis para verificar que sean las 180
length(num_servicios_taxis)
## [1] 321
datos <- datos %>%
mutate(mes = format(date, "%B-%Y"))
datos$mes <- factor(datos$mes, levels = unique(datos$mes))
taxis_por_mes <- split(datos, datos$mes)
names(taxis_por_mes)
## [1] "julio-2018" "agosto-2018" "septiembre-2018" "octubre-2018"
## [5] "noviembre-2018" "diciembre-2018" "enero-2019" "febrero-2019"
## [9] "marzo-2019" "abril-2019" "mayo-2019"
noviembre_2018 <- taxis_por_mes[["noviembre-2018"]]
View(noviembre_2018)
diciembre_2018 <- taxis_por_mes[["diciembre-2018"]]
View(diciembre_2018)
enero_2019 <- taxis_por_mes[["enero-2019"]]
View(enero_2019)
febrero_2019 <- taxis_por_mes[["febrero-2019"]]
View(febrero_2019)
marzo_2019 <- taxis_por_mes[["marzo-2019"]]
View(marzo_2019)
abril_2019 <- taxis_por_mes[["abril-2019"]]
View(abril_2019)
mayo_2019 <- taxis_por_mes[["mayo-2019"]]
View(mayo_2019)
Principalmente, se distinguirá una tendencia en la serie (puede ser creciente, decreciente o constante), su estacionalidad, es decir, patrones que se repiten a intervalos regulares, y ruido o variabilidad aleatoria que no se pueda atribuir a la tendencia.
En efecto, para este ejercicio se hará uso del modelo ARIMA (AutoRegressive Integrated Moving Average) es una herramienta estadística utilizada para analizar y pronosticar series de tiempo, cuyo significado se le atribuye a sus funciones, tales como utilizar la dependencia entre una observación y varias observaciones anteriores, transformar una serie de tiempo no estacionaria en una serie estacionaria aplicando la diferenciación, y usar la dependencia entre una observación y un error residual (también conocido como ruido, es la diferencia entre el valor observado y el predicho) de un modelo de media móvil aplicado a observaciones anteriores, para ver cómo afecta el valor que se quiere predecir.
La ecuación de media móvil con la que se determinan los errores es: Xt=μ+εt+θ1εt−1+θ2εt−2+⋯+θqεt−q donde: - Xt es el valor de la serie de tiempo en el tiempo t.
μ es la media de la serie de tiempo (a menudo se asume cero si los datos están centrados).
εt es el error residual en el tiempo t.
θ1,θ2,…,θq_1, _2, , _qθ1,θ2,…,θq son los parámetros de la parte de media móvil.
εt−1,εt−2,…,εt−q son los errores residuales de los periodos anteriores.
En adición, se da a conocer que la notación del modelo ARIMA es ARIMA(p, d, q), donde sus parámetros son:
● p: Orden de la parte autorregresiva (AR), la cuál se determina en el gráfico de la función de autocorrelación parcial o PACF, quien mide la correlación entre una observación y otra observación rezagada, pero controlando observaciones o rezagos intermedios
● d: Número de diferencias necesarias para hacer la serie estacionaria (I).
● q: Orden de la parte de media móvil (MA), la cual se determina en el gráfico de la función de autocorrelación o ACF, quien mide la correlación entre una serie de tiempo y sus propias versiones rezagadas en diferentes intervalos de tiempo.
Los modelos ARIMA son especialmente valiosos para detectar y modelar componentes estacionales (patrones recurrentes y periódicos que se repiten a intervalos regulares de tiempo) en las series temporales, lo cual es importante al momento de generar pronósticos un poco más precisos. Esto resulta particularmente importante en sectores como el transporte, donde la demanda puede variar considerablemente en distintas épocas del año. Además son importantes en series temporales debido a su flexibilidad, ya que esta nos permite ajustar la serie de tiempo y nos permite combinar términos autorregresivos, de diferenciación y de media móvil que se pueden adaptar a múltiples patrones de los datos;al igual que los modelos ARIMA nos permiten realizar pronósticos de corto plazo y predicciones fiables para la toma de decisiones. Su capacidad para capturar las dinámicas temporales complejas y transformar series no estacionarias en estacionarias los convierte en una opción preferida para quienes necesitan realizar pronósticos basados en datos históricos, como lo es los datos de servicios solicitados de taxis en la ciudad de Cali.
Descripción de la Serie Temporal:
La serie temporal abarca desde el 19 de noviembre de 2018 hasta el 16 de mayo de 2019 que fueron los datos más recientes de la base de datos, lo que representa un período de aproximadamente 6 meses, el cual está marcado por festividades locales, eventos deportivos, comercio muy activo por la navidad, periodo de vacaciones de gran parte de los habitantes, etc. En cuanto a las estadísticas descriptivas se realizó una separación del tiempo por meses para analizarlas con ayuda de un gráfico de cajas, creando una nueva columna en la base de datos que distingue el nombre del mes. En general, se puede ver que la mayoría del tiempo la media de los servicios de taxis pedidos osciló alrededor de los 4000, exceptuando Diciembre que fue donde la media de los pedidos dió un salto a más de 5000.
library(plotly)
# Combinar los datos de los meses seleccionados
meses_estudiados <- bind_rows(noviembre_2018, diciembre_2018, enero_2019, febrero_2019, marzo_2019, abril_2019, mayo_2019, )
Al momento de organizar nuestra base de datos por meses y combinarlos entre sí, decidimos hacer un diagrama de cajas y alambres el cual nos servirá para determinar el comportamiento de la distribución de servicios de taxis por mes y así mismo compararla en el tiempo establecido. Por medio de este diagrama se pudo observar datos interesantes respecto a su comportamiento con el pasar de los meses.
# Crear el gráfico de cajas (boxplot)
grafica_cajas<- ggplot(meses_estudiados, aes(x = mes, y = Servicios, fill = mes)) +
geom_boxplot() +
labs(title = "Distribución de Servicios de Taxis por Mes",
x = "Mes",
y = "Número de Servicios") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(grafica_cajas)
En los meses de noviembre del 2018, febrero y marzo del 2019 se
presentó un comportamiento similar debido a que el tamaño de sus cajas
nos demostraba que sus datos rondaban valores similares; en donde
obtuvimos que el q1 el cual pertenece al 25% de nuestros datos, nos
arrojaba valores rondando los 3,000 entre estos encontramos con mayor
exactitud los datos de 3,492 para el mes de febrero, 3,603 para el mes
de marzo y 3,683 para el mes de noviembre. Para el q3 que nos indica el
comportamiento del 75% de nuestros datos, se observaron valores rondando
los 4,000, con mayor exactitud 4,404 para el mes de febrero, 4,562 para
el mes de marzo y 4,613 para el mes de noviembre; sin embargo, es
importante resaltar que en el mes de marzo se presentó un valor atípico
que nos indica que hubo un día del mes en donde se alcanzó un máximo de
servicios de 6,366.
El mes en donde se presentaron mayores servicios fue en diciembre, se
podría decir que la festividad del mes influye en estos altos valores y
también que es el mes en donde se celebra la feria de cali, por ende,
hay mayores posibilidades de que el uso de este medio de transporte sea
constante; se encontró que el valor mínimo de servicio de taxis en un
dia fue de 3,674 cuando en otros meses se ve que en este valor se
reflejan el 25% de los servicios; al mismo tiempo se encontró un máximo
de 6,222. Caso opuesto al de diciembre, se presenta en el mes de enero;
en este mes se obtiene el índice en promedio de servicios por mes más
bajo de nuestros datos, con un mínimo de 1,942 y aunque se obtuvo un
valor atípico alto con su máximo de 5,930, por el tamaño de su caja se
observó que sus valores rondaban los 3,000. Para abril y mayo ocurrió
algo curioso; en abril, la mayoría de los valores rondaron entre los
3,000 a los 3,400. Para el mes de mayo se encontró el mayor mínimo de
nuestros datos, en donde nos dice que en un día se registraron solamente
779 servicios de taxis y al mismo tiempo se encontró uno de los días en
donde más se registraron servicios con un número de 6,232.
tabla_frecuencias <- datos %>%
group_by(mes, Servicios) %>%
summarise(Frecuencia = n(), .groups = 'drop')
# Graficar la tabla de frecuencias
tabla_frecuencias_mes <- datos %>%
group_by(mes) %>%
summarise(Frecuencia = n(), .groups = 'drop')
# Ordenar los niveles del factor 'mes' para que aparezcan en el orden correcto en la gráfica
tabla_frecuencias_mes <- datos %>%
group_by(mes) %>%
summarise(Frecuencia = sum(Servicios), .groups = 'drop')
# Ordenar los niveles del factor 'mes' para que aparezcan en el orden correcto en la gráfica
tabla_frecuencias_mes$mes <- factor(tabla_frecuencias_mes$mes, levels = unique(tabla_frecuencias_mes$mes))
# Graficar la tabla de frecuencias
grafico_frecuencias <- ggplot(tabla_frecuencias_mes, aes(x = mes, y = Frecuencia, fill = mes)) +
geom_bar(stat = "identity") +
labs(title = "Tabla de Frecuencias del Número de Servicios de Taxis por Mes",
x = "Mes",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none")
ggplotly(grafico_frecuencias)
Como se observa en la grafica anterior, tenemos las frecuencias mensuales de servicios de taxis, donde se puede observar tenemos los meses, noviembre y diciembre del año 2018, además de los meses enero, febrero, marzo, abril y mayo de 2019. Donde se puede notar que el mes con mayor cantidad de pedidos es diciembre del 2018, con una frecuencia de 154325 servicios solicitados, y la menor cantidad de servicios solicitados 73638 fue en el mes de mayo de 2019. Los meses de noviembre y octubre de 2018 parecen tener una cantidad similar pero al observar a detalle podemos ver que tienen una diferencia aproximadamente de 689 servicios.
Siguiendo con la descripción estadística, se agruparon los días de la semana creando otra columna en la base de datos que distinguiera el nombre del día para crear una tabla de frecuencias con la suma de servicios pedidos por día y se graficaron, permitiéndo identificar que los días de semana se piden más servicios de taxis que los fines de semana, puede que el pico y placa tenga influencia en esta tendencia. Del mismo modo, los viernes se piden la mayor cantidad de servicios, puede que otro factor influyente sea la preferencia de las personas por salir a hacer actividades diferentes, así como los domingos son los días donde menos taxis se piden, talvez porque las personas prefieran no salir ese día o cuenten con su transporte privado.
# Asegurarse de que la columna 'date' esté en formato Date
datos$date <- as.Date(datos$date)
# Crear una nueva columna con el nombre del día de la semana
datos <- datos %>%
mutate(dia_semana = weekdays(date))
# Dividir los datos por días de la semana
taxis_por_dia <- split(datos, datos$dia_semana)
# Mostrar los nombres de los días de la semana en la lista
names(taxis_por_dia)
## [1] "domingo" "jueves" "lunes" "martes" "miércoles" "sábado"
## [7] "viernes"
# Visualizar los datos por días de la semana
lunes <- taxis_por_dia[["lunes"]]
View(lunes)
martes <- taxis_por_dia[["martes"]]
View(martes)
miercoles <- taxis_por_dia[["miércoles"]]
View(miercoles)
jueves <- taxis_por_dia[["jueves"]]
View(jueves)
viernes <- taxis_por_dia[["viernes"]]
View(viernes)
sabado <- taxis_por_dia[["sábado"]]
View(sabado)
domingo <- taxis_por_dia[["domingo"]]
View(domingo)
# Convertir dia_semana en un factor con niveles en el orden correcto
datos <- datos %>%
mutate(dia_semana = weekdays(date))
# Convertir dia_semana en un factor con niveles en el orden correcto
datos$dia_semana <- factor(datos$dia_semana,
levels = c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"))
El realizar una comparación de nuestros meses seleccionados fue de gran importancia para entender el comportamiento de nuestra base de datos, sin embargo para llegar a predicciones futuras más exactas, se creía necesario hacer una comparación basándonos en los días de la semana, es por eso que a las fechas de nuestros datos se le añadió a que dia de la semana pertenecen para así realizar nuestro análisis.
# Tabla de frecuencias por día de la semana
tabla_frecuencias_dia <- datos %>%
group_by(dia_semana) %>%
summarise(Frecuencia = n(), .groups = 'drop')
grafica_frecuencias_dia <- ggplot(tabla_frecuencias_dia, aes(x = dia_semana, y = Frecuencia, fill = dia_semana)) +
geom_bar(stat = "identity") +
labs(title = "Frecuencia de Servicios de Taxis por Día de la Semana",
x = "Día de la Semana",
y = "Frecuencia") +
theme_minimal() +
scale_fill_brewer(palette = "Set3") +
theme(legend.position = "none")
ggplotly(grafica_frecuencias_dia)
Nuestra tabla de frecuencias muestra el número de observaciones promedio para cada día en específico, desde el lunes hasta el domingo y según los datos proporcionados, se obtuvo una frecuencia de 46 en cada uno de estos días; el día sábado varió a 45 y para el domingo volvió a ser de 46. Esto indica que los datos están relativamente bien equilibrados en cuanto a la cantidad de registros para cada día de la semana, con una leve variación en el número de registros entre el sábado y los otros días de la semana.
tabla_sumas_servicios_dia <- datos %>%
group_by(dia_semana) %>%
summarise(Suma_servicios = sum(Servicios), .groups = 'drop')
print(tabla_sumas_servicios_dia)
## # A tibble: 7 × 2
## dia_semana Suma_servicios
## <fct> <dbl>
## 1 lunes 174240
## 2 martes 187283
## 3 miércoles 183181
## 4 jueves 194200
## 5 viernes 206869
## 6 sábado 167194
## 7 domingo 140816
grafica_sumas<- ggplot(tabla_sumas_servicios_dia, aes(x = dia_semana, y = Suma_servicios, fill = dia_semana)) +
geom_bar(stat = "identity") +
labs(title = "Suma de Servicios de Taxis por Día de la Semana",
x = "Día de la Semana",
y = "Suma de Servicios") +
scale_fill_brewer(palette = "Set3") +
theme_minimal()
ggplotly(grafica_sumas)
Para este diagrama se tiene la cantidad de servicios solicitados por días de la semana, donde; la mayor frecuencia, el dia en que con mayor cantidad se solicitan servicios de taxi son los días viernes con una cantidad de solicitudes de 206869 y los días con menor cantidad se solicitudes son los días domingos, mientras que durante la semana los servicios se suelen mantener sin picos o valles tan notorios.
En esta parte del estudio, se muestra la serie temporal graficada para iniciar a reconocer las variaciones de los servicios pedidos con el transcurso del tiempo.
start_date <- as.Date(datos$date[1])
serie_ts <- ts(num_servicios_taxis, start = c(year(start_date), yday(start_date)), frequency = 365)
# Plotear la serie temporal de número de servicios de taxis
library(forecast)
autoplot(serie_ts)
library(tseries)
# Estadísticas descriptivas
cat("Media:", mean(num_servicios_taxis), "\n")
## Media: 3905.866
cat("Desviación estándar:", sd(num_servicios_taxis), "\n")
## Desviación estándar: 882.7929
cat("Mínimo:", min(num_servicios_taxis), "\n")
## Mínimo: 779
cat("Máximo:", max(num_servicios_taxis), "\n")
## Máximo: 7317
print(summary(num_servicios_taxis))
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 779 3432 3869 3906 4404 7317
# Prueba de Dickey-Fuller Aumentada (ADF) para estacionariedad
adf_test <- adf.test(serie_ts)
print(adf_test)
##
## Augmented Dickey-Fuller Test
##
## data: serie_ts
## Dickey-Fuller = -3.0788, Lag order = 6, p-value = 0.1216
## alternative hypothesis: stationary
# Más estadísticas descriptivas
library("e1071")
cat("Curtosis:", kurtosis(serie_ts), "\n")
## Curtosis: 0.8384039
cat("Asimetría:", skewness(serie_ts), "\n")
## Asimetría: 0.1102005
cat("Mediana:", median(serie_ts), "\n")
## Mediana: 3869
cat("Cuartiles:", quantile(serie_ts), "\n")
## Cuartiles: 779 3432 3869 4404 7317
cat("Rango:", range(serie_ts), "\n")
## Rango: 779 7317
cat("Varianza:", var(serie_ts), "\n")
## Varianza: 779323.3
Se calcularon distintas medidas de tendencia central para reconocer características de la serie. Como podemos observar tenemos los meses, noviembre y diciembre del año 2018, además de los meses enero, febrero, marzo, abril y mayo de 2019. Donde se puede notar que el mes con mayor cantidad de pedidos es diciembre del 2018, con una frecuencia de +150000 servicios solicitados, el la menor cantidad de servicios solicitados con un poco más de 50000 fue el mes de noviembre de 2018. Los meses enero y febrero del 2019, tiene una frecuencia alrededor de 100000 servicios solicitados, mientras que marzo muestra un pequeño aumento con respecto a los meses anteriores.
Como se pudo analizar, durante el tiempo observado de la serie temporal tenemos que en promedio se solicitan 3905.866 servicios de taxis diariamente, este valor nos puede dar una visión de los taxis que se necesitan diariamente para suplir los servicios a solicitar. Junto con el dato de la desviación, se puede inferir que hay una variabilidad de 882.7929 entre los servicios solicitados de taxis respecto a la media, lo cual indica que los datos es tan dispersos de manera considerable, donde se encuentren varios valores atípicos.
Con el resultado del valor mínimos podemos ver que en nuestra serie temporal, un día se obtuvieron 799 servicios solicitados de taxis, lo cual es el valor mínimo dentro de toda la serie temporal y al tener el valor máximo se infiere la cantidad máxima de servicios solicitados de taxi fue de 7317 en un día de la serie estudiada.
Estos datos de máximos y mínimos nos pueden ayudar a conocer los topes de taxis que se deben tener disponibles según las temporadas del mes.
PRUEBA DICKEY-FULLER AUMENTADA
La prueba de Dickey-fuller aumentada (adf) es una prueba de raíz unitaria que nos permite por medio de pruebas de hipótesis de estacionariedad si los datos que estamos usando son no estacionarios. Al observar lo arrojado después de realizar el test de adf, se tiene que el valor p es igual a 0.1216 que es mayor al nivel de significancia (0.05), lo que nos indica que la serie no es estacionaria. La curtosis permite comparar los datos con respecto a la distribución normal. Al obtener un valor de curtosis de 0.8384039, con lo cual podemos inferir que la distribución de los datos son más “puntiagudos” que una distribución normal.
La asimetría nos permite saber que tan simétrica es la distribución estudiada. Como resultado tenemos que la asimetría tiene un valor de -0.2963595 lo cual nos indica que la distribución tiene una asimetría hacia la izquierda (cola más larga hacia la izquierda).
La mediana obtenida es 4142, lo cual quiere decir que es el valor que separa los días con un número de servicios por encima de la mediana y con un número de servicios por debajo. Los cuartiles dividen los datos en cuatro partes iguales. El primer cuartil 3596.5, es el valor por debajo del cual se encuentra el 25% de los datos , el segundo cuartil es la mediana, 4142 y el tercer cuartil 4706.5, es el valor por debajo del cual se encuentra el 75% de los datos. En este caso, los cuartiles te dan una idea de cómo se distribuyen los datos en diferentes rangos. El rango es la diferencia entre el valor máximo y el valor mínimo de los datos. Es una medida de la dispersión de los datos. En este caso, el rango te da una idea de la variabilidad en el número de servicios de taxis, el cual tiene como valor 6538. La varianza es 882099.8, la que nos indica la dispersión de los datos
library(tidyverse)
library(dplyr)
# Definir la fecha de corte para dividir los datos (en formato año-día del año), el de test es el 20% de los datos
end_training <- c(2019, as.numeric(format(as.Date("2019-04-10"), "%j")))
start_test <- c(2019, as.numeric(format(as.Date("2019-04-11"), "%j")))
# Crear la ventana de entrenamiento
ventana_entrenamiento <- window(serie_ts, end = end_training)
# Crear la ventana de prueba
ventana_prueba <- window(serie_ts, start = start_test)
Al plotear la serie temporal de la ventana de entrenamiento, se obtuvo un gráfico en donde la línea de tendencia suavizada muestra un comportamiento ascendente durante nuestros años, que podría indicar un aumento en la demanda de servicios de taxis en la ciudad a lo largo del tiempo; también se observó que los datos de servicios de taxis muestran una variabilidad significativa en la cantidad de servicios prestados diariamente. Algunos días experimentan una alta demanda mientras que otros días tienen una demanda más baja. Esta variabilidad nos habla de patrones de viaje diferentes durante la semana y posibles eventos especiales que afectan la demanda de taxis.
# Plotear la ventana de entrenamiento
library(ggplot2)
library(forecast)
autoplot(ventana_entrenamiento, series = "Data") +
labs(title = "Ventana de Entrenamiento", x = "Tiempo", y = "Valor") +
theme_minimal() +
scale_color_manual(values = c("Data" = "blue")) +
geom_smooth(method = "loess", color = "red", se = FALSE)
# Plotear la ventana de prueba
autoplot(ventana_prueba, series = "Data") +
labs(title = "Ventana de Prueba", x = "Tiempo", y = "Valor") +
theme_minimal() +
scale_color_manual(values = c("Data" = "green")) +
geom_smooth(method = "loess", color = "purple", se = FALSE)
Al plotear nuestra ventana de prueba que contiene el 20% de nuestros datos, se observó una tendencia similar a la observada para una ventana menor, comparando nuestras ventanas, observamos que la tendencia ascendente en la demanda de servicios de taxis que se identificó en la ventana de entrenamiento continúa en la ventana de prueba y nuestra variabilidad en la ventana de prueba sigue mostrando patrones similares a los de la ventana de entrenamiento.
Análisis de Autocorrelación: Por medio del gráfico ACF, se observó una tendencia de una serie no estacionaria debido a que en este tipo de series, la autocorrelación va decreciendo pero lentamente, mostrando correlaciones significativas a lo largo de muchos intervalos de tiempos (lag).
library(fpp2)
ggAcf(ventana_entrenamiento, 30)
library(tseries)
adf.test(ventana_entrenamiento)
##
## Augmented Dickey-Fuller Test
##
## data: ventana_entrenamiento
## Dickey-Fuller = -2.6436, Lag order = 6, p-value = 0.305
## alternative hypothesis: stationary
Al momento de aplicar la prueba de dickeyfuller nos indico que la serie no es estacionaria; el valor de la estadística de Dickey-Fuller es -2.6436 con un orden de lag de 6(valores anteriores utilizados en el test). El valor p obtenido es 0.305, que es mayor al valor de 0.05 y lo que buscamos es un valor menor. Con esto, podemos deducir que la serie contiene tendencias que no son constantes a lo largo del tiempo y requieren transformación para alcanzar la estacionariedad necesaria para aplicar nuestro modelo ARIMA. Transformación de la Serie Temporal: Aplicamos una diferencia de primer orden a la serie temporal en la ventana de entrenamiento para hacerla estacionaria. Esto implica tomar la diferencia entre cada valor de la serie y su valor anterior.
miserie<-diff(ventana_entrenamiento) %>% na.omit()
autoplot(miserie)
Por medio del gráfico ACF, observamos una serie diferente en donde se podía ver que ya era estacionaria debido a los comportamientos de algunas barras de autocorrelación que sobrepasan las líneas que nos indican los límites de significancia y al suceder esto, se considera que la correlación en ese lag es significativo y podemos ver pasando por diversos lag, algunas barras de autocorrelación ya no sigue esta tendencia tan significativa, sin embargo no siguen alguna tendencia que nos podría decir que estamos deduciendo mal. Sin embargo, para estar seguros con nuestra decisión se realizó la prueba de Dickey-Fuller, que nos lanzo resultados con una estadística de -11.039 y un p-valor de 0.01; con esto, se observa una fuerte evidencia en contra de la hipótesis nula de no estacionariedad y nos indica que la serie diferenciada es estacionaria ya que los patrones en los datos no están influenciados por tendencias a largo plazo. Cabe aclarar que se diferenció una vez y por nuestros resultados, el modelo ARIMA ya se puede aplicar porque se cumplen los supuestos de estacionariedad necesarios para su aplicación.
library(tseries)
ggAcf(miserie, 30)
adf.test(miserie)
##
## Augmented Dickey-Fuller Test
##
## data: miserie
## Dickey-Fuller = -11.039, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
#segun el valor p esta serie si es estacionaria, se diferencio 1 vez
Los valores del modelo ARIMA (p,q,d) se concluyeron a partir del análisis de autocorrelación y autocorrelación parcial de la serie transformada. Gracias a que estos nos proporcionan pistas importantes sobre la naturaleza de la dependencia temporal en los datos, ayudándonos en la identificación del orden del modelo.
library(gridExtra)
grid.arrange(ggAcf(miserie, 20),
ggPacf(miserie, 20),
nrow=1
)
Nuestro valor pasó a ser automáticamente 1 debido a que nuestra serie sólo se diferenció una vez, ya que con esto nos dieron los resultados necesarios para empezar con nuestro modelo. Por medio de la Autocorrelación (ACF), obtenemos la correlación entre una observación en la serie y las observaciones pasadas a diferentes lags. Los picos significativos nos indicaron la presencia de correlaciones en los datos que pueden ser modelados y los lags en el que la autocorrelación cruzaba el límite de significancia nos podían proporcionar una estimación del parámetro q en el modelo, que nos representa el orden del componente de media móvil. Autocorrelación Parcial (PACF), aquí observamos que nos elimina la influencia de los lags más cortos y nos mostraba la correlación entre una observación de la serie y otra observación en un lag específico, Los picos significativos en el PACF nos hablaban sobre la presencia de autocorrelaciones que pueden ser modeladas y nos brindaban una posible estimación del parámetro p en el modelo, que nos representa el orden del componente autorregresivo.
Se realizaron múltiples ajustes de modelos ARIMA a nuestra serie (ventana_prueba) con diferentes combinaciones de valores para p, d y q; Al final se determinaron 16 modelos diferentes que serán presentados a continuación junto con sus estadísticas de ajuste, como AIC (Criterio de Información de Akaike), AIC corregido (AICc) y BIC (Criterio de Información Bayesiano).
library(forecast)
#REVISAR EL d#
auto.arima(ventana_prueba)
## Series: ventana_prueba
## ARIMA(0,0,1) with non-zero mean
##
## Coefficients:
## ma1 mean
## 0.4894 3910.9512
## s.e. 0.1924 262.0359
##
## sigma^2 = 1224353: log likelihood = -310.94
## AIC=627.88 AICc=628.61 BIC=632.72
modelo_auto_arima <- Arima(ventana_prueba, order = c(0,1,2))
modelo_auto_arima
## Series: ventana_prueba
## ARIMA(0,1,2)
##
## Coefficients:
## ma1 ma2
## -0.4563 -0.4764
## s.e. 0.2041 0.2330
##
## sigma^2 = 1301349: log likelihood = -304.43
## AIC=614.85 AICc=615.6 BIC=619.6
modelo_01 <- Arima(ventana_prueba, order = c(0,1,0))
modelo_01
## Series: ventana_prueba
## ARIMA(0,1,0)
##
## sigma^2 = 1698677: log likelihood = -309.3
## AIC=620.6 AICc=620.71 BIC=622.18
El modelo 01 es un ARIMA(0,1,0), que nos indico que se realizó una diferenciación (d=1) y no se incluyeron términos autorregresivos (p=0) ni de media móvil (q=0). Los valores de nuestras estadísticas de ajuste nos arrojaron lo siguiente: AIC=592,47 AICc=592.59 BIC=594,02, lo cual consideramos esta alto para un modelo que en su estructura no tiene mayor información.
modelo_02<- Arima(ventana_prueba, order = c(0,1,2))
modelo_02
## Series: ventana_prueba
## ARIMA(0,1,2)
##
## Coefficients:
## ma1 ma2
## -0.4563 -0.4764
## s.e. 0.2041 0.2330
##
## sigma^2 = 1301349: log likelihood = -304.43
## AIC=614.85 AICc=615.6 BIC=619.6
El modelo 02 es un ARIMA(0,1,2), con diferenciación de primer orden (d=1) y dos términos de media móvil (q=2). En este caso, el AIC (583.56) y el AICc (584.33) son muy similares, lo que nos indico una buena compensación entre la complejidad del modelo y la capacidad que tiene para explicar los datos. El BIC, asi sea más alto (588.22), también está dentro de un rango que consideramos está bien.
modelo_03<- Arima(ventana_prueba, order = c(0,1,5))
modelo_03
## Series: ventana_prueba
## ARIMA(0,1,5)
##
## Coefficients:
## ma1 ma2 ma3 ma4 ma5
## -0.5261 -0.4272 -0.0762 0.3240 -0.2944
## s.e. 0.2752 0.2138 0.2877 0.3743 0.2410
##
## sigma^2 = 1328782: log likelihood = -303.82
## AIC=619.65 AICc=622.54 BIC=629.15
El modelo 03 (0,1,5), Aunque en este modelo incluimos más términos de media móvil que el modelo 02, por medio de los valores de sus estadísticas de ajuste (AIC=587.62 AICc=590.62 BIC=596.96), se determinó que no mejoraba significativamente respecto al modelo 2.
modelo_04 <- Arima(ventana_prueba, order = c(0,1,1))
modelo_04
## Series: ventana_prueba
## ARIMA(0,1,1)
##
## Coefficients:
## ma1
## -0.7812
## s.e. 0.2330
##
## sigma^2 = 1426488: log likelihood = -306.12
## AIC=616.24 AICc=616.6 BIC=619.4
El modelo 04 (0,1,1), tiene valores un poco más altos que el modelo 02, por eso no se considera por encima del modelo 2.
modelo_05 <- Arima(ventana_prueba, order = c(1,1,0))
modelo_05
## Series: ventana_prueba
## ARIMA(1,1,0)
##
## Coefficients:
## ar1
## -0.2376
## s.e. 0.1897
##
## sigma^2 = 1671879: log likelihood = -308.53
## AIC=621.07 AICc=621.43 BIC=624.24
El modelo 05 es un (1,1,0), los valores arrojados por este modelo (AIC=593.22 AICc=593.6 BIC=596.33)hacen que no lo tomemos en cuenta debido a la diferencia con el modelo 2 que sigue arrojando valores más bajos.
modelo_06 <- Arima(ventana_prueba, order = c(1,1,1))
modelo_06
## Series: ventana_prueba
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.3855 -1.0000
## s.e. 0.1809 0.2405
##
## sigma^2 = 1310921: log likelihood = -305.02
## AIC=616.04 AICc=616.79 BIC=620.79
El modelo 06 (1,1,1), tiene un AIC más alto que el modelo 02 (AIC=586.74), y sus otros valores siguen estando por encima.
modelo_07 <- Arima(ventana_prueba, order = c(1,1,5))
modelo_07
## Series: ventana_prueba
## ARIMA(1,1,5)
##
## Coefficients:
## ar1 ma1 ma2 ma3 ma4 ma5
## 0.1878 -0.6964 -0.3652 0.0247 0.3599 -0.3231
## s.e. 0.8417 0.7956 0.3498 0.5921 0.4564 0.2807
##
## sigma^2 = 1374406: log likelihood = -303.8
## AIC=621.6 AICc=625.6 BIC=632.68
El modelo 07 (1,1,5) , a pesar de incluir más términos de media móvil, sus valores son mayores en comparación con otros modelos (AIC=589.6 AICc=593.75 BIC=600.49).
modelo_08 <- Arima(ventana_prueba, order = c(1,1,2))
modelo_08
## Series: ventana_prueba
## ARIMA(1,1,2)
##
## Coefficients:
## ar1 ma1 ma2
## -0.1563 -0.3294 -0.5527
## s.e. 0.4197 0.3642 0.2704
##
## sigma^2 = 1346973: log likelihood = -304.36
## AIC=616.72 AICc=618.01 BIC=623.05
Para el modelo 08 (1,1,2), los valores de AIC (585.18), AICc (586.52) y BIC (591.4) son bastante similares a los de otros modelos, lo que indica una buena compensación entre el modelo, pero este sigue teniendo valores más altos que el modelo 2.
modelo_09 <- Arima(ventana_prueba, order = c(2,1,2))
modelo_09
## Series: ventana_prueba
## ARIMA(2,1,2)
##
## Coefficients:
## ar1 ar2 ma1 ma2
## -0.1303 -0.0587 -0.3582 -0.4956
## s.e. 0.4461 0.3799 0.4122 0.4578
##
## sigma^2 = 1392958: log likelihood = -304.35
## AIC=618.7 AICc=620.7 BIC=626.61
Modelo 09 (2,1,2), sus valores de AIC (586.32), AICc (588.39) y BIC (594.1) son más altos que los del modelo 08 y el modelo 02, lo que indica que este modelo podría ser demasiado complejo y no proporcionar una mejora significativa en el ajuste.
modelo_10 <- Arima(ventana_prueba, order = c(2,1,1))
modelo_10
## Series: ventana_prueba
## ARIMA(2,1,1)
##
## Coefficients:
## ar1 ar2 ma1
## 0.3241 -0.1815 -0.8736
## s.e. 0.2971 0.2757 0.2554
##
## sigma^2 = 1395350: log likelihood = -304.83
## AIC=617.66 AICc=618.95 BIC=623.99
El modelo 10 es un (2,1,1), aunque tiene un AIC ligeramente parecido al del modelo 08 (AIC=585.51), sus valores de AICc y BIC son más altos, lo que sugiere que el modelo 08 podría ser preferible por encima de este.
modelo_11 <- Arima(ventana_prueba, order = c(2,1,0))
modelo_11
## Series: ventana_prueba
## ARIMA(2,1,0)
##
## Coefficients:
## ar1 ar2
## -0.3272 -0.4813
## s.e. 0.1762 0.1705
##
## sigma^2 = 1400952: log likelihood = -305.09
## AIC=616.18 AICc=616.93 BIC=620.93
El modelo 11 es un (2,1,0), Sus valores de AIC, AICc y BIC nos arrojan lo siguiente: AIC=583,51 AICc=584.28 BIC=588.18, lo cual nos dice de que podemos considerar este modelo debido a que tenemos dos valores parecidos en comparación con otros modelos estudiados.
modelo_12 <- Arima(ventana_prueba, order = c(2,1,5))
modelo_12
## Series: ventana_prueba
## ARIMA(2,1,5)
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 ma4 ma5
## -0.5892 -0.9023 0.2062 0.2626 -0.7402 -0.3653 -0.3632
## s.e. 0.1316 0.1256 0.2515 0.2832 0.2504 0.2576 0.2286
##
## sigma^2 = 1236352: log likelihood = -301.68
## AIC=619.36 AICc=624.69 BIC=632.03
El modelo 12 es (2,1,5), aunque tiene un AIC más bajo que algunos modelos (AIC=585.71), sus valores restantes no dan para ser considerados por encima de los mencionados anteriormente.
modelo_13 <- Arima(ventana_prueba, order = c(5,1,2))
modelo_13
## Series: ventana_prueba
## ARIMA(5,1,2)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1 ma2
## 0.0056 0.0228 0.1767 0.1364 -0.1605 -0.5052 -0.4948
## s.e. 0.5584 0.3147 0.2280 0.2560 0.1999 0.5562 0.5444
##
## sigma^2 = 1397912: log likelihood = -303.42
## AIC=622.84 AICc=628.17 BIC=635.51
El modelo 13 es (5,1,2), con un AIC=586.63 AICc=589.2 BIC=595.94 que nos determinó en esta prueba que existen valores un poco mejor ajustados, sin embargo, se debe realizar un análisis más profundo para determinar el mejor modelo
modelo_14 <- Arima(ventana_prueba, order = c(5,1,1))
modelo_14
## Series: ventana_prueba
## ARIMA(5,1,1)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1
## -0.3920 -0.5728 -0.2891 -0.2031 -0.3638 0.0392
## s.e. 0.3605 0.2321 0.2848 0.1986 0.1870 0.3622
##
## sigma^2 = 1405111: log likelihood = -303.25
## AIC=620.5 AICc=624.5 BIC=631.58
El modelo 14 es un (5,1,1), hasta este modelo, nuestros resultados siguen mostrando una variación pero que consideramos alta como para estudiar el modelo más a fondo (AIC=585.05 AICc=589.2 BIC=595.94)
modelo_15 <- Arima(ventana_prueba, order = c(5,1,0))
modelo_15
## Series: ventana_prueba
## ARIMA(5,1,0)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5
## -0.3594 -0.5608 -0.2708 -0.2008 -0.3598
## s.e. 0.1970 0.2021 0.2288 0.1954 0.1847
##
## sigma^2 = 1360538: log likelihood = -303.25
## AIC=618.51 AICc=621.4 BIC=628.01
El modelo 15 es (5,1,0), que incluye una diferenciación de primer orden (d=1) y cinco términos autorregresivos (p=5). Los estadísticos de este modelos nos arrojaron AIC=583.55 AICc=586.55 BIC=592.8
modelo_16 <- Arima(ventana_prueba, order = c(5,1,5))
modelo_16
## Series: ventana_prueba
## ARIMA(5,1,5)
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1 ma2 ma3
## -0.1385 -1.3167 0.1792 -0.5977 0.2410 -0.2769 1.0189 -1.0057
## s.e. 0.2875 0.2037 0.3610 0.2329 0.2409 0.4258 0.3325 0.6831
## ma4 ma5
## 0.2851 -0.9939
## s.e. 0.4062 0.5029
##
## sigma^2 = 1154197: log likelihood = -300.89
## AIC=623.79 AICc=634.79 BIC=641.21
El modelo 16 es (5,1,5), que incluye una diferenciación de primer orden (d=1), cinco términos autorregresivos (p=5) y cinco términos de media móvil (q=5). Se observó un valor muy alto para nuestro BIC (AIC=590.16 AICc=601.64 BIC=607.27)
library(forecast)
checkresiduals(modelo_02)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,2)
## Q* = 3.6307, df = 5, p-value = 0.6037
##
## Model df: 2. Total lags used: 7
checkresiduals(modelo_11)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,0)
## Q* = 2.9181, df = 5, p-value = 0.7126
##
## Model df: 2. Total lags used: 7
checkresiduals(modelo_13)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(5,1,2)
## Q* = 4.6595, df = 3, p-value = 0.1985
##
## Model df: 7. Total lags used: 10
checkresiduals(modelo_15)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(5,1,0)
## Q* = 2.8762, df = 3, p-value = 0.4111
##
## Model df: 5. Total lags used: 8
Por medio de los criterios AIC, AICC y BIT que son los determinantes en cada modelo para generar una comparación congruente, se estima que los mejores modelos son el 02, el 11, el 13 y el 15. Para estos modelos, se tiene que al observar los residuos del modelo 15 estos se encuentran más cercanos a una distribución normal y en los gráficos ACF los datos de los 4 modelos seleccionados se encuentran pocas autocorrelaciones entre los residuos, lo cual indica que no son dependientes entre sí y por esto no tan significativos. También al estudiar el valor p con valor igual de los modelos se puede rechazar la hipótesis nula de que no hay correlación en los residuos, lo cual se puede inferir como ruido blanco.
accuracy(modelo_11)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -84.33928 1134.619 816.6048 -18.70062 34.53158 NaN -0.01747885
accuracy(modelo_15)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -70.91202 1067.666 740.3414 -18.18545 32.31822 NaN 0.002273891
accuracy (modelo_13)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 56.39652 1046.738 773.0937 -14.55755 31.74261 NaN -0.0005110461
Como se puede evidenciar al aplicar la función accuracy en los posibles modelos planteados anteriormente, se denota que la mejor opción a elegir es el modelo 13 por los resultados que se obtienen en los errores de pronóstico, es decir, MAE MPE MAPE, en los tes criterios podemos observar como tienen un valor menor, por lo cual es ese infiere que al predecir se puede estar más cerca de valores reales y consistentes.
library(tidyverse)
modelo_13 %>%
forecast(h=1,level = 0.95)
## Point Forecast Lo 95 Hi 95
## 2019.3753 2085.685 -261.5823 4432.952
tail(datos$Servicios, 6)
## [1] 3933 4827 4839 4388 4982 779
#Gráfico
modelo_13 %>%
forecast(h=10) %>% # (Realizo 10 pronósticos)
autoplot(include=10) + labs(title = "Pronóstico del número de servicios de taxis", x = "Tiempo", y = "Servicios de taxis") +
theme_minimal()
Al tener el modelo elegido, podemos pasar a pronosticar lo que pasará o la cantidad de servicios solicitados de taxis en los próximos 10 días con un nivel de confianza del 95%, con lo cual en nuestra gráfica podemos observar los últimos 6 días de la serie temporada elegida. Al observar la gráfica, se puede inferir que para el siguiente dia, es decir, para el 18 de mayo del año 2019, se espera que haya aproximadamente 4000 servicios a solicitar de taxis y para el día siguiente de ese, se esperan un poco más de 4000 servicios a solicitar.
Conclusiones
El estudio de nuestra serie abarcó un período de seis meses (noviembre 2018 a mayo 2019), identificando inicialmente patrones y tendencias un poco marcadas en la demanda de servicios de taxis. Realizamos varios análisis descriptivos detallados, en donde nos arrojaron una variabilidad significativa en la cantidad de servicios solicitados diariamente, con picos de demanda durante eventos festivos y valores atípicos encontrados en algunos meses. Aplicamos la prueba Dickey-Fuller aumentada para evaluar la estacionariedad de la serie, dandonos como resultado no estacionaria inicialmente, pero luego se logró mediante una diferenciación de primer orden. Ajustamos varios modelos ARIMA y todos ellos se evaluaron mediante criterios como AIC, AICc y BIC, destacando los modelos 02, 11 y 15 como los más ideales. Al final, el modelo 13 fue el seleccionado como mejor para hacer pronósticos, mostrando resultados más precisos en la predicción de la demanda futura de servicios de taxis. Los pronósticos indican una demanda constante en los próximos 10 días, con alrededor de 4000 servicios solicitados diariamente.
Gracias a todo el proceso realizado anteriormente y a los resultados del pronóstico, se observa que es de suma importancia realizar una predicción a futuro, esto puede ayudar a la empresa de taxis a mejorar su planificación a futuro, ya que al tener una estimación de los servicios a solicitar se puede suplir la demanda con mayor eficiencia, permitiendo así que los usuarios queden satisfechos, permitiendo ganancias para el momento del cumplimiento del servicio y hacia el futuro, puesto que ante los usuarios la empresa irá tomando reconocimiento por su buen servicio. También, al tener un pronóstico claro acerca de los servicios a solicitar la empresa podrá distribuir de mejor manera los vehículos a disposición y las asignaciones en diferentes días de la semana; además que al tener la cantidad necesaria de taxis disponibles evita que en la ciudad haya más congestión, lo cual produciría viajes y tiempos más largos de lo común; también hay que tener en cuenta que al haber mayor cantidad de taxis circulando, esto produce que aumenten las emisiones de gases como el dióxido de carbono (CO2), óxidos nitrosos, entre otros gases que ocasionan la contaminación en el aire.
Como limitación se pudo presentar que teníamos una diferencia de valores muy alta, con respecto a la cantidad menor y a la cantidad mayor de servicios solicitados Para posibles mejoras, se podrían implementar una mayor cantidad de modelos, donde al analizar diferentes características sean lo menor posibles y acercadas a cero, al igual que se podría implementar información acerca de diferentes horas del día en los que son mayor o menor la solicitud de servicios de taxi. Para un próximo estudio, se podría implementar el explorar un rango más amplio de modelos, buscando minimizar las discrepancias y ajustar los análisis a datos más específicos. También tener información sobre los patrones de solicitud de servicios de taxi durante distintos momentos del día podría proporcionar una visión más completa y precisa de la demanda, determinando así las horas en las que más se piden solicitudes e incluso las horas muertas para los taxistas. Asimismo, sería interesante poder tener información más cercana a la actual y quizá poder trabajar con una empresa como Metrocali (MIO) donde su uso es mayor quizá al de una empresa de taxis. Un factor para analizar en un futuro, podría ser la variación de los servicios respecto al clima, debido a que incluso en los días lluviosos pueden presentarse valores atípicos en esta clase de servicios o cambios en la infraestructura vial, como las obras recientes de las estaciones del mio, que redujeron los carriles y eso provocó que la gente buscará rutas alternas. Estos factores podrían influir en algún punto sobre los patrones de viaje de las personas y, por lo tanto, en la necesidad de servicios de transporte. Si se analiza esta información, se podría proporcionar una comprensión más completa de las tendencias en la demanda de servicios de taxi y ayudar a mejorar la precisión de los modelos predictivos.
Bibliografía
¿Conoce qué son las series de tiempo y las series desestacionalizadas? (s/f). Gov.co. Recuperado el 6 de junio de 2024, de https://www.dane.gov.co/index.php/actualidad-dane/3886-que-tipo-de-datos-usa-en-su-vida-cotidiana-3
Edenred, E. (2022, diciembre 2). Contaminación vehicular: índices, causas y cómo resarcirla. Edenred.mx. https://www.edenred.mx/blog/contaminacion-vehicular-indices-causas-y-como-resarcirla
Telefónicas, T.-E. (2023, mayo 30). Cuántos habitantes tiene Cali, Valle del Cauca en 2024. Teleencuestas. https://telencuestas.com/censos-de-poblacion/colombia/2024/valle-del-cauca/cali