Introducción:

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.

Metodología:

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,

datos$Y_bin <- ifelse(datos$Y == 1, 1,
                      ifelse(datos$Y == 2, 0, NA))

datos$X1_bin <- ifelse(datos$X1 == 1, 1,
                       ifelse(datos$X1 == 2, 0, NA))
datos$X2_dummy <- ifelse(datos$X2 == 2, 1,
                         ifelse(datos$X2 == 1, 0, NA))

datos$X3 <- factor(datos$X3,
                   levels = 1:5,
                   labels = c("Estacion_Policia",
                              "Fiscalia_URI",
                              "CAI",
                              "Web_ADenunciar",
                              "Web_Objetos_Peridos"))
datos <- dummy_cols(datos, select_columns = "X3", remove_first_dummy = TRUE)

datos$X4 <- factor(datos$X4,
                   levels = 1:7,
                   labels = c("Obligacion_ciudadana",
                              "Buscar_justicia",
                              "Buscar_proteccion",
                              "Evitar_repeticion",
                              "Recuperar_bienes",
                              "Requisito_tramite",
                              "Otro"))
datos <- dummy_cols(datos, select_columns = "X4", remove_first_dummy = TRUE)

datos$X5_bin <- ifelse(datos$X5 == 1, 1,
                       ifelse(datos$X5 == 2, 0, NA))
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.


