Weak Supervision ve Snorkel: Etiket Pahalı Olduğunda Programmatic Labeling
Manuel etiket pahalı olduğunda 'programmatic labeling': Snorkel framework, labeling functions, label model (generative), Cleanlab ile etiket düzeltme, weak supervision'ın güçlü ve zayıf yönleri.
Şükrü Yusuf KAYA
24 dakikalık okuma
Orta🏷️ Etiket olmadan etiket üretmek
Modül 1.3'te gördük: anomaly detection'da etiket pahalı. Bir AML SAR raporu 200-500 TL, bir bearing arızası 1.000-50.000 TL. Peki manuel etiket olmadan eğitilebilir model üretmenin yolu var mı? Evet — weak supervision. Domain expert'in 'kuralları' programmatic olarak etikete dönüştürülür. Bu derste Snorkel framework'ünü ve Cleanlab ile etiket kalitesi iyileştirmesini öğreneceğiz.
Weak Supervision Nedir?#
Geleneksel supervised: İnsan her örneği etiketler → tam, kaliteli, pahalı etiket.
Weak supervision: Aşağıdaki kaynaklardan etiket üretilir:
- Heuristics / kurallar (örn. "tutar > 10.000 TL ise olası anomali")
- Knowledge base (Wikidata, sektörel ontoloji)
- Mevcut zayıf modeller (örn. eski rule-based sistem)
- Crowd-sourcing
- Distant supervision (proxy etiket — "bu kart bloklandı")
- Pattern matching (regex'ler)
Bu kaynaklar gürültülü ve çakışan etiketler üretir. Snorkel bu çelişkileri çözer ve "muhtemel doğru" etiketler verir.
Snorkel Pipeline Anatomi#
Snorkel (Stanford, 2017) weak supervision için flagship framework:
[Unlabeled data] ↓ [Labeling Functions (LFs)] ├─ LF1: amount > 10000 → 1, else ABSTAIN ├─ LF2: card_age < 7d AND amount > 1000 → 1, else ABSTAIN ├─ LF3: country != home_country → 1, else 0 ├─ ... └─ LFn ↓ (her LF her örnek için 1, 0 veya ABSTAIN üretir) [Label Matrix L (N × K)] K = LF sayısı ↓ [Label Model] — LF'lerin uyum/çelişkilerini öğrenip ağırlıkları belirler ↓ [Probabilistic Labels Ỹ] ↓ [Train standard ML model on (X, Ỹ)]
Labeling Function (LF) Anatomi#
Bir LF iki şey döner: bir karar (POSITIVE, NEGATIVE) veya ABSTAIN (çekimser).
from snorkel.labeling import labeling_function POSITIVE = 1 NEGATIVE = 0 ABSTAIN = -1 @labeling_function() def lf_high_amount(x): """Yüksek tutar.""" return POSITIVE if x.amount > 10000 else ABSTAIN @labeling_function() def lf_velocity(x): """Yüksek velocity (1 saatte 5+ işlem).""" return POSITIVE if x.tx_count_1h > 5 else ABSTAIN @labeling_function() def lf_new_card_big_purchase(x): """Yeni kart + büyük alışveriş.""" if x.card_age_days < 7 and x.amount > 1000: return POSITIVE return ABSTAIN @labeling_function() def lf_known_safe(x): """Müşteri uzun süredir aynı merchant'a ödeme yapıyor.""" if x.merchant_history_months > 12 and x.amount < 5000: return NEGATIVE return ABSTAIN
Önemli not: Bir LF tüm örneklere karar vermek zorunda değil. Abstain (cevap vermeme) sıklıkla en doğru hareket.
Label Model: Çelişkileri Çöz#
Diyelim 10 LF'in var ve bir örnek için 6'sı POSITIVE, 3'ü NEGATIVE, 1'i
ABSTAIN. Bu örneğin gerçek etiketi ne?
Naif yaklaşım — Majority Vote: çoğunluk POSITIVE = sonuç POSITIVE.
Sorun: LF'ler eşit güvenilir değil. Bazıları %95 doğruluk, bazıları %60.
Ayrıca LF'ler korelasyonlu olabilir (aynı bilgiyi farklı şekilde
kullanırlar).
Snorkel'in label model'i:
- Tüm LF'lerin doğruluğunu etiketsiz veriden tahmin eder (generative)
- Korelasyonları çıkarır
- Her örnek için olasılıksal etiket verir: P(y=1|LF'ler)
python
from snorkel.labeling import PandasLFApplier, LFAnalysisfrom snorkel.labeling.model import LabelModelimport pandas as pd # 1. Veriyi yükledf_unlabeled = pd.read_csv("transactions.csv") # 2. LF'leri uygulalfs = [lf_high_amount, lf_velocity, lf_new_card_big_purchase, lf_known_safe]applier = PandasLFApplier(lfs=lfs)L_matrix = applier.apply(df=df_unlabeled) # 3. LF analizi (kapsam, çakışma, çelişki)print(LFAnalysis(L=L_matrix, lfs=lfs).lf_summary()) # 4. Label modellabel_model = LabelModel(cardinality=2, verbose=True)label_model.fit(L_train=L_matrix, n_epochs=500, log_freq=100, seed=42) # 5. Olasılıksal etiketlerprob_labels = label_model.predict_proba(L=L_matrix)df_unlabeled['weak_label'] = prob_labels[:, 1] > 0.5df_unlabeled['confidence'] = prob_labels[:, 1] # 6. Düşük güvenli (belirsiz) örnekleri atdf_high_conf = df_unlabeled[df_unlabeled['confidence'] > 0.8]print(f"Güvenilir etiket: {len(df_high_conf)}/{len(df_unlabeled)}")Snorkel pipeline — LF + label model
LF Kalitesi: Hangi Metrikler Önemli?#
Snorkel 5 ana metrik verir:
LFAnalysis| Metrik | Anlamı | İdeal |
|---|---|---|
| Polarity | LF hangi sınıfı etiketler | İstenen sınıfı işaretlemeli |
| Coverage | Veri'nin yüzdesinde "abstain dışı" | %5-30 (sıklıkla) |
| Overlap | Başka LF ile aynı örneğe karar verme | Düşük-orta |
| Conflict | Başka LF ile farklı karar verme | Düşük (ama 0 olmamalı) |
| Empirical Acc. | Bir validation set varsa, gerçek doğruluk | %70+ ideal |
LF Tasarım Kuralları#
- Tek bir hipotezi test et — bir LF birden çok sezgiyi karıştırmasın
- Abstain'i çekinmeden kullan — emin değilsen bilgi verme
- Yüksek precision, düşük recall istenir (bir LF için)
- Birden çok zayıf LF > tek mükemmel LF (Snorkel'in kazancı)
- Domain expert ile birlikte yaz — kuralları kim sahiplenecek?
Cleanlab: Etiket Hatalarını Bulma#
Snorkel'in kuzeni: Cleanlab. Mevcut etiketli verideki yanlış etiketleri
bulmak için kullanılır. AD için çok değerli — çünkü etiket gürültüsü modelin
PR-AUC'unu doğrudan baltalar.
Cleanlab nasıl çalışır?#
- Veri üzerinde bir baseline model (örn. cross-validated XGBoost) eğit
- Her örneğin out-of-fold prediction olasılığını hesapla
- "Modelin emin olduğu ama etiket farklı" örnekleri olası yanlış olarak işaretle
from cleanlab.filter import find_label_issues from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_predict # Cross-validated probabilities clf = RandomForestClassifier(n_estimators=200, random_state=42) pred_probs = cross_val_predict(clf, X, y, cv=5, method='predict_proba') # Şüpheli etiketler issues = find_label_issues( labels=y, pred_probs=pred_probs, return_indices_ranked_by='self_confidence', ) print(f"Şüpheli etiket sayısı: {len(issues)}") print(f"İlk 10 şüpheli indis: {issues[:10]}")
Bu indisleri manuel review'a gönder veya drop et.
Cleanlab + Snorkel Kombinasyonu#
1. Snorkel ile weak labels üret (Ỹ) 2. Bir model eğit (X, Ỹ) 3. Cleanlab ile gürültülü Ỹ noktalarını bul 4. Bu noktaları drop et veya analist'e gönder 5. Modeli yeniden eğit
İki framework'ün tamamlayıcı olarak kullanılması üretimde sık.
Weak Supervision Ne Zaman İşe Yarar?#
Güçlü olduğu yerler#
- Etiket çok pahalı: healthcare, AML, insurance fraud
- Domain expert bol: kuralları yazacak iç ekip var
- Veri çok: binlerce satıra LF uygulamak feasible
- Hızlı prototip: "MVP'yi 2 günde çıkar"
- Mevcut rule-based sistem var: kurallarını LF'lere çevirebilirsin
Zayıf olduğu yerler#
- Tek bir domain expert yok: kuralları kim yazacak?
- Veri çok az: 1000 satırda label model güvensiz
- Kurallar açıklanamıyor: model "intuition" ise LF yapılamaz
- Adversarial: rakip LF'leri öğrenip atlatır
Türkiye Pratiği#
Banking AML'de yaygın. Türk bankalarının çoğu mevcut rule-based AML
motorlarını (örn. Actimize, Pelican) zayıf etiket kaynağı olarak kullanıp
modern ML model eğitiyor. Healthcare'de yeni — claim fraud için kullanım
başlıyor.
Bonus: Active Learning Döngüsü#
Weak supervision + active learning birleşince çok güçlü:
1. Unlabeled veride Snorkel LF'leri çalıştır → weak labels 2. ML model eğit 3. Model çıktısında "en belirsiz" örnekleri seç (en az güvenli) 4. Bu örnekleri analist'e gönder (manuel etiket) 5. Manuel etiketleri (gerçek) + weak etiketleri (sentetik) birleştir 6. Model yeniden eğit 7. Tekrar 3'e dön
Bu döngüyle:
- Analist sadece gerçekten zor örneklere bakar
- Model kademeli olarak daha iyi olur
- Etiket maliyeti %80+ düşer (aynı PR-AUC için)
Türkiye'deki bir Türk bankası 2024 raporu: weak supervision + active learning
ile fraud detection sistemini eğitti. 6 ayda 50.000 satırlık manuel etiketin
yerine 8.000 satır ile aynı performans aldı.
Weak Supervision Sınırları#
1. LF kalitesi tabanı belirler#
Kötü LF'ler → kötü label model → kötü ML model. "Garbage in, garbage out".
2. Sistematik bias#
Tüm LF'ler aynı hatayı yapıyorsa, label model bunu doğru sanır. Çelişki yoksa kalite ölçülemez.
3. Confidence overestimation#
Label model "0.95 güvenli" derken aslında %75 doğru olabilir. Validation set ile kalibre et.
4. Domain drift'e duyarsız#
LF'ler manuel; dağılım değişirse otomatik güncellenmez. Modül 31'de drift detection ile birleşim göreceğiz.
5. LF üretim eğri eğitime ihtiyaç#
Domain expert'in 'iyi LF' yazmasını öğretmek zaman alır. Bazı şirketler bunu "Snorkel coach" pozisyonu açarak çözüyor.
💼 Real-World Pearl
Bir Türk insurance şirketi 2023'te claim fraud için Snorkel + Cleanlab + active learning hibridi kurdu. Manuel etiket gerekli yıllık 12.000 → 1.800'e düştü. Yıllık ~3.5M TL tasarruf + daha hızlı yeni-fraud-pattern adaptasyonu. Bu pipeline'ın kalbi 47 labeling function ve haftalık 50-100 active sample inceleme.
Snorkel Alternatifleri#
| Tool | Güçlü olduğu yer | Şirket |
|---|---|---|
| Snorkel | Tabular + text weak supervision | Stanford (open source) |
| Snorkel Flow | Enterprise + UI | Snorkel AI (ticari) |
| Cleanlab | Etiket düzeltme | MIT (open source) |
| Label Studio | Manuel etiketleme UI | Heartex (open source) |
| Skweak | NLP weak supervision | Norwegian Computing Center |
| MetaWeak | Multi-task weak supervision | Academic |
Çoğu prod pipeline iki ya da üç tool'u birlikte kullanır: Snorkel (LF'ler) +
Cleanlab (cleanup) + Label Studio (manuel review UI).
👉 Bir sonraki ders
Ders 3.5 — Hands-on Lab: IEEE-CIS Fraud. Bu modülün son dersi pratik. IEEE-CIS Fraud Kaggle verisinde (~600K satır, 400+ feature) 4 sampling stratejisini (baseline / SMOTE / class_weight / focal loss) yan yana koşturup PR-AUC karşılaştırması yapacağız. Capstone 1'in temel taşı.
Sık Sorulan Sorular
Hayır. Snorkel başlangıçta NLP odaklıydı ama tabular AD'de çok yaygın. Banking fraud, insurance, e-commerce — hepsi LF'lerle modellenebilir. Vision için daha az yaygın (CV'de self-supervised daha popüler).
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Modül 0: Kurs Çerçevesi ve Atölye Kurulumu
Anomaly Detection Engineer Kimdir? Fraud, SRE, Quality Engineer ile Farklar ve Türkiye Maaş Manzarası
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu
Kurs Felsefesi: Neden Bu Yol, Neden Bu Sıra — Anomaly Detection Öğrenme Nehri
Öğrenmeye BaşlaModül 0: Kurs Çerçevesi ve Atölye Kurulumu