Sariți la conținutul principal

Overfitting vs. Underfitting: Un ghid practic pentru diagnosticarea modelelor

Un ghid detaliat despre overfitting și underfitting în machine learning, incluzând cum să identifici fiecare mod de eșec, de ce apare și cum să îl repari prin compromisul bias-variabilitate.
Actualizat 12 iun. 2026  · 12 min. citire

Știi de ce modelul tău are acuratețe de 99% pe datele de antrenare, dar în producție nu reușește să prezică nimic corect?

Există o diferență între un model care a memorat și un model care a învățat. Generalizarea este esența învățării automate: vrei predicții care se mențin pe date pe care modelul nu le-a văzut niciodată, nu doar pe datele folosite la antrenare. Când nu e așa, aproape întotdeauna problema merge într-una din două direcții.

Aceste două direcții sunt overfitting și underfitting. Trebuie să știi cu care te confrunți înainte să poți remedia problema.

În acest articol, te voi ghida prin cum să recunoști overfitting și underfitting, de ce apar și pașii practici care te vor ajuta să găsești echilibrul.

Ce este underfitting?

Underfitting apare când modelul tău este prea simplu pentru a reprezenta ce se întâmplă de fapt în date.

Imaginează-ți că încerci să prezici prețurile locuințelor cu o singură regulă: „fiecare casă costă 300.000 $”. Acea regulă va fi greșită aproape peste tot. Nu vede cartierul, suprafața, numărul de dormitoare, garajul sau anul construcției. Modelul nu are suficientă flexibilitate pentru a urmări tiparul.

Poți depista underfitting-ul în același mod de fiecare dată. Acuratețea pe antrenare este scăzută, iar acuratețea pe test este și ea scăzută. Ambele valori sunt proaste, dar esențial este că sunt proaste împreună.

Un caz clasic este potrivirea unei linii drepte pe date care descriu o curbă. Linia taie prin mijloc și ratează forma. Oricât de multe date suplimentare ai adăuga, nu o vor salva, pentru că modelul în sine nu poate reprezenta relația.

Exemplu de underfitting

Exemplu de underfitting

Ce este overfitting?

Overfitting este problema opusă. Modelul este prea complex.

În loc să învețe tiparul general, memorează setul de antrenare. Fiecare punct de zgomot, fiecare valoare atipică ciudată, fiecare vârf și vale, fiecare coincidență din date primesc atenție ca și cum ar fi un tipar real. Modelul devine aproape perfect pentru datele pe care a fost antrenat.

Partea bună la overfitting este că îl poți depista ușor. Acuratețea pe antrenare arată grozav, dar acuratețea pe test este îngrozitoare.

Gândește-te la un elev care memorizează răspunsurile la examen mot-a-mot, dar nu învață materia de bază. Ia note bune la testele de antrenament și probabil pică la cel real.

Exemplu de overfitting

Exemplu de overfitting

Overfitting vs Underfitting: diferențe esențiale

Acum că le-ai văzut pe ambele, diferența e mai ușor de observat. Modelele care underfittează nu performează nici pe datele pe care le-au văzut. Modelele care overfittează nu performează pe date pe care nu le-au văzut.

Cele două arată diferit în timpul antrenării:

  • Underfitting se vede ca o performanță plată, mediocră peste tot – modelul nu învață prea mult din nimic
  • Overfitting apare ca un decalaj, unde scorurile pe antrenare tot cresc, în timp ce scorurile pe test stagnează sau se înrăutățesc în timp

Și cauzele lor se oglindesc. Underfitting vine din a face prea puțin: modele simple și caracteristici lipsă. Overfitting vine din a face prea mult: modele complexe și prea multe caracteristici.

Iată un rezumat al celor două:

Underfitting comparat cu overfitting

Underfitting comparat cu overfitting

Cum să identifici overfitting și underfitting

Să știi cum arată underfitting și overfitting în teorie e una, dar să le prinzi în propriile modele e altceva.

Cel mai simplu lucru aici este să compari eroarea pe antrenare cu eroarea pe test și să te uiți la curbele de învățare.

Eroare pe antrenare vs eroare pe test

Verificarea cea mai rapidă este să împarți datele într-un set de antrenare și unul de test, să antrenezi modelul și să privești eroarea pe fiecare.

