Vai al contenuto principale

Funzione obiettivo spiegata: definizione, esempi e ottimizzazione

Scopri cos'è una funzione obiettivo, come funziona nell'ottimizzazione e nel machine learning, e come definirla e interpretarla con esempi reali.
Aggiornato 4 mag 2026  · 11 min leggi

Ogni modello di machine learning che alleni risolve un problema di ottimizzazione - e ciò che stai davvero cercando di risolvere si chiama funzione obiettivo.

In parole semplici, è una funzione matematica che misura quanto è "buona" una soluzione. Prende un insieme di input e restituisce un unico punteggio. L'obiettivo è sempre trovare i valori che massimizzano o minimizzano quel punteggio. Troverai le funzioni obiettivo al cuore di tutto, dalla programmazione lineare al deep learning. È una di quelle cose che vedrai ovunque una volta capito come funzionano.

In questo articolo ti spiego cosa sono le funzioni obiettivo, in cosa differiscono da loss e cost function e come vengono usate nel machine learning e nell'ottimizzazione.

Cerchi un approfondimento sul deep learning che sia ancora rilevante nel 2026? Iscriviti al nostro corso Deep Learning in Python per costruire un portfolio in PyTorch.

Cos'è una funzione obiettivo?

Una funzione obiettivo è una funzione matematica che valuta quanto è buona una soluzione.

Le fornisci un insieme di input - parametri del modello, variabili decisionali - e restituisce un singolo numero. Quel numero ti dice quanto bene performa la soluzione corrente. Più alto (o più basso) è quel numero, migliore (o peggiore) è la tua soluzione.

Già che siamo in tema, parliamo di ottimizzazione in generale.

È il processo di trovare gli input che spingono quel numero nella direzione giusta. Se stai minimizzando, vuoi il valore più piccolo possibile. Se stai massimizzando, vuoi il più grande. In ogni caso, la funzione obiettivo è ciò rispetto a cui stai misurando.

In parole povere, pensala come un sistema di punteggio. Ogni soluzione candidata riceve un punteggio e il tuo compito è trovare quella con il punteggio migliore.

Funzione obiettivo vs loss function vs cost function

Questi tre termini vengono usati in modo intercambiabile tutto il tempo - ma non significano esattamente la stessa cosa.

La funzione obiettivo è il termine più ampio. È qualsiasi funzione che stai cercando di massimizzare o minimizzare. Non deve necessariamente coinvolgere errore o previsioni - definisce semplicemente cosa significa "meglio" per il tuo problema.

Una loss function misura l'errore per un singolo esempio di training - quanto la previsione del modello si discosta dal valore reale. L'errore quadratico medio per un singolo dato, ad esempio, è una loss function.

Una cost function aggrega la loss sull'intero dataset, di solito facendone la media. Quindi la cost function è ciò che minimizzi effettivamente durante l'addestramento - riassume le performance del modello su tutti gli esempi, non solo su uno.

Nella pratica, la maggior parte dei framework e degli articoli ML usa questi termini in modo lasco. Vedrai usare "loss" dove "cost" sarebbe più preciso, e "objective" per intendere tutti e tre.

Le distinzioni contano quando leggi articoli di ricerca. Il contesto ti dice a quale dei tre si riferisce davvero l'autore.

Per un confronto più concreto, vedi la tabella qui sotto:

Tabella di confronto tra funzione obiettivo/loss/cost

Tabella di confronto tra funzione obiettivo/loss/cost

Funzioni obiettivo nell'ottimizzazione

Ogni problema di ottimizzazione ha un obiettivo e un insieme di vincoli.

La funzione obiettivo definisce l'obiettivo - ciò che stai cercando di massimizzare o minimizzare. I vincoli definiscono i limiti - i confini entro cui la tua soluzione deve restare. Insieme, inquadrano il problema.

Prendiamo un semplice esempio di allocazione delle risorse.

