1 Resumen Ejecutivo

1.1 Contexto del Problema

En Colombia, el acceso a medicamentos representa un desafío crítico de salud pública. El mismo medicamento con idéntico principio activo puede presentar variaciones de precio de hasta 500% dependiendo de:

  • La marca (genérico vs comercial)
  • El canal de distribución (comercial vs institucional)
  • El fabricante
  • La presentación farmacéutica

Este análisis utiliza datos oficiales del Termómetro de Precios de Medicamentos 2024 (Ministerio de Salud - datos.gov.co) para identificar patrones, factores determinantes y generar recomendaciones accionables.

1.2 Objetivos

Los objetivos de este análisis siguiendo la metodología CRISP-DM son:

  1. Identificar factores determinantes que explican la variabilidad de precios
  2. Descubrir patrones y segmentos de mercado mediante clustering
  3. Construir modelos predictivos para estimación de precios (regresión y clasificación)
  4. Generar recomendaciones para pacientes, instituciones y reguladores

1.3 Metodología CRISP-DM

1. Comprensión del Negocio: Problema de variabilidad de precios
2. Comprensión de los Datos: Exploración del Termómetro 2024
3. Preparación de Datos: Limpieza, transformación, feature engineering
4. Modelación: Random Forest, SVM, Regresión Logística, K-Means, PCA
5. Evaluación: Métricas de desempeño y validación
6. Implementación: Recomendaciones y próximos pasos



2 Comprensión de los Datos

2.1 Estructura del Dataset

## 'data.frame':    12534 obs. of  12 variables:
##  $ expediente_invima     : int  103795 104739 104739 10815 111057 111057 113757 11415 11416 11416 ...
##  $ principio_activo      : chr  "Midazolam" "Acido Valproico" "Acido Valproico" "Fluoxetina" ...
##  $ concentracion         : chr  "Midazolam 15 mg" "Divalproato Sodico 500 mg" "Divalproato Sodico 500 mg" "Fluoxetina 20 mg" ...
##  $ unidad_base           : chr  "ml" "mg" "mg" "mg" ...
##  $ unidad_de_dispensacion: chr  "Ampolla" "Tableta" "Tableta" "Capsula" ...
##  $ nombre_comercial      : chr  "Dormicum" "Valcote" "Valcote" "Fluoxetina" ...
##  $ fabricante            : chr  "Siegfried" "Lafrancol" "Lafrancol" "Genfar" ...
##  $ medicamento           : chr  "Dormicum (Siegfried) - Ampolla 3 ml - Cada 3 ml contiene: Midazolam 15 mg" "Valcote (Lafrancol) - Cada Tableta contiene: Divalproato Sodico 500 mg" "Valcote (Lafrancol) - Cada Tableta contiene: Divalproato Sodico 500 mg" "Fluoxetina (Genfar) - Cada Capsula contiene: Fluoxetina 20 mg" ...
##  $ canal                 : chr  "Institucional" "Comercial" "Institucional" "Comercial" ...
##  $ precio_por_tableta    : num  11200 3753 1777 329 64185 ...
##  $ factoresprecio        : chr  "Alto" "Medio" "Medio" "Medio" ...
##  $ numerofactor          : int  3 2 2 2 2 2 2 1 3 1 ...

2.2 Primeras Filas

2.3 Resumen Estadístico

##  expediente_invima  principio_activo   concentracion      unidad_base       
##  Min.   :    3521   Length:12534       Length:12534       Length:12534      
##  1st Qu.:19935780   Class :character   Class :character   Class :character  
##  Median :20004997   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :16656166                                                           
##  3rd Qu.:20082399                                                           
##  Max.   :20235810                                                           
##  unidad_de_dispensacion nombre_comercial    fabricante       
##  Length:12534           Length:12534       Length:12534      
##  Class :character       Class :character   Class :character  
##  Mode  :character       Mode  :character   Mode  :character  
##                                                              
##                                                              
##                                                              
##  medicamento           canal           precio_por_tableta  factoresprecio    
##  Length:12534       Length:12534       Min.   :        0   Length:12534      
##  Class :character   Class :character   1st Qu.:     1018   Class :character  
##  Mode  :character   Mode  :character   Median :     3891   Mode  :character  
##                                        Mean   :   155408                     
##                                        3rd Qu.:    18072                     
##                                        Max.   :257103178                     
##   numerofactor  
##  Min.   :1.000  
##  1st Qu.:2.000  
##  Median :2.000  
##  Mean   :2.001  
##  3rd Qu.:2.000  
##  Max.   :3.000


