# 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).