Berke Akyıldız

İşler · 4 / 4

Aynı veriden iki pipeline: modelsiz puanlama ve kurallarla kontrol edilen rapor.

TechInves

ABD borsasındaki teknoloji şirketlerini sadece kendi benzerleriyle karşılaştırarak puanlayan bir hesap motoru ve bu puanların üstüne yazılan, yayımlanmadan önce kurallarla kontrol edilen bir araştırma raporu pipeline’ı.

Kırk şirketin kendi karşılaştırma grubu içinde sıralandığı puan tablosu. Bileşik puan, sektör yüzdeliği ve kategori kırılımı tek şirket görünümünde. Kaynaklara bağlanan, şirket bazında bölümlenmiş sektör araştırması. Puan yenileme, tüm raporu üretme ve tek şirket araştırmasını ayrı maliyet sınırlarıyla başlatma. Giriş sayfasında son çalışmanın öne çıkan şirketi ve puan farkı.

1 / 5

Durum
Tamamlandı
Ne
ABD teknoloji şirketleri için puanlama motoru ve araştırma, sentez, doğrulama pipeline’ı
Yığın
Python · LangGraph · FastAPI · SQLAlchemy · Alembic · SQLite/Postgres · Next.js
Kod
github.com/brkakyldz/tech_inves

01

Kısaca

Problem
Bir şirketin finansal sayısı tek başına bir şey söylemiyor: yüzde otuz kâr marjının yüksek olup olmadığı şirketin ne iş yaptığına bağlı. Puanı doğrudan bir dil modelinden istemek ise sayının nereden geldiğini açıklanamaz hâle getiriyor.
Kullanıcı için değişen
Her şirket sadece kendi grubunun içinde, aynı veriyle her seferinde aynı sonucu veren bir hesapla 0–100 arasında puanlanıyor. Puanların üstüne yazılan rapor yayımlanmadan önce kurallardan geçiyor; kusurlu bir rapor, bulunan sorunlar üstünde yazılı olarak açılıyor.
Bunu mümkün kılan karar
Puanlama katmanında tek bir model çağrısı yok. Model sadece raporun metnini yazıyor ve yazdığı hiçbir şey kural kontrolünden geçmeden rapora girmiyor. İkinci bir modelin verdiği not raporu uyarıyla işaretleyebilir, ama tek başına durduramaz.
Kanıt
Puanlama katmanında sıfır model çağrısı. İzleme listesindeki 40 şirketin 40’ı canlı veriyle çözülüyor, şirket başına iki istekle. Testlerin hiçbiri ağa çıkmıyor. Raporun dört karar seviyesi de saklanıp gösteriliyor.

02

Yakından

Bu projede puanı hesaplama işini koda, raporun metnini yazma işini modele verdim.

Bir sayının nereden geldiği sorulduğunda “model öyle dedi” diye cevap vermek istemedim. Puan kodla hesaplandığı için her sayının hangi veriden ve hangi adımdan geldiğini gösterebiliyorum.

Karşılaştırma · hesap

Her şirketi sadece kendi benzerleriyle karşılaştırarak puanlıyorum.

Yüzde otuz kâr marjının yüksek olup olmadığı şirketin ne iş yaptığına bağlı. Bu yüzden her şirketi sadece kendi grubunun içinde puanladım: yazılım şirketleri yazılım şirketleriyle, donanım şirketleri donanım şirketleriyle, bilişim hizmetleri de kendi aralarında karşılaştırılıyor. Her metrik, şirketin grubun içinde nereye düştüğüne göre 0–100 arasına yerleşiyor; kategoriler ağırlıklandırılıp tek bir puanda toplanıyor.

Riski ayrı bir puan olarak hesaplıyorum. Belirli eşiklerin altında kalan bir şirket, diğer puanları ne kadar iyi olursa olsun 70’i geçemiyor; böylece güçlü görünen ama riskli bir şirket listenin başına çıkamıyor.

Uç değerleri hesaba girmeden önce törpülüyorum, çünkü aksi hâlde tek bir aşırı şirket bütün grubun sırasını belirlerdi. Hesaplanamayan bir metriği de sıfır saymıyorum: o metrik boş bırakılıyor, ağırlığı diğer metriklere dağıtılıyor ve şirket “veri yok” diye işaretleniyor. Sıfır yazsaydım, eksik veri şirketin puanını haksız yere düşürürdü.

Rapor

Derin araştırmayı her gün seçilen üç-dört şirket için yapıyorum.

Puan tablosu çıktıktan sonra kısa ve ucuz bir model çağrısı tabloya bakıp o gün derinlemesine incelenecek üç-dört şirketi seçiyor. Seçilen şirketler ve on sabit makro konu için toplam 13–14 araştırma dalı aynı anda çalışıyor ve hepsi tek bir taslakta birleşiyor.

