Funzioni di scaling

A cosa servono le funzioni di scaling

Nel cruscotto di Validazione ogni indice statistico contribuisce a un punteggio sintetico tramite una media pesata. Il problema è che gli indici non variano linearmente in significato: passare da \(R=0{,}90\) a \(R=0{,}95\) è un salto di qualità molto maggiore che da \(0{,}50\) a \(0{,}55\). Una funzione di scaling rimodella la "bontà" dell'indice prima di pesarlo, così il punteggio riflette meglio l'effettivo merito.

Il calcolo avviene in due stadi:

  1. Grezzo → bontà \([0,1]\): l'indice viene orientato e normalizzato (1 = ottimo).
  2. Bontà → bontà: la funzione di scaling \(g\) rimodella il valore. Con estremi fissi \(g(0)=0\), \(g(1)=1\) il peso resta il tetto del contributo e la somma dei pesi continua a fare 100.

La funzione di default è la lineare \(g(x)=x\): finché non si assegna un'altra curva, il punteggio è identico a quello "classico".

La dipendenza dagli estremi

Quali curve hanno senso per un indice dipende dal suo dominio teorico (minimo, massimo) e dal valore ottimo. Se un estremo è all'infinito non si può "riscalare linearmente": serve una funzione asintotica. Da qui quattro classi:

ClasseQuandoVariabileIndici tipici
finitoestremi entrambi finiti\(x\in[0,1]\) (bontà già normalizzata)R, R², Spearman, IOA, POD, CSI, FAR
codaun estremo a \(\infty\), ottimo all'estremo finito\(u=|val-target|/s\)RMSE, MAE, CRMSE, NME, KGE, NSE, HSS
due codeottimo interno + almeno un estremo a \(\infty\)\(d=(val-target)/s\)MB, NMB, std_ratio
saturantemeglio = \(+\infty\)\(u=val/s\)MI (mutua informazione)

La scala \(s\) delle asintotiche è l'errore "caratteristico": di norma la deviazione standard delle osservazioni \(\sigma_{oss}\) per gli indici in unità fisiche, 100% per quelli percentuali, 1 per i rapporti adimensionali. Così \(u=1\) significa "errore pari a una scala caratteristica".

Famiglie di funzioni (interattive)

La linea blu è la curva; la diagonale tratteggiata (dove presente) è il riferimento lineare. Trascina gli slider per vedere come cambia.

Dominio finito — \(x\in[0,1]\)
Lineare default

\( g(x)=x \)

Nessuna deformazione: comportamento classico.

Potenza

\( g(x)=x^{\gamma} \)

\(\gamma>1\) premia solo l'eccellenza; \(\gamma<1\) valorizza l'"uscire dal fondo".

Esponenziale (enfasi)

\( g(x)=\dfrac{e^{kx}-1}{e^{k}-1} \)

Enfatizza la cima (\(k>0\)) o il fondo (\(k<0\)) in modo marcato.

Logaritmica

\( g(x)=\dfrac{\ln(1+kx)}{\ln(1+k)} \)

Rendimenti decrescenti: premia i primi miglioramenti.

Logistica (soglia)

\( g(x)=\dfrac{1}{1+e^{-k(x-x_0)}} \)

Curva a S attorno a una soglia \(x_0\): "buono / non buono".

Asintotiche a una coda — \(u=|val-target|/s\)
Razionale

\( g(u)=\dfrac{1}{1+u} \)

Asintoto a 0, coda lenta: penalizza poco gli outlier.

Razionale quadratica

\( g(u)=\dfrac{1}{1+u^{2}} \)

Buon compromesso: \(u=1\Rightarrow 0{,}5\). Default consigliato per gli errori.

Esponenziale

\( g(u)=e^{-u} \)

Coda rapida: penalizza forte gli errori grandi.

Hill

\( g(u)=\dfrac{1}{1+u^{n}} \)

Soglia morbida regolabile con \(n\).

Tangente iperbolica

\( g(u)=1-\tanh(u) \)

Decadimento ripido con asintoto a 0.

Esponenziale stirata (Kohlrausch)

\( g(u)=e^{-u^{\beta}} \)

Generalizza l'esponenziale (\(\beta=1\)): \(\beta<1\) allunga la coda, \(\beta>1\) la accorcia.

Saturante — \(u=val/s\)
Saturante

\( g(u)=\dfrac{u}{1+u} \)

Cresce e satura a 1: per indici in cui "più grande è meglio" (MI).

Asintotiche a due code — \(d=(val-target)/s\)
Gaussiana

\( g(d)=e^{-d^{2}} \)

Campana simmetrica, dolce vicino all'ottimo.

Lorentziana

\( g(d)=\dfrac{1}{1+d^{2}} \)

Come la gaussiana ma con code più "grasse".

Sech quadro

\( g(d)=1-\tanh^{2}(d) \)

Campana con code esponenziali.

Tangente iperbolica (con segno)

\( g(d)=\tanh(d) \)

Caso speciale: conserva il segno dello scarto invece di collassare sulla bontà.

Quale funzione per quale indice

Linee guida (la lineare è sempre ammessa come default):

IndiceDominioFunzioni adatteSuggerita
R, R², Spearman, IOAfinitopotenza, logistica, esponenzialepotenza \(\gamma\approx2\) (premia i valori alti)
POD, CSIfinitopotenza, logisticalogistica (soglia operativa)
FARfinitopotenza, logisticapotenza
RMSE, MAE, CRMSE, NMEcodarazionale, razionale², esponenziale, Hill, \(1-\tanh\)razionale² (\(u=1\Rightarrow0{,}5\))
KGE, NSE, HSScoda (su \(1-val\))razionale, esponenzialerazionale²
MB, NMBdue codegaussiana, lorentziana, sech²gaussiana
std_ratiodue code (ottimo 1)gaussiana, lorentzianagaussiana
MIsaturantesaturante\(u/(1+u)\)

La curva scelta per ogni coppia (inquinante×indice) si imposta nel cruscotto di Validazione, nel pannello dei pesi. Il dettaglio tecnico (tabella tbl_weight_func, parser) è nella Panoramica tecnica.

Keywords: funzioni di scaling, pesi, indici statistici, punteggio, validazione

Moreno Comelli, Ugo Cortesi, Valentina Colcelli & Alessandra Langella, CNR-IFAC, 2022-2026