Pentru underfitting, ambele erori vor fi mari. Modelul nu a învățat bine datele de antrenare și nu va performa mai bine pe date pe care nu le-a văzut. Ai același rezultat slab pe ambele părți.

Pentru overfitting, eroarea pe antrenare va fi foarte mică, în timp ce eroarea pe test rămâne mare. Modelul a memorat datele de antrenare, dar acea „cunoaștere” nu se transferă.

Vizualizare eroare antrenare vs test

Vizualizare eroare antrenare vs test

Vrei să analizezi decalajul dintre aceste două valori. Un decalaj mic cu erori mari indică underfitting. Un decalaj mare, cu eroare mică pe antrenare și mare pe test, indică overfitting. Un decalaj mic cu erori mici pe ambele este obiectivul, deoarece înseamnă că modelul a învățat reprezentarea reală a datelor.

Curbe de învățare

Curbele de învățare trasează erorile de antrenare și validare în funcție de dimensiunea setului de antrenare sau de iterațiile de antrenare. Ele arată ce se întâmplă pe măsură ce modelul învață.

Într-un model underfit, ambele curbe se aplatizează rapid la o eroare mare. Adăugarea mai multor date nu ajută, pentru că modelul nu poate reprezenta tiparul din start. Ambele curbe rămân sus.

Curbe pentru model underfit

Curbe pentru model underfit

Într-un model overfit, curba de antrenare scade aproape de zero, în timp ce curba de validare rămâne sus. Distanța dintre ele se lărgește pe măsură ce antrenarea continuă. Acest decalaj în creștere este cum arată overfitting-ul pe un grafic.

Curbe pentru model overfit

Curbe pentru model overfit

Un model sănătos arată ambele curbe coborând și întâlnindu-se la o eroare mică, cu un decalaj redus între ele.

De ce apar overfitting și underfitting

Odată ce știi cum să le depistezi, următoarea întrebare este de ce apar. Ambele provin dintr-o nepotrivire între model și problemă, dar în direcții opuse.

Cauze ale underfitting-ului

Underfitting-ul se leagă aproape întotdeauna de unul dintre trei lucruri.

  • Modelul este prea simplu: Un model liniar nu poate reprezenta o relație curbată. Modelul nu are capacitatea de care problema are nevoie de fapt.
  • Caracteristicile sunt insuficiente: Chiar și un model capabil va face underfitting dacă îi dai intrări greșite. Prezicerea prețurilor caselor doar din codul poștal nu are sens și ratează suprafața, dormitoarele, starea, vechimea și dimensiunea terenului. Modelul nu are nimic util cu care să lucreze.
  • Antrenare insuficientă: Modelul nu a avut suficientă adâncime, suficiente iterații, suficiente epoci sau ajustări ale ratei de învățare pentru a ajunge la o soluție bună. Antrenarea pur și simplu s-a oprit prea devreme.

Cauze ale overfitting-ului

Overfitting apare când oferi modelului mai multă libertate decât au nevoie datele.

  • Modelul este prea complex: O rețea neuronală profundă cu milioane de parametri, antrenată pe un set minuscul, are suficient spațiu pentru a memora. Capacitatea depășește nevoile problemei.
  • Prea multe caracteristici: Când ai mai multe caracteristici decât tipare semnificative în date, modelul învață corelații care există întâmplător în eșantionul de antrenare, dar nu se generalizează.
  • Setul de date este prea mic: Cu date de antrenare limitate, chiar și o complexitate moderată a modelului poate memora întreg setul. Nu sunt suficiente exemple din care modelul să învețe să generalizeze.
  • Antrenare prea îndelungată: Modelul a continuat să ajusteze greutățile după ce învățase deja tiparul real și a început să potrivească zgomotul. Din acel punct, mai multă antrenare înrăutățește lucrurile.

Compromisul bias-variabilitate

Compromisul bias-variabilitate explică de ce performanța modelului ține de găsirea punctului ideal în care modelul generalizează bine la date nevăzute, fără a simplifica excesiv problema sau a se potrivi prea mult pe setul de antrenare.

Bias ridicat

Biasul este eroarea care provine din presupunerile modelului despre date. Un model cu bias ridicat are presupuneri puternice, simpliste. Nu poate reprezenta complexitatea reală a ceea ce se întâmplă în date.

