28 KiB
Executable File
Suggest-Bet-BE - Tek Gerçek Kaynak (OZET.md)
Son güncelleme: 17 Şubat 2026
Kapsam: Bu dosya, projeyi devralmak/geliştirmek için gereken ana teknik bilgileri tek yerde toplar.
Kaynak: Doğrudan repo kodu (prisma/schema.prisma, src/*, ai-engine/*) üzerinden derlenmiştir.
1. Ürün Hedefi
Suggest-Bet-BE, canlı ve geçmiş maç verileri üzerinden AI tahminleri üretir.
Ana ürün akışı:
- Kullanıcı frontend’de
live_matchestablosundan maçı seçer. - Backend seçilen maçı AI engine’e gönderir (V20+ tek maç paketi).
- AI engine çoklu market olasılık paketi üretir.
- Kullanıcı bu önerilerden kuponunu manuel kurar.
- Aynı altyapı yaklaşan maç otomasyonları/sosyal medya çıktısı için tekrar kullanılır.
2. Teknoloji Stack
- Backend API: NestJS + TypeScript
- ORM/DB: Prisma + PostgreSQL
- Queue: BullMQ
- Cache: Redis (
cache-manager-redis-yet) - AI Engine: Python + FastAPI + XGBoost (+ ensemble logic)
- Scheduler:
@nestjs/scheduleCron - Auth: JWT + refresh token
- i18n:
nestjs-i18n
3. Kod Yapısı (Özet)
3.1 NestJS
Temel yol: /Users/piton/Documents/Suggest-Bet-BE/src
Önemli modüller:
authusersadminmatchespredictionscouponsanalysisfeederhealthleagues
Sistem seviyesinde:
database(Prisma servisleri)tasks(cron işleri)common/queues(BullMQ global queue config)
3.2 AI Engine
Temel yol: /Users/piton/Documents/Suggest-Bet-BE/ai-engine
Önemli bileşenler:
main.py(FastAPI endpointleri)services/single_match_orchestrator.py(ana orchestration)models/v20_ensemble.py(ana tahmin motoru)core/calculators/*core/engines/*features/*models/xgboost/*(model artefact)
4. Veritabanı Şeması - Ne Nerede?
Kaynak: /Users/piton/Documents/Suggest-Bet-BE/prisma/schema.prisma
4.1 Temel Sport Veri Tabloları
countries: ülke bilgilerileagues: lig bilgileri (country_id,sport)teams: takım bilgileri (sport,logo_url)players: oyuncu kayıtlarımatches: kalıcı maç kaydı (FT/historical dahil)live_matches: canlı/akış bazlı maç kaydı (JSON odds/lineups/sidelined dahil)
4.2 Odds Tabloları
odd_categories: market başlıkları (MS, OU, BTTS vb.)odd_selections: kategori alt seçimleri ve oran değerleriodds_history: oran değişim geçmişi
4.3 Maç İçi Detay Tabloları
match_team_stats: takım istatistikleri (futbol+basketbol alanları)match_player_participation: kadro/ilk 11 katılımımatch_player_events: gol/kart/değişiklik olaylarımatch_player_stats: oyuncu istatistiklerimatch_officials: hakem/yardımcı hakem vb.official_roles: hakem rol sözlüğü
4.4 AI Tabloları
match_ai_features: hesaplanmış feature cache/tabanıpredictions: match bazlı cache edilmiş prediction JSONai_predictions_log: tahmin/sonuç performans logu
4.5 Kullanıcı/Kupon Tabloları
usersrefresh_tokensusage_limitsuser_couponsuser_coupon_itemsanalyses
4.6 Sistem Tabloları
app_settings: state/checkpoint gibi key-value ayarlartranslations: runtime çeviri girdileri
4.7 İlişki Mantığı (kısa)
matchesmerkezi entity’dir.- Odds:
matches -> odd_categories -> odd_selections -> odds_history - Kadro/event/stats:
matches+teams+players - Kupon item:
user_coupon_items.match_id -> matches.id
5. API Envanteri (Backend)
Base prefix: /api
5.1 Auth (/auth)
POST /registerPOST /loginPOST /refreshPOST /logout
5.2 Predictions (/predictions)
GET /healthGET /upcomingGET /value-betsGET /historyGET /:matchIdPOST /generatePOST /smart-coupon
Not (çalışma modu):
REDIS_ENABLED=falseikenQueueModulevePredictionsModuleAppModule importundan çıkarılır; bu modda/api/predictions/*route'ları yüklenmez.REDIS_ENABLED=trueiken queue + predictions endpointleri aktif olur.
5.3 Coupons (/coupon)
POST /analyze-matchPOST /daily-bankoPOST /suggestPOST /createGET /my-statsGET /history
5.4 Matches (/matches)
POST /queryGET /GET /leagues/activeGET /:id
5.5 Leagues (/leagues)
GET /countriesGET /countries/:idGET /GET /:idGET /teams/searchGET /teams/:idGET /teams/:id/matchesGET /teams/h2h
5.6 Health (/health)
GET /GET /readyGET /live
5.7 Analysis (/analysis)
POST /analyze-matchesGET /history
5.8 Users (/users)
GET /me
5.9 Admin (/admin)
GET /usersGET /users/:idDELETE /users/:idGET /settingsGET /usage-limitsPOST /usage-limits/reset-allGET /analytics/overview
6. AI Engine API Envanteri
Ana dosya: /Users/piton/Documents/Suggest-Bet-BE/ai-engine/main.py
Ana route’lar:
GET /GET /healthPOST /v20plus/analyze/{match_id}POST /v20plus/couponGET /v20plus/daily-banker
Geriye uyumluluk alias’ları:
POST /predict/v20/{match_id}POST /v20/analyze/{match_id}POST /smart-couponPOST /v20/coupon
Not: Backend uygulaması artık yalnızca v20plus route'larını çağırır.
7. V20+ Ana Tahmin Mimarisi (Şu anki temel)
Ana servis: ai-engine/services/single_match_orchestrator.py
Akış:
- Maç verisini getir (
live_matchesöncelik,matchesfallback) - Odds çıkar (
live_matches.oddsJSON, yoksa relational odds fallback) - Lineup çıkar:
live_matches.lineupsJSON parse (id/playerId/personIddestekli)- yoksa
match_player_participation(aynı match,is_starting=true) fallback - yine yoksa tarih bazlı muhtemel XI fallback: ilgili takımın maç tarihinden önceki FT maçlarında en sık başlayan 11 oyuncu (home/away tarafları ayrı hesaplanır, karıştırılmaz)
- V20 ensemble çalıştır (
models/v20_ensemble.py) - Tek sözleşmede prediction package döndür
Package ana alanları:
match_infodata_qualityriskengine_breakdownmain_pickbet_advicebet_summarysupporting_picksaggressive_pickscenario_top5score_predictionmarket_boardreasoning_factors
Pick karar alanları (özellikle main_pick ve supporting_picks):
raw_confidencecalibrated_confidencemin_required_confidenceedgeplay_scoreplayablebet_grade(A/B/C/PASS)stake_unitsdecision_reasons
Bu sözleşme frontend + kupon + otomasyon için ortak temel kabul edilir.
8. Queue ve Asenkron İşler
Queue tanımı:
- Queue adı:
predictions-queue - Job tipleri:
predict-matchsmart-coupon
Kod:
src/modules/predictions/queues/predictions.types.tssrc/modules/predictions/queues/predictions.queue.tssrc/modules/predictions/queues/predictions.processor.tssrc/common/queues/queue.module.ts
9. Cron/Task Envanteri
Dosyalar:
src/tasks/data-fetcher.task.tssrc/tasks/live-updater.task.tssrc/tasks/limit-resetter.task.ts
Başlıca işler:
- 15 dk: canlı maç fetch (
fetchLiveMatches) - 15 dk: live score update (
updateLiveScores) - 30 dk: finished match finalize (
finalizeFinishedMatches) - Günlük 03:00: usage limit reset
- Günlük 04:00: eski data cleanup
- Günlük 00:00: subscription expiry check
10. Çalıştırma Komutları (Repo Gerçeği)
Kaynak: package.json
- Dev server:
npm run start:dev - Build:
npm run build - Test:
npm run test - E2E:
npm run test:e2e - Lint:
npm run lint
Feeder scriptleri:
npm run feeder:historicalnpm run feeder:fill-gapsnpm run feeder:basketballnpm run feeder:livenpm run cleanup:live
AI/backtest scriptleri (sık kullanılan):
python3 ai-engine/scripts/backtest_v20plus_today.pypython3 ai-engine/scripts/backtest_v20plus_today.py --date YYYY-MM-DDpython3 ai-engine/scripts/backtest_v20plus_today.py --date YYYY-MM-DD --end-date YYYY-MM-DD
11. Env Değişkenleri (Zorunlu/Önemli)
Kaynak: src/config/env.validation.ts
Kritikler:
NODE_ENV,PORTDATABASE_URLJWT_SECRETJWT_ACCESS_EXPIRATION,JWT_REFRESH_EXPIRATIONREDIS_ENABLEDREDIS_HOST,REDIS_PORT,REDIS_PASSWORDDEFAULT_LANGUAGE,FALLBACK_LANGUAGETHROTTLE_TTL,THROTTLE_LIMIT
Opsiyoneller:
ENABLE_MAIL,ENABLE_S3,ENABLE_WEBSOCKET,ENABLE_MULTI_TENANCY- Mail/S3 alanları
AI endpoint host’u:
- Backend tarafında
AI_ENGINE_URLenv’i zorunlu olarak set edilmelidir (önerilen:http://ai-engine:8000).
12. Model Artefact Durumu (Özet)
XGBoost artefact klasörü:
/Users/piton/Documents/Suggest-Bet-BE/ai-engine/models/xgboost
Aktif yüklenen pkl’ler:
xgb_ms.pklxgb_ou25.pklxgb_btts.pklxgb_ht_ft.pkl
Not:
- Bazı marketlerde
.jsondosyaları bulunabilir; inferans tarafı pkl odaklıdır.
13. Temizlenen/Legacy Kod Notu
V20+ geçişinde kaldırılan örnek dead code:
ai-engine/services/coupon_builder_v2.pysrc/modules/predictions/dto/python-prediction.dto.ts- birkaç eski debug/test Python scripti
Not:
- Repo’da kullanıcı kaynaklı başka değişiklikler olabilir; silme/temizlik öncesi
git statusile doğrulama şart.
14. Bilinen Riskler / Teknik Borç
- Repo genelinde
src/scripts/*altında mevcut TypeScript/lint hataları var (bu dosyalar ana runtime dışında). - Bazı ortamlarda
dist/klasörü permission/root ownership problemi build sürecini bozabiliyor. - Tahmin kalitesi için lineup/odds kapsamı kritik; eksik veri durumunda confidence düşürme stratejisi uygulanmalı.
- Contract testleri ve backtest raporlarının CI içine alınması henüz yeterli değil.
V20+ bet calibration şu an hafif katsayı tabanlı; pazar bazlı (MS/OU/BTTS) düzenli kalibrasyon pipeline'ı (ör. weekly recalibration) ile desteklenmeli.ÇÖZÜLDÜ: Isotonic Regression calibration sistemi eklendi (Şubat 2026).xgb_ou15.pklvexgb_ou35.pklbazı ortamlarda eksik olabilir; bu durumda ilgili marketler fallback mantıkla çalışır, kalite düşebilir.
15. Isotonic Regression Calibration Sistemi (Şubat 2026)
15.1 Genel Bakış
V20+ tahmin modelinin olasılık çıktılarını kalibre etmek için Isotonic Regression tabanlı bir calibration sistemi eklendi.
Neden Calibration?
- XGBoost modelleri genellikle aşırı güvenli (overconfident) tahminler üretir
- Örnek: Model %70 derken gerçek kazanma oranı %60 olabilir
- Isotonic Regression, tahmin edilen olasılıkları gerçek sonuç oranlarına map eder
15.2 Dosya Yapısı
ai-engine/models/
├── calibration.py # Ana calibration modülü
└── calibration/ # Eğitilmiş modeller (otomatik oluşturulur)
├── ms_home_calibrator.pkl
├── ms_home_metrics.json
├── ou25_calibrator.pkl
├── ou25_metrics.json
└── ...
15.3 Kullanım
from models.calibration import get_calibrator
calibrator = get_calibrator()
# Tek bir olasılığı kalibre et
raw_prob = 0.75
calibrated_prob = calibrator.calibrate("ou25", raw_prob)
# Örnek: 0.75 → 0.68 (daha gerçekçi)
15.4 Eğitim Scriptleri
# Tüm marketler için calibration eğitimi
python3 ai-engine/scripts/train_calibration.py
# Belirli marketler
python3 ai-engine/scripts/train_calibration.py --markets ou25 btts ms_home
# Tarih aralığı ile
python3 ai-engine/scripts/train_calibration.py --start 2026-01-01 --end 2026-02-15
# Sadece top ligler
python3 ai-engine/scripts/train_calibration.py --top-leagues-only
15.5 Backtest ve Doğrulama
# Calibration karşılaştırması
python3 ai-engine/scripts/backtest_calibration.py --start 2026-01-01 --end 2026-02-15
Çıktı Örneği:
Market N Raw Calibrated Improvement Status
ou25 1245 0.2134 0.1987 +0.0147 ✓ Better
btts 1189 0.2245 0.2101 +0.0144 ✓ Better
ms_home 1230 0.2456 0.2398 +0.0058 ✓ Better
15.6 Metrikler
| Metrik | Açıklama | İdeal Değer |
|---|---|---|
| Brier Score | Olasılık tahmin doğruluğu | 0 (mükemmel) |
| ECE | Expected Calibration Error | 0 (mükemmel) |
| Sample Count | Eğitim örnek sayısı | >1000 önerilir |
15.7 Desteklenen Marketler
ms_home,ms_draw,ms_away- Maç Sonucuou15,ou25,ou35- Alt/Üstbtts- Karşılıklı Golht_home,ht_draw,ht_away- İlk Yarı Sonucudc- Çifte Şansht_ft- İlk Yarı/Maç Sonucu
15.8 Weekly Recalibration Önerisi
En iyi sonuçlar için haftalık olarak calibration modellerini yeniden eğitin:
# Cron job (her Pazartesi 05:00)
0 5 * * 1 cd /path/to/ai-engine && python3 scripts/train_calibration.py --top-leagues-only
15.9 Backtest Sonuçları ve Optimizasyonlar (Şubat 2026)
V20 Ensemble Backtest Özeti (107 maç, 17-18 Şubat 2026):
| Market | Doğruluk | Değerlendirme |
|---|---|---|
| Alt/Üst 1.5 | 82.2% | 🔥 En yüksek |
| Çifte Şans | 76.6% | 🔥 Yüksek |
| İY Alt/Üst 0.5 | 75.7% | 🔥 Yüksek |
| Alt/Üst 2.5 | 65.4% | 👍 İyi |
| Maç Sonucu (1X2) | 57.0% | 👍 Orta |
| Alt/Üst 3.5 | 56.1% | 👍 Orta |
| KG Var/Yok | 47.7% | ⚠️ Düşük |
| İlk Yarı Sonucu | 41.1% | 💀 Çok düşük |
Confidence Bucket Analizi:
| Confidence Aralığı | Doğruluk | Öneri |
|---|---|---|
| 80%+ | 100.0% | Kesin banko |
| 60-80% | 70.0% | Güvenilir |
| 40-60% | 83.3% | 🔥 Sürpriz yüksek! |
| 0-40% | 49.4% | Riskli |
Önemli Bulgular:
- 40-60% confidence aralığı beklenenden çok daha yüksek doğruluk gösteriyor (83.3%)
- Bu nedenle MIN_CONFIDENCE threshold 60%'tan 40%'a düşürüldü
- Yüksek doğruluklu marketler (DC, OU15, HT_OU05, OU25) önceliklendirildi
Guaranteed Pick Optimizasyonu:
# Önceki (eski) değerler
MIN_CONFIDENCE = 60.0
# Yeni (optimize edilmiş) değerler
MIN_CONFIDENCE = 40.0 # Backtest sonucuna göre
HIGH_ACCURACY_MARKETS = {"DC", "OU15", "HT_OU05", "OU25"} # Öncelikli marketler
Market Calibration Değerleri (Backtest'e göre güncellendi):
market_calibration = {
"OU15": 0.82, # 82.2% accuracy - EN YÜKSEK
"DC": 0.77, # 76.6% accuracy
"HT_OU05": 0.76, # 75.7% accuracy
"OU25": 0.65, # 65.4% accuracy
"MS": 0.57, # 57.0% accuracy
"BTTS": 0.48, # 47.7% accuracy - düşük
}
16. İlgili Yeni Dokümanlar
- API response sözleşmesi:
mds/API_RESPONSE_SCHEMA.md
15. Karar: Bundan Sonra Tek Referans
Bu dosya (mds/OZET.md) tek ana referanstır.
Her büyük değişiklikten sonra şu alanlar güncellenecek:
-
- API envanteri
-
- V20+ mimari
-
- Task/Cron envanteri
-
- Model artefact durumu
-
- Riskler
Böylece context reset olsa bile proje devamlılığı bu dosyadan sağlanır.
17. Son Konuşma Güncellemesi (16 Şubat 2026)
Bu bölüm, son diyalogda netleşen teknik durumları özetler:
- HT/FT
.pklboyutu neden çok yüksek?
xgb_ht_ft.pklyaklaşık313.55 MBölçüldü.- Model tipi
CalibratedClassifierCV (cv=5)ve her fold içindeXGBClassifiervar. - HT/FT marketi
9 sınıfolduğu için ağaç sayısı katlanıyor (n_estimators=720,num_class=9,cv=5). - Sonuç: boyut büyük ama mevcut eğitim konfigürasyonuyla beklenen bir durum; zorunlu değil, yeniden eğitimle küçültülebilir.
- Neden farklı
match_idile aynı HT/FT sonucu çıktı?
- DB'siz hızlı testte
match_idfeature olarak kullanılmıyor. - Modele aynı feature vektörü verildiği için farklı ID’lerde aynı olasılık çıktısı üretiyor.
- Gerçek maça özel farklı sonuç için feature’ların match bazında DB’den üretilmesi gerekir.
- HT/FT testini kolaylaştırmak için yapılan API güncellemesi
ai-engine/main.pyiçine yeni endpoint eklendi:GET /v20plus/analyze-htft/{match_id}?timeout_sec=30
- Bu endpoint sadece HT/FT odaklı özet döndürür:
ht_ft_probs,surprise_hunter,ht_ft_reversal_radar,main_pick,bet_summary
- Timeout koruması var (uzun süre asılı kalmayı engeller, timeoutta
504döner).
- DB bağlantı davranışı (localhost/127) güncellemesi
ai-engine/data/db.pyiçinde host zorlaması kaldırıldı.- Artık
DATABASE_URLiçindeki host ne ise (localhost,postgres, vb.) aynen kullanılır. connect_timeoutekleme mantığı korundu (PGCONNECT_TIMEOUT, default5).
- Docker içi DB port düzeltmesi
docker-compose.ymliçinde container-to-container DB bağlantılarında yanlış port vardı (15432).- Düzeltilenler:
appservisi DB URL:postgres:15432ai-engineservisi DB URL:postgres:15432
- Not: Hosttan erişim için
127.0.0.1:15432map’i ayrı ve doğru.
- Deploy ve büyük model artefact notu
- GitHub dosya limiti nedeniyle büyük
.pkldosyaları normal push ile yönetilemeyebilir. - Daha doğru yaklaşım: model artefact’ı harici depodan indirmek (S3/release artifact) ve deploy sırasında bootstrap etmek.
18. Son Çalışma Güncellemesi (17 Şubat 2026) - HT/FT Analiz ve Düzeltmeler
Bu bölüm, kullanıcı talebiyle yapılan HT/FT odaklı tüm analiz ve kod değişikliklerini toplu özetler.
18.1 Hedef ve Kapsam
Hedef:
top_leagues.jsoniçindeki lig ID’lerine göre filtrelenmiş maçlarda HT/FT patternini çıkarmak.1/1,2/1,1/2,X/2gibi sonuçların hangi koşullarda arttığını bulmak.- Sonucu model davranışına (kalibrasyon/öncelik dağılımı) yansıtmak.
Kapsam:
- Veri kaynağı:
matches,live_matches,odd_categories,odd_selections,leagues,teams. - Lig filtresi: doğrudan
/Users/piton/Documents/Suggest-Bet-BE/top_leagues.json.
18.2 Top-Leagues HT/FT Bulguları (Özet İstatistik)
Top leagues football örneklemi:
n = 21,069
HT/FT dağılımı:
1/1: 26.43%2/2: 16.94%X/X: 15.85%X/1: 14.92%X/2: 10.57%2/1: 2.73%1/2: 2.30%
HT -> FT geçiş:
- HT
1ise FT1:78.02% - HT
2ise FT2:68.35% - HT
Xise FTX:38.35%, FT1:36.09%, FT2:25.56%
Reversal (1/2 + 2/1) devre farkına göre:
- Devre farkı
1:10.83% - Devre farkı
2:3.18% - Devre farkı
3:0.64%
Oran (MS 1X2) ilişkisi:
- Home fav maçlarda
1/1belirgin yüksek. - Away fav maçlarda
2/2belirgin yüksek. - Favori devre geriye düşerse
2/1veya1/2olasılığı belirgin artıyor.
Sonuç:
1/1biası tamamen bug kaynaklı değil; veri dağılımı gerçekten1/1ağırlıklı.- Ancak odds sinyali doğru parse edilmezse model tarafsız/fallback davranıp
1/1i gereğinden fazla öne çekebiliyor.
18.3 Kök Nedenler (Bug ve Davranış)
- Odds parser market eşleşmesi fazla genişti:
Maç Sonucuiçin substring kontrolü,İlk Yarı/Maç Sonucugibi marketlerle çakışıyordu.2,5 Alt/Üstkontrolü,2,5 Kart Puanı Alt/Üstile çakışıyordu.Karşılıklı Golkontrolü,1. Yarı Karşılıklı Golile çakışıyordu.- Sonuç: Ana market odds’ları overwrite oluyordu.
- Bazı maçlarda odds fallback defaultlarına düşülüyordu:
- Bu durum favori taraf sinyalini bozuyordu.
Decimaltipleri bazı yerlerde float bölme hatası üretiyordu:
- Prediction akışı kırılıyor veya testler fail oluyordu.
18.4 Yapılan Kod Değişiklikleri
- HT/FT prior odds-koşullu hale getirildi (
home_fav/away_fav/balanced):
- Dosya:
ai-engine/models/v20_ensemble.py - Eklenenler:
FOOTBALL_TOP_PRIOR_HOME_FAVFOOTBALL_TOP_PRIOR_AWAY_FAVFOOTBALL_TOP_PRIOR_BALANCED_favorite_side_from_ms_odds_get_top_odds_conditioned_prior- prior blending içinde odds-koşullu prior entegrasyonu
- Odds defaultları nötrleştirildi (home bias azaltımı):
- Dosya:
ai-engine/models/v20_ensemble.py - Dosya:
ai-engine/services/single_match_orchestrator.py - Dosya:
ai-engine/core/engines/odds_predictor.py - Yeni default:
ms_h=2.65,ms_d=3.20,ms_a=2.65
- Odds parser tam eşleşme mantığına geçirildi:
- Dosya:
ai-engine/services/single_match_orchestrator.py - Değişiklik:
- substring yerine normalize + exact category match
MS,OU15,OU25,OU35,BTTS,DCalanları güvenli eşleşme
- Decimal tip güvenliği eklendi:
- Dosya:
ai-engine/core/engines/odds_predictor.py_odds_to_probiçindefloat()cast
- Dosya:
ai-engine/features/sidelined_analyzer.py- DB stats alanlarına (
goals/assists/starts/matches) güvenli float cast
- DB stats alanlarına (
- HT/FT config ayarları eklendi/güncellendi:
- Dosya:
ai-engine/config/ensemble_config.yaml - Eklenen kritikler:
risk.htft_prior_odds_blend_toprisk.htft_prior_odds_blend_top_with_leaguerisk.htft_favorite_balance_gap
18.5 Test Komutları ve Sonuçlar
Kullanılan script:
python3 ai-engine/scripts/test_ht_ft_match.py --match-id <id>
Örnek sonuçlar:
Coventry vs Middlesbrough(8z03io3g443y73gwxbxk66590)
- Top1:
1/1(21.12%)
Girona vs Barcelona(2elfffvt87h2apmhh2c0et3pw)
- Odds doğru parse sonrası:
ms_h=6.38,ms_d=5.24,ms_a=1.19(away favori)
- Top1 HT/FT:
2/2(23.08%)
Bu test, parser ve odds-koşullu prior düzeltmesinin çalıştığını doğrular.
18.6 Operasyonel Not
- HT/FT yüzdeleri
confidencedeğil, sınıf olasılığıdır (probability). - Tek maçta yüzde düşükken farklı sonuç gerçekleşebilir; kalite ölçümü tek maç değil toplu backtest ile yapılmalıdır.
19. Son Çalışma Güncellemesi (17 Şubat 2026) - Veri Bütünlüğü, Type Uyumu, Uçtan Uca Test
Bu bölümde, live_matches üzerinden gelen verinin eksiksiz parse edilmesi, Python tarafındaki alanların type sözleşmesine uyumu ve tahmin paketine doğru aktarım için yapılan kritik düzeltmeler yer alır.
19.1 Hedef
- Oran kategori parse hatalarını engellemek.
- Eksik takım/lineup verisinde yanlış tahmin üretimini kesmek.
lineups,sidelined,referee,odds, takım formu ve lig pozisyonu gibi sinyalleri tek maç analizine güvenli taşımak.- Python tarafındaki sözleşmeyi TypeScript/uygulama beklentisiyle uyumlu hale getirmek.
19.2 Yapılan Kod Düzeltmeleri
- Team feature key eşleşmeleri düzeltildi:
- Dosya:
ai-engine/core/engines/team_predictor.py possession -> avg_possession,shots_on_target -> avg_shots_on_target,corners -> avg_corners
- Sahte lineup defaultları kaldırıldı:
- Dosya:
ai-engine/features/squad_analysis_engine.py or 11 / or 18fallbackleri temizlendi; gerçek sayılar kullanılıyor.
- Player predictor lineup gate ve confidence iyileştirildi:
- Dosya:
ai-engine/core/engines/player_predictor.py lineup_availableartık her iki takımda da en az 11 oyuncu şartına bağlı.- Lineup yokken confidence daha agresif düşürülüyor; alt sınır clamp ile korunuyor.
- Referee feature fallback güçlendirildi:
- Dosya:
ai-engine/core/engines/referee_predictor.py match_idile gelen veri zayıfsa vereferee_namevarsa isim bazlı daha güçlü örneklem seçiliyor.
- Tek maç orchestrator veri sözleşmesi genişletildi:
- Dosya:
ai-engine/services/single_match_orchestrator.py MatchDataeklendi:home_goals_avg,home_conceded_avg,away_goals_avg,away_conceded_avglineup_source
- Zorunlu gate:
home_team_idveyaaway_team_idyoksa analiz iptal (None).
- Yeni yardımcılar:
_calculate_team_form_estimate_league_position
_extract_lineupsartık(home, away, source)döner:confirmed_live,confirmed_participation,probable_xi,none
marketkararlarında:probable_xilineup-sensitive marketlerde ceza alır.- Zorunlu odds eksikse market
market_odds_missingile playable olmaz.
- Data quality:
- Gerçek odds ile default odds ayrıştırılır.
lineup_sourcekalite ve reasoning alanına taşınır.
- Testler yeni sözleşmeye göre güncellendi:
- Dosya:
ai-engine/tests/test_single_match_orchestrator.py - Yeni testler:
- takım id eksikse match load reject
- required odds yoksa market block
19.3 Çalıştırılan Testler
-
Python unit test:
python3 -m unittest discover -s ai-engine/tests -v- Sonuç:
19/19 PASS
-
Jest:
npx jest --runInBand- Sonuç:
2 suite / 4 test PASS
-
DB smoke doğrulama:
- Team ID eksik future match artık analiz edilmiyor.
- Complete veri içeren match normal analiz üretiyor.
19.4 Veri Kalitesi Bulgusu (Neden Bazı Maçlar Zayıf Kalıyor?)
future30içindelive_matchessatırlarındaleague_id/home_team_id/away_team_idçok yüksek oranda boş olabiliyor.- Aynı pencerede
odds/lineups/referee/sidelinedda çoğu zaman boş kalabiliyor. - Sonuç: model kapasitesi yüksek olsa da giriş verisi boşsa “sürpriz yakalama” veya “garanti market” üretimi sınırlanır.
Bu yüzden yeni yaklaşım:
- Eksik kritik alan varsa tahmini zorla üretme.
- Veri kaynağını
lineup_sourcegibi kalite etiketleriyle açıkça işaretle. - Eksik market odds varsa o marketi otomatik ele.
19.5 Basketbol Fazı (Bir Sonraki Adım Planı)
Futbol için kritik parse/type/quality sorunları stabilize edildi. Sıradaki odak basketbol:
- Basketbol market sözlüğü ve parser matrisi:
- 1X2 yerine basketbola özgü marketleri (
ML,spread,total) ayrı haritala.
- Basketbol feature contract:
match_team_statsiçindeki basketbol alanlarını (pace, rebound, turnover, 3P vb.) zorunlu/opsiyonel diye netleştir.
- Lineup/injury impact modeli (basketbol):
- İlk 5 ve rotasyon oyuncusu etkisini pozisyon ve usage ile ağırlıkla.
- Basketbol için ayrı confidence calibration:
- Futbol kalibrasyon katsayılarını basketbola taşımadan lig bazlı yeniden ayarla.
- Basketbol E2E test paketi:
live_matches -> orchestrator -> package -> market gatingzincirini basketbol maçları için ayrı fixture setiyle doğrula.
20) Swagger Endpoint Envanteri (2026-02-17)
20.1 Yapılanlar
- Swagger tag kapsamı genişletildi:
- Dosya:
src/main.ts - Eklenen tagler:
Matches,Leagues,Analysis,Coupon,Predictions
users/meendpointi Swagger’da eksiksiz tanımlandı:
- Dosya:
src/modules/users/users.controller.ts - Eklendi:
@ApiOperation({ summary: 'Get current authenticated user profile' })@ApiOkResponse({ type: UserResponseDto })
- Tüm backend endpointlerinin otomatik JSON özeti üretildi:
- Yeni script:
src/scripts/export-swagger-endpoints-summary.ts - NPM komutu:
npm run swagger:summary - Üretilen çıktı:
mds/backend_endpoints_swagger_summary.json
20.2 JSON Özeti İçeriği
Üretilen JSON dosyasında her endpoint için:
- HTTP method + path
- controller/method kaynak bilgisi
- endpoint summary/description
- auth gereksinimi (
bearer,@Public) - path/query/header/cookie parametre tipleri
- body şeması (Swagger’da varsa) + TypeScript body type hint
- response status listesi + şema referansları (Swagger’da varsa) + TypeScript return type
- tag bazlı endpoint sayıları
20.3 Not
PredictionsModule,AppModuleiçindeREDIS_ENABLEDkoşuluna bağlı olduğu için export scripti kapsamlı envanter içinREDIS_ENABLED=trueile Swagger dokümanı üretir.