Proyecto Costeo Unitario: Informe de Filtros y Muestreo

Autor/a

Guillermo David Hincapie

Fecha de publicación

6 de marzo de 2026

Resumen

Este documento presenta una descripción del proceso de filtros realizados para establecer los contratos del SECOP-II que permitirán cuantificar los costos unitarios, focalizando el análisis en los municipios y en las subregiones de interes para la ejecución de los PATR.

Palabras clave

SECOP-II, Costeo de precios observados de mercado, Tipos de Contratos, Sub-programas PATR

Para llevar a cabo el siguiente desarrollo se utilizaron las siguientes librerías funcionales:

arrow — permite cargar archivos en formato .parquet, un formato columnar optimizado para bases de datos de gran volumen. Es fundamental dado que la base SECOP-II supera los 4 millones de filas con 57 variables.

ggplot2 — es la librería central de visualización del documento. Se emplea para construir múltiples gráficos de barras horizontales que ilustran la distribución de contratos por estado, por departamento y por categoría de ruralidad. También se usa dentro de la función crear_grafico() para generar los gráficos del Top 10 de clases, familias y productos.

scales — complementa a ggplot2 en el formateo de ejes numéricos, permitiendo expresar frecuencias en millones y aplicar separadores de miles para mejorar la legibilidad de los gráficos.

knitr — provee la función kable() para construir tablas formateadas en HTML dentro del documento Quarto. Se aplica en tres tablas: estados del contrato, niveles UNSPSC y resultados de filtros por nivel de agregación.

kableExtra — extiende las capacidades de kable() mediante funciones como kable_styling(), column_spec() y row_spec(), que permiten aplicar colores, negritas, anchos de columna y estilos Bootstrap a las tablas.

dplyr — se utiliza para la manipulación de datos en la construcción de la tabla cruzada entre municipios posconflicto y categoría de ruralidad.

gridExtra — facilita la organización de múltiples gráficos de ggplot2 en una cuadrícula mediante grid.arrange(), usado para presentar en paralelo los Top 10 de clases, familias y productos UNSPSC.

stringr — se emplea dentro de la función crear_grafico() a través de str_wrap() para controlar el ancho del texto en las etiquetas del eje Y, evitando que los nombres largos se desborden visualmente.

1 Cargando la base de datos del SECOP-II

La base de datos con la cual se identificarán los contratos realizados a nivel de municipio y a nivel de supbregión, es la base de datos del SECOP-II. Esta base contiene los contratos y sobre estos se deben hacer filtros que permitan identificar contratos asociados estrechamente a los productos, proyectos y servicios que contienen los PATR en cada uno de los subprogramas que los contienen.

El siguiente código carga la base de datos, a patir de un tipo de archivo .parquet para facilitar su manipulación. En general y como puede notarse, la base de datos tiene más de 4 millones de filas con 57 variables que describen la carácteristicas de los contratos realizados por entidades gubernamentales.

Mostrar código
library(arrow)
data <- read_parquet("C:/Users/000278969/OneDrive - UPB/Documentos/Consultorias/2026_Proyecto_ART/Datos/Nueva_Estrategia/Merge_ruralidad/Base_Final_Secop_Ruralidad_Nits.parquet") 
dim(data)
[1] 4573194      61

También se refiere a continuación el nombre de las variables o columnas que integran la base de datos. La base contiene ciertas variables importantes, a saber: el estado del contrato, el tipo de contrato, departamento, ciudad, descripción del contrato y valor del contrato. Este último, es el valor “agregado”asociado a este proyecto el cual no tiene en cuenta las cantidades o no es un valor unitario. De igual manera, variables como sector, rama y orden, ayudan a determinar los llamados macro-sectores sobre los cuales se procederán a hacer los filtros para acotar la base de datos pretendiendo identificar los proyectos cercanos a los productos del PATR, y los sub-programas.

                                                        names(data)
