Sariți la conținutul principal

Estimarea densității cu nucleu: de la teorie la practică

Estimarea densității cu nucleu este o metodă neparametrică pentru a estima forma unei distribuții de date fără a presupune un model fix. Învață formula, alegerea lățimii de bandă și implementarea practică în Python și R.
Actualizat 16 iun. 2026  · 11 min. citire

Ai încercat vreodată să vizualizezi o distribuție, dar histograma își schimbă forma de fiecare dată când modifici dimensiunea intervalelor?

De obicei așa se întâmplă. Alegi 10 intervale și vezi o curbă lină. Apoi treci la 30 și apar mai multe vârfuri. Datele au rămas aceleași, dar un număr diferit de intervale duce la interpretări diferite. Asta e cea mai mare problemă a histogramelor: nu îți arată distribuția, ci o versiune a ei. Iar acea versiune este influențată de un parametru pe care îl setezi aleatoriu.

KDE abordează problema diferit. În loc să felieze datele în intervale, plasează o mică curbă lină pe fiecare punct de date și le însumează pe toate. Asta îți oferă o singură estimare continuă a distribuției din spate.

În acest articol, vei obține intuiția din spatele KDE, o parcurgere a formulei, o explicație despre cum lățimea de bandă controlează netezimea și exemple practice în Python și R.

Ești nou în histograme? Iată un ghid cuprinzător despre Histograme de frecvență care te va pune pe drum.

Ce este estimarea densității cu nucleu?

Estimarea densității cu nucleu este o metodă neparametrică pentru estimarea funcției de densitate a probabilității a unui set de date.

Partea neparametrică este cea care o diferențiază.

Cu metodele parametrice, presupui că datele urmează o distribuție specifică – normală, exponențială – și apoi ajustezi parametrii pentru a o potrivi. Dacă această presupunere e greșită, modelul tău e greșit. KDE nu face astfel de presupuneri. Lasă datele să vorbească de la sine și construiește o estimare a distribuției subiacente direct din observații.

Rezultatul este o curbă lină care îți arată unde este probabil să cadă valorile – și cât de probabil este asta. Vârfurile înalte ale curbei înseamnă regiuni dense. Vârfurile joase înseamnă regiuni rare.

De ce să folosești estimarea densității cu nucleu?

Histogramele sunt instrumentul implicit pentru vizualizarea distribuțiilor, dar au o problemă: forma pe care o vezi depinde de numărul de intervale pe care îl alegi. Iar acel număr îl alegi tu. Două persoane pot privi același set de date și pot trage concluzii complet diferite doar alegând un număr diferit de intervale.

Cu KDE, în loc să forțezi datele în intervale, obții o curbă lină și continuă care nu se schimbă în funcție de un parametru arbitrar setat din start.

Asta o face utilă pentru câteva lucruri:

  • Vizualizarea formei generale a unei distribuții fără biaisul dimensiunii intervalelor
  • Detectarea tiparelor precum multiplele vârfuri, asimetria sau cozile grele
  • Compararea distribuțiilor între grupuri pe același grafic
  • Obținerea unei imagini mai curate a datelor înainte de modelare

Intuiția din spatele KDE

Iei fiecare punct de date și plasezi deasupra lui o mică și lină curbă. Acea curbă se numește nucleu. Apoi, doar însumezi toate acele curbe individuale într-una singură.

Ajungi la o singură curbă lină care arată densitatea datelor tale. Unde punctele se grupează, mai multe nuclee se suprapun și se adună, așa că și curba urcă. Unde datele sunt rare, nucleele abia se suprapun și curba rămâne jos. Fiecare punct contribuie în mod egal la estimarea finală.

Imaginează-ți că ai înregistrat notele finale la examen pentru o clasă de studenți. În loc să le împarți într-o histogramă, KDE plasează o mică curbă lină pe fiecare notă. Unde notele se grupează – să zicem, în jur de 70–75 – curbele se suprapun și estimarea crește. Un singur student care a luat 95 adaugă doar o mică umflătură în coadă.