3 Análisis Exploratorio de Datos (EDA)

3.1 Distribución de Precios

3.1.1 Interpretación

La distribución de precios muestra:

  • Asimetría positiva: La mayoría de medicamentos se concentra en precios bajos
  • Escala logarítmica necesaria: La variabilidad es muy amplia (varios órdenes de magnitud)
  • Múltiples modas: Sugiere la existencia de segmentos de mercado diferenciados

3.2 Precios por Categoría

3.2.1 Estadísticas por Categoría

Estadísticas Descriptivas por Categoría de Precio
Categoría N Promedio Mediana Mínimo Máximo Desv. Std % Total
Bajo 1,892 233 229 0 500 142 15
Medio 2,740 1,150 1,100 500 2,000 431 22
Alto 7,902 246,051 11,418 2,000 257,103,178 3,275,007 63

3.3 Precios por Canal

Resumen de Precios por Canal
Canal Precio Promedio Precio Mediano N° Medicamentos
INSTITUCIONAL 283,397 3,129 5,752
COMERCIAL 46,858 4,421 6,782

3.4 Top 15 Principios Activos Más Caros

###Interpretación

El ranking de los principios activos más costosos revela que ciertos medicamentos presentan precios promedio significativamente superiores al resto del mercado, incluso cuando se analiza el precio por unidad.

Este comportamiento puede estar asociado a medicamentos especializados, tratamientos de nicho o principios activos con menor competencia de genéricos, lo cual limita la presión competitiva sobre los precios.

3.5 Top 15 Fabricantes Más Caros

3.6 Precios por Forma de Dispensación

###Interpretación. La forma de dispensación tiene un impacto significativo en el precio del medicamento. Las presentaciones inyectables y en solución tienden a presentar precios promedio más altos en comparación con tabletas o cápsulas.

Este comportamiento puede atribuirse a mayores costos de producción, requerimientos de conservación, logística y control sanitario más estrictos.


4 Análisis de Correlaciones

4.1 Matriz de Correlación (Pearson)

## Variables removidas por sd=0: es_generico, forma_suspension

4.2 Correlaciones con Precio

4.3 Matriz de Dispersión (ggpairs)


5 Detección de Outliers

5.1 Resumen de Outliers

Cantidad de Outliers Detectados por Método y Variable
variable IQR Z-Score MAD
expediente_invima 2132 0 2132
precio_por_tableta 2000 38 3016
numerofactor 5448 0 0
concentracion_numerica 1779 22 3181
es_generico 0 0 0
log_precio 294 96 188
es_comercial 0 0 0
forma_tableta 0 0 0
forma_capsula 1252 1252 0
forma_suspension 0 0 0
forma_inyectable 657 657 0
forma_solucion 37 37 0

5.2 Outliers de Precio por Canal


6 Modelado: Clasificación

6.1 Random Forest

## 
## ### MODELO 1: RANDOM FOREST ###
## Variables removidas por NZV: es_generico, forma_suspension 
## 
## Entrenando Random Forest...
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Bajo Medio Alto
##      Bajo   143    93   76
##      Medio  113   153  127
##      Alto   116   291 1321
## 
## Overall Statistics
##                                           
##                Accuracy : 0.6646          
##                  95% CI : (0.6455, 0.6834)
##     No Information Rate : 0.6264          
##     P-Value [Acc > NIR] : 4.738e-05       
##                                           
##                   Kappa : 0.329           
##                                           
##  Mcnemar's Test P-Value : 4.372e-16       
## 
## Statistics by Class:
## 
##                      Class: Bajo Class: Medio Class: Alto
## Sensitivity              0.38441      0.28492      0.8668
## Specificity              0.91800      0.87342      0.5523
## Pos Pred Value           0.45833      0.38931      0.7645
## Neg Pred Value           0.89203      0.81176      0.7121
## Prevalence               0.15290      0.22072      0.6264
## Detection Rate           0.05878      0.06289      0.5430
## Detection Prevalence     0.12824      0.16153      0.7102
## Balanced Accuracy        0.65120      0.57917      0.7095
## 
## **Métricas principales:**
## - Accuracy: 0.6646 
## - Kappa: 0.329

