Makine öğrenmesi projelerinde sık karşılaşılan sorunlardan biri, sınıflar arası dengesiz dağılımdır. Örneğin dolandırıcılık tespiti, nadir hastalık teşhisi veya müşteri kaybı tahmininde hedef sınıf genellikle azınlıktadır. Standart modeller çoğunluk sınıfına aşırı uyum sağlayarak başarımı düşürür. Bu rehber, dengesiz veri setlerini yönetmek için kanıtlanmış yöntemleri pratik ipuçları ve kontrol listesi formatında sunar.
İçeriğe geçmeden önce, eksik veri yönetimini Advanced Missing Value Imputation Techniques for ML Models yazımızda ele aldığımızı hatırlatalım; veri ön işleme adımlarını tamamladıktan sonra aşağıdaki stratejilere geçebilirsiniz.
Dengesiz Veri Seti Sorununun Tanınması
Öncelikle sorunu doğru teşhis etmek gerekir. Sınıf dağılımını inceleyin. Eğer bir sınıf diğerine göre çok daha az örneğe sahipse (örneğin %90-%10 veya daha uç), dengesizlik var demektir. Ancak her dengesizlik ciddi sorun yaratmaz; modelin başarımını değerlendirirken doğruluk yerine duyarlılık, kesinlik, F1-skoru ve ROC-AUC gibi metrikleri kullanın.
Kontrol Listesi: Dengesiz Veri Setleri İçin Uygulama Adımları
Bu kontrol listesini sırayla takip ederek modellerinizin başarımını önemli ölçüde artırabilirsiniz.
1. Veri Düzeyinde Stratejiler (Örnekleme)
- Rastgele Alt Örnekleme (Undersampling): Çoğunluk sınıftan rastgele örnekler çıkararak denge sağlayın. Ancak bilgi kaybına dikkat edin; aşırı kullanım modelin genellemesini zayıflatabilir.
- Rastgele Üst Örnekleme (Oversampling): Azınlık sınıftan rastgele örnekleri kopyalayın. Bu yöntem overfitting riskini artırabilir, ama basit ve hızlıdır.
- SMOTE (Synthetic Minority Over-sampling Technique): Azınlık sınıf örnekleri arasında interpolasyon yaparak sentetik örnekler üretin. Bu, overfitting riskini azaltır ve genellikle oversampling'den daha iyi sonuç verir. Python'da
imbalanced-learnkütüphanesini kullanarak SMOTE'u kolayca uygulayabilirsiniz. - Borderline-SMOTE ve ADASYN: Sınır bölgelerine odaklanan SMOTE varyantları, ayırt edilmesi zor örnekleri yapay olarak çoğaltır.
2. Algoritma Düzeyinde Stratejiler
- Sınıf Ağırlıkları Kullanma: Çoğu makine öğrenmesi algoritması (lojistik regresyon, SVM, random forest, XGBoost) sınıf ağırlığı parametresi alır. Azınlık sınıfa daha yüksek ağırlık vererek hatasını cezalandırın. Örneğin,
class_weight='balanced'seçeneği genellikle iyi bir başlangıçtır. - Maliyet Duyarlı Öğrenme: Modelin eğitiminde yanlış sınıflandırma maliyetlerini farklılaştırarak azınlık sınıf hatasını daha ağır cezalandırın.
- One-Class Classification: Aşırı dengesiz durumlarda (örneğin %99-%1) azınlık sınıfı bir anomali olarak ele alıp One-Class SVM veya Isolation Forest gibi yöntemler kullanabilirsiniz.
3. Ensemble Yöntemleri
- Bagging (Örneğin, Balanced Random Forest): Her alt model için çoğunluk sınıfı alt örnekleyerek dengeli eğitim setleri oluşturun. Random Forest'ın
class_weightparametresiyle de benzer etki elde edilir. - Boosting (Örneğin, XGBoost veya LightGBM): Gradient boosted ağaçlarda
scale_pos_weightparametresi ile azınlık sınıf ağırlığını artırarak dengesizliği dengeleyebilirsiniz. - EasyEnsemble ve BalanceCascade: Alt örnekleme ile ensemble birleştiren özel yöntemlerdir.
4. Veri Artırma (Data Augmentation)
- Özellikle görüntü, metin veya zaman serisi verilerinde dönüşümler (rotasyon, gürültü ekleme, metin değiştirme) yaparak azınlık sınıfı sentetik olarak artırabilirsiniz.
5. Değerlendirme Metriklerini Doğru Seçme
- Doğruluk (accuracy) dengesiz veride yanıltıcıdır. Bunun yerine F1-skoru (özellikle makro veya ağırlıklı), ROC-AUC, Precision-Recall AUC, duyarlılık (recall) ve kesinlik (precision) kullanın.
- Confusion matrix inceleyerek azınlık sınıfın ne kadar doğru tahmin edildiğine bakın.
6. Cross-Validation Kullanma
- Dengesiz veride standart k-fold cross-validation azınlık sınıf örneklerini katmanlara eşit dağıtmayabilir. Stratified k-fold veya SMOTE ile birleştirilmiş cross-validation (örneğin, SMOTE'u sadece eğitim setine uygulayarak) daha sağlıklı değerlendirme sağlar.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Veri sızıntısı: SMOTE gibi sentetik örnekleme yöntemlerini cross-validation öncesi tüm veriye uygulamayın; her fold içinde eğitim verisine uygulayın, test verisine dokunmayın. Aksi halde aşırı iyimser sonuçlar alırsınız.
- Aşırı sentetik örnekleme: SMOTE'u çok fazla uygulamak gerçekçi olmayan örnekler üretebilir ve overfitting'e yol açar. Sınıf dengesini 1:1 yerine 1:2 veya 1:3 gibi makul seviyelerde hedefleyin.
- Sadece undersampling: Çoğunluk sınıfın çok fazla örneğini atmak modelin çeşitlilikten yoksun kalmasına neden olur. Mümkünse kombinasyon stratejileri (örneğin, SMOTE + undersampling) kullanın.
- Hiperparametre optimizasyonu ihmal etmek: Dengesizlik için özel hiperparametreler (sınıf ağırlıkları, SMOTE komşu sayısı) mutlaka optimizasyon sürecine dahil edilmelidir.
Örnek Uygulama Akışı
Bir dolandırıcılık tespiti problemi düşünelim. İlk adımda veri ön işleme yapın, eksik değerleri düzenleyin (gerekirse eksik değer atama tekniklerimizi inceleyin). Ardından sınıf dağılımına bakın (genelde %99-%1). SMOTE uygulayarak azınlık sınıfı %10 seviyesine çıkarın. XGBoost modelini scale_pos_weight ile eğitin (genelde %99/%1 = 99 değeri). Stratified 5-fold cross-validation ile F1-skorunu değerlendirin. Model overfitting yapıyorsa erken durdurma (early stopping) kullanın – bu konudaki Early Stopping rehberimize göz atabilirsiniz. Sonuçları precision-recall eğrisi ile görselleştirin.
Sonuç Olarak
Dengesiz veri setleri, doğru stratejilerle yönetildiğinde model başarımını ciddi şekilde etkilemez. Bu kontrol listesini projelerinizde uygulayarak azınlık sınıfı daha iyi yakalayan modeller geliştirebilirsiniz. Unutmayın, her veri seti farklıdır; birden fazla yöntemi deneyip geçerleme sonuçlarına göre en iyisini seçmek en sağlıklısıdır.
Sık Sorulan Sorular
Dengesiz veri setinde hangi metrik kullanılmalı?
Doğruluk yanıltıcı olabileceği için F1-skoru, ROC-AUC veya Precision-Recall eğrisi altında kalan alan (PR-AUC) gibi metrikler daha güvenilirdir. Özellikle azınlık sınıfın başarımını değerlendirmek için duyarlılık (recall) ve kesinlik (precision) da önemlidir.
SMOTE her durumda işe yarar mı?
SMOTE genellikle etkilidir ancak veri seti çok küçükse veya azınlık sınıf örnekleri çok gürültülüyse yapay örnekler gerçeği yansıtmayabilir. Ayrıca yüksek boyutlu verilerde SMOTE'un performansı düşebilir. Alternatif olarak ADASYN veya Borderline-SMOTE denenebilir.
Undersampling mı yoksa oversampling mi daha iyi?
Her iki yöntemin avantajları ve dezavantajları vardır. Undersampling bilgi kaybına yol açabilirken, oversampling overfitting riskini artırabilir. Genellikle SMOTE gibi sentetik oversampling yöntemleri veya bu ikisinin kombinasyonu (SMOTE + Tomek links) daha iyi sonuç verir.
Dengesiz veri için hangi algoritmalar daha başarılıdır?
Ağaç tabanlı modeller (Random Forest, XGBoost, LightGBM) sınıf ağırlıkları ve ensemble yapıları sayesinde dengesiz veriye uyum sağlayabilir. Ayrıca maliyet duyarlı lojistik regresyon ve SVM de kullanılabilir. En iyi sonuç için birden fazla algoritma denenmelidir.
Cross-validation sırasında SMOTE nasıl uygulanmalı?
SMOTE sadece eğitim setine uygulanmalı, test setine dokunulmamalıdır. Stratified k-fold cross-validation kullanarak her fold içinde ayrı ayrı SMOTE uygulamak en doğrusudur. Bu sayede test seti gerçek dağılımı yansıtır.