Asıl maliyet araştırmanın kendisinde, seçim ise ucuz bir iş. Bu yüzden seçimi en ucuz katmanda yaptım ve neye göre yapıldığını raporun başına yazdırdım.

Bir araştırma dalı boş dönerse rapor o bölümü atlamıyor; bölüm “veri bulunamadı” notuyla çıkıyor. Böylece raporu okuyan kişi neyin eksik kaldığını görebiliyor.

Doğrulama

Rapor gösterilmeden önce kodla yazılmış kurallardan geçiyor.

Taslak gösterilmeden önce birkaç kontrolden geçiyor: metindeki sayılar puan tablosuyla uyuşuyor mu, yatırım tavsiyesi olmadığı yazılmış mı, dayanağı olmayan bir iddia var mı. Bu kontrollerin hepsini kod olarak yazdım, çünkü bir sayının tabloyla uyuşup uyuşmadığını anlamak için bir modele sormaya gerek yok.

Ağır bir ihlal raporu durduruyor; hafif bir ihlalde rapor, uyarılarıyla birlikte açılıyor. İkinci bir model de rapora not veriyor. Bu not raporu uyarıyla işaretleyebiliyor ama tek başına durduramıyor; durdurma kararı kurallarda kalıyor.

Durdurulan rapor silinmiyor. Projenin kendi arayüzünde, ihlal listesi en başta olacak şekilde saklanıyor; böylece neyin neden durduğu sonradan da görülebiliyor.

Ölçülen

İzleme listesindeki kırk şirketin hepsi canlı veriyle puanlanıyor.

İzleme listesindeki kırk şirketin hepsi için veri canlı olarak çekiliyor ve hiçbiri “veri yok” diye düşmüyor. Tam bir yenileme şirket başına iki istek yapıyor: biri SEC’in resmî kayıtlarına, biri veri sağlayıcısına.

Sistemi API anahtarı olmadan da kurmak mümkün: üç komutla beş rapor ve kırk puan içeren, gezilebilir bir demo açılıyor.

Puanlama deterministik olduğu için aynı veri her seferinde aynı sonucu veriyor ve sonucun hangi bileşenden geldiği satır satır izlenebiliyor.

03

Nasıl çalışır

TechInves’in mimarisi Aynı veri iki yola ayrılıyor. Solda, modelsiz puanlama her şirketi kendi grubunda 0–100 arasına yerleştirip puan tablosunu çıkarıyor. Sağda, ucuz bir model tablodan üç-dört şirket seçiyor, 13–14 araştırma dalı aynı anda çalışıyor ve tek bir taslakta birleşiyor. Taslak soldaki kurallardan geçiyor; rapor hakkındaki kararı kurallar veriyor. İkinci bir modelin notu yalnızca uyarı ekleyebiliyor. kod · hesaplar model · yazar sayılar uyarı Veri SEC · veri sağlayıcı Puanlama grup içi · 0–100 Puan tablosu 40 şirket Seçim ucuz model şirket şirket makro Taslak dallar tek metinde Kurallar sayı · uyarı · iddia İkinci model not verir Rapor 4 karar seviyesi

Puan

  1. Her şirket için iki istek: SEC’in resmî kayıtları ve veri sağlayıcısı.
  2. Her şirket yalnız kendi grubunda karşılaştırılıyor: yazılım yazılımla, donanım donanımla. Uç değerler önce törpüleniyor.
  3. Hesaplanamayan metrik sıfır sayılmıyor: boş kalıyor, ağırlığı diğerlerine dağıtılıyor.
  4. Aynı veri her seferinde aynı puanı veriyor. Bu katmanda tek bir model çağrısı yok.

Rapor

  1. Ucuz bir model tabloya bakıp o gün incelenecek üç-dört şirketi seçiyor.
  2. Seçilen şirketler ve on makro konu: 13–14 araştırma dalı aynı anda çalışıyor.
  3. Dallar tek bir taslakta birleşiyor. Boş dönen dal atlanmıyor; bölüm “veri bulunamadı” diye çıkıyor.
  4. Taslak kurallardan geçiyor: sayılar tabloyla uyuşuyor mu, tavsiye uyarısı var mı, dayanaksız iddia var mı. Bu kontrollerin hepsi kodla yapılıyor.
  5. Raporun yayına çıkıp çıkmayacağına kurallar karar veriyor. İkinci modelin notu raporu uyarıyla işaretleyebiliyor ama durduramıyor.

İhlal

  1. Taslaktaki bir sayı tabloyla uyuşmuyor.
  2. Ağır ihlal raporu durduruyor. Bu kararı kod veriyor; ikinci model bu adıma hiç girmiyor.
  3. Durdurulan rapor silinmiyor; arayüzde, ihlal listesi en başta olacak şekilde saklanıyor.
Solda kod hesaplıyor ve karar veriyor; gölgeli alanda model seçiyor ve yazıyor. akış.