Files
iddaai-be/mds/archive/01_project_status_and_overview.md
fahricansecer 2f0b85a0c7
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s
first (part 2: other directories)
2026-04-16 15:11:25 +03:00

83 lines
3.8 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Proje Genel Bakış ve Durum Raporu
**Tarih:** 4 Şubat 2026
**Durum:** Aktif Geliştirme / Stabilizasyon
## 1. Proje Özeti
Suggest-Bet-BE, futbol ve basketbol maçları için yapay zeka destekli tahminler üreten, canlı veri akışı sağlayan ve kullanıcıya "Akıllı Kupon" önerileri sunan gelişmiş bir "Betting AI" backend projesidir.
### Ana Teknoloji Yığını
- **Backend:** NestJS (TypeScript)
- **Database:** PostgreSQL (Prisma ORM)
- **AI Engine:** Python (PyTorch, V17 Player-Aware Model)
- **Data Gathering:** Puppeteer/Cheerio (Feeder Scraper)
- **Job Queue:** Cron Jobs (NestJS Schedule)
---
## 2. Kritik Modüller ve Mimari
### A. AI Engine (V17 Player-Aware Model)
Projenin beyni `ai-engine/` klasöründedir.
- **Model:** `PlayerDeepModelV17` (`player_model_v17.py`). Oyuncuları embedding vektörleri olarak ele alır, takım kadrosunu toplayarak "takım gücü" çıkarır ve bunu oranlar/form durumu ile birleştirir.
- **Girdi:** Ev/Deplasman ilk 11 ID'leri + 24 boyutlu Context Vektörü (Oranlar, Form, H2H).
- **Çıktı:** Maç Sonucu (1X2), Toplam Gol (Home/Away), BTTS, HT/FT, Alt/Üst Olasılıkları.
- **Servis:** `smart_coupon_service.py` üzerinden `argparse` ile CLI olarak çalışır ve JSON çıktı verir.
### B. Feeder System (Canlı Veri Akışı)
Canlı ve maç öncesi verileri toplar.
- **Scraper:** `FeederScraperService`, Mackolik.com üzerinden HTML parse eder.
- **Persistence:** `FeederPersistenceService`, veriyi DB'ye normalize eder.
- **Live Sync:** Canlı maçlarda veri eksikliği (kadro, oran) durumunda `live_matches` tablosundaki JSON kolonlarına (`odds`, `lineups`) yazar ve oradan okur.
### C. Smart Coupon Service (NestJS)
Kullanıcı ile AI arasındaki köprüdür.
- **Analyze Match:** Tek bir maç için Python scriptini çalıştırır.
- **Kadro Kontrol:** Eğer kadro yoksa "Yetersiz Veri" hatası döner (veya auto-fetch dener).
- **Oran Kontrol:** Oran yoksa auto-fetch dener.
---
## 3. Son Yapılan Kritik Geliştirmeler (Güncel Durum)
### 1. Live Sync & DB Safety (Sorun: FK Hataları)
- **Durum:** Canlı maçlar bazen ana `matches` tablosunda ve ilişkisel tablolarda (`match_player_participation`) bulunmuyor, sadece `live_matches` tablosunda oluyordu.
- **Çözüm:** `FeederPersistenceService`, ana tabloda maç yoksa ilişkisel insert yapmayı durdurdu. Veriyi sadece `live_matches.jsonData` (lineups/odds) içine yazıyor.
- **Fallback:** Python servisi ve NestJS, veri okurken önce ilişkisel tabloya bakıyor, boşsa JSON kolonuna başvuruyor.
### 2. Score & Label Consistency (Sorun: Hatalı Skor/Oran Eşleşmesi)
- **Durum:** Modelin `1/1` tahmini `X/X` çıkıyordu. Mackolik'ten gelen "Beraberlik" oranı `X` etiketiyle geldiği için model bunu `0` görüp sapıtıyordu.
- **Çözüm:**
- `HT/FT` etiket sıralaması `ht*3 + ft` mantığına oturtuldu.
- Oran parse işleminde `X` ve `0` etiketleri eşitlendi.
- Analiz çıktısına `home_team_name` ve `away_team_name` eklendi (Doğrulama için).
### 3. Score Calibration (Sorun: Uçuk Deplasman Skorları)
- **Durum:** Model deplasman takımlarına çok fazla gol şansı veriyordu (Örn: Deplasman Favori olmasa bile 3-4 gol).
- **Çözüm:** 679 maçlık backtest ile optimizasyon yapıldı.
- `HOME_GOAL_SCALE = 1.00` (Değişmedi)
- `AWAY_GOAL_SCALE = 0.85` (%15 Törpüleme)
- **Sonuç:** Skor isabeti %16.34'e yükseldi, gol dengesi sağlandı.
---
## 4. Önemli Dosya Yolları
- **AI Model Class:** `ai-engine/models/player_model_v17.py`
- **Main Prediction Service:** `ai-engine/services/smart_coupon_service.py`
- **Backtest / Calibration:** `ai-engine/scripts/backtest_v17_scores.py`
- **Feeder Persistence:** `src/modules/feeder/feeder-persistence.service.ts`
- **Scraper:** `src/modules/feeder/feeder-scraper.service.ts`
- **NestJS Coupon Service:** `src/modules/coupons/services/smart-coupon.service.ts`