1                                                     nombre_muni_f
2                                                       nit_entidad
3                                                       id_contrato
4                                                   estado_contrato
5                                                  tipo_de_contrato
6                                                   espostconflicto
7                                                    nombre_entidad
8                                                      departamento
9                                                            ciudad
10                                          descripcion_del_proceso
11                                              objeto_del_contrato
12                                               valor_del_contrato
13                                     fecha_de_inicio_del_contrato
14                                        fecha_de_fin_del_contrato
15                                                     localizaci_n
16                                                            orden
17                                                           sector
18                                                             rama
19                                             entidad_centralizada
20                                    codigo_de_categoria_principal
21                                           origen_de_los_recursos
22                                                    destino_gasto
23                                         valor_de_pago_adelantado
24                                                  valor_facturado
25                                          valor_pendiente_de_pago
26                                                     valor_pagado
27                                                 valor_amortizado
28                                               valor_pendiente_de
29                                     valor_pendiente_de_ejecucion
30                                                      estado_bpin
31                                                      c_digo_bpin
32                                                        anno_bpin
33                                               puntos_del_acuerdo
34                                              pilares_del_acuerdo
35                             presupuesto_general_de_la_nacion_pgn
36                               sistema_general_de_participaciones
37                                      sistema_general_de_regal_as
38 recursos_propios_alcald_as_gobernaciones_y_resguardos_ind_genas_
39                                              recursos_de_credito
40                                                 recursos_propios
41                                                   codigo_entidad
42                                            duraci_n_del_contrato
43                                                   codigo_clase_6
44                                                  codigo_segmento
45                                                  nombre_segmento
46                                                   codigo_familia
47                                                   nombre_familia
48                                                     codigo_clase
49                                                     nombre_clase
50                                                  nombre_producto
51                                                       tipo_match
52                                                      nombre_muni
53                                                      nombre_depa
54                                                             Freq
55                                                     razon_social
56                                                 nombre_subsector
57                                                         cod_dane
58                                                     Departamento
59                                                        Municipio
60                                      Categoría de ruralidad 2025
61                                                             depa

Dado que es importante establecer y carácterizar estas variables para hacer el cruce con las bases de datos de los sub programas a nivel regional, se presenta gráficamente la estructura de la variables anterior. Debido a que pueden existir variaciones en los precios en contratos en ejecución, se debe en principio concentrar el analisis en contratos cuyo estado es “terminado” o “cerrado”, aunque este último también es objeto de variaciones aunque su representatividad en terminos de muestra es mayor.

La tabla siguiente ilustra las definiciones asociadas a los diferentes estados del contrato, desde “en Edición” hasta “Rechazado”. Con el fin de tener la mayor disponibilidad de contratos posibles, es recomendable que se utilicen para efectos de la identificación de los precios y cantidades factibles, los tipos de contratos: “Cerrado”, “Terminado” y Firmado / Aprobado”

Tabla 1: Estados del contrato en SECOP II
Estado Definición técnica
En edición Estado inicial del contrato electrónico. La entidad estructura y diligencia la información en la plataforma. Las secciones de Modificaciones e Incumplimientos están bloqueadas. No tiene efectos jurídicos.
Pendiente de firma El contrato ha sido enviado al proveedor para revisión y aceptación. El documento electrónico existe, pero aún no ha sido suscrito por ninguna de las partes.
En revisión del Proveedor El contrato se encuentra en manos del proveedor para que lo examine. Puede aprobarlo o rechazarlo según su acuerdo con las condiciones establecidas por la entidad.
Firmado / Aprobado Ambas partes han suscrito el contrato electrónico. Adquiere plena validez jurídica y probatoria. Se desbloquean las secciones de Modificaciones e Incumplimientos y el contrato es público.
En ejecución El contrato ha iniciado formalmente y las partes están cumpliendo sus obligaciones. El supervisor registra avances, el proveedor carga facturas y la entidad las aprueba o rechaza.
Rechazado El proveedor rechazó las condiciones del contrato. La entidad recibe notificación y el expediente regresa a estado de edición para correcciones.
Terminado El objeto contractual ha concluido, normal o anormalmente (terminación bilateral, unilateral o caducidad). Solo se permite gestionar pagos pendientes y documentos poscontractuales.
Cerrado Estado definitivo e irreversible. Se produce una vez cumplidas todas las fechas asociadas y finalizada la liquidación (si aplica). La plataforma bloquea cualquier actualización posterior.

En cuanto a los departamentos, y la distribución geográfica de los contratos, debe advertirse que Bogotá concentra la mayoría de registros, con mas de un 30% de los registros contractuales globales (para todos los tipos de contratos). Valle del Cauca concentra el10.4% y Antioquia el 9%. Esto es importante porque el interés de la investigación se concentra en las regiones PDET donde tienen lugar los PATR.

Mostrar código
            color = "black", size = 3, hjust = -0.2) +  # Etiquetas a la derecha
  scale_y_continuous(labels = scales::comma_format(scale = 1e-6, suffix = "M")) +  # Formato en millones
  theme_minimal() +
  theme(axis.text.y = element_text(size = 8))  # Ajustar tamaño de texto en el eje y

Es importante, de igual manera, resaltar que cuando se filtran los contratos en estado “cerrado” la base pasa de más de 4 millones a sólo mas de un millon de registros y, por tanto, su distribución y representatividad geográfica se afecta significativamente. Podemos ahora considerar la variable.

La base de datos contiene tres variables clave, a saber, “nombre_producto”, “nombre_familia” y “nombre_clase”. En general, estas variables recogen información de agrupación de categorías de los contratos y, por lo tanto, permiten realizar el proceso de filtrado con las potenciales similitudes que tienen estas cateogorías con las referidas en los indicadores de subprograma. Las variables Segmento, Familia, Clase y Producto en SECOP II corresponden al sistema de clasificación UNSPSC (United Nations Standard Products and Services Code, versión 14.080), adoptado por Colombia Compra Eficiente como estándar obligatorio para la contratación pública.

