Giriş
Küçük ligler için veri bilimi, büyük liglerden çok daha fazla zorluk ve fırsat barındırır. Veri eksikliği, hatalı kayıtlar, takım isimlerindeki varyasyonlar ve düşük maç sayıları model performansını kolayca bozabilir. Bu yazıda saha verisinden başlayan, 6 adımlık uygulanabilir bir analiz boru hattı sunuyorum. Amaç: temiz, güvenilir veri elde edip ELO tabanlı güç sıralamasını küçük lig koşullarında güvenilir şekilde iyileştirmek.
Genel Bakış: Neden 6 adım?
Her adım gerçek bir problemin çözümüne odaklanır. Sıralama:
- Veri toplama ve kaynak doğrulama
- Standartizasyon ve normalizasyon
- Hata tespiti ve temizleme
- Özellik mühendisliği
- ELO model kurulumu ve ayarlanması
- Değerlendirme, izleme ve versiyonlama
Adım 1 — Veri Toplama ve Kaynak Doğrulama
İyi bir boru hattı sağlam bir veri kaynağıyla başlar. Küçük liglerde resmi veri genellikle kısıtlıdır; bu yüzden birden fazla kaynağı karşılaştırmak gerekir.
- Kaynak çeşitleri: federasyon siteleri, yerel gazeteler, saha raporları, topluluk veritabanları.
- Çapraz doğrulama: aynı maç için en az 2 bağımsız kayıt bulun. Fark varsa kaynağın güvenilirliğini etiketle.
- Zaman damgası ve meta: kayıt zamanı, veri sağlayıcı, veri toplanma yöntemi (manuel/otomatik) mutlaka saklanmalı.
Adım 2 — Standartizasyon ve Normalizasyon
Küçük liglerde en sık rastlanan sorun takım isimleri ve tarih formatlarıdır. Burada başarılı olmak, downstream analizleri doğrudan iyileştirir.
- Takım isimlerini normalize et: noktalama, büyük/küçük harf, kısaltma eşleştirmeleri (ör. "İstanbul FK" vs "Istanbul Futbol Kulubu").
- UUID veya federasyon takım kodu ata; metinsel anahtarları bırakma.
- Tarih saatleri için UTC standardı kullan. Yerel zaman farklılıkları maç saatini etkileyebilir; rest days hesapları için kesin tarih gerekir.
- Örnek pseudocode:
normalize_team(name) fonksiyonu: lowercase -> strip punctuation -> map via alias dictionary -> return canonical_name.
Adım 3 — Hata Tespiti, Eksik Veri ve Temizleme
Bu adımda amaç; bozuk, tutarsız veya anlamsız kayıtları tespit edip düzeltmektir.
- Doğruluk kontrolleri: skorların negatif olmaması, toplam gol sayısının mantıklı olması, iki farklı takımın aynı maçta oynaması gibi kurallar.
- Çakışan kayıtlar: aynı maçın farklı saatlerde; match_id, stadium, referee gibi alanlarla dedupe et. Kural: en fazla bilgi içeren kaydı tercih et.
- Eksik veriler: eksik skor varsa maçı atla veya impute et. Küçük liglerde imputasyon dikkat ister: basit yöntemler (ortalama, medyan) yerine maç bazlı ikameler (benzer rakipler, sezon ortalaması) kullan.
- Teknik örnek (pandas):
df['team']=df['team'].str.strip().str.lower().map(alias_dict)
Eksik skorlar için: df = df[df['home_score'].notnull() & df['away_score'].notnull()] (ilk etapta agresif filtreleme tavsiye edilir).
Adım 4 — Özellik Mühendisliği (Feature Engineering)
Küçük veri setlerinde kaliteli öznitelikler model başarısını belirler. Basit ve interpretable feature'lar tercih edin.
- Temel feature'lar: gol farkı, ev sahibi avantajı (home=1/0), son 5 maç ortalaması, sezon başlangıcından beri maç sayısı.
- Hammadde yerine türetilmiş: rolling average of goal difference (3-7 maç), head-to-head geçmişi (son 3 karşılaşma), rest_days (son maçtan kaç gün sonra oynandığı).
- Lig ağırlığı ve güç katsayıları: küçük ligler arasında maçların ağırlığını ayarlamak için lig strength multiplier kullanın — ör. daha güçlü liglerdeki sonuçlar daha yüksek güvenilirlik taşıyabilir.
- xG yoksa proxy'lar: şut sayısı, isabetli şut, şut yüzdesi; bunlar yoksa gol farkı ve pozisyon raporlarını kullanın.
Adım 5 — ELO Modeli: Kurulum ve Küçük Lig İçin Ayarlar
ELO basit ama güçlüdür. Ancak küçük lig ortamında birkaç ayar gereklidir.
- Temel formül: R_new = R_old + K * (S - E) ; E = 1 / (1 + 10^{(opponent_R - R)/400})
- Başlangıç puanları: takımlar yeni ise sabit başlangıç (örn. 1500) yerine prior-based başlangıç: lig geçmişi veya federasyon sıralamasına göre hafifçe sapmalar verin.
- K faktörü: küçük liglerde K sabit yüksek tutulduğunda fazla oynanan hatalar modelin volatilitesini artırır. Öneri: K adaptif olsun; örn. K = baseK / (1 + 0.1 * matches_played) veya K = baseK * (1 + 1/(matches_played+1)). Tipik değer: baseK = 30, yeni takımlar için K=45, deneyimli için 20-25.
- Zaman ağırlığı: eski maçları küçültmek için zaman temelli decay uygulayın. Alternatif: sadece son N maçı kullanarak rolling ELO hesaplayın.
- Maç sonucu puanlaması: beraberlik için S=0.5, galibiyet 1, mağlubiyet 0. İsteğe bağlı: gol farkına göre S değerini ağırlıklandırabilirsiniz (örn. büyük galibiyetler daha fazla etki).
- Örnek uygulanabilirlik: skor bazlı ELO güncellemesi: S = (1 + min(4, goal_diff))/2 ; bu small-lig ortamında büyük farklılıkların çok yıkıcı olmasını engeller.
Adım 6 — Değerlendirme, İzleme ve Versiyonlama
Modeli sürekli izleyin; küçük liglerde overfitting hızlı olur.
- Zaman serisi doğrulama: k-fold yerine rolling-window backtest. Eğitimi geçmişe, testi geleceğe göre yap.
- Metrikler: log loss, Brier skoru, calibration plot, ROC AUC (ikili tahminler için). Ayrıca ELO tahminlerinin gerçek sonuçlarla tutarlılığını kontrol etmek için rank correlation (Spearman) kullanın.
- Canary testleri: yeni veri akışı geldiğinde otomatik tutarlılık kontrolleri çalışsın (ör. gol dağılımında ani değişiklik, takım sayısında sıçrama).
- Versiyonlama: veri snapshotları (raw vs cleaned), model versiyonları ve transformasyon script'lerini saklayın. Bu, hatalı bir temizlik adımının etkisini geri almayı sağlar.
Pratik İpuçları ve Tuzaklar
- Yanlış hizalanmış maçlar: play-off ve normal sezon maçlarını ayırın — farklı önemi vardır.
- Transfer ve kadro değişimleri: küçük liglerde bir oyuncu transferi takımlar arası güç dengesini büyük ölçüde değiştirebilir. Eğer oyuncu seviyesinde veri varsa, oyuncu katkısını ELO'ya entegre edin.
- Veri etiketi: hangi satırların manuel girildiği, hangi satırların scraped olduğu bilgisini saklayın; manuel veriler daha hata eğilimli ama doğrulanmış olabilir.
- Basit modelleri dene: ELO'yu logistic regression veya gradient boosting ile birleştir; ELO tek başına güçlü ama diğer feature'larla harmanlandığında performans artar.
Özetle: temiz ve güvenilir veri + akıllı özellik mühendisliği + küçük liglere özgü ELO ayarlamaları = sürdürülebilir ve güvenilir güç sıralaması.
Sonuç
Bu 6 adımlık boru hattı, küçük liglerde karşılaşılan pratik problemleri hedef alır. Temel fikir: veriyi sahadan doğru almak, sistematik olarak temizlemek, dikkatli öznitelikler üretmek ve ELO'yu küçük veri gerçeklerine göre uyarlamaktır. Uygulamada dikkatli takip, versiyonlama ve zaman bazlı değerlendirme başarıyı belirler.
Başlangıç için öneri: ilk 2 ay veriyi temizlemeye ve canonical takım listesi oluşturmaya ayırın. Ardından ELO'yu temel ayarlarla devreye alıp rolling backtest ile parametreleri (K, başlangıç puanı, decay) optimize edin. Küçük liglerde sabır ve sağlam veri mühendisliği en büyük başarı faktörüdür.