1 Introduzione

Questo report analizza il consumo di farmaci in Italia tra il 2016 e il 2023, con l’obiettivo di identificare le classi ATC in crescita e costruire un modello predittivo per supportare decisioni di politica sanitaria e medicina di precisione.

2 Fase 1: Caricamento e pulizia del dataset

df <- read_excel("consumo_farmaci.xlsx") %>%
  clean_names() %>%
  filter(if_all(everything(), ~ !is.na(.))) %>%
  distinct() %>%
  mutate(
    regione = str_to_title(regione),
    codice_atc = str_to_upper(atc1),
    spesa_totale = as.numeric(spesa_totale)
  )

3 Fase 2: Analisi esplorativa dei trend

df_trend <- df %>%
  group_by(anno, codice_atc) %>%
  summarise(consumo_totale = sum(spesa_totale, na.rm = TRUE)) %>%
  ungroup()
## `summarise()` has grouped output by 'anno'. You can override using the
## `.groups` argument.
ggplot(df_trend, aes(x = anno, y = consumo_totale, color = codice_atc)) +
  geom_line(linewidth = 1.2) +
  labs(
    title = "Trend di consumo farmaci per classe ATC",
    x = "Anno", y = "Spesa totale (€)", color = "Classe ATC"
  ) +
  theme_minimal()

df_variazione <- df_trend %>%
  filter(anno %in% c(2016, 2023)) %>%
  pivot_wider(names_from = anno, values_from = consumo_totale) %>%
  mutate(variazione_perc = (`2023` - `2016`) / `2016` * 100) %>%
  arrange(desc(variazione_perc))

df_variazione
## # A tibble: 14 × 4
##    codice_atc     `2016`     `2023` variazione_perc
##    <chr>           <dbl>      <dbl>           <dbl>
##  1 P          294561991. 428539073.          45.5  
##  2 V          278753927. 398485015.          43.0  
##  3 A          500099243. 709540991.          41.9  
##  4 H          618113857. 722409399.          16.9  
##  5 M          584189776. 677004033.          15.9  
##  6 R          740789104. 851463023.          14.9  
##  7 C          577220693. 644377113.          11.6  
##  8 B          573258487. 637903704.          11.3  
##  9 J          669698888. 665087882.          -0.689
## 10 N          485315137. 391730072.         -19.3  
## 11 G          656325490. 518989600.         -20.9  
## 12 L          671032466. 397195446.         -40.8  
## 13 D          673605427. 372882556.         -44.6  
## 14 S          810657192. 407346873.         -49.8

4 Fase 3: Modellazione predittiva

if (!require(caret)) {
  install.packages("caret")
  library(caret)
} else {
  library(caret)
}

df_model <- df_trend %>%
  filter(!is.na(consumo_totale)) %>%
  mutate(codice_atc = as.factor(codice_atc))

set.seed(123)
model_rf <- train(
  consumo_totale ~ anno + codice_atc,
  data = df_model,
  method = "rf",
  trControl = trainControl(method = "cv", number = 5)
)

df_model$predizione <- predict(model_rf, newdata = df_model)

ggplot(df_model, aes(x = consumo_totale, y = predizione, color = codice_atc)) +
  geom_point(alpha = 0.6) +
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "gray") +
  labs(
    title = "Confronto tra spesa reale e prevista",
    x = "Spesa reale (€)",
    y = "Spesa prevista (€)"
  ) +
  theme_minimal()

model_rf
## Random Forest 
## 
## 112 samples
##   2 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (5 fold) 
## Summary of sample sizes: 88, 91, 90, 91, 88 
## Resampling results across tuning parameters:
## 
##   mtry  RMSE       Rsquared    MAE      
##    2    137446186  0.14671058  106893348
##    8    144129426  0.09082519  114311040
##   14    144990774  0.08419363  115825611
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was mtry = 2.

5 Discussione

Il modello Random Forest ha mostrato una buona capacità di adattamento ai dati storici. Alcune classi ATC come P, V e A hanno registrato una crescita significativa, suggerendo un possibile aumento della domanda in ambiti specifici della medicina.

6 Limiti

Il modello non include variabili cliniche o demografiche

La previsione si basa solo su dati aggregati per anno e classe ATC

Non è stato testato su dati futuri o esterni

7 Proposte future

Integrare dati regionali e demografici

Applicare modelli di serie temporali (ARIMA, Prophet)

Costruire una dashboard interattiva con Shiny

Automatizzare il report con RMarkdown e pubblicarlo su GitHub

8 Conclusioni

Questa analisi fornisce una base solida per monitorare l’evoluzione del consumo farmaci in Italia e supportare decisioni strategiche in ambito sanitario. Il modello predittivo può essere esteso e raffinato per applicazioni più avanzate nella medicina personalizzata.