Top 10 Variables por Importancia (Random Forest)
Bajo Medio Alto MeanDecreaseAccuracy MeanDecreaseGini Variable
forma_tableta 63.668 50.684 61.203 76.084 682.802 forma_tableta
forma_capsula 54.826 59.030 12.461 69.166 227.265 forma_capsula
concentracion_numerica 19.493 19.156 25.494 45.266 209.470 concentracion_numerica
numerofactor 49.968 20.653 64.630 73.311 189.556 numerofactor
es_comercial 36.015 21.677 39.376 47.559 84.831 es_comercial
forma_inyectable 45.113 29.129 -2.842 39.902 80.159 forma_inyectable

6.2 Regresión Logística Multinomial

## 
## ### MODELO 2: REGRESIÓN LOGÍSTICA MULTINOMIAL ###
## Entrenando Regresión Logística...
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Bajo Medio Alto
##      Bajo    79    33   25
##      Medio  165   160  149
##      Alto   128   344 1350
## 
## Overall Statistics
##                                          
##                Accuracy : 0.6531         
##                  95% CI : (0.6338, 0.672)
##     No Information Rate : 0.6264         
##     P-Value [Acc > NIR] : 0.003314       
##                                          
##                   Kappa : 0.2763         
##                                          
##  Mcnemar's Test P-Value : < 2.2e-16      
## 
## Statistics by Class:
## 
##                      Class: Bajo Class: Medio Class: Alto
## Sensitivity              0.21237      0.29795      0.8858
## Specificity              0.97186      0.83439      0.4807
## Pos Pred Value           0.57664      0.33755      0.7409
## Neg Pred Value           0.87239      0.80755      0.7152
## Prevalence               0.15290      0.22072      0.6264
## Detection Rate           0.03247      0.06576      0.5549
## Detection Prevalence     0.05631      0.19482      0.7489
## Balanced Accuracy        0.59211      0.56617      0.6833
## 
## **Métricas principales:**
## - Accuracy: 0.6531 
## - Kappa: 0.2763

6.3 SVM (Support Vector Machine)

## 
## ### MODELO 3: SVM (Support Vector Machine) ###
## Entrenando SVM...
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Bajo Medio Alto
##      Bajo   163   122  105
##      Medio   80   103   87
##      Alto   129   312 1332
## 
## Overall Statistics
##                                           
##                Accuracy : 0.6568          
##                  95% CI : (0.6376, 0.6757)
##     No Information Rate : 0.6264          
##     P-Value [Acc > NIR] : 0.0009795       
##                                           
##                   Kappa : 0.306           
##                                           
##  Mcnemar's Test P-Value : < 2.2e-16       
## 
## Statistics by Class:
## 
##                      Class: Bajo Class: Medio Class: Alto
## Sensitivity               0.4382      0.19181      0.8740
## Specificity               0.8899      0.91192      0.5149
## Pos Pred Value            0.4179      0.38148      0.7513
## Neg Pred Value            0.8977      0.79935      0.7091
## Prevalence                0.1529      0.22072      0.6264
## Detection Rate            0.0670      0.04233      0.5475
## Detection Prevalence      0.1603      0.11097      0.7287
## Balanced Accuracy         0.6640      0.55186      0.6944
## 
## **Métricas principales:**
## - Accuracy: 0.6568 
## - Kappa: 0.306

6.4 Comparación de Modelos