Vizualul de mai jos arată exact asta. Majoritatea studenților au punctat în jurul mediei, iar un student a punctat mult mai sus:

KDE vizualizat

KDE vizualizat

Formula estimării densității cu nucleu

Formula KDE pare mai intimidantă decât este de fapt.

Formula KDE

Iată ce înseamnă fiecare parte:

  • n este numărul de puncte de date

  • x_i sunt punctele individuale din setul tău de date

  • K este funcția nucleu – curba lină plasată pe fiecare punct

  • h este lățimea de bandă – controlează cât de lat este fiecare nucleu

  • x este punctul în care evaluezi densitatea

Pe scurt, formula spune: pentru orice punct x, uită-te cât de aproape este fiecare punct de date x_i de el, cântărește acea proximitate folosind funcția nucleu K și fă media rezultatului peste toate punctele n. Fă asta pentru fiecare x de-a lungul domeniului și obții întreaga curbă de densitate.

Lățimea de bandă h apare la numitorul fracției din interiorul lui K. Un h mai mic îngustează nucleul, astfel încât doar punctele foarte apropiate influențează estimarea. Un h mai mare răspândește influența mai larg. Mai multe despre asta mai târziu în articol.

Ce este o funcție nucleu?

Nucleul este curba lină pe care o plasezi pe fiecare punct de date. Ea definește cum se răspândește influența acelui punct către vecinii săi.

Fiecare nucleu este centrat pe un punct de date și atribuie ponderi în funcție de distanță. Punctele aproape de centru primesc pondere mare. Punctele îndepărtate primesc pondere mică sau deloc. Forma exactă a ponderării depinde de nucleul ales.

Există trei alegeri comune:

  • Gaussian: Curba în clopot. Atribuie pondere fiecărui punct din setul de date, iar influența scade odată cu distanța. Este implicitul în majoritatea bibliotecilor și funcționează bine în practică
  • Uniform: Un dreptunghi plat. Fiecare punct dintr-o distanță fixă primește pondere egală, iar orice e în afară nu primește nimic. Simplu, dar produce estimări mai puțin netede
  • Epanechnikov: O formă parabolică optimă matematic în termeni de eroare pătratică medie. Este mai eficient decât Gaussian, dar rareori face o diferență vizibilă în practică.

În majoritatea cazurilor, alegerea nucleului nu contează prea mult. Două nuclee diferite aplicate pe aceleași date, cu aceeași lățime de bandă, vor produce curbe aproape identice. Ceea ce contează mult mai mult este lățimea de bandă – și la asta ne uităm în continuare.

Rolul lățimii de bandă în KDE

Lățimea de bandă este singurul parametru care are cel mai mare impact asupra rezultatelor KDE, chiar mai mult decât nucleul ales.

Controlează cât de lat este fiecare nucleu. Un nucleu îngust adună influență doar din punctele apropiate. Un nucleu lat răspândește influența pe o plajă mult mai mare. Rezultatul este fie o curbă care urmărește îndeaproape datele, fie una care le netezește.

Lățime de bandă mică

O lățime de bandă mică face fiecare nucleu strâns și îngust. Estimarea reacționează puternic la fiecare punct de date, ceea ce înseamnă că surprinde structura reală a datelor, dar și zgomotul.

În practică, asta arată ca o curbă zimțată, cu multiple vârfuri mici. Unele dintre acele vârfuri indică grupări reale în date. Altele sunt doar artefacte ale unei neteziri prea mici. E greu să le deosebești, iar asta e problema.

KDE cu lățime de bandă mică

KDE cu lățime de bandă mică

Lățime de bandă mare

O lățime de bandă mare lărgește fiecare nucleu. Nucleele vecine se suprapun, iar curba finală iese netedă.

Dacă devine prea netedă, începi să pierzi structura reală. Două grupări distincte se pot estompa într-o singură curbă. O distribuție cu coadă grea poate părea simetrică. Reprezentarea vizuală îți poate ascunde lucruri.

