Kategorik değişkenler makine öğrenmesi modellerinde sıkça karşılaşılan bir veri türüdür. Ancak çoğu algoritma yalnızca sayısal girdilerle çalıştığı için bu değişkenleri uygun şekilde kodlamak gerekir. En yaygın yöntemler one-hot encoding, label encoding ve target encoding‘dir. Peki hangi yöntemi ne zaman kullanmalısınız? Bu yazıda her bir yöntemin çalışma prensiplerini, avantajlarını ve dezavantajlarını karşılaştırarak doğru seçimi yapmanıza yardımcı olacağız.
One-Hot Encoding Nedir ve Ne Zaman Kullanılır?
One-hot encoding, kategorik değişkenin her bir benzersiz değeri için ayrı bir ikili (binary) sütun oluşturur. Örneğin, "renk" değişkeni kırmızı, mavi, yeşil değerlerine sahipse, üç yeni sütun (renk_kırmızı, renk_mavi, renk_yeşil) oluşturulur ve her satırda ilgili sütuna 1, diğerlerine 0 yazılır.
Avantajları:
- Kategoriler arasında herhangi bir sıralama veya büyüklük ilişkisi varsaymaz, bu nedenle nominal (sırasız) kategoriler için idealdir.
- Modelin kategoriler arasındaki farkı doğrudan öğrenmesine olanak tanır.
- Lineer modeller, sinir ağları ve uzaklık tabanlı algoritmalar (KNN, SVM) için uygundur.
Dezavantajları:
- Yüksek kardinalite (çok sayıda benzersiz kategori) durumunda boyutluluk sorununa yol açar. Örneğin, 1000 farklı şehir değeri 1000 yeni sütun oluşturur.
- Hafıza ve işlem süresi açısından maliyetlidir.
- Karar ağacı tabanlı modellerde (Random Forest, XGBoost) one-hot encoding bazen performansı düşürebilir çünkü ağaçlar seyrek (sparse) verilerle başa çıkmakta zorlanabilir.
Label Encoding (Ordinal Encoding) Ne Zaman Tercih Edilmeli?
Label encoding, her benzersiz kategorik değere bir tamsayı atar (örneğin, kırmızı=0, mavi=1, yeşil=2). Ancak bu yöntem kategoriler arasında yapay bir sıralama varsayar. Bu nedenle yalnızca sıralı (ordinal) kategoriler için uygundur.
Avantajları:
- Uygulaması basit ve hızlıdır.
- Yeni sütun eklemediği için boyutluluk sorunu yaratmaz.
- Karar ağacı tabanlı modeller sıralamayı faydalı bir şekilde kullanabilir.
Dezavantajları:
- Nominal (sırasız) kategorilerde yanlış sıralama varsayımı modelin performansını olumsuz etkileyebilir.
- Lineer modellerde (regresyon, lojistik regresyon) bu kodlama anlamlı değildir çünkü model sayısal değerler arasında doğrusal bir ilişki arar.
Target Encoding (Mean Encoding) Nasıl Çalışır ve Riskleri Nelerdir?
Target encoding, her kategorik değeri, hedef değişkenin (target) o kategorideki ortalama değeriyle (veya başka bir istatistikle) değiştirir. Örneğin, bir müşteri segmentinin ortalama satın alma tutarı ile kodlanması gibi. Bu yöntem özellikle yüksek kardinaliteli kategoriler için etkilidir.
Avantajları:
- Boyutluluk sorununu ortadan kaldırır, tek bir sayısal sütun üretir.
- Hedef değişkenle doğrudan ilişki kurar, modele güçlü bir sinyal verir.
Dezavantajları ve Riskleri:
- Aşırı öğrenme (overfitting) riski yüksektir, özellikle az sayıda örnek içeren kategorilerde. Model, eğitim verisindeki ortalamalara ezber yapabilir.
- Düzenli hale getirme (regularization) teknikleri (örneğin, smoothing) kullanılmazsa genelleme başarısı düşer.
- İşlem sırasında hedef değişkene bağımlı olduğu için veri sızıntısına (data leakage) yol açabilir; bu nedenle yalnızca eğitim verisi üzerinden hesaplanmalı ve validasyon/test verilerine ayrı ayrı uygulanmalıdır.
Hangi Yöntemi Seçmelisiniz? Karşılaştırma Tablosu
Aşağıdaki tablo, her yöntemin temel özelliklerini özetlemektedir:
| Yöntem | Açıklama | Avantajlar | Dezavantajlar | Kullanım Senaryosu |
|---|---|---|---|---|
| One-Hot Encoding | Her kategori için ikili sütun | Sıra varsaymaz, lineer modeller için uygun | Boyutluluk, seyrek matris, ağaç modellerde verimsiz | Nominal kategoriler, düşük kardinalite |
| Label Encoding | Her kategoriye tamsayı atama | Basit, boyut artmaz, ağaç modeller için uygun | Sıralama varsayar, lineer modellerde anlamsız | Ordinal kategoriler |
| Target Encoding | Hedef değişken ortalaması ile kodlama | Boyut artmaz, güçlü sinyal, yüksek kardinalite için ideal | Aşırı öğrenme riski, veri sızıntısı, düzenleme gerektirir | Yüksek kardinaliteli nominal kategoriler, güçlü düzenleme ile kullanılmalı |
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
Kategorik kodlama yaparken aşağıdaki hatalardan kaçının:
- Yanlış yöntemi seçmek: Nominal verilere label encoding uygulamak yanlış sıralama varsayımına yol açar. Örneğin, ülkeleri sayısal değerlerle kodlamak modeli yanıltabilir.
- Veri sızıntısı: Target encoding‘i eğitim ve test verilerine ayrı ayrı uygulamak yerine tüm veri üzerinden hesaplamak, geçersiz yüksek performans almanıza neden olur. Her zaman eğitim verisini kullanın ve test verisine eğitim setinden türetilmiş kodları uygulayın.
- Düzenleme eksikliği: Target encoding‘de smoothing veya k-fold gibi düzenleme yöntemleri kullanılmazsa model aşırı öğrenebilir.
- Boyutluluğu ihmal etmek: One-hot encoding‘de çok fazla kategori varsa, modelin eğitimi yavaşlayabilir ve aşırı öğrenmeye yatkınlık artar. Bu durumda hedef kodlama veya boyut indirgeme teknikleri düşünülmelidir.
İç link olarak, XGBoost, LightGBM ve CatBoost hiperparametre ayarlama yazımızda bu modellerin kategorik değişkenleri otomatik olarak işleme yeteneklerini inceleyebilirsiniz. Ayrıca dengesiz sınıflandırma problemlerinde target encoding kullanıyorsanız Focal Loss‘un kodlama sonrası model performansına etkisini değerlendirebilirsiniz. Yüksek boyutlu encoding sonuçlarını görselleştirmek için t-SNE ve UMAP yazımız faydalı olacaktır.
Doğru kodlama yöntemini seçmek, model başarınızı doğrudan etkiler. Kategorik değişkenlerinizin türünü (nominal/ordinal), kardinalitesini ve kullandığınız algoritmayı göz önünde bulundurarak yukarıdaki rehberi uygulayın. Gerektiğinde birden fazla yöntemi deneyerek validasyon setinde performansı karşılaştırın.
Sık Sorulan Sorular
One-hot encoding neden karar ağaçları için önerilmez?
Karar ağaçları seyrek (sparse) verilerle başa çıkmakta zorlanabilir ve one-hot encoding çok sayıda sütun oluşturarak ağacın derinliğini artırabilir. Ayrıca ağaçlar, kategoriler arasındaki lojik ilişkileri öğrenmekte zorlanır.
Target encoding veri sızıntısına nasıl yol açar?
Target encoding hedef değişkeni kullandığı için eğitim ve test verileri birlikte kodlanırsa model test verisini görmüş olur. Bu nedenle kodlama yalnızca eğitim verisi üzerinden yapılmalı, test verisine eğitim setindeki istatistikler uygulanmalıdır.
Yüksek kardinaliteli kategorilerde hangi yöntem daha iyidir?
Yüksek kardinalite durumunda one-hot encoding çok fazla sütun oluşturur. Target encoding (düzenleme ile birlikte) veya daha gelişmiş yöntemler (örneğin, CatBoost gibi algoritmaların otomatik kodlaması) tercih edilmelidir.
Label encoding ne zaman kullanılmamalıdır?
Label encoding, sırasız (nominal) kategoriler için kullanılmamalıdır çünkü yapay bir sıralama varsayar ve modeli yanlış yönlendirir. Ayrıca lineer modellerde anlamsızdır.