Tabla 2: Niveles del Clasificador de Bienes y Servicios UNSPSC en SECOP II
Nivel Variable SECOP II Estructura del código Definición técnica Ejemplo ilustrativo
1 Segmento Dígitos 1–2 (XX000000) Agrupación más amplia del clasificador. Constituye la agregación lógica de familias de productos para propósitos analíticos y de política pública. Refleja las grandes etapas de generación de valor: materias primas (10–15), equipo industrial (20–27), componentes y suministros (30–41), productos de uso final (42–60), servicios (70–94) y terrenos, edificios y vías (95). 72 – Servicios de edificación y construcción
2 Familia Dígitos 3–4 (XXXX0000) Segundo nivel de desagregación. Corresponde a un grupo de categorías de productos o servicios interrelacionados dentro de un mismo segmento. Permite agrupar líneas de gasto afines para efectos de análisis presupuestal y de mercado. 7210 – Servicios de construcción de edificios
3 Clase Dígitos 5–6 (XXXXXX00) Tercer nivel de desagregación y nivel mínimo exigido en la contratación pública colombiana. Agrupa bienes o servicios que comparten características técnicas comunes. Es el nivel requerido para el Registro Único de Proponentes (RUP) y el Plan Anual de Adquisiciones. 721015 – Obras de infraestructura vial
4 Producto Dígitos 7–8 (XXXXXXXX) Nivel más específico del clasificador (8 dígitos completos). Identifica un bien o servicio concreto dentro de una clase. Las entidades pueden codificar hasta este nivel cuando disponen de información suficiente sobre el objeto a contratar; sin embargo, no es obligatorio para la inscripción en el RUP. 72101501 – Construcción de carreteras pavimentadas

La tabla 1 muestra el numero de filas o frecuencias de categorias diferentes de cada una de estas variables en la base de datos completa (sin ningún filtro previo). La variable “familia” establece el mayor nivel de agregación y, por lo tanto, ayuda a configurar el filtro inicial para macro sectores correspondientes a las lineas estrategicas.

Tabla 3: Resultados del filtro aplicado por niveles UNSPSC en SECOP II
# Nivel UNSPSC filtrado Número de registros
1 Familia 405
2 Clase 2.346
3 Producto 12.697

De acuerdo a la tabla 3, la distribución de cateogorias de la variable Familia presenta el mayor nivel de agregación, y sus catgorias por tanto pueden ser asociadas a la bateria programatica del PATR y la relación de productos y proyectos objeto de costeo.

1.1 Distribución de la categoría de Ruralidad

La estrategía de muestreo que se propone se basa en la condición y categorías de ruralidad de los municipios del País, teniendo como referencia al 2025. Es importante indicar que la base completa tiene contratos que no son realizados por municipios o departamentos, sino por entidades del nivel nacional. Estos contratos no son considerados en propiedad para llevar a cabo los costos unitarios por subprograma y por subregión. Para hacer este proceso, entonces, se lleva a cabo un merge entre la base de datos SECOP-II y la base de datos que contiene los criterios de ruralidad.

La siguiente es la distribución de los contratos por los distintos criterios de ruralidad.

Figura 1: Distribución de Frecuencias por Categoría de Ruralidad (2025)

De los datos considerados, la categoría rural diperso representa sólo un 2.4% de todos los contratos considerados, y la condición y Rural el 9.1% del universo. La mayor participación ocurre en ciudades, como puede corroborarse para el caso de una mayor concentración de contratos para Bogotá, de un 34.1% sobre el universo completo.

Tabla 4: Distribución cruzada: Municipios posconflicto según Categoría de Ruralidad (2025)
Municipio posconflicto Ciudades y aglomeraciones Intermedio Rural Rural disperso Total % del total
No 1.962.269 328.242 235.631 61.803 2.587.945 99.9%
Si 376 1.086 95 3 1.560 0.1%
Total 1.962.645 329.328 235.726 61.806 2.589.505 100%

2 Consideración de Escenarios de Filtros

La asociación. Este es, por tanto, el procedimiento de filtros. Primero se establece un macro-sector, este implica solamente un termino clave; en segundo lugar, se filtra por clasese y, finalmente por producto, luego se establece la relación con la variable de descripción del contrato para finalmente tener los contratos que cumplen la intersección. Cuando se filtran estas variables y se examinan las categorias mas frecuentes conduce a lo siguiente distribución:

La propuesta que se establece es identificar la relación entre la bateria de indicadores de producto y gestión del PATR, al realizar modelos de Procesamiento de lenguaje Natural con el fin de advertir sus similitudes de naturaleza semantica con los filtros secuenciales de las bases de datos anteriores.