Diciamo che gestisci una fabbrica che produce due prodotti e vuoi massimizzare il profitto. La tua funzione obiettivo cattura il profitto totale in funzione di quante unità di ciascun prodotto realizzi. I tuoi vincoli catturano i limiti - materie prime disponibili, ore macchina, capacità di manodopera. La funzione obiettivo ti dice cosa ottimizzare e i vincoli ti dicono con cosa stai lavorando.

La programmazione lineare è uno degli ambiti più comuni in cui questo è applicabile. È un metodo per ottimizzare una funzione obiettivo lineare soggetta a vincoli lineari. È usata ovunque, dalla logistica, alla pianificazione, alla supply chain, fino alla finanza. La matematica è ben compresa e i solver possono gestire problemi con migliaia di variabili.

È importante notare che la funzione obiettivo non cambia i vincoli esistenti - dice solo al solver cosa perseguire. Se cambi la funzione obiettivo, otterrai una soluzione completamente diversa, anche con gli stessi vincoli.

Funzioni obiettivo nel machine learning

Nel machine learning, la funzione obiettivo definisce ciò che il tuo modello sta realmente imparando a fare.

Ogni volta che addestri un modello, stai eseguendo un algoritmo di ottimizzazione (pensa a gradient descent, Adam, RMSProp) che aggiusta i parametri del modello per minimizzare o massimizzare la funzione obiettivo. Il modello non sa nulla del tuo problema. Conosce solo il punteggio che la funzione obiettivo gli assegna e cerca di migliorarlo a ogni aggiornamento.

Questo significa che la tua scelta di funzione obiettivo plasma il risultato. È una buona idea provarne alcune per vedere quale funziona meglio per il tuo caso.

Errore quadratico medio (regressione)

Il Mean Squared Error (MSE) è la funzione obiettivo predefinita per i problemi di regressione. Misura la differenza quadratica media tra le previsioni del tuo modello e i valori target reali.

Formula MSE

Formula MSE

L'elevamento al quadrato rende tutti gli errori positivi e penalizza gli errori grandi più di quelli piccoli. Una previsione sbagliata di 10 contribuisce 100 alla somma - non solo 10. Questo rende l'MSE sensibile agli outlier, cosa da tenere d'occhio con dati reali disordinati.

import numpy as np

y_true = np.array([3.0, 5.0, 2.5, 7.0])
y_pred = np.array([2.8, 5.2, 2.0, 6.5])

mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE: {mse:.4f}")

Output MSE

Output MSE

Loss di entropia incrociata (classificazione)

La Cross-Entropy Loss è la funzione obiettivo standard per i problemi di classificazione. Misura quanto la distribuzione di probabilità prevista dal tuo modello si discosta dalla distribuzione della classe vera.

Funzione di loss di entropia incrociata

Funzione di loss di entropia incrociata

Se il tuo modello assegna un'alta probabilità alla classe corretta, la loss è bassa. Se è sicuro ma sbaglia, la loss è alta e lo penalizza. Questo spinge il modello a prevedere la classe giusta e a farlo con confidenza.

import numpy as np

# True labels (one-hot encoded)
y_true = np.array([1, 0, 0])

# Model's predicted probabilities
y_pred = np.array([0.7, 0.2, 0.1])

cross_entropy = -np.sum(y_true * np.log(y_pred))
print(f"Cross-Entropy Loss: {cross_entropy:.4f}")

Output entropia incrociata

Output entropia incrociata

Log-verosimiglianza

La log-verosimiglianza è comune nei modelli probabilistici e statistici. La funzione massimizza la probabilità che i parametri del tuo modello abbiano prodotto i dati osservati.

Formula di log-verosimiglianza

Formula di log-verosimiglianza

Si lavora con il log della verosimiglianza piuttosto che con la verosimiglianza stessa perché trasforma un prodotto di probabilità in una somma, molto più facile da calcolare e ottimizzare.

In pratica, la maggior parte dei framework minimizza la negative log-likelihood (NLL) invece di massimizzare la log-verosimiglianza. È la stessa cosa - solo invertita così che il gradient descent possa funzionare.