KDE cu lățime de bandă mare

KDE cu lățime de bandă mare

Găsirea lățimii de bandă potrivite

Nu există o lățime de bandă corectă în mod universal. Scopul este să găsești o valoare suficient de mare ca să filtreze zgomotul, dar nu atât de mare încât să șteargă tiparele reale.

Majoritatea bibliotecilor fac asta cu metode automate de selecție a lățimii de bandă. Regula aproximativă a lui Silverman este cea mai comună. Alege o lățime de bandă pe baza dimensiunii eșantionului și a deviației standard a datelor tale. Funcționează bine pentru distribuții aproximativ normale, dar poate netezi excesiv pe cele multimodale.

Dacă nu ești sigur, încearcă câteva valori pentru lățimea de bandă și compară curbele. Diferențele îți vor spune multe despre datele tale.

KDE vs. Histogramă

Atât histogramele, cât și KDE îți arată distribuția datelor – dar o fac în moduri foarte diferite.

Histogramă

O histogramă împarte datele în intervale discrete și numără câte puncte cad în fiecare. Este rapidă, intuitivă și ușor de explicat unui public non-tehnic.

Problema este sensibilitatea la intervale. Dacă schimbi numărul de intervale, se schimbă forma. Nu există un număr obiectiv corect de intervale, ceea ce înseamnă că două persoane pot privi aceleași date și pot trage concluzii diferite doar din această alegere.

Histrogramele produc și o formă în trepte, discontinuuă. E în regulă pentru o privire rapidă, dar poate ascunde distribuția subiacentă reală.

KDE

KDE îți oferă o curbă netedă și continuă, fără intervale implicate. E mai bună la a dezvălui forma reală a unei distribuții – lucruri precum asimetria, multiple vârfuri sau cozile grele, pe care o histogramă le poate rata sau reprezenta greșit în funcție de alegerea intervalelor.

Compromisul este că KDE introduce propriul parametru – lățimea de bandă – și necesită mai multă calcul. Este și mai puțin intuitiv de explicat, deoarece axa y arată densitatea probabilității, nu numărul de apariții, ceea ce poate deruta cititorii nefamiliari cu conceptul.

Când să le folosești

Folosește o histogramă când ai nevoie de un rezumat rapid și ușor de interpretat al datelor sau când publicul tău nu este familiarizat cu estimările de densitate. Folosește KDE atunci când forma distribuției contează – de exemplu, când compari grupuri sau când încerci să detectezi multiple moduri în datele tale.

Histogramă comparată cu KDE

Histogramă comparată cu KDE

În practică, sunt adesea folosite împreună: o histogramă pentru numărări, o curbă KDE suprapusă pentru formă.

Estimarea densității cu nucleu în Python

Python îți oferă câteva moduri de a calcula și reprezenta KDE, în funcție de faptul că ai nevoie de un grafic rapid sau de mai mult control asupra estimării în sine.

Vizualizarea KDE cu seaborn

Cel mai rapid mod de a obține un grafic KDE este seaborn.kdeplot(). Atât îți trebuie:

import seaborn as sns
import numpy as np

np.random.seed(42)
scores = np.concatenate([
    np.random.normal(65, 4, 60),
    np.random.normal(80, 3, 40)
])

sns.kdeplot(scores, bw_adjust=1)

KDE cu seaborn

KDE cu seaborn

Parametrul bw_adjust scalează lățimea de bandă selectată automat. Valorile sub 1 strâng curba, valorile peste 1 o netezesc. Este un multipicator peste orice lățime de bandă alege intern seaborn, așa că nu trebuie să setezi tu o valoare brută pentru lățimea de bandă.

Axa y arată densitatea probabilității, nu numărul. Curba îți spune cât de probabilă este o valoare relativ la restul distribuției. Mai sus înseamnă că mai multe date sunt concentrate acolo.

Calcularea KDE cu scipy

Dacă ai nevoie de valorile efective ale densității – nu doar de un grafic – folosește scipy.stats.gaussian_kde. Îți oferă un obiect apelabil pe care îl poți evalua în orice punct.