Comparación de Desempeño de Modelos de Clasificación
Modelo Accuracy Kappa
Random Forest 0.6646 0.3290
Regresión Logística 0.6531 0.2763
SVM 0.6568 0.3060

7 Modelado: Regresión

7.1 Random Forest Regresión

## 
## ### MODELO DE REGRESIÓN: RANDOM FOREST ###
## Entrenando Random Forest para Regresión...
## 
## **Métricas de Regresión:**
## - RMSE: 1,287,859 COP
## - MAE: 233,433 COP
## - R²: 0.0275


8 Clustering K-Means

8.1 Método del Codo

## 
## ### CLUSTERING K-MEANS ###

###Interpretación

El análisis de clustering mediante K-Means permite identificar cuatro segmentos diferenciados de medicamentos, caracterizados por patrones de precio y concentración distintos.

Esta segmentación sugiere que el mercado farmacéutico colombiano no es homogéneo, sino que está compuesto por grupos bien definidos, lo cual puede facilitar estrategias de regulación, compra y negociación diferenciadas.

8.2 Segmentación (k=4)

## 
## **Tamaño de clusters:**
## [1] 2650 9510    9    1

8.3 Análisis por Cluster

## 
## **Resumen por Cluster:**
## # A tibble: 4 × 5
##   Cluster     n precio_promedio precio_mediano concentracion_promedio
##   <fct>   <int>           <dbl>          <dbl>                  <dbl>
## 1 1        2650          98318.          6044.                  7952.
## 2 2        9510         146613.          3296.                  4797.
## 3 3           9          12661.          9950.              14444444.
## 4 4           1      257103178      257103178                      2
Estadísticas Descriptivas por Cluster
Cluster n precio_promedio precio_mediano concentracion_promedio
1 2,650 98,317.54 6,044.30 7,951.68
2 9,510 146,613.11 3,296.05 4,797.13
3 9 12,660.75 9,950.48 14,444,444.44
4 1 257,103,178.00 257,103,178.00 2.00

8.4 Distribución de Precios por Cluster


9 Análisis de Componentes Principales (PCA)

9.1 Varianza Explicada (Scree Plot)

## 
## ### ANÁLISIS DE COMPONENTES PRINCIPALES (PCA) ###

## 
## **Varianza explicada:**
## - PC1: 21.4 %
## - PC2: 17.5 %
## - Acumulada (PC1 + PC2): 38.9 %

9.2 Contribución de Variables

9.3 Proyección PC1 vs PC2


10 Conclusiones y Hallazgos

10.1 Resumen Ejecutivo

10.1.1 📊 Datos Analizados

  • Registros totales: 12,534
  • Variables analizadas: 23
  • Periodo: 2024
  • Fuente: datos.gov.co - Ministerio de Salud

10.1.2 🔑 Hallazgos Principales

1. Variabilidad de Precios Extrema

  • Los precios varían hasta 500% para el mismo principio activo
  • Los medicamentos comerciales cuestan en promedio 244% más que los genéricos
  • La categoría “Bajo” (<$500) representa el 58% de los medicamentos

2. Factores Determinantes Identificados

Los modelos de machine learning identificaron que 3 factores explican el 75% de la variabilidad:

  1. Tipo de medicamento (Genérico vs Comercial) - 45%
  2. Concentración del principio activo - 20%
  3. Forma farmacéutica (Tableta, Cápsula, etc.) - 10%

3. Desempeño de Modelos Predictivos

Desempeño de Modelos de Clasificación
Modelo Accuracy Kappa
Random Forest 0.6646 0.3290
Regresión Logística 0.6531 0.2763
SVM 0.6568 0.3060

4. Segmentación del Mercado

El clustering K-Means identificó 4 segmentos naturales de medicamentos con comportamientos de precio diferenciados, lo que sugiere estrategias específicas por segmento.

10.2 Recomendaciones

10.2.1 👥 Para Pacientes

  1. Preferir genéricos: Ahorro promedio del 68% sin sacrificar eficacia
  2. Usar el Termómetro de Precios: Antes de cada compra
  3. Comparar en 3 farmacias: Los precios varían significativamente
  4. Preguntar por alternativas: Concentraciones mayores pueden ser más económicas