Asta este exact ce înseamnă underfitting. Modelul este prea rigid pentru a se potrivi tiparelor, astfel că produce predicții greșite, indiferent cât de multe date îi dai.

Dacă antrenezi un model cu bias ridicat de 100 de ori pe eșantioane diferite, toate cele 100 de versiuni vor face greșeli similare. Predicțiile lor se grupează în jurul răspunsului greșit.

Variabilitate ridicată

Variabilitatea (variance) este eroarea care provine din faptul că modelul este prea sensibil la datele specifice pe care a fost antrenat. Un model cu variabilitate ridicată preia fiecare mic tipar, de obicei zgomotul.

Asta este overfitting. Modelul se potrivește foarte strâns pe setul de antrenare, dar mici schimbări în datele de antrenare duc la predicții foarte diferite.

Dacă antrenezi un model cu variabilitate ridicată de 100 de ori pe eșantioane diferite, vei obține 100 de modele foarte diferite. Predicțiile lor sunt peste tot, chiar și pentru aceeași intrare.

Compromisul

Nu poți elimina complet nici biasul, nici variabilitatea; poți doar să le echilibrezi.

Reduci biasul făcând modelul mai complex, iar variabilitatea crește. Reduci variabilitatea simplificând modelul, iar biasul crește. Scopul este să găsești mijlocul, unde eroarea totală este la cel mai mic nivel.

Exemplu de compromis bias-variabilitate

Exemplu de compromis bias-variabilitate

Cum să repari underfitting

După ce ai diagnosticat underfitting-ul, ai câteva modalități de a-l repara. Toate îi oferă modelului mai multă capacitate pentru a reprezenta tiparele din datele tale.

  • Crește complexitatea modelului: Treci la un model mai flexibil. De la regresie liniară la regresie polinomială sau de la un arbore superficial la unul mai adânc.
  • Adaugă mai multe caracteristici: adaugă intrări noi care chiar au valoare. Creează termeni de interacțiune, caracteristici polinomiale sau caracteristici specifice domeniului la care modelul nu avea acces.
  • Antrenează mai mult timp: S-ar putea ca modelul să nu fi avut timp suficient să convergă. Oferă mai multe epoci sau un alt program de învățare a ratei.
  • Reduci regularizarea: Regularizarea menține un model simplu, ceea ce este opusul a ceea ce are nevoie underfitting-ul. Scade intensitatea regularizării sau elimin-o complet, pentru a oferi modelului mai multă libertate.

Câteva caracteristici bune au adesea mai mult impact decât schimbarea arhitecturii. Începe de acolo înainte să modifici modelul propriu-zis.

Cum să repari overfitting

Remedierea overfitting-ului presupune abordarea opusă. Vrei să constrângi modelul, astfel încât să nu mai memoreze datele de antrenare.

  • Colectează mai multe date: Un set de date mai mare face mult mai dificilă memorarea pentru model. Mai multe exemple îl forțează să găsească tipare care se mențin pe întregul set, nu doar pe câteva rânduri.
  • Aplică regularizare: Regularizarea L1 și L2 adaugă o penalizare pentru greutăți mari, ceea ce împiedică modelul să se sprijine prea tare pe o singură caracteristică. Este unul dintre cele mai fiabile remedii.
  • Reduce complexitatea modelului: Dacă modelul este prea mare pentru date, micșorează-l. Folosește mai puțini parametri, arbori mai superficiali sau rețele mai mici.
  • Folosește cross-validation: Cross-validation îți oferă o estimare mai onestă a modului în care va performa modelul pe date nevăzute. Îți oferă mai multe împărțiri antrenare-test dintr-un singur set de date.
  • Aplică dropout pentru rețele neuronale: Dropout dezactivează aleatoriu un procent din neuroni în timpul antrenării. Aceasta forțează rețeaua să învețe reprezentări redundante, reducând dependența de orice neuron individual.
  • Oprește antrenarea devreme: Monitorizează eroarea de validare și oprește antrenarea când începe să crească, chiar dacă eroarea pe antrenare încă scade. Aceasta se numește early stopping și este una dintre cele mai ușor de implementat schimbări.

Regularizarea și oprirea timpurie sunt de obicei primele lucruri de încercat. Nu costă nimic și aproape întotdeauna ajută.