import numpy as np
from scipy.stats import norm

# Observed data
data = np.array([1.2, 2.3, 1.8, 2.1, 1.9])

# Assumed model parameters
mu, sigma = 2.0, 0.5

# Compute negative log-likelihood
nll = -np.sum(norm.logpdf(data, loc=mu, scale=sigma))
print(f"Negative Log-Likelihood: {nll:.4f}")

Output log-verosimiglianza

Output log-verosimiglianza

L'addestramento è, in sostanza, solo ottimizzazione. Ogni forward pass calcola il valore della funzione obiettivo. Ogni backward pass calcola i gradienti. E ogni aggiornamento dei parametri muove il modello nella direzione che migliora il punteggio.

Funzioni obiettivo convesse vs non convesse

Non tutte le funzioni obiettivo sono uguali. La loro forma determina quanto sono difficili da ottimizzare e se puoi fidarti della soluzione che trovi.

Funzioni obiettivo lineari

Una funzione obiettivo lineare ti dà una relazione lineare tra input e output. Quando cambi un input di una quantità fissa, l'output cambia di una quantità fissa.

Le funzioni lineari sono usate nella programmazione lineare, dove sia l'obiettivo che i vincoli sono lineari. Questo le rende la classe di funzioni obiettivo più facile da ottimizzare, poiché i solver possono trovare in modo affidabile l'ottimo globale, anche per problemi grandi.

Funzioni obiettivo non lineari

Una funzione obiettivo non lineare ha una relazione più complessa tra input e output. La maggior parte dei problemi del mondo reale - e quasi tutti i modelli di machine learning - rientra in questa categoria.

L'MSE è non lineare. L'entropia incrociata è non lineare. Le superfici di loss delle reti neurali sono non lineari. La complessità aggiuntiva consente a queste funzioni di catturare relazioni complesse nei dati, ma rende anche l'ottimizzazione più difficile.

Funzioni convesse e non convesse

Qui le cose si fanno interessanti.

Una funzione convessa ha una forma a scodella. Qualsiasi segmento di retta tracciato tra due punti sulla curva sta sopra o sulla curva. Questo garantisce che ogni minimo locale sia anche il minimo globale - cioè se il tuo ottimizzatore trova un fondo, è il fondo vero.

Una funzione non convessa ha una forma più irregolare - molte valli, altipiani e punti di sella. Gli ottimizzatori possono incastrarsi in un minimo locale, una valle che sembra il fondo ma non lo è. Le reti neurali profonde hanno superfici di loss altamente non convesse, motivo per cui addestrarle richiede un'attenta messa a punto di learning rate, ottimizzatori e inizializzazione.

I problemi convessi si risolvono esattamente, quelli non convessi si risolvono approssimativamente. La qualità della soluzione dipende dalla tua strategia di ottimizzazione.

Per chi è visivo, ecco un confronto tra funzioni obiettivo lineari, non lineari, convesse e non convesse:

Confronto tra tipi di funzione obiettivo

Confronto tra tipi di funzione obiettivo

Come si ottimizzano le funzioni obiettivo

Una volta che hai una funzione obiettivo, ti serve un modo per minimizzarla o massimizzarla. È qui che entrano in gioco gli algoritmi di ottimizzazione.

L'approccio più comune è il gradient descent. L'idea è calcolare il gradiente della funzione obiettivo rispetto ai parametri del tuo modello, poi fare un piccolo passo nella direzione che ne riduce il valore. Da lì, ripeti finché il valore non smette di migliorare.

Il gradiente è semplicemente la derivata della funzione obiettivo.

Ti dice la pendenza nella posizione attuale e in quale direzione è "in salita". Per minimizzare la funzione, ti muovi nella direzione opposta. Per massimizzarla, ti muovi con essa.

Questo processo è iterativo, cioè per arrivare alla soluzione fai una serie di piccoli aggiornamenti, ognuno dei quali avvicina i parametri all'ottimo. La dimensione di ogni passo è controllata dal learning rate. Un valore troppo grande può farti oltrepassare l'ottimo, uno troppo piccolo allunga i tempi di training.

