En la actualidad, el hurto de bienes es uno de los delitos con mayor impacto en la inseguridad ciudadana; representa un gran desafío para las autoridades encargadas de garantizar la protección de bienes y derechos de nosotros como ciudadanos. Siguiendo este contexto, denunciar estos delitos se convierte en un componente clave para activar los mecanismos institucionales que como ciudadanos tenemos por derecho, para la recuperación de los bienes robados e identificar a los responsables.
Este estudio tiene como objetivo analizar la relación entre el proceso de denuncia, la atención que nos brindó la autoridad competente y la recuperación de los bienes hurtados. Todo esto con el fin de comprender cuáles factores influyen en las acciones posteriores de cuando se pone la denuncia. Por esta razón consideramos variables como la decisión de denunciar ante una autoridad, tipo de autoridad, el lugar al que acudió la víctima, satisfacción de la atención recibida y motivación principal.
A partir de estas variables, pretendemos determinar si la calidad de la atención recibida por la institución y las demás características del proceso de denuncia afectan de manera positiva o negativa la posibilidad de recuperar los bienes hurtados. Este análisis busca aportar evidencias para fortalecer estos procesos de atención ciudadana y la eficiencia de los mismos.
El análisis que hicimos se desarrollo a partir de una base de datos relacionada con el hurto a personas, el obejtivo como mencionamos anteriormente es identificar cuales factores influyen en recuperar los bienes robados ya sea de manera positiva o negativa,
Preparación de los datos:
Se utilizó el archivo Hurto.CSV.xlsx que contiene la información de registros de denuncia; primero realizamos una limpieza y renombramiento de variables que usaremos para facilitar su manejo:
Y: ¿Se recuperaron los bienes hurtados?
X1: ¿Se denunció el hurto ante una autoridad competente?
X2: ¿Ante qué autoridad presento la denuncia?
X3: ¿A qué lugar acudió?
X4: ¿Cuál fue la principal razón por la cual denunció el hurto?
X5: ¿Considera que la atención recibida fue satisfactoria?
library(readxl)
library(dplyr)
Hurto_CSV <- read_excel("Hurto.CSV.xlsx")
datos <- rename(Hurto_CSV,
Y = P1318,
X1 = P1324,
X2 = P583,
X3 = P582,
X4 = P1114,
X5 = P1599)
head(datos)
## # A tibble: 6 × 30
## DIRECTORIO NRO_ENCUESTA SECUENCIA_ENCUESTA SECUENCIA_P ORDEN FEX_C P578
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 600038 237 3 1 3 69030462744 3
## 2 600052 237 2 1 2 12015095337 10
## 3 600054 237 2 1 2 63259299745 3
## 4 600063 237 1 1 1 62554208091 10
## 5 600073 237 1 1 1 1016652386 12
## 6 600075 237 2 1 2 55587565692 12
## # ℹ 23 more variables: P1341 <dbl>, P1229 <dbl>, P1335 <dbl>, P1338 <dbl>,
## # P1339S3 <dbl>, P1339S5 <dbl>, P1339S1 <dbl>, P1339S2 <dbl>, P1339S6 <dbl>,
## # P580S1 <dbl>, P580S2 <dbl>, P580S3 <dbl>, P580S5 <dbl>, P580S6 <dbl>,
## # P1598 <dbl>, X1 <dbl>, X3 <dbl>, X2 <dbl>, X4 <dbl>, X5 <dbl>, P1600 <dbl>,
## # P1113 <dbl>, Y <dbl>Transformación de variables:
Se crearon variables binarias y dummies para representar valores cualitativos.
La variable dependiente la definimos como Y_bin, donde 1 significa la recuperación de los bienes y 0 significa que no se recuperaron.
datos$Y_bin <- ifelse(datos$Y == 1, 1,
ifelse(datos$Y == 2, 0, NA))
table(datos$Y_bin)
##
## 0 1
## 3003 88
Las demás variables también se transformaron para representar de forma numérica las categorías, con funciones como ifelse( ) y fastDummies::dummy_cols( ); luego las normalizamos utilizando la función scale( ) para que todas tuvieran la misma escala y evitar algún problema por diferencias de magnitud.
Modelos utilizados:
Se implementaron dos modelos distintos:
Modelo K-Nearest Neighbors (KNN):
Se dividió la base de datos en un 70% para entrenamiento y un 30% para
prueba.
Se evaluaron distintos valores de K = 1, 3 y 5,
seleccionando en el que obtuvimos mayor precisión general(global)
Este modelo estima la probabilidad de que ocurriera el caso donde se recuperan los bienes en función de las variables explicadas anteriormente.
Modelo Regresión logística con SMOTE:
Se implementó un modelo de regresión logística binaria, con dos categorías la de bienes recuperados o bienes no recuperados. Dado el fuerte desbalance de clases, se aplicó la técnica SMOTE para generar observaciones de la clase minoritaria y mejorar la detección de los casos donde se recuperaron los bienes.
Evaluación y comparación:
Modelo K-Nearest Neighbors (KNN):
El rendimiento del modelo se analizó a través de la matriz de confusión y las métricas derivadas de ella:
Además, se elaboraron gráficos con ggplot2 para ver el comportamiento de las variables en cuanto la recuperación de los bienes, y se calculó el AUC (Área Bajo la Curva ROC).
Modelo Logit:
El desempeño del modelo logístico se evaluó mediante:
En esta parte del informe presentamos los resultados descriptivos. Lo que hicimos fue analizar la distribución de la variable objetivo y nuestras demás variables, para identificar algunos patrones que pueden ayudarnos sobre la recuperación de bienes después de un hurto.
summary(datos)
## DIRECTORIO NRO_ENCUESTA SECUENCIA_ENCUESTA SECUENCIA_P
## Min. :600038 Min. :237 Min. : 1.000 Min. :1.000
## 1st Qu.:608198 1st Qu.:237 1st Qu.: 1.000 1st Qu.:1.000
## Median :618281 Median :237 Median : 2.000 Median :1.000
## Mean :619499 Mean :237 Mean : 1.902 Mean :1.006
## 3rd Qu.:629784 3rd Qu.:237 3rd Qu.: 2.000 3rd Qu.:1.000
## Max. :646815 Max. :237 Max. :16.000 Max. :4.000
##
## ORDEN FEX_C P578 P1341
## Min. : 1.000 Min. :3.469e+07 Min. : 1.000 Min. :1.000
## 1st Qu.: 1.000 1st Qu.:1.306e+10 1st Qu.: 5.000 1st Qu.:1.000
## Median : 2.000 Median :3.906e+10 Median : 7.000 Median :1.000
## Mean : 1.883 Mean :4.048e+10 Mean : 7.277 Mean :1.049
## 3rd Qu.: 2.000 3rd Qu.:6.209e+10 3rd Qu.:10.000 3rd Qu.:1.000
## Max. :16.000 Max. :9.990e+10 Max. :12.000 Max. :2.000
##
## P1229 P1335 P1338 P1339S3 P1339S5
## Min. :1.000 Min. :1.000 Min. : 1.000 Min. :1.000 Min. :1.0
## 1st Qu.:3.000 1st Qu.:2.000 1st Qu.: 2.000 1st Qu.:1.000 1st Qu.:1.0
## Median :4.000 Median :3.000 Median : 2.000 Median :1.000 Median :2.0
## Mean :3.632 Mean :3.043 Mean : 2.899 Mean :1.186 Mean :1.6
## 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.: 2.000 3rd Qu.:1.000 3rd Qu.:2.0
## Max. :9.000 Max. :9.000 Max. :11.000 Max. :2.000 Max. :2.0
##
## P1339S1 P1339S2 P1339S6 P580S1 P580S2
## Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.00 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:1.000
## Median :2.00 Median :2.000 Median :2.000 Median :2.000 Median :2.000
## Mean :1.81 Mean :1.959 Mean :1.982 Mean :1.688 Mean :1.711
## 3rd Qu.:2.00 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000
## Max. :2.00 Max. :2.000 Max. :2.000 Max. :2.000 Max. :2.000
## NA's :381 NA's :381
## P580S3 P580S5 P580S6 P1598 X1
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.00 1st Qu.:1.000
## Median :2.000 Median :2.000 Median :2.000 Median :2.00 Median :2.000
## Mean :1.994 Mean :1.824 Mean :1.993 Mean :1.85 Mean :1.676
## 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:2.00 3rd Qu.:2.000
## Max. :2.000 Max. :2.000 Max. :2.000 Max. :2.00 Max. :2.000
## NA's :381 NA's :381 NA's :381
## X3 X2 X4 X5
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:2.000 1st Qu.:1.000
## Median :3.000 Median :1.000 Median :4.000 Median :1.000
## Mean :2.546 Mean :1.249 Mean :3.596 Mean :1.471
## 3rd Qu.:4.000 3rd Qu.:1.000 3rd Qu.:5.000 3rd Qu.:2.000
## Max. :6.000 Max. :3.000 Max. :7.000 Max. :2.000
## NA's :2089 NA's :2369 NA's :2089 NA's :2369
## P1600 P1113 Y Y_bin
## Min. :1.000 Min. : 1.00 Min. :1.000 Min. :0.00000
## 1st Qu.:2.000 1st Qu.: 3.00 1st Qu.:2.000 1st Qu.:0.00000
## Median :3.000 Median : 3.00 Median :2.000 Median :0.00000
## Mean :2.694 Mean : 4.04 Mean :1.972 Mean :0.02847
## 3rd Qu.:3.000 3rd Qu.: 6.00 3rd Qu.:2.000 3rd Qu.:0.00000
## Max. :5.000 Max. :10.00 Max. :2.000 Max. :1.00000
## NA's :2751 NA's :1002
# Distribución de la variable objetivo
library(ggplot2)
ggplot(datos, aes(x = factor(Y), fill = factor(Y))) +
geom_bar() +
scale_fill_manual(values = c("#B0C4DE", "#4682B4"),
name = "Recuperación",
labels = c("No recuperado", "Recuperado")) +
labs(x = "Recuperación de bienes", y = "Frecuencia",
title = "Distribución de la variable objetivo") +
theme_minimal()
Podemos observar un desbalance que es bastante grande en nuestra variable objetivo; en la gran mayoría de casos podemos observar que los bienes no recuperados son mayores; solo un porcentaje pequeño es de bienes recuperados. Así que debemos aplicar técnicas de balanceo, por ejemplo SMOTE.
ggplot(datos, aes(x = factor(X1), fill = factor(Y))) +
geom_bar(position = "fill") +
labs(x = "Tipo de denuncia", y = "Proporción",
title = "Recuperación según tipo de denuncia") +
scale_fill_manual(values = c("#B0C4DE", "#4682B4"),
name = "Recuperación",
labels = c("No recuperado", "Recuperado")) +
theme_minimal()
Podemos observar que un tipo de denuncia presenta mayor proporción de recuperación que otro; esto hace pensar que el tipo de denuncia podría influir en la probabilidad de éxito.
ggplot(datos, aes(x = factor(X2), fill = factor(Y))) +
geom_bar(position = "fill") +
labs(x = "Lugar de denuncia", y = "Proporción",
title = "Recuperación según lugar de denuncia") +
scale_fill_manual(values = c("#B0C4DE", "#4682B4"),
name = "Recuperación",
labels = c("No recuperado", "Recuperado")) +
theme_minimal()
Los lugares de denuncia como la Fiscalía o URI muestran que tienen probabilidad más alta de recuperación.
ggplot(datos, aes(x = factor(X3), fill = factor(Y))) +
geom_bar(position = "fill") +
labs(x = "Motivación de la denuncia", y = "Proporción",
title = "Recuperación según motivo de denuncia") +
scale_fill_manual(values = c("#B0C4DE", "#4682B4"),
name = "Recuperación",
labels = c("No recuperado", "Recuperado")) +
theme_minimal()
Aquellas personas que denuncian porque su motivación es recuperar sus bienes o solamente hacer ejercer la justicia sobre las personas responsables tienen una mayor tasa, aunque ligera, pero mayor, de recuperación de bienes.
ggplot(datos, aes(x = factor(X5), fill = factor(Y))) +
geom_bar(position = "fill") +
labs(x = "Satisfacción con la atención", y = "Proporción",
title = "Recuperación según satisfacción con la atención") +
scale_fill_manual(values = c("#B0C4DE", "#4682B4"),
name = "Recuperación",
labels = c("No recuperado", "Recuperado")) +
theme_minimal()
Como podemos observar, nuestros resultados nos indican una relación positiva entre la satisfacción con la atención recibida y la probabilidad de recuperación de los bienes; podemos pensar que la calidad institucional o eficiencia del proceso es muy buena.
En resumen, nuestros análisis descriptivos muestran un comportamiento fuertemente desbalanceado con nuestra variable objetivo y patrones que podrían hacernos pensar que algunas características del proceso de denuncia pueden afectar en la recuperación de bienes. Por lo que usaremos modelos predictivos como KNN y SMOTE para evaluar qué tanto poder de predicción tienen estas variables.
| Modelo | Exactitud (Accuracy) | AUC | Observaciones |
|---|---|---|---|
| KNN (k=5) | 0.9447 | 0.7799 | Alta precisión global, pero sesgada a la clase mayoritaria |
| SMOTE | 0.7616 | 0.7951 | Menos exactitud, pero mejor detección de la clase minoritaria y mayor AUC |
Al comparar estos dos modelos, nos damos cuenta de que:
El modelo KNN alcanzó una exactitud más alta, que indica un buen rendimiento global, pero esto está sesgado por los casos donde no se recuperaron los bienes (clase mayoritaria).
El modelo SMOTE tuvo un AUC un poco mayor, lo que significa que puede diferenciar mejor entre los casos donde se recuperaron los bienes y donde no se recuperaron, o sea que el modelo SMOTE tiene una mayor sensibilidad hacia los casos donde sí se recuperaron los bienes (clase minoritaria).
A diferencia del KNN, el modelo SMOTE nos permite interpretar la influencia de cada variable.
Así que recomendamos el uso del modelo de regresión logística con SMOTE; ofrece un mayor equilibrio entre la sensibilidad y discriminación (AUC), y es más adecuado para contextos como este donde las clases están muy desbalanceadas, por ejemplo, aquí que la mayoría de casos son no recuperados.
Este presente análisis, como dijimos al principio, tuvo como propósito principal si podíamos ver algunas características que afectaran el proceso de recuperar o no bienes después de su hurto, a partir de algunas variables como tipo de autoridad, atención recibida, entre otras.
Los resultados que vimos muestran que en su mayoría los casos no terminan en la recuperación de los bienes, lo que genera un conjunto de datos muy desbalanceado, así que usamos dos modelos predictivos: KNN y Regresión Logística con SMOTE.
El modelo KNN alcanzó una exactitud global alta, pero este resultado estuvo condicionado por la clase mayoritaria, así que no detectó de una buena manera los casos donde se recuperaron los bienes. En contraste, la regresión logística con SMOTE, después de balancear las clases, logró una mejor capacidad de diferenciar los casos (AUC=0.7951) y mayor sensibilidad con los casos donde se recuperaron los bienes hurtados; nos permite interpretar las variables que más influyen en nuestro resultado.
Así que en este estudio el modelo logístico que usamos lo consideramos más confiable para ayudar a tomar decisiones; ofrece equilibrio entre precisión y sensibilidad, y ver qué factores influyen de manera positiva o negativa al recuperar los bienes hurtados.
• Departamento Administrativo Nacional de Estadística (DANE). Encuesta de Hurto a Personas, Colombia.
• Kuhn, M. & Johnson, K. (2019). Applied Predictive Modeling. Springer.
• Chawla, N. et al. (2002). SMOTE: Synthetic Minority Over-sampling Technique. Journal of Artificial Intelligence Research.