41 KiB
Executable File
🤖 Suggest-Bet-BE: Yapay Zeka için Tam Proje Rehberi
Bu dosya, projenin tamamını tek seferde anlamak isteyen yapay zeka sistemleri için hazırlanmıştır.
Tarih: 13 Şubat 2026
Versiyon: V20 "Beast" Ensemble
📋 İçindekiler
- Proje Özeti
- Teknoloji Stack'i
- Mimari Yapı
- Veritabanı Şeması
- AI Engine (V20)
- Feeder Sistemi
- API Endpoints
- Kullanıcı Sistemi
- Backtest Sonuçları
- Önemli Dosya Yolları
- Sık Kullanılan Komutlar
1. Proje Özeti
Amaç
Suggest-Bet-BE, futbol ve basketbol maçları için yapay zeka destekli tahminler üreten ve kullanıcılara "Akıllı Kupon" önerileri sunan gelişmiş bir Betting AI backend projesidir.
Ana İşlevler
| İşlev | Açıklama |
|---|---|
| AI Tahmin Motoru | V20 "Beast" Ensemble model ile maç tahminleri |
| Canlı Veri Akışı | Mackolik.com'dan otomatik veri çekme |
| Akıllı Kupon | Kullanıcıya değerli bahis önerileri |
| Risk Analizi | Surprise detection ile "trap" maç tespiti |
Hedef Marketler
- Maç Sonucu (1X2) - Ana güç alanı
- Alt/Üst (1.5, 2.5, 3.5)
- Karşılıklı Gol (BTTS)
- İlk Yarı/Sonu (HT/FT)
- Korner & Kart tahminleri
2. Teknoloji Stack'i
Backend
NestJS (TypeScript) - Strict Mode
├── Prisma ORM (PostgreSQL)
├── Redis Cache
├── BullMQ (Job Queue)
├── JWT + RBAC Auth
├── nestjs-i18n (Çoklu dil)
└── Swagger API Docs
AI Engine
Python 3.10+
├── XGBoost (6 market modeli)
├── PyTorch (Player embeddings)
├── NumPy/Pandas
└── PostgreSQL bağlantısı
Data Gathering
Puppeteer + Cheerio
├── Mackolik.com scraping
├── Live match tracking
└── Odds monitoring
Infrastructure
Docker + Docker Compose
├── PostgreSQL:15432
├── Redis:6379
└── Node.js:3000
3. Mimari Yapı
Sistem Akış Diyagramı
┌─────────────────────────────────────────────────────────────────────┐
│ MACKOLIK.COM │
│ (Veri Kaynağı) │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ FEEDER SYSTEM │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Scraper │→ │ Transformer │→ │ Persistence │ │
│ │ (Puppeteer) │ │ (Normalize) │ │ (Prisma) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ POSTGRESQL DATABASE │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ matches │ │live_matches│ │odd_categories│ │predictions│ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ teams │ │ players │ │match_player │ │ users │ │
│ │ │ │ │ │participation│ │ │ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ AI ENGINE (V20) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │TeamPredictor │ │PlayerPredictor│ │OddsPredictor │ │RefereePred │ │
│ │ (Form/H2H) │ │ (Kadro) │ │ (Piyasa) │ │ (Hakem) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ V20 ENSEMBLE │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │MatchResult │ │ OverUnder │ │ HalfTime │ │ Risk │ │ │
│ │ │ Calculator │ │ Calculator │ │ Calculator │ │ Assessor │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ NESTJS BACKEND │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │PredictionsMod│ │ CouponsMod │ │ AuthMod │ │ UsersMod │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ REST API │ │
│ │ GET /predictions/:matchId POST /coupons GET /matches │ │
│ └──────────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ KULLANICI │
│ (Web/Mobile Frontend) │
└─────────────────────────────────────────────────────────────────────┘
Klasör Yapısı
Suggest-Bet-BE/
├── src/ # NestJS Backend
│ ├── main.ts # Entry point
│ ├── app.module.ts # Root module
│ ├── common/ # Shared utilities
│ │ ├── base/ # BaseService, BaseController
│ │ ├── filters/ # Global exception filter
│ │ ├── interceptors/ # Response wrapper
│ │ └── types/ # API response types
│ ├── config/ # Configuration
│ ├── database/ # Prisma service
│ ├── i18n/ # Translation files
│ └── modules/ # Feature modules
│ ├── admin/ # Admin panel
│ ├── auth/ # Authentication
│ ├── coupons/ # Coupon system
│ ├── feeder/ # Data scraping
│ │ ├── feeder.service.ts
│ │ ├── feeder-scraper.service.ts
│ │ ├── feeder-transformer.service.ts
│ │ └── feeder-persistence.service.ts
│ ├── gemini/ # Google Gemini AI
│ ├── health/ # Health checks
│ ├── leagues/ # League management
│ ├── matches/ # Match management
│ ├── predictions/ # AI predictions
│ │ ├── predictions.service.ts
│ │ ├── services/
│ │ │ └── ai-feature-store.service.ts
│ │ └── queues/
│ │ └── predictions.processor.ts
│ └── users/ # User management
│
├── ai-engine/ # Python AI Engine
│ ├── main.py # FastAPI entry
│ ├── config/
│ │ └── ensemble_config.yaml # Model config
│ ├── core/
│ │ ├── calculators/ # Market calculators
│ │ │ ├── match_result_calculator.py
│ │ │ ├── over_under_calculator.py
│ │ │ ├── half_time_calculator.py
│ │ │ ├── score_calculator.py
│ │ │ ├── risk_assessor.py
│ │ │ └── bet_recommender.py
│ │ └── engines/ # Prediction engines
│ │ ├── team_predictor.py
│ │ ├── player_predictor.py
│ │ ├── odds_predictor.py
│ │ └── referee_predictor.py
│ ├── features/ # Feature engineering
│ │ ├── elo_system.py
│ │ ├── h2h_engine.py
│ │ ├── momentum_engine.py
│ │ ├── poisson_engine.py
│ │ ├── referee_engine.py
│ │ ├── squad_analysis_engine.py
│ │ ├── upset_engine.py
│ │ └── value_calculator.py
│ ├── models/ # ML Models
│ │ ├── v20_ensemble.py # Main predictor
│ │ ├── calibration.py
│ │ └── xgboost/ # Trained XGBoost models
│ │ ├── xgb_ms.json # Maç Sonucu
│ │ ├── xgb_ou25.json # Over/Under 2.5
│ │ ├── xgb_ou15.json # Over/Under 1.5
│ │ ├── xgb_ou35.json # Over/Under 3.5
│ │ ├── xgb_btts.json # BTTS
│ │ └── xgb_ht_ft.json # HT/FT
│ ├── scripts/ # Utility scripts
│ │ ├── backtest_v20_feb9.py
│ │ ├── predict_live.py
│ │ └── extract_training_data.py
│ └── services/
│ └── coupon_builder_v2.py
│
├── prisma/
│ ├── schema.prisma # Database schema
│ └── seed.ts # Initial data
│
├── mds/ # Documentation
├── scripts/ # Utility scripts
├── colab_export/ # Training data
├── i18n/ # Translations
├── public/ # Static files
│
├── top_leagues.json # Target leagues (22 lig)
├── bet-type.json # Bet type definitions
├── docker-compose.yml # Docker config
├── package.json
└── README.md
4. Veritabanı Şeması
Entity-Relationship Diyagramı
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Country │────<│ League │────<│ Match │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌──────────────────────────┼──────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│OddCategory │ │MatchPlayer │ │MatchTeamStats │
│ │ │Participation │ │ │
└───────┬───────┘ └───────────────┘ └───────────────┘
│
▼
┌───────────────┐
│OddSelection │
│ │
└───────┬───────┘
│
▼
┌───────────────┐
│OddsHistory │
└───────────────┘
Tablo Açıklamaları
Çekirdek Tablolar
| Tablo | Açıklama | Önemli Kolonlar |
|---|---|---|
matches |
Geçmiş maç verileri | mstUtc (timestamp), scoreHome/Away, htScoreHome/Away, winner, iddaaCode, status, state |
live_matches |
Canlı maçlar | jsonData, odds (JSON), lineups (JSON), sidelined (JSON), refereeName, currentMinute, momentumScore |
teams |
Takımlar | id, name, slug, sport, logoUrl |
leagues |
Ligler | id, name, countryId, sport, competitionSlug |
players |
Oyuncular | id, name, slug |
Oran Tabloları
| Tablo | Açıklama | Önemli Kolonlar |
|---|---|---|
odd_categories |
Oran kategorileri | matchId, name (MS, Alt/Üst, BTTS, HT/FT) |
odd_selections |
Oran seçenekleri | name (1, X, 2), oddValue, sov, state |
odds_history |
Oran değişimleri | previousValue, newValue, changeTime |
Örnek Veri Yapısı:
odd_categories: name = "Maç Sonucu", matchId = "abc123"
└── odd_selections:
├── name="1", oddValue="1.50" (Ev sahibi kazanır)
├── name="X", oddValue="4.20" (Beraberlik)
└── name="2", oddValue="6.00" (Deplasman kazanır)
Kadro & Olay Tabloları
| Tablo | Açıklama | Önemli Kolonlar |
|---|---|---|
match_player_participation |
Maç kadrosu | playerId, teamId, position, shirtNumber, isStarting |
match_player_events |
Olaylar | eventType (GOAL, CARD, SUBSTITUTION), timeMinute, assistPlayerId |
match_team_stats |
Takım istatistikleri | possessionPercentage, shotsOnTarget, corners, fouls |
match_officials |
Hakemler | name, roleId |
AI Tabloları
| Tablo | Açıklama | Önemli Kolonlar |
|---|---|---|
match_ai_features |
Hesaplanmış feature'lar | homeElo, awayElo, homeFormScore, awayFormScore, missingPlayersImpact |
predictions |
Model tahminleri | predictionJson (JSON formatında tüm tahminler) |
ai_predictions_log |
Performans takibi | modelVersion, confidenceScore, isCorrect, accuracyScore |
Örnek predictions.predictionJson:
{
"match_result": {
"1": 45.2,
"X": 28.1,
"2": 26.7,
"pick": "1",
"confidence": 72.5
},
"over_under_25": {
"over": 55.0,
"under": 45.0,
"pick": "Over",
"confidence": 61.2
},
"btts": { "yes": 48.3, "no": 51.7, "pick": "No" },
"risk_level": "MEDIUM",
"xg": { "home": 1.45, "away": 1.12, "total": 2.57 }
}
Kullanıcı Tabloları
| Tablo | Açıklama | Önemli Kolonlar |
|---|---|---|
users |
Kullanıcılar | email, role (user/admin), subscriptionStatus (free/premium) |
user_coupons |
Kuponlar | strategy, totalOdds, status (PENDING/WON/LOST) |
user_coupon_items |
Kupon kalemleri | matchId, selection, oddAtTime, isCorrect |
usage_limits |
Kullanım limitleri | analysisCount, couponCount, lastResetDate |
5. AI Engine (V20)
V20 "Beast" Ensemble Mimarisi
V20, 4 bağımsız prediction motorunu birleştiren bir ensemble sistemdir:
┌─────────────────────────────────────────────────────────────────────┐
│ V20 ENSEMBLE PREDICTOR │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │
│ │TeamPredictor │ │PlayerPredictor│ │OddsPredictor │ │RefereePred │ │
│ │ │ │ │ │ │ │ │ │
│ │ • Form │ │ • Kadro │ │ • Piyasa │ │ • Hakem │ │
│ │ • H2H │ │ • Oyuncu │ │ eğilimi │ │ istatistik│ │
│ │ • ELO │ │ rating │ │ • Value bet │ │ • Kart trend│ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └─────┬──────┘ │
│ │ │ │ │ │
│ └────────────────┴────────────────┴───────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ UPSET ENGINE │ │
│ │ (Surprise Detection - Sürpriz Tespiti) │ │
│ │ • Favori takımın kaybetme riski │ │
│ │ • Derby tension, motivation gap │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ MARKET CALCULATORS │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │MatchResult │ │ OverUnder │ │ HalfTime │ │ Risk │ │ │
│ │ │ Calculator │ │ Calculator │ │ Calculator │ │ Assessor │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ BET RECOMMENDER │ │
│ │ (En iyi bahis önerilerini seçer) │ │
│ └──────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Engine Detayları
| Engine | Girdi Verileri | Çıktı |
|---|---|---|
| TeamPredictor | matches (geçmiş), leagues |
Form skoru, H2H analizi, ELO rating |
| PlayerPredictor | match_player_participation, players |
Kadro gücü, eksik oyuncu etkisi |
| OddsPredictor | odd_categories, odd_selections |
Piyasa eğilimi, value bet tespiti |
| RefereePredictor | match_officials |
Hakem kart ortalaması, fair play skoru |
| UpsetEngine | Tüm engine'ler + context | Surprise risk (LOW/MEDIUM/HIGH/EXTREME) |
XGBoost Modelleri
| Model Dosyası | Market | Açıklama |
|---|---|---|
xgb_ms.json |
Maç Sonucu (1X2) | Ev, beraberlik, deplasman olasılıkları |
xgb_ou15.json |
Alt/Üst 1.5 | 1.5 gol üst/alt |
xgb_ou25.json |
Alt/Üst 2.5 | 2.5 gol üst/alt |
xgb_ou35.json |
Alt/Üst 3.5 | 3.5 gol üst/alt |
xgb_btts.json |
BTTS | Karşılıklı gol var/yok |
xgb_ht_ft.json |
HT/FT | İlk yarı/sonu kombinasyonları |
FullMatchPrediction Çıktısı
@dataclass
class FullMatchPrediction:
# Maç Bilgisi
match_id: str
home_team: str
away_team: str
# Maç Sonucu (1X2)
ms_home_prob: float # Ev kazanma olasılığı
ms_draw_prob: float # Beraberlik olasılığı
ms_away_prob: float # Deplasman kazanma olasılığı
ms_pick: str # "1", "X", veya "2"
ms_confidence: float # Güven skoru (0-100)
# Alt/Üst
over_25_prob: float
under_25_prob: float
ou25_pick: str # "Over" veya "Under"
# BTTS
btts_yes_prob: float
btts_no_prob: float
btts_pick: str # "Yes" veya "No"
# xG (Expected Goals)
home_xg: float
away_xg: float
total_xg: float
# Skor Tahminleri
predicted_ft_score: str # "2-1"
predicted_ht_score: str # "1-0"
ft_scores_top5: List[Dict] # En olası 5 skor
# Risk
risk_level: str # "LOW", "MEDIUM", "HIGH", "EXTREME"
is_surprise_risk: bool # Sürpriz riski var mı?
risk_warnings: List[str]
# Öneriler
best_bet: MarketPrediction
recommended_bets: List[MarketPrediction]
6. Feeder Sistemi
Veri Akışı
┌─────────────────┐
│ MACKOLIK.COM │
│ │
│ • Livescores │
│ • Kadrolar │
│ • Oranlar │
│ • İstatistikler │
└────────┬────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ FeederScraperService │
│ │
│ URL: https://www.mackolik.com/perform/p0/ajax/components/ │
│ competition/livescores/json │
│ │
│ Query Params: │
│ • date: YYYY-MM-DD │
│ • sport: football/basketball │
│ │
│ Headers: │
│ • User-Agent: Mozilla/5.0... │
│ • X-Requested-With: XMLHttpRequest │
│ • Accept-Language: tr-TR,tr;q=0.9 │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ FeederTransformerService │
│ │
│ • Ham JSON → Normalize edilmiş objeler │
│ • Takım isimleri standardizasyonu │
│ • Oran formatı dönüşümü │
│ • Timestamp conversion │
└────────────────────────────┬────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ FeederPersistenceService │
│ │
│ • matches tablosuna yaz │
│ • live_matches tablosuna yaz (canlı maçlar) │
│ • odd_categories / odd_selections │
│ • match_player_participation (kadrolar) │
│ • match_player_events (goller, kartlar) │
│ │
│ State Management: │
│ • historical_scan_state_football_desc (kaldığı yer) │
└─────────────────────────────────────────────────────────────────────┘
Feeder Scriptleri
| Script | Komut | Açıklama |
|---|---|---|
run-feeder.ts |
npm run feeder:historical |
Tüm tarihsel veri (2.5 sezon) |
run-feeder-filtered.ts |
npm run feeder:fill-gaps |
Sadece top 22 lig |
run-feeder-basketball.ts |
npm run feeder:basketball |
Basketbol verileri |
run-live-feeder.ts |
npm run feeder:live |
Canlı maç takibi |
fill-gaps Script Detayı
// src/scripts/run-feeder-filtered.ts
// 1. top_leagues.json'dan lig ID'lerini oku (22 lig)
const targetLeagues = JSON.parse(fs.readFileSync('top_leagues.json'));
// 2. Tarih aralığı: 2023-07-01 → Dün
const START_DATE = '2023-07-01';
// 3. Reverse scan (geriye doğru)
// Dün'den başlayıp 2023-07-01'e kadar gider
// 4. Her gün için:
// - Mackolik API'den livescores çek
// - Sadece top_leagues'deki maçları işle
// - Zaten DB'de olanları atla
// - Her 10 maçta 4 saniye cooldown
// 5. State kaydet (kaldığı yerden devam et)
Top Leagues (22 Lig)
[
"Premier League (İngiltere)",
"La Liga (İspanya)",
"Serie A (İtalya)",
"Bundesliga (Almanya)",
"Ligue 1 (Fransa)",
"Süper Lig (Türkiye)",
"Eredivisie (Hollanda)",
"Primeira Liga (Portekiz)",
"Pro League (Belçika)",
"Bundesliga (Avusturya)",
"Super League (İsviçre)",
"Scottish Premiership (İskoçya)",
"Championship (İngiltere)",
"La Liga 2 (İspanya)",
"Serie B (İtalya)",
"2. Bundesliga (Almanya)",
"Ligue 2 (Fransa)",
"Primera Division (Arjantin)"
// ... ve daha fazlası
]
7. API Endpoints
Authentication
| Method | Endpoint | Açıklama |
|---|---|---|
| POST | /auth/register |
Yeni kullanıcı kaydı |
| POST | /auth/login |
Giriş (JWT döner) |
| POST | /auth/refresh |
Token yenileme |
| GET | /auth/me |
Mevcut kullanıcı bilgisi |
Matches
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /matches |
Maç listesi (pagination) |
| GET | /matches/:id |
Tek maç detayı |
| GET | /matches/live |
Canlı maçlar |
| GET | /matches/date/:date |
Tarihe göre maçlar |
Predictions
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /predictions/:matchId |
Maç tahmini |
| POST | /predictions/analyze |
Toplu analiz |
| GET | /predictions/smart-coupon |
Akıllı kupon önerisi |
Coupons
| Method | Endpoint | Açıklama |
|---|---|---|
| POST | /coupons |
Yeni kupon oluştur |
| GET | /coupons |
Kullanıcının kuponları |
| GET | /coupons/:id |
Kupon detayı |
| PATCH | /coupons/:id/status |
Kupon durumu güncelle |
Leagues
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /leagues |
Lig listesi |
| GET | /leagues/:id |
Lig detayı |
| GET | /leagues/:id/matches |
Lig maçları |
Admin
| Method | Endpoint | Açıklama |
|---|---|---|
| GET | /admin/users |
Kullanıcı listesi |
| PATCH | /admin/users/:id |
Kullanıcı güncelle |
| GET | /admin/stats |
Sistem istatistikleri |
8. Kullanıcı Sistemi
Roller
| Rol | Yetkiler |
|---|---|
user |
Tahmin görüntüleme, kupon oluşturma |
admin |
Tüm yetkiler + kullanıcı yönetimi |
Abonelik
| Durum | Limitler |
|---|---|
free |
Günlük 3 analiz, 1 kupon |
premium |
Sınırsız analiz ve kupon |
Kullanım Limiti Sistemi
// Her kullanıcı için usage_limits tablosu
{
analysisCount: 3, // Bugün yapılan analiz sayısı
couponCount: 1, // Bugün oluşturulan kupon
lastResetDate: "2026-02-13" // Son sıfırlama tarihi
}
// Her gece 00:00'da sıfırlanır
9. Backtest Sonuçları
90 Günlük Performans (V11 Referans)
| Market | Güven Eşiği | Bahis Sayısı | Kazanma Oranı | ROI |
|---|---|---|---|---|
| 1X2 | >%0 | 5,709 | %37.6 | +%18.65 ✅ |
| 1X2 | >%60 | 4,694 | %37.9 | +%15.30 ✅ |
| 1X2 | >%70 | 12 | %83.3 | +%632.92 💎 |
| O/U 2.5 | >%70 | 2,756 | %61.1 | -%7.14 ❌ |
| BTTS | >%0 | 5,709 | %47.8 | -%6.11 ❌ |
Analiz
Güçlü Yönler:
- Maç Sonucu (1X2) tahminlerinde %18.65 ROI - profesyonel seviye
- Yüksek güven (>70) ile %83.3 isabet - neredeyse hatasız
Zayıf Yönler:
- Gol marketleri (O/U, BTTS) negatif ROI
- xG hesaplamasında iyileştirme gerekiyor
Öneri:
- 1X2 marketine odaklan
- Confidence >%60 filtresi kullan
- Gol marketlerinden kaçın (model iyileştirilene kadar)
10. Önemli Dosya Yolları
AI Engine
| Dosya | Açıklama |
|---|---|
ai-engine/models/v20_ensemble.py |
Ana predictor sınıfı |
ai-engine/core/engines/team_predictor.py |
Team engine |
ai-engine/core/engines/player_predictor.py |
Player engine |
ai-engine/core/engines/odds_predictor.py |
Odds engine |
ai-engine/core/engines/referee_predictor.py |
Referee engine |
ai-engine/features/upset_engine.py |
Surprise detection |
ai-engine/scripts/backtest_v20_feb9.py |
Backtest scripti |
ai-engine/scripts/predict_live.py |
Canlı tahmin |
Backend
| Dosya | Açıklama |
|---|---|
src/modules/feeder/feeder.service.ts |
Feeder orchestration |
src/modules/feeder/feeder-scraper.service.ts |
Mackolik scraping |
src/modules/feeder/feeder-persistence.service.ts |
DB yazma |
src/modules/predictions/predictions.service.ts |
Tahmin servisi |
src/modules/coupons/services/smart-coupon.service.ts |
Kupon oluşturma |
src/scripts/run-feeder-filtered.ts |
fill-gaps scripti |
Config
| Dosya | Açıklama |
|---|---|
prisma/schema.prisma |
Veritabanı şeması |
top_leagues.json |
Hedef ligler (22 adet) |
ai-engine/config/ensemble_config.yaml |
Model konfigürasyonu |
.env.example |
Ortam değişkenleri örneği |
11. Sık Kullanılan Komutlar
Geliştirme
# Bağımlılıkları yükle
npm ci
# Geliştirme sunucusu başlat
npm run start:dev
# Production build
npm run build
npm run start:prod
# Lint
npm run lint
# Test
npm run test
Veritabanı
# Prisma client oluştur
npx prisma generate
# Migration çalıştır
npx prisma migrate dev
# Seed (ilk veriler)
npx prisma db seed
# Studio (GUI)
npx prisma studio
Feeder
# Tarihsel veri çek (tüm ligler)
npm run feeder:historical
# Eksik verileri tamamla (top 22 lig)
npm run feeder:fill-gaps
# Basketbol verileri
npm run feeder:basketball
# Canlı maç takibi
npm run feeder:live
# Canlı maç temizleme
npm run cleanup:live
Docker
# Tüm servisleri başlat
docker-compose up -d
# Sadece DB ve Redis
docker-compose up -d postgres redis
# Logları görüntüle
docker-compose logs -f
# Durdur
docker-compose down
AI Engine
# Canlı tahmin
cd ai-engine
python scripts/predict_live.py --match_id <MATCH_ID>
# Backtest
python scripts/backtest_v20_feb9.py
# Eğitim verisi çıkar
python scripts/extract_training_data.py
🎯 Özet
Suggest-Bet-BE, futbol maçları için V20 Ensemble AI modeli kullanarak tahmin üreten, Mackolik.com'dan otomatik veri çeken, ve kullanıcılara akıllı kupon önerileri sunan kapsamlı bir bahis AI sistemidir.
Ana Güç: Maç Sonucu (1X2) tahminlerinde %18.65 ROI
Teknoloji: NestJS + PostgreSQL + Python (XGBoost) + Redis
Veri Kaynağı: Mackolik.com (scraping)
Hedef: Profesyonel seviyede bahis tahminleri ile kullanıcıya değer sağlamak
Bu dosya yapay zeka sistemleri için hazırlanmıştır. Tüm teknik detaylar güncel ve doğrudur.