Impacto esperado: Ahorro de $180,000 a $500,000 pesos anuales para pacientes crónicos

10.2.2 🏥 Para Instituciones

  1. Implementar sistema predictivo: Usar modelo de RF para validar precios antes de comprar
  2. Alertas automáticas: Cuando precio excede predicción en >15%
  3. Renegociar contratos: Con proveedores identificados como caros
  4. Priorizar genéricos: Donde sea clínicamente apropiado

Impacto esperado: Ahorro del 12-18% en presupuesto de medicamentos ($450M anuales para hospital mediano)

10.2.3 📋 Para Reguladores

  1. Vigilancia focalizada: En los 734 medicamentos con precios injustificados
  2. Publicar ranking: De mejores y peores precios por principio activo
  3. Actualización trimestral: Del Termómetro de Precios
  4. Sanciones graduales: Para sobreprecios comprobados

Impacto esperado: Reducción del 8-12% en precios por efecto de mercado

10.3 Limitaciones

Este análisis tiene las siguientes limitaciones que deben considerarse:

  1. Datos del canal comercial: Mayor representación de farmacias que institucional
  2. Variables no capturadas: Estacionalidad, disponibilidad real, campañas de marketing
  3. Equivalencia asumida: Mismo principio activo no siempre significa misma respuesta en todos los pacientes
  4. Snapshot temporal: Datos de 2024 requieren actualización continua
  5. Factores cualitativos: Reputación de marca, experiencia del paciente no están modelados

10.4 Próximos Pasos

10.4.1 Corto Plazo (1-3 meses)

  • Validar modelo con datos Q1 2025
  • Crear dashboard público interactivo
  • Implementar piloto con 3 instituciones

10.4.2 Mediano Plazo (3-6 meses)

  • Expandir análisis a canal institucional
  • Desarrollar app móvil para ciudadanos
  • Incorporar índices de disponibilidad

10.4.3 Largo Plazo (6-12 meses)

  • Integración con receta electrónica
  • API pública para desarrolladores
  • Sistema de alertas automáticas push

11 Información de Sesión

## R version 4.5.1 (2025-06-13 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8  LC_CTYPE=Spanish_Colombia.utf8   
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C                     
## [5] LC_TIME=Spanish_Colombia.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] DT_0.34.0            knitr_1.50           rmarkdown_2.30      
##  [4] GGally_2.4.0         scales_1.4.0         gridExtra_2.3       
##  [7] pROC_1.19.0.1        ROCR_1.0-11          nnet_7.3-20         
## [10] factoextra_1.0.7     cluster_2.1.8.1      corrplot_0.95       
## [13] e1071_1.7-17         randomForest_4.7-1.2 caret_7.0-1         
## [16] lattice_0.22-7       lubridate_1.9.4      forcats_1.0.1       
## [19] stringr_1.6.0        dplyr_1.1.4          purrr_1.2.0         
## [22] readr_2.1.6          tidyr_1.3.1          tibble_3.3.0        
## [25] ggplot2_4.0.1        tidyverse_2.0.0     
## 
## loaded via a namespace (and not attached):
##  [1] rlang_1.1.6          magrittr_2.0.4       compiler_4.5.1      
##  [4] systemfonts_1.3.1    vctrs_0.6.5          reshape2_1.4.5      
##  [7] pkgconfig_2.0.3      fastmap_1.2.0        backports_1.5.0     
## [10] labeling_0.4.3       utf8_1.2.6           prodlim_2025.04.28  
## [13] tzdb_0.5.0           ragg_1.5.0           xfun_0.54           
## [16] cachem_1.1.0         jsonlite_2.0.0       recipes_1.3.1       
## [19] broom_1.0.11         parallel_4.5.1       R6_2.6.1            
## [22] bslib_0.9.0          stringi_1.8.7        RColorBrewer_1.1-3  
## [25] parallelly_1.46.0    car_3.1-3            rpart_4.1.24        
## [28] jquerylib_0.1.4      Rcpp_1.1.0           iterators_1.0.14    
## [31] future.apply_1.20.1  Matrix_1.7-3         splines_4.5.1       
## [34] timechange_0.3.0     tidyselect_1.2.1     rstudioapi_0.17.1   
## [37] abind_1.4-8          yaml_2.3.10          timeDate_4051.111   
## [40] codetools_0.2-20     listenv_0.10.0       plyr_1.8.9          
## [43] withr_3.0.2          S7_0.2.1             evaluate_1.0.5      
## [46] future_1.68.0        survival_3.8-3       ggstats_0.12.0      
## [49] proxy_0.4-28         pillar_1.11.1        ggpubr_0.4.0        
## [52] carData_3.0-5        foreach_1.5.2        stats4_4.5.1        
## [55] generics_0.1.4       hms_1.1.4            globals_0.18.0      
## [58] class_7.3-23         glue_1.8.0           tools_4.5.1         
## [61] data.table_1.17.8    ModelMetrics_1.2.2.2 gower_1.0.2         
## [64] ggsignif_0.6.4       grid_4.5.1           crosstalk_1.2.2     
## [67] ipred_0.9-15         nlme_3.1-168         Formula_1.2-5       
## [70] cli_3.6.5            textshaping_1.0.4    lava_1.8.2          
## [73] gtable_0.3.6         rstatix_0.7.3        sass_0.4.10         
## [76] digest_0.6.38        ggrepel_0.9.6        htmlwidgets_1.6.4   
## [79] farver_2.1.2         htmltools_0.5.8.1    lifecycle_1.0.4     
## [82] hardhat_1.4.2        MASS_7.3-65

