Staj projem, çok kanallı EEG verilerini işleyip makine öğrenmesi modelleriyle sınıflandıran, modüler bir web platformu geliştirmekti. Proje; sinyal işleme (DSP), özellik mühendisliği ve ML pipeline entegrasyonu olmak üzere birbirini besleyen üç teknik katmandan oluşuyordu.

Mimari Kararlar

Backend için FastAPI'yi tercih ettim. Asenkron endpoint desteği, otomatik Swagger dokümantasyonu ve Pydantic tabanlı validasyon mekanizması, hızlı iterasyon için ideal bir zemin sunuyordu. Frontend tarafında ise herhangi bir JS framework kullanmama kararı aldım; saf HTML5, CSS3 ve ES6 ile yazılmış bir SPA, projenin bağımlılık yükünü sıfırda tuttu.

Pipeline'ı şu katmanlara ayırdım:

  1. - data_loader.py → CSV validasyon ve örnekleme frekansı tespiti
  2. - filters.py → Butterworth bandpass, Notch ve lineer detrending
  3. - epoching.py → Sliding window segmentasyonu
  4. - features.py → Zaman ve frekans alanı özellik çıkarımı (144 özellik/epoch)
  5. - models.py → SVM, Random Forest, XGBoost pipeline'ları ve GroupKFold çapraz doğrulama

Test Güdümlü Geliştirme

Her modülü önce birim testleriyle, ardından FastAPI TestClient ile entegrasyon testleriyle kapsama aldım. Proje sonunda 108 test, her commit'te çalışır halde kaldı. Bu yaklaşım özellikle chained PR yapısında kritikti; bir modüle yapılan değişikliğin üst katmanları bozup bozmadığı anında tespit edilebildi.

Git İş Akışı

Her staj günü için ayrı bir feature branch açıldı (day5-upload-api, day12-epoch-api vb.). Conventional commit formatı (feat, fix, test, docs, refactor) kullanıldı ve her değişiklik atomic commit'lerle kaydedildi. Günün sonunda bir Pull Request ile danışman hoca review'una sunuldu.

Bu iş akışı; değişiklik geçmişini anlamlı kıldı, review süreçlerini hızlandırdı ve regresyon riskini minimize etti.