Uludağ Üniversitesi — Yönetim Bilişim Sistemleri (YBS) Python ile Veri Bilimi — Dönem Sonu Projesi Sertaç Özdemir (Öğrenci No: 132530113)
Ransomware saldırılarının tatil dönemleri, Bitcoin piyasa dinamikleri ve güvenlik açığı (CVE) yoğunluğu ile ilişkisini makine öğrenmesiyle modelleyen bir siber tehdit istihbarat sistemi. Proje, beş farklı veri kaynağını Apache Kafka / Spark / HDFS / Hive üzerinde birleştirir, açıklanabilir bir model üretir ve sonuçları IBM Cost of a Data Breach 2024 raporu temelinde finansal bir simülasyona dönüştürür.
Ransomware saldırıları belirli takvim, piyasa ve tehdit koşullarında daha mı sık ve maliyetli oluyor? Bu risk finansal olarak nasıl ölçülmeli ve kurumlar nasıl proaktif olarak uyarılmalıdır?
4 Veri Kaynağı (entegre)
│
▼
Apache Kafka (3 topic: ransomware / btc / cve)
│
▼
Spark Connect (ETL + özellik mühendisliği)
│
▼
HDFS (/threatclock/raw, Parquet)
│
▼
Hive (threatclock.* tabloları, SQL ile sorgulanabilir)
│
▼
GradientBoosting Modeli + REST API
Not (ölçeklenebilirlik): Mevcut analiz tablosu (1.435 gün) tek makinede işlenebilir; Big Data mimarisi, üretimde günde milyonlarca ham olay akışını işleyecek ölçeklenebilirliği prototiplemek için kurulmuştur.
Dört veri kaynağı ETL ile günlük çözünürlükte birleştirilip modele entegre edilmiştir. NewsAPI/TextBlob duygu verisi toplanmış ancak (yalnızca 21 günlük kapsam taşıdığı ve medya sinyali zaten GDELT'in news_cyber_index sütununda mevcut olduğu için) nihai modele dahil edilmemiştir — bu, lift testi bulgusuyla da tutarlıdır.
| Kaynak | Kayıt | Durum | Erişim |
|---|---|---|---|
| Ransomware.live API PRO | 16.299 olay | ✅ Modele entegre | https://www.ransomware.live |
| Yahoo Finance (BTC-USD) | 1.827 gün | ✅ Modele entegre | https://finance.yahoo.com/quote/BTC-USD |
| NVD CVE API v2.0 | 31.706 CVE | ✅ Modele entegre | https://nvd.nist.gov/developers/vulnerabilities |
| GDELT Doc API v2 | 1.825 gün | ✅ Modele entegre | https://www.gdeltproject.org |
| NewsAPI + TextBlob | 338 haber | Toplandı, entegre edilmedi | https://newsapi.org |
Tüm ham veri setleri data/ klasöründedir (6 CSV dosyası, toplam < 100 MB). Lab ortamının internet kısıtı nedeniyle veriler kendi makinede indirilip JupyterHub'a CSV olarak yüklenmiştir.
| Kuşak | AUC-ROC | Hedef Tanımı | Özellikler | Değerlendirme |
|---|---|---|---|---|
| v1 (naif) | 0.7761 | Global medyan | Eşzamanlı (T₀) | Yüksek AUC ama zaman enflasyonu + look-ahead |
| v2 (erken uyarı) | 0.6461 | Rolling baseline (90g) | Gecikmeli (lag-1) | Dürüst AUC, gerçek öngörü |
v2 neden daha iyi bir modeldir? v1'in yüksek skoru iki "bedava" ayrımdan geliyordu: (1) zaman enflasyonu (saldırı sayısı 2020→2024 arası 20 kat arttığından etiket "hangi yıldayız"ı kodluyordu), (2) eşzamanlı tespit (bugünü bugünün verisiyle tahmin). v2 bunları kaldırarak gerçek bir erken uyarı sistemine dönüştü — model artık yalnızca dünün verisiyle bugünü tahmin ediyor.
- Zaman enflasyonu çözüldü: Rolling baseline ile yıllık yüksek-risk oranı dengelendi (2021–2024 hepsi ~%50).
- Erken uyarının temeli takvim: Out-of-sample testte en sağlam öngörücü
is_weekend— hafta içi risk %64.4 iken hafta sonu %13.6. Ransomware grupları mesai saatlerinde saldırıyor. - Overfitting tespiti: BTC momentum eğitimde baskın ağırlığa sahip ama 2024'e genellemyor (permutation importance ile saptandı).
- Finansal değer: Granüler sektör-ağırlıklı (16 sektör, IBM 2024) reaktif yıllık maliyet $922.7M; %30 risk azaltmayla ~$277M tasarruf potansiyeli (duyarlılık bandı: $92M–$461M).
threatclock/
├── README.md
├── ThreatClock_Yonetici_Ozeti.pdf # Yönetici özeti raporu
├── notebook/
│ └── ThreatClock.ipynb # Tüm kod (EDA → model → finansal → REST API)
└── data/ # 6 ham veri seti (< 100 MB)
├── ransomware_data.csv
├── btc_data.csv
├── cve_data.csv
├── gdelt_data.csv
├── news_data.csv
└── news_sentiment.csv
Not: Eğitilen model, REST API ve grafik üretimi ayrı dosyalar olarak değil, tek bir uçtan uca notebook (
notebook/ThreatClock.ipynb) içinde yer alır. Notebook çalıştırıldığında modeller diske kaydedilir ve built-inhttp.servertabanlı API son hücrede tanımlanır.
# Bağımlılıklar
pip install pyspark==3.5.8 scikit-learn==1.8.0 pandas==3.0.2 \
kafka-python numpy matplotlib seaborn shap textblob
# Notebook'u çalıştır (Restart & Run All ile yukarıdan aşağıya)
jupyter notebook notebook/ThreatClock.ipynbLab notu: Lab ortamı
shap(TreeExplainer) içerir; v3 modelinin global ve lokal açıklaması gerçek Shapley değerleriyle üretilmiştir (lineer yaklaşıklık değil).lime,flask,fastapiveprophetkurulu olmadığından REST API için Python built-inhttp.servertercih edilmiştir. Notebook, lab'ın Big Data altyapısına (Spark Connect, Kafka, HDFS, Hive) bağlanacak şekilde yapılandırılmıştır.
- Mimari: Gerçek zamanlı uyarı için son halka Hive (batch) değil, Spark Structured Streaming / edge inference API olmalı.
- Güvenlik: Pickle (CWE-502) yerine ONNX/skops gibi güvenli serileştirme kullanılmalı.
- XAI: Lokal waterfall (lineer yaklaşıklık) yerine TreeSHAP entegre edilmeli.
- Eşik: İki katmanlı eşik (Katman 1: otomatik log; Katman 2: analist eskalasyonu), üretimde boşta analist sayısına göre dinamik olmalı.
Akademik proje — yalnızca eğitim amaçlıdır. Veri kaynakları kendi lisans koşullarına tabidir.