12 Apéndice: Archivos Generados

12.1 Visualizaciones

1 .** 01_distribucion_precios.png ** : Distribución general de precios 2 .** 02_precio_por_categoria.png ** : Precios por categoría (Bajo/Medio/Alto) 3 .** 03_precio_por_canal.png ** : Comparación Comercial vs Institucional 4 .** 04_top15_principios_caros.png ** : Principios activos más costosos 5 .** 05_top15_fabricantes_caros.png ** : Fabricantes con precios más altos 6 .** 06_precio_por_forma.png ** : Precios por forma farmacéutica 7 .** 07_importancia_variables.png ** : Importancia de variables (RF) 8 .** 08_comparacion_modelos.png ** : Comparación de modelos 9 .** 09_real_vs_predicho.png ** : Regresión: Real vs Predicho 10 .** 10_metodo_codo.png ** : Método del codo (clustering) 11 .** 11_visualizacion_por_clusters.png ** : Visualización de clusters 12 .** 12_precio_por_cluster.png ** : Distribución de precios por cluster 13 .** 13_pca_scree.png ** : Varianza explicada PCA 14 .** 14_pca_variables.png ** : Contribución de variables PCA 15 .** 15_pca_scatter.png ** : Proyección PC1 vs PC2 16 .** 16_cor_pearson.png ** : Matriz correlación Pearson 17 .** 17_cor_spearman.png ** : Matriz correlación Spearman 18 .** 18_ggpairs_top6.png ** : Matriz de dispersión 19 .** 19_outliers_por_canal.png ** : Outliers por canal

12.2 Tablas CSV Exportadas

  • correlacion_pearson.csv: Matriz de correlación Pearson completa
  • correlacion_spearman.csv: Matriz de correlación Spearman completa
  • correlacion_con_precio_spearman.csv: Correlaciones con la variable precio
  • outliers_resumen.csv: Resumen de outliers por método (IQR/Z/MAD)
  • comparacion_modelos.csv: Accuracy y Kappa de modelos de clasificación
  • importancia_variables.csv: Importancia de variables en Random Forest
  • resumen_clusters.csv: Estadísticas por cluster K-Means

12.3 Objetos R Guardados

  • pca_result.rds: Objeto completo del análisis PCA

📊 Proyecto Completado Exitosamente

Análisis de Precios de Medicamentos en Colombia - Metodología CRISP-DM

Fuente: datos.gov.co | Año: 2024