Kazanimlar:
- Farklı veri kaynaklarını (veritabanı, API, dosya, web kazıma) ve her birinin tuzaklarını tanıyıp şemayı doğru anlayabilme
- Örneklemin ana kütleyi temsil edip etmediğini ve seçim yanlılığını değerlendirip tekrarlanabilir örnekleme yapabilme
- Her sütuna 'tahmin anında elimde olacak mı' sorusunu sorarak veri sızıntısını daha toplama aşamasında eleyebilme ve yasal/etik sınırları gözetebilme
Her analiz, topladığınız verinin niteliği kadar iyidir. Dünyanın en gelişmiş modeli bile yanlış toplanmış, taraflı örneklenmiş ya da geleceğin bilgisini içeren bir veriyle çalışırsa güvenilmez bir sonuç üretir. Bilgisayar biliminde bu ilke "çöp girer, çöp çıkar" (İngilizcesiyle garbage in, garbage out) diye özetlenir. Bu ünitede veriyi toplama aşamasını ele alacağız: kaynağı anlamak, örnekleme yapmak, kalite sorularını sormak ve daha ilk günden veri sızıntısı riskine karşı uyanık olmak. Yapay zeka bu aşamada güçlü bir yardımcıdır; SQL sorgusu yazar, API dokümanını özetler, veri sözleşmesi taslağı çıkarır. Ama hangi veriyi toplayacağınıza ve o verinin sizi temsil edip etmediğine karar veren insandır.
Veri kaynaklarını tanımak
Veri farklı yerlerden gelir ve her kaynağın kendine has tuzakları vardır. Veritabanı (genellikle SQL ile sorgulanan, tablolar hâlinde saklanan yapısal veri) en yaygın kaynaktır; güvenilirdir ama şemasını iyi anlamak gerekir. API (İngilizcesiyle Application Programming Interface — bir sistemden program aracılığıyla veri çekmenizi sağlayan arayüz) canlı veri sağlar ama hız sınırları ve biçim değişiklikleri riski taşır. Dosyalar (CSV, Excel, JSON) esnektir ama biçim tutarsızlığına açıktır. Web kazıma (İngilizcesiyle web scraping — web sayfalarından otomatik veri toplama) güçlüdür ama yasal ve etik sınırları vardır; her site kazınamaz.
Dikkat: Web kazıma ve otomatik veri toplamada sitenin kullanım şartlarına, robots.txt dosyasına ve KVKK/GDPR'a uyun. Yetkisiz veri toplama hukuki sorumluluk doğurur. Bilgi güvenliği bağlamında, veri toplama araçlarını yalnızca yetkiniz olan sistemlerde ve savunma/analiz amacıyla kullanın; yetkisiz erişim veya kazıma yasaktır.
Şemayı anlamak: veriyle tanışma
Bir veri kümesini toplamadan önce şemasını (sütunların adları, veri tipleri, anlamları ve birbirleriyle ilişkileri) anlamalısınız. YZ burada "veri sözlüğü" (İngilizcesiyle data dictionary — her sütunun ne anlama geldiğini açıklayan tablo) çıkarmakta çok yararlıdır. Ama YZ'nin ürettiği açıklamalar tahminlerdir; her sütunun gerçek anlamını veriyi üreten ekiple teyit edin. Örneğin "durum" adlı bir sütun 0/1/2 içeriyor olabilir; bunların "beklemede/onaylı/iptal" mi yoksa başka bir şey mi olduğunu ancak kaynak ekip bilir.
Aşağıdaki tablo temel kaynak tiplerini ve dikkat noktalarını özetler:
Kaynak
Güçlü yanı
Tuzağı
YZ nasıl yardım eder
SQL veritabanı
Yapısal, güvenilir
Karmaşık JOIN'ler
Sorgu taslağı yazar
API
Canlı veri
Hız sınırı, biçim değişimi
Doküman özetler, çekme kodu
CSV/Excel
Esnek, hızlı
Biçim tutarsızlığı
Okuma/ayrıştırma kodu
Web kazıma
Geniş erişim
Yasal/etik sınır
Ayrıştırma taslağı (yetki dahilinde)
Log/olay verisi
Ayrıntılı
Devasa hacim
Filtreleme sorgusu
Örnekleme: parça bütünü temsil ediyor mu
Çoğu zaman tüm veriyle değil bir örneklem (İngilizcesiyle sample — ana kütleden seçilen alt küme) ile çalışırsınız. Kritik soru şudur: bu örneklem ana kütleyi (İngilizcesiyle population, tüm veriyi) temsil ediyor mu? Seçim yanlılığı (İngilizcesiyle selection bias — örneklemin sistematik olarak belli bir gruba kayması) en yaygın tuzaktır. Örneğin yalnızca mobil uygulamadan gelen kullanıcıları örneklerseniz, web kullanıcılarını görmezsiniz ve sonuçlarınız yanıltıcı olur. Rastgele örnekleme (her kaydın eşit seçilme şansına sahip olması) çoğu durumda en güvenli yoldur; ama zaman serisi verisinde rastgele değil kronolojik bölme yapılır (bunu Ünite 7 ve 10'da göreceğiz).
İlk günden sızıntı farkındalığı
Veri sızıntısı (İngilizcesiyle data leakage — modelin, tahmin anında gerçekte elinizde olmayacak bir bilgiyi eğitim sırasında görmesi) çoğu felaketin kaynağıdır ve genellikle veri toplama aşamasında doğar. Örnek: "iptal edildi mi" tahmin ederken, veriye "iptal tarihi" sütununu da eklerseniz, model geleceğe bakmış olur. Toplama aşamasında her sütun için tek bir soru sorun: "Bu bilgi, tahmin yapacağım an gerçekten elimde olacak mı?" Cevap hayırsa o sütun sızıntıdır. Bu konuyu Ünite 10'da bütün derinliğiyle işleyeceğiz; ama farkındalık ilk günden başlamalı.
Üç mini vaka
Vaka 1 — Temsil sorunu. Bir banka, kredi riski modeli için yalnızca onaylanmış kredilerin verisini topladı (18.500 kayıt). Reddedilenler veride yoktu. Model, reddedilenlerin nasıl davranacağını hiç görmediği için gerçek dünyada yanıldı. Ders: örneklem, karar vereceğiniz tüm popülasyonu temsil etmeli.
Vaka 2 — Sessiz biçim değişikliği. Bir ekip, bir API'den her gün fiyat verisi çekiyordu. API sağlayıcısı bir gün para birimini USD'den EUR'a çevirdi ama alan adı aynı kaldı. 12 gün boyunca yanlış birimde veri toplandı; 3.200 satır bozuldu. Ders: API verisinde birim ve biçim tutarlılığını düzenli kontrol edin.
Vaka 3 — Erken sızıntı. Bir analist, "müşteri kaybı" (churn) tahmini için veri toplarken "hesap kapanış nedeni" sütununu da dahil etti. Bu sütun ancak müşteri gittikten sonra doluyordu. Model test setinde %97 doğruluk verdi; üretimde işe yaramadı çünkü o sütun tahmin anında boştu. Ders: her sütuna "tahmin anında elimde mi" sorusunu sorun.
Dört kopyalanabilir şablon
1) Veri sözlüğü çıkarma:
Rolün: veri bilimci asistanı. Aşağıda bir tablonun sütun adları veörnek (anonim) değerleri var. Her sütun için tahmini anlamını, veritipini ve olası kalite risklerini bir tabloda listele. Emin olmadığınsütunları "teyit gerekli" diye işaretle; anlam uydurma.Sütunlar: [buraya yapıştır]
2) Örnekleme kodu (rastgele, tekrarlanabilir):
pandas df'im var. 200.000 satırdan temsili %5'lik rastgele örneklemçıkaran kodu yaz. random_state=42 kullan (tekrarlanabilirlik için).Örneklemin sınıf dağılımının ana kütleye benzediğini kontrol edenkodu da ekle.
3) Sızıntı tarama sorusu:
Şu sütun listesini vereceğim. Hedefim "iptal edildi mi" (0/1) tahmini.Her sütun için, tahmin anında gerçekten elimde olup olmayacağınıdeğerlendir ve "güvenli / şüpheli / sızıntı" diye işaretle.Gerekçeni tek cümleyle yaz. Sütunlar: [liste]
4) SQL çekme sorgusu taslağı:
PostgreSQL'de "siparisler" ve "musteriler" tablolarım var.Son 90 günün siparişlerini, müşteri şehriyle birleştirip (JOIN)şehir başına toplam tutar ve sipariş sayısını getiren sorguyu yaz.Tarih filtresini ve NULL şehirlerin nasıl ele alındığını açıkla.Sorguyu ben çalıştırıp doğrulayacağım.
Zayıf prompt / Güçlü prompt
Zayıf prompt:
Bana bu veritabanından iyi bir örnek veri çek.
"İyi" belirsizdir; hangi tablo, hangi dönem, hangi büyüklük, hangi amaç bellidir değil. YZ ancak genel geçer, muhtemelen yanlış bir sorgu üretir.
Güçlü prompt:
Rolün: SQL asistanı. "islemler" tablom var: kolonlar id, musteri_id,tarih (timestamp), tutar (numeric), kanal (text: 'web'/'mobil').Görev: 2024 yılı için, her kanaldan temsili 10.000'er satır getiren,tekrarlanabilir (ORDER BY ile deterministik) bir sorgu yaz.Amaç: kanal karşılaştırmalı analiz. Sorgunun varsayımlarını listele.
Burada tablo, amaç, büyüklük ve tekrarlanabilirlik açıktır.
Sık yapılan hatalar
- Örneklemin temsil gücünü sorgulamamak. Kolay ulaşılan veri, doğru veri değildir; seçim yanlılığı sonucu bozar.
- Sütun anlamlarını YZ'ye uydurtmak. Anlamı kaynak ekip bilir; YZ tahminini teyit etmeden kullanmayın.
- API biçim/birim değişikliğini izlememek. Sessiz değişiklik günlerce bozuk veri toplar.
- Sızıntıyı toplama aşamasında görmezden gelmek. "Tahmin anında elimde mi" sorusu erken sorulmazsa model sahte başarı verir.
- Yetkisiz veya kural dışı veri toplamak. robots.txt, kullanım şartları ve KVKK ihlali ciddi risktir.
İpucu: Her yeni veri kaynağı için tek sayfalık bir "veri kartı" tutun: kaynak, çekme tarihi, satır sayısı, bilinen sınırlar ve sızıntı riski taşıyan sütunlar. Bu kart, aylar sonra "bu veri neydi" sorusunu ve yeniden üretilebilirliği kurtarır.
Özetle
Analizin kalitesi, toplanan verinin kalitesiyle sınırlıdır. Kaynağı (veritabanı, API, dosya, kazıma) ve şemayı iyi tanıyın; örneklemin ana kütleyi temsil ettiğinden emin olun; her sütuna "tahmin anında elimde mi" diye sorarak sızıntıyı ilk günden eleyin. YZ sorgu ve doküman işinde harika bir hızlandırıcıdır ama hangi verinin toplanacağına ve temsil gücüne insan karar verir. Yetki, yasa ve gizlilik sınırları her zaman önce gelir.
Uygulama görevi
Bir veri kaynağı seçin (kendi işinizden veya varsayımsal). Yukarıdaki "veri sözlüğü çıkarma" şablonuyla YZ'den bir veri sözlüğü taslağı alın; sonra her sütunu "sızıldı mı" diye elle değerlendirin. En az bir tane şüpheli/sızıntı sütunu bulmaya çalışın ve neden riskli olduğunu bir cümleyle yazın.
Kontrol listesi
- [ ] Veri kaynağını ve şemasını kaynak ekiple teyit ettim mi?
- [ ] Örneklemin ana kütleyi temsil ettiğini kontrol ettim mi?
- [ ] Her sütuna "tahmin anında elimde olacak mı" sorusunu sordum mu?
- [ ] Örneklemeyi tekrarlanabilir (sabit seed) yaptım mı?
- [ ] Toplamanın yasal/etik (yetki, robots.txt, KVKK) sınırlarını kontrol ettim mi?