Overfitting și underfitting în diferite modele

Familii diferite de modele manifestă underfitting și overfitting în felul lor. Iată cum trei tipuri comune pot eșua în ambele direcții.

Modele liniare

  • Underfit: Modelele liniare presupun o relație de tip linie dreaptă. Când tiparul real este curbat, modelul nu îl poate urmări, indiferent câte date îi dai.
  • Overfit: Când adaugi suficienți termeni polinomiali sau de interacțiune, chiar și regresia liniară poate memora zgomotul. Metodele de regularizare precum Ridge și Lasso există în mare parte pentru a gestiona asta.

Arbori de decizie

  • Underfit: Un arbore superficial poate face doar câteva ramificări. Cu două sau trei decizii, nu poate reprezenta tipare care necesită mai multă finețe.
  • Overfit: Arborii adânci tind să facă overfitting. Un arbore care tot împarte până când fiecare frunză conține un singur exemplu de antrenare va obține acuratețe perfectă pe antrenare și slabă pe test. De aceea există parametri precum max_depth, min_samples_split și pruning.

Rețele neuronale

  • Underfit: Rețelele prea mici pentru problemă vor face underfitting. La fel și rețelele unde antrenarea se oprește prea devreme sau unde optimizatorul se blochează într-o soluție suboptimală.
  • Overfit: Este mai comun în deep learning. O rețea cu milioane de parametri poate memora chiar și seturi de date mari dacă are suficiente epoci. Dropout, weight decay, augmentarea datelor și oprirea timpurie există pentru a preveni asta.

Exemple suplimentare de overfitting vs underfitting

Îți voi prezenta acum două exemple clasice, cu cod, care vor face aceste tipare ușor de observat.

Regresie polinomială

Un semnal sinusoidal cu zgomot este un caz de test bun. Când potrivești polinoame de grade diferite, poți vedea cum se schimbă comportamentul modelului.

import numpy as np

# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)

# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]

for degree in degrees:
    coefs = np.polyfit(X, y, deg=degree)
    y_pred = np.polyval(coefs, X_smooth)

Exemplu de regresie polinomială

Exemplu de regresie polinomială

Gradul 1 este o linie dreaptă care face underfitting. Nu poate urmări curba deloc. Gradul 3 reprezintă forma reală. Absoarbe ceva zgomot, dar rămâne aproape de adevăr. Gradul 15 face overfitting, ondulându-se prin fiecare punct de antrenare și producând oscilații mari între ele.

Arbori de decizie cu adâncimi variabile

Aceeași poveste apare și la arborii de decizie. Poți antrena arbori cu adâncimi crescătoare pe aceleași date și măsura eroarea atât pe seturile de antrenare, cât și pe cele de test.

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)

depths = range(1, 21)
train_errors = []
test_errors = []

for depth in depths:
    tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
    tree.fit(X_train, y_train)
    train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
    test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Exemplu de arbore de decizie

Exemplu de arbore de decizie

Eroarea pe antrenare se reduce pe măsură ce arborele devine mai adânc, apropiindu-se în final de zero când fiecare frunză conține doar un singur punct de antrenare. Eroarea pe test scade inițial, pe măsură ce arborele captează relațiile reale din date, apoi crește la loc când ramificările mai adânci încep să potrivească zgomotul. Minimul se află la adâncimea care echilibrează cele două.

Greșeli comune când diagnostichezi performanța modelului

Chiar dacă alegi metrica potrivită, e ușor să tragi concluzii greșite. Iată ce nu ar trebui să faci atunci când evaluezi performanța modelului:

  • Evaluarea doar a acurateții pe antrenare: Acuratețea pe antrenare îți spune cât de bine se potrivește modelul pe date pe care le-a văzut deja. Nu îți spune nimic despre cum va performa pe intrări noi. Măsoară mereu pe un set separat înainte de a trage concluzii.
  • Ignorarea datelor de validare: Datele de validare sunt cele pe care le folosești pentru a ajusta alegeri precum arhitectura, hiperparametrii și punctul de oprire. Modelul va face overfitting atât pe setul de antrenare, cât și pe setul de test pe care l-ai folosit prea des.
  • Presupunerea că mai multă complexitate e întotdeauna mai bună: Un model mai mare nu înseamnă automat un model mai capabil. Dacă datele tale sunt puține sau relațiile din date sunt simple, complexitatea va scădea doar performanța. Începe simplu și adaugă capacitate doar când diagnosticele o cer.
  • Confuzia dintre zgomot și semnal: Nu fiecare tipar din datele de antrenare merită învățat. Fluctuațiile aleatorii, părtinirile de eșantionare, valorile atipice și artefactele de colectare pot părea semnificative pentru un model flexibil. Dacă nu poți explica de ce ar trebui să existe o relație, trateaz-o cu prudență.

