用 8 個 Python 套件建立金融 AI 智能體系統:使用心得與結果
8 Farklı Python Paketiyle Kendi Finansal Agent Sistemimi Kurdum ve Sonucu Bu Oldu
作者以 pandas、langchain、ccxt、yfinance、scikit-learn、ta、pydantic 和 APScheduler 建立金融智能體系統,分享各套件的用途與使用限制。pandas 處理大型數據集時會增加記憶體負擔,yfinance 並非官方 API,而 APScheduler 需要設定持久化儲存,才能在應用程式重啟後保留排程工作。
Kendi finansal agent sistemimi kurarken elimdeki en büyük sorun hangi aracı nerede kullanacağımı bilmemekti. İnternetteki binlerce kütüphane arasında kaybolmak yerine sadece işime yarayan ve gerçek projelerde kullandığım sekiz tanesini seçtim. Bu liste tamamen kendi deneme yanılma sürecimin bir ürünü. Hangi paketin neden temel bir ihtiyaç olduğunu ve hangi noktalarda beni yarı yolda bıraktığını anlatacağım.
1. pandas
Pandas veri analizi ve zaman serileri için standart kabul edilen bir araç. BIST verilerini işlerken veya finansal tabloları temizlerken ilk kullandığım kütüphane bu. Veriyi bir tablo yapısına sokup üzerinde matematiksel işlemler yapmak inanılmaz kolay. Özellikle tarih bazlı filtrelemelerde hayat kurtarıyor. Ancak büyük veri setleri ile çalışırken bellek kullanımı çok hızlı artıyor. İşlemciyi yorabiliyor ve bazen sistemin kilitlenmesine neden oluyor. Veri setim büyüdüğünde bellek yönetimini manuel olarak optimize etmem gerektiğini acı tecrübelerle öğrendim. Örneğin, 500 megabaytlık bir CSV dosyasını okurken pandas varsayılan olarak tüm veriyi RAM üzerine yükler. Eğer sisteminizde 8 gigabayt RAM varsa ve aynı anda birkaç agent çalıştırıyorsanız, veri tiplerini optimize etmeden (int64 yerine int32 kullanarak) yükleme yapmak sistemin donmasına yol açar. Bu yüzden büyük dosyalarda chunksize parametresiyle veriyi parçalar halinde okumak, bellek şişmesini engellemek için tek çözüm yolum oldu. Bir keresinde 2 milyon satırlık bir hisse senedi geçmişini okutmaya çalışırken 16 gigabaytlık RAM tamamen doldu ve bilgisayarım yanıt vermeyi bıraktı. O günden beri veriyi önce sütun tiplerine göre daraltıp sonra işliyorum.
2. langchain
Agent geliştirirken Claude gibi modellerle çalışmak için bu kütüphaneyi kullanıyorum. Borsa analizleri yapan akıllı iş akışları oluşturmak için harika bir yapı sunuyor. İşin güzel tarafı karmaşık süreçleri parçalara ayırıp birleştirebilmek. Fakat bu kütüphane çok hızlı güncelleniyor. Bir hafta önce yazdığım kod bir sonraki güncellemede çalışmaz hale gelebiliyor. Dokümantasyon çoğu zaman güncel kalmıyor ve geriye dönük uyumluluk sorunları beni çok uğraştırdı.
3. ccxt
Dünya genelindeki yüzlerce kripto ve finansal borsa API sistemine tek bir arayüzle bağlanmayı sağlıyor. Farklı borsalar için ayrı ayrı kod yazmak yerine tek bir standart kullanmak büyük rahatlık. Ancak borsa API sistemleri güncellendiğinde kütüphane bazen geride kalabiliyor. Anlık hata mesajları aldığımda sorunun bende mi yoksa kütüphanede mi olduğunu anlamak için saatler harcadım.
4. yfinance
Yahoo Finance üzerinden hisse senedi ve BIST verilerini hızlıca çekmek için kullanıyorum. Ücretsiz olması ve hızlı çalışması en büyük avantajı. Veriyi CSV olarak indirmekle uğraşmadan doğrudan Python içine almak büyük kolaylık. Yine de resmi bir API olmadığını unutmamak gerekiyor. Yahoo tarafında bir değişiklik olduğunda veri akışı aniden kesilebiliyor. Bu yüzden sistemimde her zaman bir yedek veri kaynağı tutuyorum.
import yfinance as yf
hisse = yf.Ticker(BIST_KODU)
tarihsel_veri = hisse.history(period=1mo)
print(tarihsel_veri.head())
Bu kod parçası belirli bir hisse senedinin son bir aylık verisini çekmemi sağlıyor. İlk satırda kütüphaneyi içeri alıyorum. İkinci satırda hisse kodunu tanımlayarak nesne oluşturuyorum. Üçüncü satırda tarih aralığını belirleyip veriyi indiriyorum. Son satırda ise verinin ilk birkaç satırını ekrana yazdırarak doğru veri gelip gelmediğini kontrol ediyorum.
5. scikit-learn
Klasik makine öğrenmesi algoritmalarını eğitmek için kullanıyorum. Fiyat tahmini yaparken veya sınıflandırma modelleri kurarken oldukça stabil. Derin öğrenme işlerine girmediğim sürece tüm ihtiyacımı karşılıyor. Tuzak noktası ise derin öğrenme modelleri için uygun olmaması. Eğer daha karmaşık yapay zeka modellerine geçmek isterseniz bu kütüphane sizi sınırlayacaktır. Sadece istatistiksel yaklaşımlarda başarılı olduğunu kabul edip ona göre kullanmak gerekiyor.
6. ta
RSI, MACD veya Bollinger Bantları gibi teknik analiz göstergelerini hesaplamak için kullanıyorum. Elle formül yazmakla uğraşmamak büyük zaman kazandırıyor. Ancak veri setindeki eksik değerleri otomatik temizlemiyor. Eğer verimde NaN değerler varsa hesaplama hatalı sonuç veriyor. Bu yüzden kütüphaneyi kullanmadan önce veriyi mutlaka temizlemem gerekiyor. Bir keresinde RSI hesaplarken veri setimin en başında oluşan boşlukları (NaN) fark etmedim. Kütüphane bu boşlukları sıfır olarak algıladı ve tüm indikatör değerlerim hatalı çıktı. Şimdi her işlem öncesi veriyi temizlemek için dropna metodunu kullanıyorum ve ardından verinin uzunluğunu kontrol ediyorum. Eğer veri setinde 100 satır varsa ve indikatör hesaplandıktan sonra 95 satır kalıyorsa, bu durum eksik verilerin başarıyla temizlendiğini ve hesaplamanın doğru yapıldığını gösteriyor. Teknik analiz kütüphanesini kullanırken özellikle hareketli ortalamalar gibi geçmişe dayalı hesaplamalarda, veri setinin başlangıcındaki boşlukların indikatörün ilk 14 veya 20 gününü tamamen bozduğunu gördüm. Bu yüzden veriyi temizledikten sonra mutlaka ilk 20 satırı atıp analize öyle başlıyorum.
7. pydantic
Agent yapılarında dış dünyadan gelen veriyi doğrulamak için kullanıyorum. Tip güvenli veri yapıları oluşturmak hataları en aza indiriyor. Özellikle LLM çıktılarını belirli bir şemaya oturtmak için çok işime yarıyor. Ancak iç içe geçmiş karmaşık veri yapılarında hata ayıklamak tam bir kabus olabiliyor. Hata mesajları her zaman neyin yanlış gittiğini net açıklamıyor.
8. APScheduler
Borsa verilerini belirli saatlerde çekmek veya stratejileri periyodik çalıştırmak için kullanıyorum. Cron benzeri yapısı sayesinde zamanlama işlerini çok kolaylaştırıyor. En büyük tuzağı ise uygulama çökerse zamanlanmış görevlerin hafızadaki durumunun kaybolması. Kalıcı depolama yapılandırması yapmazsanız sistem yeniden başladığında görevleriniz çalışmayabilir. Bu yüzden veritabanı bağlantısı ile görevleri saklamak şart.
Toparlarsak
Bu araçları seçmemin sebebi zeka gerektiren bir seçim yapmam değil, aynı işleri defalarca yaparken en hızlı sonucu verenleri bulmamdır. Aynı işe aynı aracı kullanmak zaman kazandırıyor ve projeyi daha sürdürülebilir kılıyor. Bundan sonra yapman gereken ilk şey bu kütüphanelerden birini alıp küçük bir veri çekme denemesi yapmak. Hemen bugün yfinance ile başlayıp kendi borsa verini çekerek işe koyulabilirsin. Aracın sınırlarını öğrendiğinde kendi agent sistemini kurman çok daha kolay olacak. Hatalardan korkma çünkü bu araçların hepsinde bir noktada takılacaksın. Önemli olan o noktada sistemini nasıl daha dayanıklı hale getireceğini öğrenmek. Yarın sabah ilk iş olarak, veritabanı bağlantını kur ve APScheduler ile verilerini otomatik güncelleyecek bir yapı oluştur. Ardından bu verileri pandas ile işleyip, scikit-learn ile basit bir tahmin modeli dene. Başarısız olursan pes etme, sadece hata mesajını oku ve bir sonraki denemede aynı hatayı yapmamaya odaklan. Kendi agent sistemini kurarken en büyük kazancın yazdığın kod değil, yaşadığın hatalardan çıkardığın dersler olacak. Her yeni denemede sistemin bir önceki günden daha kararlı hale gelecek ve bu süreçte kazandığın deneyim, piyasalardaki karmaşayı anlamana yardımcı olacak. Sabırlı ol, küçük adımlarla ilerle ve sisteminin her gün biraz daha geliştiğini izle.
來源:DEV Community · dev.to

