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:
- Grezzo → bontà \([0,1]\): l'indice viene orientato e normalizzato (1 = ottimo).
- 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:
| Classe | Quando | Variabile | Indici tipici |
|---|---|---|---|
| finito | estremi entrambi finiti | \(x\in[0,1]\) (bontà già normalizzata) | R, R², Spearman, IOA, POD, CSI, FAR |
| coda | un estremo a \(\infty\), ottimo all'estremo finito | \(u=|val-target|/s\) | RMSE, MAE, CRMSE, NME, KGE, NSE, HSS |
| due code | ottimo interno + almeno un estremo a \(\infty\) | \(d=(val-target)/s\) | MB, NMB, std_ratio |
| saturante | meglio = \(+\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):
| Indice | Dominio | Funzioni adatte | Suggerita |
|---|---|---|---|
| R, R², Spearman, IOA | finito | potenza, logistica, esponenziale | potenza \(\gamma\approx2\) (premia i valori alti) |
| POD, CSI | finito | potenza, logistica | logistica (soglia operativa) |
| FAR | finito | potenza, logistica | potenza |
| RMSE, MAE, CRMSE, NME | coda | razionale, razionale², esponenziale, Hill, \(1-\tanh\) | razionale² (\(u=1\Rightarrow0{,}5\)) |
| KGE, NSE, HSS | coda (su \(1-val\)) | razionale, esponenziale | razionale² |
| MB, NMB | due code | gaussiana, lorentziana, sech² | gaussiana |
| std_ratio | due code (ottimo 1) | gaussiana, lorentziana | gaussiana |
| MI | saturante | saturante | \(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