``` r
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.

Preparacion de datos

predictoras <- datos %>%
  select(X1_bin, X2_dummy, 
         X3_Fiscalia_URI, X3_CAI, X3_Web_ADenunciar, X3_Web_Objetos_Peridos,
         X4_Buscar_justicia, X4_Buscar_proteccion, X4_Evitar_repeticion, X4_Recuperar_bienes,
         X4_Requisito_tramite, X4_Otro, X5_bin)

respuesta <- datos$Y_bin
predictoras_scaled <- scale(predictoras)

datos_knn <- cbind(predictoras_scaled, Y = respuesta)
datos_knn <- na.omit(datos_knn)

X <- as.matrix(datos_knn[, -ncol(datos_knn)])
y <- datos_knn[, ncol(datos_knn)]

set.seed(123)
n <- nrow(X)
train_index <- sample(seq_len(n), size = floor(0.7 * n))
X_train <- X[train_index, ]
X_test  <- X[-train_index, ]
y_train <- y[train_index]
y_test  <- y[-train_index]

Entrenamiento

calculate_metrics <- function(conf_mat) {
  precision <- diag(conf_mat) / rowSums(conf_mat)
  recall <- diag(conf_mat) / colSums(conf_mat)
  f1 <- 2 * (precision * recall) / (precision + recall)
  data.frame(Precision = round(precision, 3),
             Recall = round(recall, 3),
             F1 = round(f1, 3))
}

k_values <- c(1, 3, 5)
all_metrics <- data.frame()

for (k in k_values) {
  y_pred <- knn(train = X_train, test = X_test, cl = y_train, k = k)
  conf_mat <- table(Predicho = y_pred, Real = y_test)
  
  metrics <- calculate_metrics(conf_mat)
  metrics$Clase <- rownames(metrics)
  metrics$K <- k
  all_metrics <- rbind(all_metrics, metrics)
  
  cat("\nResultados para K =", k, "\n")
  print(conf_mat)
  cat("Precisión global:", round(sum(diag(conf_mat))/sum(conf_mat),3), "\n")
  print(metrics)
}
## 
## Resultados para K = 1 
##         Real
## Predicho   0   1
##        0 205  11
##        1   0   1
## Precisión global: 0.949 
##   Precision Recall    F1 Clase K
## 0     0.949  1.000 0.974     0 1
## 1     1.000  0.083 0.154     1 1
## 
## Resultados para K = 3 
##         Real
## Predicho   0   1
##        0 205  12
##        1   0   0
## Precisión global: 0.945 
##   Precision Recall    F1 Clase K
## 0     0.945      1 0.972     0 3
## 1       NaN      0   NaN     1 3
## 
## Resultados para K = 5 
##         Real
## Predicho   0   1
##        0 205  12
##        1   0   0
## Precisión global: 0.945 
##   Precision Recall    F1 Clase K
## 0     0.945      1 0.972     0 5
## 1       NaN      0   NaN     1 5

Resultados Descriptivos:

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.

  1. Distribución de la variable objetivo.
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      
##  Estacion_Policia   : 321   Min.   :1.000   Recuperar_bienes    : 332  
##  Fiscalia_URI       : 161   1st Qu.:1.000   Buscar_justicia     : 229  
##  CAI                : 239   Median :1.000   Obligacion_ciudadana: 156  
##  Web_ADenunciar     : 215   Mean   :1.249   Evitar_repeticion   : 125  
##  Web_Objetos_Peridos:  65   3rd Qu.:1.000   Requisito_tramite   : 107  
##  NA's               :2090   Max.   :3.000   (Other)             :  53  
##                             NA's   :2369    NA's                :2089  
##        X5            P1600           P1113             Y        
##  Min.   :1.000   Min.   :1.000   Min.   : 1.00   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:2.000   1st Qu.: 3.00   1st Qu.:2.000  
##  Median :1.000   Median :3.000   Median : 3.00   Median :2.000  
##  Mean   :1.471   Mean   :2.694   Mean   : 4.04   Mean   :1.972  
##  3rd Qu.:2.000   3rd Qu.:3.000   3rd Qu.: 6.00   3rd Qu.:2.000  
##  Max.   :2.000   Max.   :5.000   Max.   :10.00   Max.   :2.000  
##  NA's   :2369    NA's   :2751    NA's   :1002                   
##      Y_bin             X1_bin          X2_dummy      X3_Fiscalia_URI 
##  Min.   :0.00000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.00000   1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.00000   Median :0.0000   Median :0.0000   Median :0.0000  
##  Mean   :0.02847   Mean   :0.3242   Mean   :0.2469   Mean   :0.1608  
##  3rd Qu.:0.00000   3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.0000  
##  Max.   :1.00000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##                                     NA's   :2370     NA's   :2090    
##      X3_CAI       X3_Web_ADenunciar X3_Web_Objetos_Peridos     X3_NA       
##  Min.   :0.0000   Min.   :0.0000    Min.   :0.0000         Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000    1st Qu.:0.0000         1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000    Median :0.0000         Median :1.0000  
##  Mean   :0.2388   Mean   :0.2148    Mean   :0.0649         Mean   :0.6762  
##  3rd Qu.:0.0000   3rd Qu.:0.0000    3rd Qu.:0.0000         3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :1.0000    Max.   :1.0000         Max.   :1.0000  
##  NA's   :2090     NA's   :2090      NA's   :2090                           
##  X4_Buscar_justicia X4_Buscar_proteccion X4_Evitar_repeticion
##  Min.   :0.0000     Min.   :0.0000       Min.   :0.0000      
##  1st Qu.:0.0000     1st Qu.:0.0000       1st Qu.:0.0000      
##  Median :0.0000     Median :0.0000       Median :0.0000      
##  Mean   :0.2285     Mean   :0.0459       Mean   :0.1248      
##  3rd Qu.:0.0000     3rd Qu.:0.0000       3rd Qu.:0.0000      
##  Max.   :1.0000     Max.   :1.0000       Max.   :1.0000      
##  NA's   :2089       NA's   :2089         NA's   :2089        
##  X4_Recuperar_bienes X4_Requisito_tramite    X4_Otro          X4_NA       
##  Min.   :0.0000      Min.   :0.0000       Min.   :0.000   Min.   :0.0000  
##  1st Qu.:0.0000      1st Qu.:0.0000       1st Qu.:0.000   1st Qu.:0.0000  
##  Median :0.0000      Median :0.0000       Median :0.000   Median :1.0000  
##  Mean   :0.3313      Mean   :0.1068       Mean   :0.007   Mean   :0.6758  
##  3rd Qu.:1.0000      3rd Qu.:0.0000       3rd Qu.:0.000   3rd Qu.:1.0000  
##  Max.   :1.0000      Max.   :1.0000       Max.   :1.000   Max.   :1.0000  
##  NA's   :2089        NA's   :2089         NA's   :2089                    
##      X5_bin      
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :1.0000  
##  Mean   :0.5291  
##  3rd Qu.:1.0000  
##  Max.   :1.0000  
##  NA's   :2369
# 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.

  1. Distribución por tipo de denuncia:
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.

  1. Distribución por el lugar donde se realizó la denuncia:
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.

  1. Distribución por motivación principal para denunciar:
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.

  1. Distribución según satisfacción con la atención recibida:
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.

GRAFICOS

  1. Proporción de recuperación según categoría de variable
datos_knn_df <- as.data.frame(datos_knn)
summary_vars <- datos_knn_df %>%
  pivot_longer(cols = -Y, names_to = "Variable", values_to = "Valor") %>%
  group_by(Variable, Valor) %>%
  summarise(Proporcion_Recuperacion = mean(Y), .groups = "drop")

ggplot(summary_vars, aes(x = factor(Valor), y = Proporcion_Recuperacion, fill = Variable)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Proporción de recuperación según categoría de variable",
       x = "Categoría",
       y = "Proporción de recuperación") +
  theme_minimal()

2.Proporción de recuperación de bienes según variables de denuncia

ggplot(summary_vars, aes(x = Variable, y = factor(Valor), fill = Proporcion_Recuperacion)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "red", high = "darkblue") +
  labs(title = "Proporción de recuperación de bienes según variables de denuncia",
       x = "Variables",
       y = "Valor de la variable",
       fill = "Recuperación") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

  1. Métricas por K y por clase
metrics_long <- all_metrics %>%
  pivot_longer(cols = c("Precision", "Recall", "F1"),
               names_to = "Metrica",
               values_to = "Valor")

ggplot(metrics_long, aes(x = factor(K), y = Valor, fill = Clase)) +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~Metrica, nrow = 1) +
  labs(title = "Métricas por K y por clase",
       x = "Valor de K",
       y = "Valor de la métrica") +
  theme_minimal()
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_bar()`).

  1. Curva ROC del modelo KNN