from scipy.stats import gaussian_kde
import numpy as np
import matplotlib.pyplot as plt

kde = gaussian_kde(scores, bw_method="scott")
x = np.linspace(45, 100, 500)
density = kde(x)

plt.plot(x, density)

bw_method="scott" folosește regula lui Scott pentru a alege automat lățimea de bandă. Este o alegere bună implicită în majoritatea cazurilor. Poți, de asemenea, să transmiți un scalar pentru a seta manual lățimea de bandă.

KDE cu scipy și matplotlib

KDE cu scipy și matplotlib

Estimarea densității cu nucleu în R

În R, KDE este integrat în limbajul de bază. Nu ai nevoie de niciun pachet suplimentar.

Calcularea KDE cu density()

Funcția density() primește un vector numeric și returnează un obiect KDE.

set.seed(42)
scores <- c(rnorm(60, mean = 65, sd = 4),
            rnorm(40, mean = 80, sd = 3))

kde <- density(scores, bw = "SJ")

Argumentul bw controlează selecția lățimii de bandă. "SJ" folosește metoda Sheather–Jones, care gestionează mai bine distribuțiile multimodale decât valoarea implicită. Poți, de asemenea, să transmiți o valoare numerică pentru a seta manual lățimea de bandă.

Rezultatul este un obiect listă cu două componente cheie:

  • kde$x: secvența de puncte unde a fost evaluată densitatea
  • kde$y: valorile de densitate corespunzătoare

Reprezentarea curbei

Doar pasează rezultatul direct către plot().

plot(kde,
     main = "Exam Score Distribution",
     xlab = "Score",
     ylab = "Density")

KDE reprezentat în R

Pentru a suprapune KDE pe o histogramă, folosește mai întâi hist() cu freq = FALSE, apoi adaugă curba cu lines().

hist(scores, freq = FALSE, main = "Histogram + KDE", xlab = "Score")
lines(kde, col = "blue", lwd = 2)

Histogramă cu KDE în R

freq = FALSE scalează histograma la densitate, astfel încât atât barele, cât și curba să împartă aceeași axă y.

Avantajele și limitările KDE

KDE este un vizual util în mod real, dar, ca orice altceva, vine cu compromisuri pe care merită să le cunoști înainte să o folosești în locul histogramelor.

Avantaje

Cel mai mare atu este că KDE nu face presupuneri despre distribuția datelor tale. Nu trebuie să decizi dinainte dacă datele sunt normale, exponențiale sau altceva. Forma vine din datele în sine, ceea ce face KDE suficient de flexibilă pentru a gestiona distribuții multimodale și orice altceva care nu se potrivește unei forme parametrice standard.

Ieșirea este, de asemenea, o curbă lină și continuă, mai degrabă decât o aproximație în trepte. Asta face mai ușoară observarea tiparelor – lucruri precum multiplele vârfuri sau cozile lungi – pe care o histogramă ți le poate ascunde în funcție de alegerea intervalelor.

Și pentru că KDE funcționează pe date brute fără să îți ceară să potrivești întâi un model, este un prim pas bun în orice analiză exploratorie.

Limitări

Alegerea lățimii de bandă este principala slăbiciune. Dacă o alegi greșit, estimarea fie urmărește zgomotul, fie netezește peste tiparele reale din date. Metodele automate precum regula lui Silverman funcționează bine pentru date aproximativ normale, dar te pot induce în eroare cu distribuții complexe. Adesea trebuie să verifici manual câteva valori ale lățimii de bandă înainte să ai încredere în rezultat.

Performanța poate deveni o problemă la scară. KDE evaluează o funcție nucleu pentru fiecare punct de date la fiecare locație de evaluare, ceea ce înseamnă că efortul de calcul crește rapid pe măsură ce setul tău de date devine mai mare. Pentru majoritatea muncii exploratorii nu e o problemă, dar poate fi lent pe seturi cu sute de mii de puncte.

