Veri yalan söyleyince
Her sabah doğrulanmış abonelere bir bülten gidiyordu. Bir satır kod yüzünden içindeki ETF akış rakamları gerçek değildi. Tahmin değil — uydurma.
Bir aracın sizi nasıl yarı yolda bıraktığını anlatmanın en dürüst yolu, kırıldığı satırı göstermektir. Kendi kripto-makro bültenimin veri katmanını denetlerken bulduğum şey bir çökme değildi. Çökme olsa iyiydi; çökme bağırır. Bu sessizce yalan söylüyordu.
Pipeline her sabah GitHub Actions üzerinde çalışıyor, verileri çekiyor, bir özet üretiyor ve sonucu siteye basıyordu. ETF giriş-çıkış satırı da oradaydı: IBIT şu kadar, FBTC bu kadar. Profesyonel görünen, bültenin en çok bakılan bölümlerinden biri. Tek sorun, o sayıların hiçbir yerden gelmiyor olmasıydı.
# Farside'a istek atılıyordu ama response hiç parse edilmiyordu.
# Her çalıştırmada akışlar üretiliyordu:
ibit_flow = random.uniform(50, 300)
fbtc_flow = random.uniform(-20, 150)
# → Bültende yayınlanan "ETF akışı" rastgele bir sayıydı.
Yalnız da değildi. Options bölümündeki max pain, güncel BTC fiyatından kopuk bir çapaya rastgele gürültü ekliyordu: 85000 + random.randint(-2000, 2000). DVOL'ün 24 saatlik değişimi yine rastgele jitter'dı. Coinbase Premium grafiği, API düştüğünde 168 saatlik sahte bir random walk çiziyordu. oi_chg_24h her zaman 0 dönüyordu ama HTML'de o alan vardı. Gösterdiğim "2Y–10Y spread" aslında 3A–10Y'di, çünkü çektiğim seri (^IRX) 13 haftalık T-bill'di. PMI ise hiç çekilemiyor, her gün hardcoded 49.5 olarak görünüyordu.
Asıl mesele
Bunların hiçbiri klasik anlamda "bug" değildi — hiçbiri programı durdurmuyordu. Hepsi makul çıktı üretiyordu. Ve agentic / AI ile kurulmuş pipeline'ların asıl tehlikesi tam burada: makine, çıktıyı her zaman düzgün biçimlendirir. Tablo hizalı, sayı virgüllü, renk doğru. Altındaki mantık bozuk olsa bile sonuç güven verir. Hız kazanırsın, ama doğruluğu görsel olarak denetleyemezsin; çünkü yalan, gerçeğe benziyor.
Bu, sitenin denetiminde yakaladığım "fabricated data" sorununun aynısıydı — ama bu sefer abonelere giden bir üründe. İtibar açısından en pahalı hata türü.
Çözüm: parse-or-hide
Tek bir kural koydum: gerçek sayıyı alamıyorsan, hiçbir şey gösterme. Asla simüle etme. ETF tablosu cloudscraper + pandas.read_html ile parse edilebiliyorsa parse et; edilemiyorsa bölümü tamamen gizle. Max pain'i rastgele üretmek yerine, zaten çektiğim Deribit OI verisini strike bazında gruplandırıp gerçekten hesapla (~20 satır). Spread için doğru seriyi kullan (FRED DGS2). Bir veri yoksa, "veri alınamadı" de — boşluğu sahte bir trendle doldurma.
Fark ince ama belirleyici: önceki sistem sessizce yanlıştı, yenisi sesli olarak eksik. İkincisi her zaman tercih edilir.
Finans mühendisliğinde avantaj hızda değil. Avantaj, aracın nerede kırıldığını bilmek ve onu gürültüyle kırılacak biçimde inşa etmektir.
Bu yazı finansal/teknik bir eğitim notudur; yatırım tavsiyesi değildir. Bahsi geçen veri kaynakları ve metodolojiler örnek amaçlıdır.
← Finance Engineering