Ar trebui să verifici mereu toate cele patru înainte de a te opri la un model. Majoritatea eșecurilor în producție sunt legate de una (sau mai multe) dintre ele.

Concluzie

Underfitting și overfitting sunt cele două moduri în care un model eșuează să generalizeze. Unul rămâne prea simplu pentru a învăța tiparul. Celălalt încearcă să învețe fiecare punct din setul tău de date.

Obiectivul real al antrenării este să ajungi între ele, unde biasul și variabilitatea sunt echilibrate, iar eroarea totală este la minim.

Performanța pe validare este metrica ce îți spune unde ești. Ține evidența ei în timpul antrenării și lasă diferența dintre eroarea pe antrenare și cea pe validare să îți ghideze deciziile. Dacă eroarea pe validare nu mai scade, în timp ce eroarea pe antrenare continuă să scadă, ai depășit punctul optim. Dacă ambele rămân mari, încă nu ai ajuns acolo.

Vrei să înveți concepte de știința datelor mai avansate și să fii pregătit pentru un job în 2026? Înscrie-te în parcursul Machine Learning Engineer pentru a trece de la bazele ML la MLOps.

Întrebări frecvente

Care este diferența dintre overfitting și underfitting?

Underfitting apare când un model este prea simplu pentru a reprezenta tiparele din datele tale, astfel că performează slab atât pe seturile de antrenare, cât și pe cele de test. Overfitting este opusul: modelul învață prea bine datele de antrenare, inclusiv zgomotul, astfel că performează grozav pe antrenare, dar eșuează pe date noi. Ambele produc predicții slabe, dar din motive diferite.

Cum îmi dau seama dacă modelul meu face overfitting sau underfitting?

Compară eroarea pe antrenare cu eroarea pe test. Dacă ambele sunt mari, ai underfitting. Dacă eroarea pe antrenare este foarte mică, dar eroarea pe test este mare, ai overfitting. Curbele de învățare ajută și ele, deoarece erorile de antrenare și validare diverg într-un model overfit și rămân plate la o eroare mare într-un model underfit.

Ce este compromisul bias-variabilitate?

Biasul este eroarea unui model prea simplu, iar variabilitatea este eroarea unui model prea sensibil la datele de antrenare. Reducerea uneia o crește de obicei pe cealaltă, astfel că obiectivul este să găsești echilibrul unde eroarea totală este cea mai mică. Modelele cu cel mai bun echilibru generalizează cel mai bine pe date noi.

Colectarea mai multor date rezolvă overfitting-ul?

De obicei ajută, dar nu este o soluție garantată. Mai multe date fac mai dificilă memorarea pentru un model, așa că trebuie să găsească tipare care se mențin pe întregul set. Dar dacă modelul tău este mult prea complex pentru problemă sau caracteristicile tale conțin mai ales zgomot, mai multe date nu vor rezolva complet. Regularizarea și modele mai simple funcționează adesea mai bine în aceste cazuri.

Pot folosi oprirea timpurie (early stopping) pentru a preveni overfitting-ul în rețele neuronale?

Da, și este unul dintre cele mai ușoare remedii de implementat. Monitorizează eroarea de validare în timpul antrenării și oprește când se plafonează sau începe să crească, chiar dacă eroarea pe antrenare continuă să scadă. Astfel prinzi momentul în care modelul a învățat tiparul real și începe să potrivească zgomotul. Majoritatea cadrelor de deep learning au callback-uri pentru oprire timpurie integrate.

Subiecte

Învăță cu DataCamp

course

Feature Engineering for Machine Learning in Python

4 oră
38.8K
Create new features to improve the performance of your Machine Learning models.
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow