Skip to content

Cum să aplici clustering pe date

DodaTech Updated 2025-01-15 2 min read

In this tutorial, you'll learn how to apply clustering algorithms like K-Means and DBSCAN to discover natural groups in your data, enabling customer segmentation, anomaly detection, and pattern discovery.

Problema

Nu ai etichete pentru datele tale și vrei să descoperi grupuri naturale — segmente de clienți, tipuri de documente, sau anomalii. Clustering-ul (învățare nesupravegheată) găsește aceste structuri fără să aibă nevoie de exemple etichetate.

Soluția Greșită

import pandas as pd
from sklearn.cluster import KMeans

df = pd.read_csv("date.csv")
X = df[["venit", "cheltuieli"]]

# K-Means fara scalare si fara alegerea nr. optim de clustere
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
df["cluster"] = kmeans.labels_

Problema: K-Means e sensibil la scală — dacă "venit" e în zeci de mii și "cheltuieli" în sute, distanțele sunt dominate de "venit". Alegerea greșită a lui k duce la grupuri artificiale.

Soluția Corectă

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import pandas as pd

df = pd.read_csv("date.csv")
X = df[["venit", "cheltuieli"]]

scaler = StandardScaler()
X_scalat = scaler.fit_transform(X)

kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
kmeans.fit(X_scalat)
df["cluster"] = kmeans.labels_

print(df.groupby("cluster").size())

Output:

cluster
0    125
1     89
2    210
3     76

Implementare Pas cu Pas

1. Găsește numărul optim de clustere cu metoda elbow

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

inertii = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X_scalat)
    inertii.append(kmeans.inertia_)

plt.plot(range(1, 11), inertii, marker="o")
plt.xlabel("Numar clustere")
plt.ylabel("Inertie")
plt.show()

2. Aplică DBSCAN pentru date cu forme neregulate

from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=0.5, min_samples=5)
clustere = dbscan.fit_predict(X_scalat)

# -1 = zgomot / outlier
print(f"Numar clustere (fara zgomot): {len(set(clustere)) - (1 if -1 in clustere else 0)}")
print(f"Puncte zgomot: {(clustere == -1).sum()}")

3. Vizualizează clusterele

df["cluster_kmeans"] = kmeans.labels_
df["cluster_dbscan"] = clustere

print(df.groupby("cluster_kmeans")[["venit", "cheltuieli"]].mean())

Sfaturi pentru Prevenire

  • Scalează întotdeauna datele înainte de clustering
  • Folosește metoda elbow sau silhouette score pentru a alege k
  • DBSCAN e bun pentru detectarea outlier-ilor și forme neregulate
  • K-Means presupune clustere sferice de dimensiuni similare
  • Rulează K-Means de mai multe ori cu n_init>=10

Greșeli Comune

  1. Nu scalezi datele — feature-urile cu valori mari domină distanțele
  2. Alegi k arbitrar — folosește elbow method sau silhouette
  3. Folosești K-Means pe date cu forme complexe — alege DBSCAN sau clustering ierarhic
  4. Ignori outlier-ii — K-Means e sensibil la valori extreme
  5. Nu înțelegi semnificația clusterelor — clustering-ul e exploratoriu, necesită analiză

Întrebări Frecvente

### Care e diferența dintre K-Means și DBSCAN?

K-Means separă datele în k clustere sferice. DBSCAN găsește clustere de forme arbitrare pe baza densității și marchează automat outlier-ii.

Cum aleg între K-Means și DBSCAN?

K-Means pentru clustere sferice și când știi numărul aproximativ. DBSCAN pentru forme neregulate, date cu zgomot, sau când nu știi numărul de clustere.

Ce fac cu clusterele după ce le-am găsit?

Analizează caracteristicile fiecărui cluster, numește-le (ex: "clienți loiali", "clienți ocazionali"), și folosește-le pentru segmentare și strategii personalizate.

Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro