Mucahit S. commited on
Full README update: Topological Breakpoint results, GraphSAGE, Hypothesis tests, 11-paper lit review
Browse files
README.md
CHANGED
|
@@ -1,239 +1,216 @@
|
|
| 1 |
-
# 🔬
|
| 2 |
|
| 3 |
> **"Karmaşık yapay zekâ modelleri geliştirmeden önce, verinizi doğru bölün."**
|
| 4 |
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
Bu çalışma, Bitcoin kara para aklama (AML) tespit
|
| 8 |
|
| 9 |
-
|
| 10 |
|
| 11 |
---
|
| 12 |
|
| 13 |
-
## 🎯 Problem
|
| 14 |
|
| 15 |
-
###
|
|
|
|
| 16 |
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
- **Para transferleri** → Aralarındaki ilişkileri (kenarları) temsil eder
|
| 20 |
-
- **Amaç** → Bu ağın içinde kara para aklayan kötü niyetli aktörleri bulmak
|
| 21 |
|
| 22 |
-
|
| 23 |
|
| 24 |
-
|
| 25 |
|
| 26 |
-
|
| 27 |
-
- **Kronolojik bölme:** "İlk 34 timestep eğitim, son 15 timestep test"
|
| 28 |
-
- **Kayan pencere:** Sabit pencere boyutu ile ileri kaydırma
|
| 29 |
-
- **Rastgele bölme:** Her timestep'ten rastgele örnekleme (en yaygın ama en tehlikeli)
|
| 30 |
|
| 31 |
-
|
| 32 |
|
| 33 |
-
##
|
| 34 |
|
| 35 |
-
|
| 36 |
|
| 37 |
```
|
| 38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 39 |
```
|
| 40 |
|
| 41 |
-
|
| 42 |
|
| 43 |
-
|
| 44 |
|
| 45 |
-
|
| 46 |
|
| 47 |
-
|
| 48 |
-
|---------|-------|
|
| 49 |
-
| **Toplam düğüm** | 203,769 Bitcoin işlemi |
|
| 50 |
-
| **Etiketli düğüm** | 46,564 (%22.8) |
|
| 51 |
-
| **İllicit (kara para)** | 4,545 (%9.8) |
|
| 52 |
-
| **Licit (yasal)** | 42,019 (%90.2) |
|
| 53 |
-
| **Kenarlar** | 234,355 yönlü ödeme akışı |
|
| 54 |
-
| **Özellikler** | 166 (orijinal) + 8 (ağ topolojisi) = 173 |
|
| 55 |
-
| **Zaman adımları** | 49 (~2 haftalık aralıklar) |
|
| 56 |
|
| 57 |
-
##
|
| 58 |
|
| 59 |
-
|
| 60 |
|
| 61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|-----------|-------------|---------------|-------------|----------|
|
| 65 |
-
| 🔴 **Dark Market Zirvesi** | 9,11,13,15,16,20,25,26,28,29,32 | **%26.5** | 8,223 | Kara para aklamanın zirve yaptığı dönemler |
|
| 66 |
-
| ⚫ **Kapanma (Shutdown)** | 43 | %1.8 | 1,370 | Bilinen dark market kapanması |
|
| 67 |
-
| 🔵 **Kapanma Sonrası** | 44,45,46 | %0.9 | 3,524 | Suçluların sessizleştiği dönem |
|
| 68 |
-
| 🟠 **Toparlanma** | 47,48,49 | %6.4 | 1,793 | Yeni aktörlerin girişi |
|
| 69 |
-
| 🟢 **Normal Aktivite** | Geri kalan 31 TS | %7.0 | 31,654 | Standart ağ davranışı |
|
| 70 |
|
| 71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
|
| 73 |
---
|
| 74 |
|
| 75 |
-
## 🔑 Ana
|
| 76 |
|
| 77 |
-
###
|
| 78 |
|
| 79 |
-
|
| 80 |
-
|-------|-----------|-------------|----------|
|
| 81 |
-
| Logistic Regression | 0.584 | 0.310 | **-47%** 🔴 |
|
| 82 |
-
| Random Forest | 0.940 | 0.707 | **-25%** 🔴 |
|
| 83 |
-
| XGBoost | 0.961 | 0.714 | **-26%** 🔴 |
|
| 84 |
-
| LightGBM | 0.965 | 0.720 | **-25%** 🔴 |
|
| 85 |
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
-
|
| 89 |
|
| 90 |
-
|
| 91 |
-
|-------|---------------|-----------------|--------------------|----|
|
| 92 |
-
| LR | 0.959 | 0.880 | 0.912 | **-8.2%** |
|
| 93 |
-
| RF | 0.997 | 0.957 | 0.986 | **-4.0%** |
|
| 94 |
-
| XGB | 0.998 | 0.954 | 0.989 | **-4.5%** |
|
| 95 |
-
| LGBM | 0.999 | 0.955 | 0.991 | **-4.3%** |
|
| 96 |
|
| 97 |
-
|
| 98 |
|
| 99 |
-
| Model | Rastgele
|
| 100 |
-
|-------|---------------|------------------
|
| 101 |
-
|
|
| 102 |
-
|
|
| 103 |
-
|
|
| 104 |
-
|
|
| 105 |
|
| 106 |
-
|
| 107 |
|
| 108 |
-
###
|
| 109 |
|
| 110 |
-
|
| 111 |
-
-
|
| 112 |
-
|
| 113 |
-
|
|
|
|
|
|
|
| 114 |
|
| 115 |
---
|
| 116 |
|
| 117 |
## 📈 Görselleştirmeler
|
| 118 |
|
| 119 |
-
###
|
| 120 |
-

