Excel’de üç hisseyi yan yana koyup karşılaştırmak kolaydır. Peki ya yüzlerce hisse, on yıllık bilanço ve her gün güncellenen fiyat verisi söz konusu olduğunda? Formüller çoğaldıkça dosya ağırlaşır, sürümler birbirine karışır ve en önemlisi analiz tekrar edilebilir olmaktan çıkar. Finansal analizde Python’ın devrim yaratmasının nedeni yalnızca hız değil; süreci kodlanabilir, denetlenebilir ve tekrar çalıştırılabilir hâle getirmesidir.
Bu yazı, BIST evrenindeki hisseleri veri bilimi araçlarıyla taramak için kurulabilecek bir hattı adım adım anlatıyor. Amaç hazır bir “kazandıran formül” vermek değil; kendi kriterlerinizi kodlayabileceğiniz bir düşünce biçimi sunmak.
Excel’in görünmez sınırı
Excel, keşif ve hızlı kontrol için hâlâ güçlü bir araç. Sorun, onu bir üretim sistemi gibi kullanmaya başladığınızda ortaya çıkar. Bir hisse evrenini taramak için gereken adımların çoğu manueldir: veriyi indir, sütunları hizala, eksik değerleri temizle, oranları hesapla, sonuçları biçimlendir. Bu adımların her biri hem zaman hem de hata riski taşır. Daha önemlisi, altı ay sonra aynı analizi aynı varsayımlarla yeniden üretmek neredeyse imkânsız hâle gelir.
Python bu sınırı, analizi bir dosyadan bir programa dönüştürerek aşar. Program, hangi verinin nasıl işlendiğini açıkça gösterir; bir kez doğru kurulduğunda yeni veriyle tekrar çalıştırılabilir.
Python neden standart hâle geldi
Finansal analizde Python’ın yaygınlaşmasının üç nedeni var. Birincisi, veri işleme için olgun bir ekosistem sunması: Pandas tablo verisini, NumPy sayısal hesaplamaları, Matplotlib ve benzeri araçlar görselleştirmeyi üstlenir. İkincisi, aynı kodun araştırma, raporlama ve üretim aşamalarında kullanılabilmesi. Üçüncüsü, açık kaynak topluluğunun finansal veri kaynaklarına erişimi kolaylaştırması.
BIST hisseleri için Yahoo Finance üzerinden veri çeken yfinance gibi kütüphaneler, sembol sonuna .IS eklenerek kullanılabilir. Kurumsal veri sağlayıcılarının sunduğu derinlikte olmasa da ilk keşif ve prototip için pratiktir. Kalıcı bir sistemde veri kaynağının lisansı, gecikmesi ve doğruluğu ayrıca değerlendirilmelidir.
Tarama hattı: evrenden rapora
İyi bir tarama, tek bir formülden değil birbirine bağlı dört adımdan oluşur.
1. Evreni tanımla
Önce hangi hisseleri tarayacağınıza karar verin. Tüm BIST evreni başlangıç için uygundur; ancak çok düşük işlem hacimli hisseler, alım-satım maliyeti ve fiyat bozulmaları nedeniyle sonuçları çarpıtabilir. Evreni likidite, piyasa değeri veya sektör gibi ölçütlerle daraltmak, analizin yorumlanabilirliğini artırır.
2. Veriyi topla ve temizle
Fiyat serilerinde temettü ve bedelsiz sermaye artırımı düzeltmeleri yapılmadan hesaplanan getiriler yanıltıcıdır. Finansal tablolarda ise dönem sonlarının aynı olması, para biriminin tutarlılığı ve eksik kalemlerin nasıl ele alındığı belgelenmelidir. Veri temizliği, analizin en az görünen ama en belirleyici adımıdır.
3. Ölçütleri tanımla
Kriterlerinizi tek bir orana indirgemeyin. Değer, kalite, büyüme ve risk farklı sorulara yanıt verir:
- Değer: Fiyat/kazanç, piyasa değeri/defter değeri, firma değeri/FAVÖK.
- Kalite: Özkaynak kârlılığı, FAVÖK marjı, nakit dönüşüm süresi.
- Finansal sağlık: Net borç/FAVÖK, faiz karşılama oranı.
- Piyasa davranışı: Uzun vadeli trend, oynaklık, endekse göre göreli güç.
Her ölçüt için yön ve eşik belirleyin. “Düşük F/K iyidir” gibi genel bir yargı yerine, sektöre ve döneme göre neden iyi olduğunu yazın.
4. Sırala, filtrele ve raporla
Tüm ölçütleri tek bir puana indirmek caziptir, ancak hangi varsayımın sonucu belirlediğini gizler. Bunun yerine önce sert filtreler uygulayın, kalan evreni ölçüt bazında sıralayın ve sonuçları gerekçeleriyle birlikte raporlayın. Çıktı bir “alım listesi” değil, incelenecek şirketlerden oluşan bir kısa liste olmalıdır.
Küçük bir başlangıç örneği, akışı göstermek için yeterlidir:
import pandas as pd
import yfinance as yf
tickers = ["THYAO.IS", "ASELS.IS", "GARAN.IS"] # örnek evren
prices = yf.download(tickers, period="1y", auto_adjust=True)["Close"]
momentum = prices.pct_change(126).iloc[-1].sort_values(ascending=False)
print(momentum)
Bu kod yalnızca veri indirme, düzeltilmiş fiyat kullanma ve göreli getiri hesaplama akışını gösterir. Sonuçlar tek başına yatırım kararı için yeterli değildir.
Yapay zekâ nerede anlamlı?
Makine öğrenmesi, taramaya iki şekilde katkı sağlar: çok sayıda ölçütü etkileşimli olarak değerlendirmek ve doğrusal olmayan ilişkileri yakalamak. Ancak bu yöntemlerin işe yaraması için etiketlenmiş bir hedef, yeterli örneklem ve titiz bir dış örneklem testi gerekir. Gelecekteki bilgiyi özelliklere sızdırmak, modelin geçmişte mükemmel, gerçekte ise kullanışsız görünmesine yol açar.
Dil modelleri ise KAP bildirimlerini ve haber akışını özetlemek, metin yoğun belgeleri sınıflandırmak için kullanılabilir. Burada da kural aynıdır: modelin ürettiği her cümle kaynağından doğrulanmalıdır. Yapay zekâ, analistin yerini alan bir kara kutu değil, ölçek kazandıran bir yardımcıdır.
Tekrarlanabilirlik olmadan tarama olmaz
Bir tarama sistemi, yalnızca doğru sonuç verdiğinde değil, aynı girdiyle aynı sonucu tekrar ürettiğinde değerlidir. Bu nedenle kodu sürüm kontrolünde tutun, veri kaynağını ve indirme tarihini kaydedin, kriter eşiklerini tek bir yapılandırma dosyasında toplayın ve her çalıştırmanın çıktısını arşivleyin. Bu disiplin, hem hataları bulmayı hem de stratejinizin zaman içinde neden değiştiğini anlamayı kolaylaştırır.
Sonuç
Python, finansal analizde bir sihir değil bir kaldıraçtır. Yüzlerce hisseyi aynı anda taramayı, kriterleri belgelemeyi ve sonuçları tekrar üretmeyi mümkün kılar. Ancak tarama ne kadar iyi kurulursa kurulsun, yatırım kararı hâlâ risk yönetimi, sabır ve muhakeme gerektirir. Kod, soruyu netleştirir; cevabın sorumluluğu analistte kalır.
Bu yazı eğitim amaçlıdır ve yatırım tavsiyesi niteliği taşımaz. Kod örneği yalnızca kavramsal akışı gösterir.