Nella pratica, la maggior parte dei framework ML usa varianti del gradient descent più veloci e stabili della versione base:

  • Stochastic Gradient Descent (SGD) calcola il gradiente su un singolo esempio casuale per passo invece che sull'intero dataset
  • Mini-batch gradient descent usa un piccolo batch di esempi per passo - una via di mezzo tra SGD e full-batch
  • Adam adatta il learning rate per ogni parametro, il che lo rende più indulgente da regolare

La funzione obiettivo deve essere derivabile, o almeno per la maggior parte, perché i metodi basati sul gradiente funzionino. Niente derivata significa niente gradiente, quindi l'ottimizzatore non ha nulla da seguire. Questa è una cosa fondamentale da ricordare.

Esempio di funzione obiettivo

Rendiamolo concreto con un semplice problema di regressione lineare.

Supponi di prevedere i prezzi delle case in base ai metri quadrati. Hai un dataset di case con prezzi noti e vuoi adattare una retta ai dati che minimizzi l'errore di previsione. La tua funzione obiettivo è il Mean Squared Error (MSE) di cui conosci già la formula.

Gli input sono i parametri del tuo modello - la pendenza e l'intercetta della retta. L'output è un singolo numero - l'errore quadratico medio su tutte le previsioni. In questo caso, più basso è meglio.

Ecco come potrebbe apparire una possibile implementazione in Python:

import numpy as np

np.random.seed(42)

# Generate some fake housing data
square_footage = np.random.uniform(500, 3000, 100)
true_price = 150 * square_footage + 50000 + np.random.normal(0, 15000, 100)

def predict(x, slope, intercept):
    return slope * x + intercept

def mse(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)

# Try two different parameter sets
slope_a, intercept_a = 150, 50000  # good fit
slope_b, intercept_b = 80, 100000  # bad fit

pred_a = predict(square_footage, slope_a, intercept_a)
pred_b = predict(square_footage, slope_b, intercept_b)

print(f"MSE (good fit):  {mse(true_price, pred_a):,.2f}")
print(f"MSE (poor fit):  {mse(true_price, pred_b):,.2f}")

MSE: buon fit vs fit scarso

MSE: buon fit vs fit scarso

Il primo set di parametri produce un MSE molto più basso, il che significa che si adatta meglio ai dati. È esattamente ciò che l'ottimizzatore usa per decidere in quale direzione muoversi.

Per chi è visivo, considera l'immagine seguente:

Esempio MSE

Esempio MSE

Puoi vedere entrambi i fit rispetto ai dati e anche la superficie dell'MSE su un intervallo di valori della pendenza per vedere la funzione obiettivo stessa.

Il grafico a sinistra mostra come i due set di parametri si adattano ai dati. Il grafico a destra mostra la superficie dell'MSE al variare della pendenza - la funzione obiettivo come curva, con un minimo evidente che l'ottimizzatore cerca di trovare. Ogni passo del gradient descent si muove lungo questa curva verso quel minimo.

Vincoli e funzioni obiettivo

Una funzione obiettivo ti dice cosa ottimizzare. I vincoli ti dicono cosa ti è permesso fare.

Nella maggior parte dei problemi reali, non puoi semplicemente massimizzare o minimizzare a piacere. Lavori entro limiti, come un budget, una finestra temporale o una capacità fisica. Questi limiti si chiamano vincoli e definiscono l'insieme delle soluzioni valide tra cui il tuo ottimizzatore può scegliere.

Prendiamo un esempio manifatturiero.

Diciamo che vuoi massimizzare il profitto su due linee di prodotto. Senza vincoli, la risposta è produrre il più possibile. Ma hai 500 ore di tempo macchina e 1.000 unità di materia prima disponibili. Questi sono i tuoi vincoli. La funzione obiettivo è la stessa (massimizzare il profitto), ma l'ottimizzatore può cercare solo all'interno della regione consentita da quei vincoli.