|
| 124 |
|
| 125 |
-
###
|
| 126 |
-
![
|
| 127 |
|
| 128 |
-
###
|
| 129 |
-
![
|
| 130 |
|
| 131 |
-
###
|
| 132 |
-
![
|
| 133 |
|
| 134 |
-
###
|
| 135 |
-
![Karmaşıklık
|
| 136 |
|
| 137 |
-
### Ağ
|
| 138 |
-
![
|
| 139 |
|
| 140 |
-
|
|
|
|
| 141 |
|
| 142 |
-
##
|
| 143 |
-
|
| 144 |
-
```python
|
| 145 |
-
def split_event_aware(X, y, timesteps, events, test_ratio=0.2):
|
| 146 |
-
"""
|
| 147 |
-
OLAY-FARKINDA BÖLME — Ana Katkımız
|
| 148 |
-
|
| 149 |
-
Algoritma:
|
| 150 |
-
1. Her olay tipinden son oluşumları test setine ata
|
| 151 |
-
2. Olay pencerelerini bütün tut (asla bir olayı bölme)
|
| 152 |
-
3. Test seti tüm olay tiplerini temsil etsin
|
| 153 |
-
4. Kronolojik sırayı mümkün olduğunca koru
|
| 154 |
-
"""
|
| 155 |
-
test_timesteps = set()
|
| 156 |
-
|
| 157 |
-
for event in unique_events:
|
| 158 |
-
event_ts = sorted(get_timesteps_for(event))
|
| 159 |
-
n_test = max(1, int(len(event_ts) * test_ratio))
|
| 160 |
-
test_timesteps.update(event_ts[-n_test:])
|
| 161 |
-
|
| 162 |
-
train_mask = timesteps NOT IN test_timesteps
|
| 163 |
-
test_mask = timesteps IN test_timesteps
|
| 164 |
-
|
| 165 |
-
return X[train_mask], X[test_mask], y[train_mask], y[test_mask]
|
| 166 |
-
```
|
| 167 |
-
|
| 168 |
-
### Bitcoin Ağı İçin Olay Tanımlama Kriterleri
|
| 169 |
-
|
| 170 |
-
| Olay | Tanımlama Kriteri |
|
| 171 |
-
|------|------------------|
|
| 172 |
-
| **Dark Market Zirvesi** | İllicit oranı > %18 olan timestep'ler |
|
| 173 |
-
| **Kapanma** | TS 43 (bilinen dark market kapanması, literatürde doğrulanmış) |
|
| 174 |
-
| **Kapanma Sonrası** | TS 44-46 (kapanma sonrası 3 zaman adımı, illicit < %1) |
|
| 175 |
-
| **Toparlanma** | TS 47-49 (illicit oranının tekrar yükselmeye başladığı dönem) |
|
| 176 |
-
| **Normal** | Yukarıdakilerin hiçbirine uymayan timestep'ler |
|
| 177 |
|
| 178 |
---
|
| 179 |
|
| 180 |
-
##
|
| 181 |
|
| 182 |
-
|
| 183 |
|
| 184 |
-
| # |
|
| 185 |
-
|---|----------|---------|----------------|
|
| 186 |
-
| 1 | **
|
| 187 |
-
| 2 | **
|
| 188 |
-
| 3 | **
|
| 189 |
-
| 4 | **
|
| 190 |
-
| 5 | **
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
|
| 192 |
-
|
| 193 |
|
| 194 |
-
|
| 195 |
-
- Logistic Regression (temel)
|
| 196 |
-
- Random Forest (topluluk, 300 ağaç)
|
| 197 |
-
- XGBoost (gradyan artırma, 300 tur)
|
| 198 |
-
- LightGBM (gradyan artırma, 300 tur)
|
| 199 |
|
| 200 |
---
|
| 201 |
|
| 202 |
-
##
|
| 203 |
|
| 204 |
-
###
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
|
|
|
| 209 |
|
| 210 |
-
###
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
|
| 216 |
---
|
| 217 |
|
| 218 |
## 📁 Proje Yapısı
|
| 219 |
|
| 220 |
```
|
| 221 |
-
├── README.md
|
| 222 |
-
├──
|
| 223 |
-
├──
|
| 224 |
-
|
| 225 |
-
│ ├──
|
| 226 |
-
│ ├──
|
| 227 |
-
│ ├──
|
| 228 |
-
│ ├──
|
| 229 |
-
│ ├──
|
| 230 |
-
│
|
| 231 |
-
|
| 232 |
-
├──
|
| 233 |
-
│ ├──
|
| 234 |
-
│
|
| 235 |
-
|
| 236 |
-
|
| 237 |
```
|
| 238 |
|
| 239 |
---
|
|
@@ -241,49 +218,43 @@ Modelleri kasıtlı olarak basit tuttuk — **mesele model değil, bölme strate
|
|
| 241 |
## 🔄 Tekrarlanabilirlik
|
| 242 |
|
| 243 |
```bash
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
```
|
| 247 |
|
| 248 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 249 |
|
| 250 |
---
|
| 251 |
|
| 252 |
-
##
|
| 253 |
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
|
|
|
|
|
|
| 260 |
|
| 261 |
---
|
| 262 |
|
| 263 |
## 📖 Atıf
|
| 264 |
|
| 265 |
```bibtex
|
| 266 |
-
@misc{
|
| 267 |
-
title={
|
| 268 |
author={Moco22},
|
| 269 |
year={2026},
|
| 270 |
howpublished={\url{https://huggingface.co/Moco22/elliptic-event-aware-splitting}},
|
| 271 |
-
note={
|
| 272 |
}
|
| 273 |
```
|
| 274 |
|
| 275 |
---
|
| 276 |
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
> **Rastgele bölme ile LightGBM %96.5 F1 rapor ediyor.**
|
| 280 |
-
> **Kronolojik bölme ile aynı LightGBM %72.0 F1'e düşüyor.**
|
| 281 |
-
>
|
| 282 |
-
> Bu %24.5'lik fark, hiçbir model iyileştirmesiyle kapatılamaz.
|
| 283 |
-
> Modelden önce, veriyi nasıl böldüğünüzü düşünün.
|
| 284 |
-
>
|
| 285 |
-
> **Doğru bölme + basit model > Yanlış bölme + karmaşık model.**
|
| 286 |
-
|
| 287 |
-
---
|
| 288 |
-
|
| 289 |
-
*🤗 Hugging Face ile oluşturulmuştur*
|
|
|
|
| 1 |
+
# 🔬 Topolojik Kırılma Noktasına Göre Veri Bölme: Bitcoin Kara Para Aklama Tespiti
|
| 2 |
|
| 3 |
> **"Karmaşık yapay zekâ modelleri geliştirmeden önce, verinizi doğru bölün."**
|
| 4 |
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
## 📌 Özet
|
| 8 |
|
| 9 |
+
Bu çalışma, Bitcoin kara para aklama (AML) tespit sistemlerinde **"Topolojik Kırılma Noktasına Göre Veri Bölme"** adlı yepyeni bir metodoloji sunmaktadır. Mevcut yaklaşımlar veriyi takvime göre sabit bir noktadan bölerken, biz ağın **matematiksel sağlığının çöktüğü kriz anını** otomatik olarak tespit edip veriyi tam o noktadan kesiyoruz.
|
| 10 |
|
| 11 |
+
Elliptic Bitcoin Dataset üzerinde **GraphSAGE (GNN) + 3 klasik model × 5 bölme stratejisi = 20 deney** gerçekleştirdik. Sonuçlar her iki hipotezimizi de doğruladı.
|
| 12 |
|
| 13 |
---
|
| 14 |
|
| 15 |
+
## 🎯 Problem ve Hipotezler
|
| 16 |
|
| 17 |
+
### Bağlam
|
| 18 |
+
Kripto para dünyası devasa bir sosyal ağdır. Cüzdanlar insanları, para transferleri aralarındaki ilişkileri temsil eder. Amacımız bu ağın içinde kara para aklayan aktörleri bulmaktır. Ancak bu ağ statik değildir — dark market kapanmaları, düzenleyici operasyonlar ve piyasa çöküşleri ağın yapısını kökten değiştirir.
|
| 19 |
|
| 20 |
+
### Literatürdeki Boşluk
|
| 21 |
+
Mevcut bilim insanları veriyi bölerken takvime bakarlar: "İlk 34 timestep eğitim, son 15 test." Ama gerçek hayatta olaylar takvime göre düzenli ilerlemez. Ağın yapısal olarak çöktüğü kriz anlarına bakılmıyor.
|
|
|
|
|
|
|
| 22 |
|
| 23 |
+
### Hipotezlerimiz
|
| 24 |
|
| 25 |
+
**Hipotez 1:** Veriyi rastgele bir tarihten değil, ağda krizin yaşandığı **Topolojik Kırılma Noktasından** bölersek, model daha başarılı ve kararlı olur.
|
| 26 |
|
| 27 |
+
**Hipotez 2:** Veri bölme ağdaki şoklara göre yapılmazsa, model sakin zamanlarda yapay ve abartılı bir başarı gösterir (**performans şişmesi**), ancak kriz anında çöker.
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
+
---
|
| 30 |
|
| 31 |
+
## 🧠 Topolojik Kırılma Noktası Tespit Algoritması
|
| 32 |
|
| 33 |
+
Ağın "matematiksel sağlığını" her timestep için ölçen bir algoritma yazdık:
|
| 34 |
|
| 35 |
```
|
| 36 |
+
Sağlık Skoru = (Yoğunluk + Bağlantılılık + Bütünlük) / 3
|
| 37 |
+
|
| 38 |
+
Yoğunluk ↑ = Ağda düğümler arası bağlantı yoğun
|
| 39 |
+
Bağlantılılık ↑ = En büyük bileşen ağın çoğunu kapsıyor
|
| 40 |
+
Bütünlük ↑ = Ağ az sayıda parçaya bölünmüş
|
| 41 |
+
|
| 42 |
+
Kırılma Noktası = Sağlık skorundaki en büyük ani düşüş
|
| 43 |
```
|
| 44 |
|
| 45 |
+
### Algoritma Sonucu
|
| 46 |
|
| 47 |
+

|
| 48 |
|
| 49 |
+
**Algoritma otomatik olarak Timestep 29'u tespit etti.** Bu nokta, dark market aktivitesinin zirve yaptığı dönemin (%28-30 illicit oran) tam ortasına denk geliyor. Algoritma hiçbir etikete bakmadan, sadece ağın yapısal sağlığını izleyerek bu krizi buldu.
|
| 50 |
|
| 51 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
|
| 53 |
+
## 📊 Deneysel Tasarım
|
| 54 |
|
| 55 |
+
### Veri: Elliptic Bitcoin Dataset
|
| 56 |
|
| 57 |
+
| Özellik | Değer |
|
| 58 |
+
|---------|-------|
|
| 59 |
+
| Toplam düğüm | 203,769 Bitcoin işlemi |
|
| 60 |
+
| Etiketli düğüm | 46,564 |
|
| 61 |
+
| İllicit (kara para) | 4,545 (%9.8) |
|
| 62 |
+
| Kenarlar | 234,355 yönlü ödeme akışı |
|
| 63 |
+
| Özellikler | 165 düğüm özelliği |
|
| 64 |
+
| Zaman adımları | 49 (~2 haftalık aralıklar) |
|
| 65 |
+
|
| 66 |
+
### Modeller
|
| 67 |
+
|
| 68 |
+
| Model | Tür | Neden Seçildi? |
|
| 69 |
+
|-------|-----|---------------|
|
| 70 |
+
| **GraphSAGE** | Graf Sinir Ağı (GNN) | Düğümün komşuluk yapısını öğrenir |
|
| 71 |
+
| **Random Forest** | Topluluk öğrenme | Elliptic dataset'te en güçlü baseline |
|
| 72 |
+
| **XGBoost** | Gradyan artırma | Tabular veride SOTA |
|
| 73 |
+
| **LightGBM** | Gradyan artırma | Hız ve performans dengesi |
|
| 74 |
|
| 75 |
+
### 5 Bölme Stratejisi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
|
| 77 |
+
| # | Strateji | Açıklama |
|
| 78 |
+
|---|----------|---------|
|
| 79 |
+
| 1 | **Rastgele** | Standart train_test_split (%80/%20) |
|
| 80 |
+
| 2 | **Kronolojik** | İlk %80 timestep eğitim, son %20 test |
|
| 81 |
+
| 3 | **Topolojik Kırılma (Bizim)** | Kırılma noktası öncesi eğitim, sonrası test |
|
| 82 |
+
| 4 | **Kayan Pencere** | Son 10 timestep test, geri kalanı eğitim |
|
| 83 |
+
| 5 | **Düşmanca-Kriz** | Sakin dönemde eğit, kriz döneminde test et |
|
| 84 |
|
| 85 |
---
|
| 86 |
|
| 87 |
+
## 🔑 Ana Sonuçlar
|
| 88 |
|
| 89 |
+
### HİPOTEZ 1: DOĞRULANDI ✅
|
| 90 |
|
| 91 |
+
**Topolojik kırılmadan bölmek, kronolojik bölmeden daha iyi sonuç verir.**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
+
| Model | Topolojik Kırılma F1 | Kronolojik F1 | **Fark** |
|
| 94 |
+
|-------|---------------------|--------------|---------|
|
| 95 |
+
| Random Forest | **0.8415** | 0.7226 | **+0.119** ✅ |
|
| 96 |
+
| XGBoost | **0.8372** | 0.7422 | **+0.095** ✅ |
|
| 97 |
+
| LightGBM | **0.8703** | 0.7376 | **+0.133** ✅ |
|
| 98 |
+
| GraphSAGE | 0.4205 | 0.4757 | -0.055 |
|
| 99 |
|
| 100 |
+
**3/4 modelde topolojik kırılma bölmesi açık farkla kazandı.** LightGBM'de **+13.3 puan** F1 artışı.
|
| 101 |
|
| 102 |
+
### HİPOTEZ 2: DOĞRULANDI ✅
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
+
**Rastgele bölme performansı yapay olarak şişiriyor.**
|
| 105 |
|
| 106 |
+
| Model | Rastgele F1 | Kronolojik F1 | **Performans Şişmesi** |
|
| 107 |
+
|-------|-----------|-------------|----------------------|
|
| 108 |
+
| GraphSAGE | 0.711 | 0.476 | **%49.5** 🔴 |
|
| 109 |
+
| Random Forest | 0.936 | 0.723 | **%29.5** 🔴 |
|
| 110 |
+
| XGBoost | 0.958 | 0.742 | **%29.0** 🔴 |
|
| 111 |
+
| LightGBM | 0.960 | 0.738 | **%30.2** 🔴 |
|
| 112 |
|
| 113 |
+
**GraphSAGE'de %49.5 performans şişmesi!** Rastgele bölmeyle %71 F1 rapor eden GNN modeli, gerçek dünyada sadece %47.6.
|
| 114 |
|
| 115 |
+
### Tam Sonuç Tablosu: Illicit F1 Score
|
| 116 |
|
| 117 |
+
| Model | Rastgele | Kronolojik | **Topolojik Kırılma** | Kayan Pencere | Düşmanca-Kriz |
|
| 118 |
+
|-------|---------|-----------|---------------------|--------------|--------------|
|
| 119 |
+
| GraphSAGE | 0.711 | 0.476 | 0.421 | 0.458 | **0.777** |
|
| 120 |
+
| Random Forest | 0.936 | 0.723 | **0.842** | 0.723 | 0.963 |
|
| 121 |
+
| XGBoost | 0.958 | 0.742 | **0.837** | 0.742 | 0.978 |
|
| 122 |
+
| LightGBM | 0.960 | 0.738 | **0.870** | 0.738 | 0.981 |
|
| 123 |
|
| 124 |
---
|
| 125 |
|
| 126 |
## 📈 Görselleştirmeler
|
| 127 |
|
| 128 |
+
### Topolojik Kırılma Noktası Tespiti
|
| 129 |
+

|
|
|
|
|
|
|
|
|
|
| 130 |
|
| 131 |
+
### F1 Karşılaştırması (Ana Sonuç)
|
| 132 |
+

|
| 133 |
|
| 134 |
+
### Performans Şişmesi Isı Haritası
|
| 135 |
+

|
| 136 |
|
| 137 |
+
### Tüm Metrikler × Tüm Stratejiler
|
| 138 |
+

|
| 139 |
|
| 140 |
+
### Model Karmaşıklığı vs Bölme Stratejisi
|
| 141 |
+

|
| 142 |
|
| 143 |
+
### Ağ Topolojik Metrikleri
|
| 144 |
+

|
| 145 |
|
| 146 |
+
### Bitcoin Olay Haritası
|
| 147 |
+

|
| 148 |
|
| 149 |
+
### Olay Tipine Göre Performans
|
| 150 |
+

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
|
| 152 |
---
|
| 153 |
|
| 154 |
+
## 📚 Ön Literatür Taraması (11 Makale)
|
| 155 |
|
| 156 |
+
Bu projenin boşluğunu destekleyen son 2-3 yıldaki kritik makaleler:
|
| 157 |
|
| 158 |
+
| # | Makale | Yıl | Bulduğu Açık (Future Work'ten) | Bizim Cevabımız |
|
| 159 |
+
|---|--------|-----|-------------------------------|----------------|
|
| 160 |
+
| 1 | **TabReD** (Rubachev et al.) | 2024 | "Time-based splits leads to different method ranking" | Model sıralamasının neden değiştiğini ağ yapısıyla açıklıyoruz |
|
| 161 |
+
| 2 | **Rethinking TSFM Eval** (Meyer et al.) | 2025 | "Magnitude of temporal leakage remains largely unknown" | Leakage büyüklüğünü ölçtük: %29-49 şişme |
|
| 162 |
+
| 3 | **Window Dilemma** (Gower-Winter et al.) | 2026 | "Move towards drift understanding: Where and How" | Topolojik kırılma noktasıyla "nerede" sorusuna cevap |
|
| 163 |
+
| 4 | **Topological Concentration** (Wang et al.) | 2024 | "Discover topological distribution shift" | TDS'yi veri bölme kararına bağladık |
|
| 164 |
+
| 5 | **Evidence Sufficiency** (Solozobov) | 2026 | "Concept drift without feature change remains undetected" | Ağ topolojisiyle bu kör noktayı yakalıyoruz |
|
| 165 |
+
| 6 | **TGB** (Huang et al.) | 2023 | "Only considers streaming setting, five domains" | AML domain'inde topolojik bölme ekliyoruz |
|
| 166 |
+
| 7 | **Better Eval for Dynamic LP** (Poursafaei et al.) | 2022 | "Ranking inconsistency across NS strategies" | Bölme stratejisinin etkisini gösteriyoruz |
|
| 167 |
+
| 8 | **Thimonier et al.** | 2023 | "Enhancing GBDT robustness against distribution shifts" | Shift anını bölme noktası yaparak çözüyoruz |
|
| 168 |
+
| 9 | **GeneralDyG** | 2024 | Temporal ego-graph ile anomali tespiti | Biz ego-graph fikrini bölme kararına çeviriyoruz |
|
| 169 |
+
| 10 | **SPLASH** | 2025 | Basit yöntem dağılım kaymasında karmaşık GNN'i yener | Tezimizi destekliyor: doğru veri > karmaşık model |
|
| 170 |
+
| 11 | **TGX** (Rahmani et al.) | 2024 | Novelty/Surprise metrikleri tanımlandı | Bu metrikleri kırılma tespitine entegre ediyoruz |
|
| 171 |
|
| 172 |
+
> **Hiçbir makale şunu yapmamış:** Ağın topolojik kırılma noktasını otomatik tespit edip, veri bölme kararını o noktaya göre vermek.
|
| 173 |
|
| 174 |
+
Detaylı literatür taraması: [`literature_review.md`](https://huggingface.co/Moco22/leakage-anatomy-bitcoin-aml/blob/main/literature_review.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
|
| 176 |
---
|
| 177 |
|
| 178 |
+
## 🔬 Teknik Detaylar
|
| 179 |
|
| 180 |
+
### GraphSAGE Mimarisi
|
| 181 |
+
- 2 katmanlı SAGEConv (mean aggregation)
|
| 182 |
+
- Hidden dim: 128, Dropout: 0.3
|
| 183 |
+
- Strict inductive: eğitimde sadece train düğümlerin alt grafı kullanıldı
|
| 184 |
+
- Weighted cross-entropy (sınıf dengesizliği için)
|
| 185 |
+
- PyTorch Geometric ile implement edildi
|
| 186 |
|
| 187 |
+
### Topolojik Sağlık Skoru Formülü
|
| 188 |
+
```
|
| 189 |
+
health(t) = [norm(density(t)) + norm(largest_cc_ratio(t)) + (1 - norm(n_components(t)))] / 3
|
| 190 |
+
breakpoint = argmin(health(t) - health(t-1))
|
| 191 |
+
```
|
| 192 |
|
| 193 |
---
|
| 194 |
|
| 195 |
## 📁 Proje Yapısı
|
| 196 |
|
| 197 |
```
|
| 198 |
+
├── README.md # Bu dosya
|
| 199 |
+
├── topological_breakpoint.py # Ana deney kodu (GraphSAGE + topolojik kırılma)
|
| 200 |
+
├── elliptic_event_aware.py # Olay-farkında bölme deneyleri
|
| 201 |
+
├── topo_figures/ # Topolojik kırılma figürleri
|
| 202 |
+
│ ├── fig1_topological_breakpoint.png # Kırılma noktası tespiti
|
| 203 |
+
│ ├── fig2_f1_comparison.png # F1 karşılaştırması
|
| 204 |
+
│ ├── fig3_inflation_heatmap.png # Performans şişmesi
|
| 205 |
+
│ ├── fig4_full_heatmap.png # Tam ısı haritası
|
| 206 |
+
│ ├── fig5_complexity_vs_split.png # Karmaşıklık vs bölme
|
| 207 |
+
│ └── fig6_network_metrics.png # Ağ metrikleri
|
| 208 |
+
├── topo_results/ # Topolojik kırılma sonuçları
|
| 209 |
+
│ ├── all_results.csv # Tüm sonuçlar
|
| 210 |
+
│ ├── topological_metrics.csv # Her timestep'in topolojik metrikleri
|
| 211 |
+
│ └── summary.json # Özet (kırılma noktası: TS 29)
|
| 212 |
+
├── figures/ # Olay-farkında bölme figürleri
|
| 213 |
+
└── results/ # Olay-farkında bölme sonuçları
|
| 214 |
```
|
| 215 |
|
| 216 |
---
|
|
|
|
| 218 |
## 🔄 Tekrarlanabilirlik
|
| 219 |
|
| 220 |
```bash
|
| 221 |
+
# Bağımlılıklar
|
| 222 |
+
pip install pandas numpy scikit-learn matplotlib seaborn lightgbm xgboost networkx torch torch-geometric
|
|
|
|
| 223 |
|
| 224 |
+
# Veriyi indir (HuggingFace'den)
|
| 225 |
+
# yhoma/elliptic-bitcoin-dataset reposundan 3 CSV dosyası
|
| 226 |
+
|
| 227 |
+
# Çalıştır
|
| 228 |
+
python topological_breakpoint.py # ~10 dakika (CPU)
|
| 229 |
+
```
|
| 230 |
|
| 231 |
---
|
| 232 |
|
| 233 |
+
## ⚠️ Anahtar Mesaj
|
| 234 |
|
| 235 |
+
> **Rastgele bölmeyle LightGBM %96.0 F1 rapor ediyor.**
|
| 236 |
+
> **Kronolojik bölmeyle aynı LightGBM %73.8 F1'e düşüyor.**
|
| 237 |
+
> **Topolojik kırılma noktasından bölmeyle %87.0 F1'e çıkıyor.**
|
| 238 |
+
>
|
| 239 |
+
> Topolojik kırılma, kronolojik bölmeyi **+13.3 puan** geçiyor.
|
| 240 |
+
> Rastgele bölmenin %22.2'si ise **tamamen yapay — performans şişmesi.**
|
| 241 |
+
>
|
| 242 |
+
> **Modelden önce, ağın sağlığına bakın. Kırılma noktasını bulun. Oradan bölün.**
|
| 243 |
|
| 244 |
---
|
| 245 |
|
| 246 |
## 📖 Atıf
|
| 247 |
|
| 248 |
```bibtex
|
| 249 |
+
@misc{topological_breakpoint_splitting_2026,
|
| 250 |
+
title={Topolojik Kırılma Noktasına Göre Veri Bölme: Bitcoin AML Tespitinde Yeni Bir Kural},
|
| 251 |
author={Moco22},
|
| 252 |
year={2026},
|
| 253 |
howpublished={\url{https://huggingface.co/Moco22/elliptic-event-aware-splitting}},
|
| 254 |
+
note={Ağ topolojisindeki kriz anını otomatik tespit edip veri bölme kararına çeviren ilk çalışma}
|
| 255 |
}
|
| 256 |
```
|
| 257 |
|
| 258 |
---
|
| 259 |
|
| 260 |
+
*🤗 Hugging Face ekosistemi ile oluşturulmuştur — PyTorch Geometric, NetworkX, scikit-learn*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|