y_pred <- knn(train = X_train, test = X_test, cl = y_train, k = 5, prob = TRUE)
prob_pred <- attr(y_pred, "prob")
prob_pred <- ifelse(y_pred == 1, prob_pred, 1 - prob_pred)

roc_obj <- roc(y_test, prob_pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_val <- auc(roc_obj)
cat("AUC KNN:", auc_val, "\n")
## AUC KNN: 0.779878
plot(roc_obj, col = "blue", lwd = 2, main = paste("Curva ROC del modelo KNN (AUC =", round(auc_val,3), ")"))
abline(a = 0, b = 1, lty = 2, col = "red")

  1. Curva ROC - Regresión Logística
datos_log <- as.data.frame(cbind(predictoras_scaled, Y = respuesta))
datos_log <- na.omit(datos_log)
datos_log$Y <- as.factor(datos_log$Y)

set.seed(123)
datos_smote <- SMOTE(X = datos_log[, -ncol(datos_log)], 
                     target = datos_log$Y,
                     K = 5)

datos_balanceados <- datos_smote$data
datos_balanceados$Y <- as.factor(ifelse(datos_balanceados$class == 1, 1, 0))
datos_balanceados$class <- NULL

cat("Clases antes del balanceo:\n")
## Clases antes del balanceo:
print(table(datos_log$Y))
## 
##   0   1 
## 685  36
cat("Clases después del balanceo:\n")
## Clases después del balanceo:
print(table(datos_balanceados$Y))
## 
##   0   1 
## 685 684
set.seed(123)
n <- nrow(datos_balanceados)
train_index <- sample(seq_len(n), size = floor(0.7 * n))
train_data <- datos_balanceados[train_index, ]
test_data  <- datos_balanceados[-train_index, ]

modelo_logit <- glm(Y ~ ., data = train_data, family = binomial)
prob_pred_log <- predict(modelo_logit, newdata = test_data, type = "response")
y_pred_log <- ifelse(prob_pred_log > 0.5, 1, 0)

conf_mat_log <- table(Predicho = y_pred_log, Real = test_data$Y)
cat("Matriz de confusión (Logit SMOTE):\n")
## Matriz de confusión (Logit SMOTE):
print(conf_mat_log)
##         Real
## Predicho   0   1
##        0 136  18
##        1  80 177
precision_global_log <- sum(diag(conf_mat_log)) / sum(conf_mat_log)
cat("Precisión global:", round(precision_global_log, 4), "\n")
## Precisión global: 0.7616
roc_log <- roc(as.numeric(as.character(test_data$Y)), prob_pred_log)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_log <- auc(roc_log)
cat("AUC Logit SMOTE:", round(auc_log, 4), "\n")
## AUC Logit SMOTE: 0.7951
plot(roc_log, col = "blue", lwd = 2, 
     main = paste("Curva ROC - Regresión Logística (SMOTE) (AUC =", round(auc_log,3), ")"))
abline(a = 0, b = 1, lty = 2, col = "red")

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.

Resultados del Modelo:

comparison <- data.frame(
  Modelo = c("KNN (k=5)", "Regresión Logística (SMOTE)"),
  Precision_Global = c(round(sum(diag(table(Predicho = y_pred, Real = y_test))) / length(y_test), 4),
                       round(precision_global_log, 4)),
  AUC = c(round(auc_val, 4), round(auc_log, 4))
)
cat("COMPARACIÓN DE MODELOS:\n")
## COMPARACIÓN DE MODELOS:
print(comparison)
##                        Modelo Precision_Global    AUC
## 1                   KNN (k=5)           0.9447 0.7799
## 2 Regresión Logística (SMOTE)           0.7616 0.7951
Modelo Precision_Global AUC
KNN (k=5) 0.9447 0.7799
Regresión Logística (SMOTE) 0.7616 0.7951

Al comparar estos dos modelos, nos damos cuenta de que:

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.

Conclusiones:

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.

Bibliografía:

• 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.