Quando cambi i vincoli, cambia anche la soluzione ottimale, anche se la funzione obiettivo resta la stessa.

Questa struttura di una funzione obiettivo con un insieme di vincoli è alla base dell'ottimizzazione vincolata. È così che funziona la programmazione lineare, l'ottimizzazione di portafoglio e come vengono formulati molti problemi reali di pianificazione.

Conclusione

Ogni problema di ottimizzazione - che tu stia addestrando una rete neurale, allocando risorse o adattando un modello di regressione - si riduce a una cosa: una funzione che stai cercando di minimizzare o massimizzare.

La funzione obiettivo è quella funzione. Definisce cosa significa "meglio", guida ogni aggiornamento dei parametri e determina cosa impara realmente il tuo modello. Se la azzecchi, il tuo modello saprà risolvere il problema che hai. Ma se la sbagli, risolve un problema completamente diverso - spesso senza alcun errore evidente che ti avvisi.

Scegliere la funzione obiettivo giusta è una decisione progettuale in data science, perché plasma tutto ciò che segue. Come praticante, sentiti libero di sperimentare - ci sono molte funzioni obiettivo tra cui scegliere.

Non sai da dove iniziare? I nostri corsi Model Validation in Python e Hyperparameter Tuning in Python sono entrambi ottimi punti di partenza per data scientist principianti e intermedi.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist con base in Croazia. Top Tech Writer con oltre 700 articoli pubblicati, per più di 10 milioni di visualizzazioni. Autore del libro Machine Learning Automation with TPOT.

FAQs

Cos'è una funzione obiettivo?

Una funzione obiettivo è una funzione matematica che misura quanto è buona una soluzione. Le fornisci un insieme di input, come parametri del modello e variabili decisionali, e restituisce un singolo numero. L'obiettivo è sempre trovare gli input che rendono quel numero il più alto o il più basso possibile.

Qual è la differenza tra funzione obiettivo e loss function?

Una loss function è un tipo specifico di funzione obiettivo usata nel machine learning per misurare l'errore di previsione per un singolo esempio di training. La funzione obiettivo è il termine più ampio - può riferirsi a qualsiasi funzione che stai minimizzando o massimizzando, non solo all'errore di previsione. Nella pratica, i due termini sono spesso usati in modo intercambiabile, ma la distinzione conta quando leggi articoli di ricerca.

Dove si usano le funzioni obiettivo?

Le funzioni obiettivo compaiono in qualsiasi problema che coinvolga l'ottimizzazione - machine learning, programmazione lineare, allocazione delle risorse, finanza, logistica e altro. Nel machine learning, la funzione obiettivo definisce ciò che il modello impara durante l'addestramento. Al di fuori dell'ML, definisce l'obiettivo in qualsiasi problema di ottimizzazione vincolato o non vincolato.

Perché la scelta della funzione obiettivo è importante nel machine learning?

La funzione obiettivo determina cosa il tuo modello sta effettivamente ottimizzando durante l'addestramento. Se ne scegli una sbagliata, il tuo modello minimizzerà la cosa sbagliata - e lo farà bene, il che rende il problema più difficile da individuare. Ad esempio, usare l'MSE per un problema di classificazione non darà solo risultati scadenti, ma darà risultati scadenti con alta confidenza, che è peggio.

Una funzione obiettivo può avere più minimi?

Sì - ed è una delle sfide principali nell'addestramento di modelli di deep learning. Le funzioni obiettivo non convesse hanno molteplici minimi locali, cioè un ottimizzatore può incastrarsi in una valle che non è il minimo globale. Ecco perché l'inizializzazione dei pesi, la schedulazione del learning rate e la scelta dell'ottimizzatore contano - influenzano se alla fine il tuo ottimizzatore trova una buona soluzione.

Argomenti

Impara con DataCamp

Corso

Comprendere la Data Science

2 h
848.7K
Un'introduzione alla data science senza necessità di programmare.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra altroMostra altro