Bu proje, Trendyol platformu için geliştirilmiş bir ürün ranking ve recommendation sistemidir. CatBoost tabanlı ranking modeli ile kullanıcı arama sonuçlarında en relevan ürünlerin üst sıralarda gösterilmesini amaçlar.
trendyol/
├── feature.py # Feature engineering fonksiyonları
├── load_data.py # Veri yükleme işlemleri
├── main.py # Ana çalıştırma scripti
├── utils.py # Yardımcı fonksiyonlar
├── score.py # Değerlendirme metriği
├── optuna.ipynb # Hiperparametre optimizasyonu
├── solution.ipynb # Çözüm geliştirme notebook'u
└── requirements.txt # Gerekli paketler
uv venv venv --python 3.11# Linux/Mac
source venv/bin/activate
# Windows
venv\Scripts\activateuv pip install -r requirements.txtProjenin çalışması için data/ klasörünün aşağıdaki yapıda olması gerekir:
data/
├── train_sessions.parquet
├── test_sessions.parquet
├── content/
│ ├── metadata.parquet
│ ├── price_rate_review_data.parquet
│ ├── search_log.parquet
│ ├── sitewide_log.parquet
│ └── top_terms_log.parquet
├── user/
│ ├── metadata.parquet
│ ├── search_log.parquet
│ ├── sitewide_log.parquet
│ ├── fashion_search_log.parquet
│ ├── fashion_sitewide_log.parquet
│ └── top_terms_log.parquet
└── term/
└── search_log.parquet
python main.pyBu script:
- Veriyi lazy loading ile yükler
- Feature engineering işlemlerini gerçekleştirir
- Model validasyonu yapar
- Final modeli eğitir
submission.csvdosyasını oluşturur
jupyter notebook optuna.ipynbOptuna kullanarak en iyi hiperparametreleri bulur.
jupyter notebook solution.ipynbModel geliştirme ve test süreçleri için kullanılır.
create_session_context_features(): Zaman bazlı context featureları (saat, gün, hafta sonu vs)create_content_features_time_aware(): İçerik bazlı featurelar (fiyat, kategori, rating vs)create_user_features_time_aware(): Kullanıcı bazlı featurelar (yaş, tenure, aktivite vs)create_term_features_time_aware(): Arama terimi bazlı featurelarcreate_interaction_features(): Etkileşim featureları (user-content, content-term, user-term)create_relevance_features(): Relevans featureları (kelime eşleşmeleri)get_features(): Tüm feature engineering sürecini koordine eder
load_data_lazy(): Parquet dosyalarını Polars LazyFrame olarak yükler- Memory efficient veri yükleme
- Ana eğitim pipeline'ı
- Model validasyonu ve final model eğitimi
- Submission dosyası oluşturma
create_submission(): Test verisi için submission oluştururcreate_ranking_target(): Ranking hedef değişkenini oluştururcreate_submission_polars(): Validation için submission oluşturur
score(): Weighted AUC metriğini hesaplar (%70 ordered, %30 clicked)
Optimum parametreler:
best_params = {
'iterations': 550,
'learning_rate': 0.032038218939289875,
'depth': 7,
'l2_leaf_reg': 3.962700559185838,
'border_count': 200,
'bagging_temperature': 0.3200680211778108,
'random_strength': 0.00029315870423117155
}- Validation Timestamp: 2025-07-10 17:00:00+00:00
- Metrik: Weighted AUC (70% ordered + 30% clicked)
- Model: CatBoost Ranker
- Data Leak Önleme: Validation verisi olarak gelecek tarihli bir timestamp kullanıldı
- Categorical Encoding: CatBoost'un native kategorik değişken desteği kullanıldı
- Memory Optimization: Polars LazyFrame ile memory efficient işlemler
- Feature Engineering: Time-aware featurelar ile temporal patterns yakalandı
submission.csv: Final submission dosyası