Efectele de margine sunt o problemă mai subtilă. KDE standard presupune că datele se pot extinde la infinit în ambele direcții. Când datele tale au o limită dură – cum ar fi valori care nu pot coborî sub zero – estimarea scurge masă de probabilitate dincolo de acea limită, ceea ce produce o curbă artificial de joasă lângă margine. Există versiuni de KDE corectate pentru margini, dar sunt mai rar implementate în bibliotecile standard.

Concluzie

KDE îți oferă un mod mai curat de a privi distribuția datelor decât histogramele. Nu există alegeri de intervale și nici presupuneri parametrice – doar o curbă lină care arată ce există de fapt în setul tău de date.

Lățimea de bandă este singurul parametru care contează cu adevărat. Încearcă câteva valori, compară curbele, folosește opțiunile automate și asigură-te că estimarea se potrivește cu ce știi despre datele tale înainte să tragi concluzii din ea.

Cel mai bun mod de a-ți construi intuiția pentru KDE este să o rulezi pe date reale. Alege un set de date cu care ești deja familiar, aplică KDE și compară cu o histogramă ca să vezi ce ți-a scăpat până acum.

Te interesează vizualizarea datelor? Vezi cursul nostru despre Vizualizarea datelor cu Seaborn dacă folosești Python, sau Vizualizarea datelor cu ggplot2 dacă folosești R.

Întrebări frecvente

La ce se folosește estimarea densității cu nucleu?

KDE este folosită pentru a estima distribuția de probabilitate a unui set de date fără a presupune că urmează o formă specifică precum distribuția normală sau exponențială. Este des întâlnită în analiza exploratorie a datelor, când vrei să vizualizezi cum sunt distribuite datele înainte de modelare. O vei găsi și în detecția anomaliilor, compararea distribuțiilor între grupuri și ca pas de netezire în fluxurile statistice.

În ce e diferită KDE față de o histogramă?

O histogramă împarte datele în intervale discrete și numără câte puncte cad în fiecare. Forma obținută depinde de câte intervale alegi, ceea ce o face sensibilă la un parametru arbitrar. KDE evită asta plasând o curbă lină pe fiecare punct de date și însumându-le, oferind o estimare continuă care nu se schimbă în funcție de numărul de intervale.

Ai nevoie de un set de date mare pentru a folosi KDE?

KDE funcționează și pe seturi de date mici, dar estimările sunt mai puțin fiabile când ai foarte puține puncte. Cu date limitate, observațiile individuale au o influență mare asupra curbei finale, ceea ce face mai dificil să separi structura reală de zgomot. Pe măsură ce setul de date crește, estimarea se stabilizează și reflectă mai precis distribuția reală.

Ce se întâmplă dacă alegi o lățime de bandă greșită?

O lățime de bandă prea mică produce o curbă zimțată care reacționează la fiecare punct individual, îngreunând vizualizarea formei generale a datelor. O lățime de bandă prea mare netezește excesiv estimarea și poate contopi vârfuri distincte într-o singură cocoașă, ascunzând structura reală. Majoritatea bibliotecilor oferă metode automate de selecție a lățimii de bandă, precum regula lui Silverman, ca punct de plecare, dar e o bună practică să testezi manual câteva valori înainte de a trage concluzii.

Funcționează bine KDE lângă marginile datelor tale?

KDE standard presupune că datele se pot extinde la infinit în ambele direcții, ceea ce creează probleme când variabila ta are o limită inferioară sau superioară strictă – precum vârsta, venitul sau orice număr care nu poate coborî sub zero. Aproape de acele limite, estimarea scurge masă de probabilitate în afara intervalului valid, făcând curba artificial de joasă la margini. Există metode KDE corectate pentru margini care rezolvă asta, dar nu sunt disponibile în toate bibliotecile și necesită setări suplimentare.

Subiecte

Învăță cu DataCamp

course

Support Vector Machines in R

4 oră
11K
This course will introduce the support vector machine (SVM) using an intuitive, visual approach.
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow