# Suggest-Bet AI Engine V21.1 Güncelleme Özeti (Mart 2026)

Bu doküman, sistemin performansını artırmak, veri tutarsızlıklarını gidermek ve yeni bahis stratejileri eklemek amacıyla yapılan kapsamlı "Check-up" ve geliştirme sürecinin özetidir.

## 1. Sistem ve Veritabanı Analizi
* Docker üzerindeki `suggest-bet-db` veritabanına bağlanılarak tablolar (leagues, matches, teams, players vb.) ve canlı veriler incelendi.
* **V21 Yapay Zeka Motoru'nun** (Isotonic Calibration, Upset Detection) çalışma prensibi analiz edildi. Modelin özellikle Top League maçlarında taraf bahsinden (MS) ziyade neden defansif/garantici ("1.5 Üst" ağırlıklı) bir filtreleme kullandığı tespit edildi.

## 2. Python Testlerinin Onarılması
* `test_single_match_orchestrator.py` dosyasında, basketbol tahmin sınıfında (`BasketballMatchPrediction`) yaşanan parametre uyuşmazlığı (mock object kwargs hatası) tespit edildi.
* İlgili test objeleri güncellenerek Python test skoru tekrar **%100 başarılı (26/26)** hale getirildi.

## 3. Yapay Zeka Skor Modeli Güncellemesi (Kritik Düzeltme)
* **Sorun:** Sistemin Skor Modeli (XGBoost), V21 ile gelen 12 yeni özelliği (hakem istatistikleri, takım momentumu, sürpriz ihtimali vb.) tanımadığı için çökmeye ve basit bir xG (Poisson Dağılımı) hesabına (fallback) düşmeye başlamıştı.
* **Çözüm:** Veritabanındaki **19.819 adet bitmiş maç** yeni V21 özellikleriyle baştan çıkarıldı (`extract_training_data.py`). Skor (Score) ve Market (MS, OU) XGBoost modelleri **yeniden eğitildi**. Artık İlk Yarı (HT) ve Maç Sonucu (FT) skor tahminleri xG'ye değil, tam teşekküllü ve güncel makine öğrenmesine dayanmaktadır.

## 4. Mantıksal Tutarlılık Kilidi (Consistency Check)
* **Sorun:** Model bazen "Deplasman kazanır (MS2)" demesine rağmen skor tahmininde istatistiksel ortalamalara aldanıp "2-1 biter" gibi çelişkili skorlar üretebiliyordu.
* **Çözüm:** `ScoreCalculator` motoruna bir kilit ekledik. Artık skor algoritması, ana MS tahminine sadık kalarak, MS ihtimaline zıt düşen (Örn: MS2 ise 1-0, 2-1) tüm olasılıkları elliyor ve kendi içinde en mantıklı olan tutarlı skoru (Örn: 0-1, 1-2) seçip API'ye gönderiyor.

## 5. Yeni Özellik: Sürpriz ve Değerli Tahmin (`value_pick`)
* Sistemin aşırı garantici (Main Pick) yapısını bozmadan, yüksek oran arayan kullanıcılar için API'ye **`value_pick`** adında yeni bir obje eklendi.
* Model artık her maç için oranları **1.60 ve üzeri** olan, risk-ödül dengesi en yüksek (Confidence * Odds) "Sürpriz/Değerli" bahsi de ayrıca hesaplayıp sunuyor.
* Bu özellik hem **NestJS (Backend) DTO**'larına hem de çoklu maç üreten **Akıllı Kupon Motoruna** (`build_coupon`) entegre edildi. Artık `VALUE` veya `MIRACLE` stratejisiyle kupon talep edildiğinde sistem doğrudan `value_pick` tahminlerini kullanıyor.
* Frontend ekibi için `API_RESPONSE_SCHEMA.md` dokümantasyonu yeni `value_pick` alanı eklenerek güncellendi.

## 6. Özel Backtest Analizleri
* Sadece Top League takımlarını analiz edebilmek için `backtest_top_leagues_recent.py` ve 7-10 Şubat gibi spesifik tarih aralıkları için `backtest_7_10_subat.py` adında test araçları geliştirildi.
* Backtest sonuçlarına göre modelin Top League maçlarında taraf bahsi (MS) verdiği spesifik durumlardaki **%83.3** başarısı ve İlk Yarı gol (HT_OU05) pazarındaki **%80.0** başarısı verilerle kanıtlandı.

## 7. Muhtemel 11 (Probable XI) Algoritması Optimizasyonu
* **Sorun:** Sistem, devre arası transfer olan oyuncuları (Örn: T. Abraham) muhtemel 11'de göstermeye devam ediyordu çünkü istatistiksel geçmişi son 180 gün (6 ay) üzerinden hesaplıyordu.
* **Çözüm:** `_build_probable_xi` fonksiyonunun veri tarama penceresi son 180 günden **son 30 güne (yaklaşık 4-5 maç)** düşürüldü.
* Bu sayede sistem artık transfer dönemlerine ve uzun süreli sakatlıklara anında tepki vererek Beşiktaş, Galatasaray gibi takımların en güncel rotasyonlarını (Örn: Galatasaray'da N. Lang, G. Sara) kusursuz bir şekilde yakalayabiliyor.

## 8. Playable (Oynanabilirlik) Kalite Duvarı
* **Sorun:** Modelin bazen "Garantici" (Playable=True) listesine aldığı tahminler, ihtimali yüksek olsa bile yeterli kalite puanına sahip değildi (C sınıfı maçlar listeye sızabiliyordu).
* **Çözüm:** `single_match_orchestrator.py` içindeki oynanabilirlik sınavına katı bir kilit eklendi: `if play_score < 60.0: playable = False`.
* **Etki:** Model artık 119 maçlık zorlu bir fikstürde önüne gelen 48 maçı oynamak yerine sadece en çok güvendiği **A ve B kalitesindeki 10 maçı** seçiyor. Bu sayede "Playable=True" olan ana tahminlerin isabet oranı **%70.8'den %90.0'a** çıkarıldı (10 maçta 9 isabet).
