YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Topolojik Kırılma Noktasına Göre Veri Bölme: Bitcoin Kara Para Aklama Tespiti
"Karmaşık yapay zekâ modelleri geliştirmeden önce, verinizi doğru bölün."
Biz Ne Yapıyoruz?
Makine öğrenmesi modellerini eğitirken veriyi ikiye böleriz: bir kısmıyla öğretir, diğer kısmıyla sınarız. Herkes bu bölme işini ya rastgele yapar, ya da takvimden bir tarih seçip "bu tarihten önce eğitim, sonra test" der.
Biz farklı bir şey öneriyoruz: Bölme noktasını takvim değil, ağın kendisi belirlesin.
Bitcoin işlem ağının bir "sağlık skoru" var. Bu skor ağın ne kadar yoğun, ne kadar bağlantılı ve ne kadar bütün olduğunu ölçüyor. Ağ sağlıklıyken her şey normal akıyor. Ama bir gün dark market kapanıyor, düzenleyiciler baskın yapıyor ya da büyük bir hack oluyor — ve ağın sağlığı aniden çöküyor. İşte biz tam o çökme anını otomatik olarak tespit edip, yapay zekayı o noktadan bölüyoruz.
Neden Bu Önemli?
Çünkü rastgele bölme yaptığınızda, model geleceği görüyor. 2024'teki bir suç örüntüsünü eğitim setine koyup, 2023'teki bir işlemi test ediyorsunuz. Model "tahmin" yapmıyor, "hatırlıyor". Bu yüzden %96 başarı rapor ediyorsunuz ama gerçek dünyaya koyduğunuzda model çöküyor.
Bunu sadece iddia etmiyoruz. 6 farklı testle kanıtlıyoruz.
Literatüre Katkımız (Tek Cümle)
Veri bölme noktasını, ağın topolojik sağlığının çöktüğü kriz anına göre belirleyen ilk çalışma.
Mevcut yaklaşımlar ya rastgele böler (sızıntı yapar), ya da takvimden sabit bir noktadan keser (krizi görmezden gelir). Biz ağın matematiğini dinleyerek kırılma noktasını buluyoruz.
Veri Seti: Elliptic Bitcoin Dataset
Kaynak: Kaggle — Elliptic Data Set
Veri seti dataset/ klasörü altında 3 dosyadan oluşur:
dataset/elliptic_txs_features.csv— 203,769 düğüm × 167 sütundataset/elliptic_txs_classes.csv— 203,769 düğüm × 2 sütun (txId, class)dataset/elliptic_txs_edgelist.csv— 234,355 kenar × 2 sütun (txId1, txId2)
| Özellik | Değer |
|---|---|
| Toplam düğüm | 203,769 Bitcoin işlemi |
| Etiketli düğüm | 46,564 (%22.8) |
| İllicit (kara para) | 4,545 (%9.8) |
| Licit (yasal) | 42,019 (%90.2) |
| Kenarlar | 234,355 yönlü ödeme akışı |
| Özellikler | 165 düğüm özelliği (94 local + 71 aggregated) |
| Zaman adımları | 49 (~2 haftalık aralıklar) |
Veri Setindeki 5 Olay Tipi
| Olay Tipi | Timestep'ler | İllicit Oranı | İşlem Sayısı | Açıklama |
|---|---|---|---|---|
| 🔴 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 |
| ⚫ Kapanma (Shutdown) | 43 | %1.8 | 1,370 | Bilinen dark market kapanması |
| 🔵 Kapanma Sonrası | 44,45,46 | %0.9 | 3,524 | Suçluların sessizleştiği dönem |
| 🟠 Toparlanma | 47,48,49 | %6.4 | 1,793 | Yeni aktörlerin girişi |
| 🟢 Normal Aktivite | Geri kalan 31 TS | %7.0 | 31,654 | Standart ağ davranışı |
Dark market zirvesinde illicit oranı %26.5 iken, kapanma sonrası %0.9'a düşüyor — 30 kat fark. Rastgele bölme bu devasa farkı ortalar ve gerçeği gizler.
Hipotezlerimiz
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.
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.
Topolojik Kırılma Noktası Tespit Algoritması
Ağın "matematiksel sağlığını" her timestep için ölçen bir algoritma yazdık:
Sağlık Skoru = (Yoğunluk + Bağlantılılık + Bütünlük) / 3
Yoğunluk ↑ = Ağda düğümler arası bağlantı yoğun
Bağlantılılık ↑ = En büyük bileşen ağın çoğunu kapsıyor
Bütünlük ↑ = Ağ az sayıda parçaya bölünmüş
Kırılma Noktası = Sağlık skorundaki en büyük ani düşüş
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.
Deneysel Tasarım
Modeller
| Model | Tür | Neden Seçildi? |
|---|---|---|
| GraphSAGE | Graf Sinir Ağı (GNN) | Düğümün komşuluk yapısını öğrenir, 3 katman SAGEConv, strict inductive, BatchNorm + CosineAnnealing |
| Random Forest | Topluluk öğrenme | Elliptic dataset'te en güçlü baseline (Weber et al., 2019) |
| XGBoost | Gradyan artırma | Tabular veride SOTA |
| LightGBM | Gradyan artırma | Hız ve performans dengesi |
Veri Ön İşleme
| Adım | Açıklama |
|---|---|
| NaN/Inf temizleme | Sıfıra dönüştür |
| IQR outlier clipping | Q1-1.5×IQR, Q3+1.5×IQR sınırlarına kırp (%16.7 outlier hücre) |
| RobustScaler | Median ve IQR bazlı ölçekleme (tüm modellerde tutarlı) |
| SMOTE | Sentetik azınlık örnekleri ile sınıf dengesizliği düzeltme |
| Threshold optimizasyonu | Her model için en iyi karar eşiği (0.1–0.9 aralığında arama) |
5 Bölme Stratejisi
| # | Strateji | Açıklama |
|---|---|---|
| 1 | Rastgele bölme | Standart train_test_split (%80/%20) — herkesin yaptığı |
| 2 | Kronolojik bölme | İlk %80 timestep eğitim, son %20 test — mevcut iyi uygulama |
| 3 | Topolojik kırılma (bizim) | Kırılma noktasından (TS 29) önce eğitim, sonra test — bizim katkımız |
| 4 | Kayan pencere | Son 10 timestep test, geri kalanı eğitim |
| 5 | Düşmanca bölme | Sakin dönemde eğit, kriz döneminde test et — stres testi |
Sonuçlar
HİPOTEZ 1: DOĞRULANDI ✅ — Topolojik kırılma, kronolojik bölmeyi geçti
| Model | Topolojik Kırılma F1 | Kronolojik F1 | Fark |
|---|---|---|---|
| Random Forest | 0.884 | 0.730 | +15.4 puan |
| LightGBM | 0.873 | 0.764 | +10.9 puan |
| XGBoost | 0.869 | 0.750 | +11.9 puan |
| GraphSAGE | 0.676 | 0.702 | -2.6 puan |
3/4 modelde topolojik kırılma bölmesi açık farkla kazandı. Random Forest'ta +15.4 puan F1 artışı.
HİPOTEZ 2: DOĞRULANDI ✅ — Rastgele bölme performansı şişiriyor
| Model | Rastgele F1 | Walk-Forward F1 | Şişme |
|---|---|---|---|
| GraphSAGE | 0.932 | 0.786 | %18.5 🔴 |
| Random Forest | 0.945 | 0.836 | %13.0 🔴 |
| XGBoost | 0.967 | 0.855 | %13.1 🔴 |
| LightGBM | 0.963 | 0.829 | %16.2 🔴 |
Tam Sonuç Tablosu: Illicit F1 Score
| Model | Rastgele | Kronolojik | Topolojik Kırılma | Kayan Pencere | Düşmanca-Kriz |
|---|---|---|---|---|---|
| LightGBM | 0.963 | 0.764 | 0.873 | 0.764 | 0.978 |
| Random Forest | 0.945 | 0.730 | 0.884 | 0.730 | 0.970 |
| XGBoost | 0.967 | 0.750 | 0.869 | 0.750 | 0.977 |
| GraphSAGE | 0.932 | 0.702 | 0.676 | 0.718 | 0.958 |
Tam Sonuç Tablosu: Precision / Recall / AUROC
| Model | Strateji | F1 | Precision | Recall | AUROC |
|---|---|---|---|---|---|
| LightGBM | Rastgele | 0.963 | 0.983 | 0.944 | 0.998 |
| Random Forest | Rastgele | 0.945 | 0.977 | 0.915 | 0.997 |
| XGBoost | Rastgele | 0.967 | 0.987 | 0.947 | 0.998 |
| GraphSAGE | Rastgele | 0.932 | 0.952 | 0.912 | 0.993 |
| LightGBM | Kronolojik | 0.764 | 0.915 | 0.656 | 0.953 |
| Random Forest | Kronolojik | 0.730 | 0.961 | 0.588 | 0.954 |
| XGBoost | Kronolojik | 0.750 | 0.924 | 0.631 | 0.949 |
| GraphSAGE | Kronolojik | 0.702 | 0.917 | 0.569 | 0.914 |
| LightGBM | Topolojik Kırılma | 0.873 | 0.947 | 0.809 | 0.970 |
| Random Forest | Topolojik Kırılma | 0.884 | 0.973 | 0.809 | 0.965 |
| XGBoost | Topolojik Kırılma | 0.869 | 0.936 | 0.811 | 0.968 |
| GraphSAGE | Topolojik Kırılma | 0.676 | 0.599 | 0.776 | 0.938 |
| LightGBM | Düşmanca-Kriz | 0.978 | 0.982 | 0.974 | 0.998 |
| Random Forest | Düşmanca-Kriz | 0.970 | 0.972 | 0.968 | 0.998 |
| XGBoost | Düşmanca-Kriz | 0.977 | 0.985 | 0.970 | 0.998 |
| GraphSAGE | Düşmanca-Kriz | 0.958 | 0.970 | 0.946 | 0.995 |
Literatür Karşılaştırması: Elliptic Veri Setinde Yayınlanmış Sonuçlar
Elliptic Bitcoin Dataset 2019'dan beri birçok çalışmada kullanıldı. Aşağıdaki tablo tüm yayınlanmış sonuçları özetliyor.
⚠️ Kritik Not: Değerlendirme Protokolü Sorunu
Luu (2026) çalışması, yayınlanmış GNN sonuçlarının büyük çoğunluğunun transductive sızıntıdan muzdarip olduğunu gösterdi. GNN encoder'ı eğitim sırasında test dönemi düğümlerini/kenarlarını görüyor — bu F1'i 39.5 puana kadar yapay şişiriyor. Bizim topolojik kırılma yöntemimiz strict-inductive protokol kullanıyor.
Yayınlanmış Baseline Sonuçları (Illicit F1)
| Çalışma | Model | Illicit F1 | Precision | Recall | Bölme | Protokol | Seeds |
|---|---|---|---|---|---|---|---|
| Weber et al., 2019 (KDD) | Logistic Regression | 0.543 | 0.537 | 0.528 | TS 1-34 / 35-49 | Transductive | 1 |
| Weber et al., 2019 | GCN | 0.628 | 0.812 | 0.512 | TS 1-34 / 35-49 | Transductive | 1 |
| Weber et al., 2019 | Random Forest | 0.796 | 0.971 | 0.675 | TS 1-34 / 35-49 | Transductive | 1 |
| Weber et al., 2019 | Skip-GCN | 0.705 | 0.812 | 0.623 | TS 1-34 / 35-49 | Transductive | 1 |
| Pareja et al., 2020 (AAAI) | EvolveGCN-O | ~0.770 | — | — | TS 1-31 / 36-49 | Transductive | 1 |
| Alarab et al., 2020 | XGBoost | ~0.815 | — | — | TS 1-34 / 35-49 | Transductive | 1 |
| Alarab et al., 2020 | Augmented GCN | 0.773 | — | — | TS 1-34 / 35-49 | Transductive | 1 |
| Lo et al., 2023 (Appl. Intell.) | Inspection-L (AF+DNE) | 0.828 | 0.972 | 0.721 | TS 1-34 / 35-49 | Transductive | 3 |
| Luu, 2026 (Preprint) | Random Forest | 0.821 ± 0.003 | — | — | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Luu, 2026 | XGBoost | 0.775 | — | — | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Luu, 2026 | GraphSAGE | 0.688 ± 0.016 | 0.709 | 0.670 | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Luu, 2026 | GCN | 0.503 ± 0.017 | 0.567 | 0.456 | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Luu, 2026 | GAT | 0.610 ± 0.018 | 0.588 | 0.635 | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Luu, 2026 | MLP (3 katman) | 0.549 ± 0.015 | 0.496 | 0.616 | TS 1-34 / 35-49 | Strict Inductive | 10 |
| Bizim (Topolojik) | Random Forest | 0.884 | 0.973 | 0.809 | TS 1-28 / 29-49 | Strict Inductive | 1 |
| Bizim (Topolojik) | LightGBM | 0.873 | 0.947 | 0.809 | TS 1-28 / 29-49 | Strict Inductive | 1 |
| Bizim (Topolojik) | XGBoost | 0.869 | 0.936 | 0.811 | TS 1-28 / 29-49 | Strict Inductive | 1 |
| Bizim (Topolojik) | GraphSAGE | 0.676 | 0.599 | 0.776 | TS 1-28 / 29-49 | Strict Inductive | 1 |
Karşılaştırma Analizi
| Karşılaştırma | Fark | Yorum |
|---|---|---|
| Bizim RF (0.884) vs Weber RF (0.796) | +8.8 puan | Aynı model, daha zorlu bölme (TS29 vs TS34), ama daha akıllı strateji |
| Bizim RF (0.884) vs Luu RF (0.821) | +6.3 puan | Her ikisi de strict-inductive, ama biz TS29'dan bölüyoruz (daha az eğitim verisi!) |
| Bizim RF (0.884) vs Inspection-L (0.828) | +5.6 puan | Inspection-L transductive + SSL kullanıyor, biz ham özelliklerle geçiyoruz |
| Bizim GraphSAGE (0.676) vs Luu GraphSAGE (0.688) | -1.2 puan | Benzer — strict-inductive GNN'ler Elliptic'te zayıf (Luu bunu kanıtladı) |
Neden Bizim Sonuçlar Daha İyi?
TS 29 bölmesi TS 34'ten daha zor. Eğitim seti daha küçük (%46 vs %73 etiketli veri). Buna rağmen F1 daha yüksek — çünkü eğitim verisinde gürültü daha az.
Topolojik kırılma doğal bir "temiz" sınır. TS 29'dan önce ve sonra veri dağılımları tutarlı — model bir rejim içinde öğrenip farklı bir rejimde test ediliyor. Sabit TS 34 bölmesi bu doğal sınırı görmezden geliyor.
SMOTE + threshold optimizasyonu. Yayınlanmış çalışmaların hiçbiri SMOTE veya threshold araması kullanmamış. Bu recall'u önemli ölçüde artırıyor (0.675 → 0.809).
Luu 2026 tezimizi doğruluyor: "Random Forest raw features beats every GNN under strict inductive evaluation." Biz de aynı bulguya ulaştık ve üstüne bölme noktasının etkisini gösterdik.
Walk-Forward Dürüstlük Testi
Walk-forward validasyon gerçek dünyanın simülasyonudur. Her 3 timestep'lik pencereyi sırayla test eder — modelin gerçekte ne kadar iyi olacağını gösterir.
Walk-Forward Referans Değerleri
| Model | Walk-Forward F1 |
|---|---|
| XGBoost | 0.855 |
| Random Forest | 0.836 |
| LightGBM | 0.829 |
| GraphSAGE | 0.786 |
Dürüstlük Karşılaştırması
| Strateji | Walk-Forward'a Ort. Sapma (4 model) | Durum |
|---|---|---|
| Topolojik Kırılma (Bizim) | -%0.4 | ✅ DÜRÜST (neredeyse mükemmel) |
| Kronolojik | -%10.9 | ⚠️ PESİMİST |
| Kayan Pencere | -%10.4 | ⚠️ PESİMİST |
| Rastgele | +%15.2 | 🔴 ŞİŞME |
| Düşmanca-Kriz | +%17.5 | 🔴 ŞİŞME |
Topolojik kırılma walk-forward'a sadece -%0.4 sapmayla en dürüst strateji. Rastgele bölme +%15.2 şişirirken, kronolojik -%10.9 ile gerçeği olduğundan kötü gösteriyor. Bizim yöntem tam ortada — ne şişiriyor ne de pesimist.
Neden Topolojik Kırılma En Dürüst?
Kronolojik bölme sabit bir noktadan kesiyor (TS 39). Test setinde hem kriz hem sakin dönemler karışık. Rastgele bölme her dönemden karışık alıyor — geleceği görüyor.
Bizim yöntem kriz noktasından (TS 29) bölüyor:
- Eğitim seti: krizden önceki 25,207 düğüm (sakin dönem ağırlıklı)
- Test seti: kriz ve sonrası 21,357 düğüm (gerçek dünyanın tüm çeşitliliği)
- Sonuç: model gerçekten kriz anında ne yapacağını gösteriyor
Sızıntı Haritası: Bilgi Ağ Üzerinden Nasıl Sızıyor?
| Ölçüm | Random Split | Temporal Split | Fark |
|---|---|---|---|
| Komşuluk sızıntı oranı | 0.502 | 0.000 | 502x |
Yapı Duyarlılığı
| Özellik Seti | Random Split F1 | Temporal Split F1 | Fark |
|---|---|---|---|
| Sadece Local (94 özellik) | 0.943 | 0.669 | +0.274 |
| Sadece Aggregated (71 özellik) | 0.902 | 0.627 | +0.275 |
| Tümü (165 özellik) | 0.965 | 0.738 | +0.227 |
| Aggregated'ın ek katkısı | +0.022 | +0.069 | 3.1x |
"Random Split Belki Doğru Sonuç Veriyor" İtirazının Cevabı
| # | Test | Ne Sorguluyor? | Bulgu |
|---|---|---|---|
| 1 | Walk-Forward | Gerçek dünyada performans ne? | %15.2 şişme |
| 2 | Kriz Çöküşü | En zor anda ne oluyor? | F1=0.07 çöküş |
| 3 | Rastgele Etiket | Yapısal sızıntı var mı? | Random 4x daha yüksek |
| 4 | Yapay Tutarlılık | Dağılım gerçekçi mi? | Random yapay düzgün |
| 5 | Gelecek Bilgisi | Gelecek görülmüş mü? | Geçmiş ≈ Gelecek |
| 6 | Dürüstlük Testi | Bizim yöntem de şişiriyor mu? | -%0.4 — mükemmel dürüst |
Detaylı kanıt açıklamaları için project_report.md dosyasına bakınız.
Ön İşleme Pipeline Karşılaştırması
| Pipeline | Illicit F1 |
|---|---|
| Ham Veri | 0.7511 |
| StandardScaler | 0.7467 |
| RobustScaler | 0.7450 |
| Clip+Robust | 0.7504 |
| Clip+VarFilter+Robust | 0.7605 |
| Clip+Robust+SMOTE | 0.7514 |
Düşük varyans özellik çıkarma + RobustScaler en iyi pipeline. Ancak pipeline'ın etkisi (+1 puan) bölme stratejisinin etkisinin (~15 puan) yanında ihmal edilebilir düzeyde.
Figürler
Figür 1 — Ağın Sağlık Skoru ve Kırılma Noktası
Ne görüyoruz: Üstteki grafik ağın sağlık skorunun zaman içindeki değişimi. Kırmızı kesikli çizgi algoritmanın bulduğu kırılma noktası (TS 29). Ortadaki grafik her timestep'teki illicit oranı. Alttaki grafik kriz sinyali.
Figür 2 — F1 Karşılaştırması (4 Model × 5 Strateji)
Ne görüyoruz: 4 modelin 5 stratejideki F1 skorları. Siyah kenarlı çubuklar bizim yöntemimiz. Yeşil bant walk-forward dürüstlük aralığı.
Figür 3 — Pipeline Karşılaştırması
Ne görüyoruz: 6 ön işleme pipeline'ının karşılaştırması. Clip+VarFilter+Robust en iyisi.
Figür 4 — Walk-Forward Dürüstlük Haritası
Ne görüyoruz: Her model × strateji kombinasyonunun walk-forward'a sapması. Kırmızı = şişme, yeşil = yakın. Topolojik kırılma sıfıra en yakın.
Figür 5 — Performans Şişmesi Haritası
Ne görüyoruz: Rastgele bölmenin kronolojik ve topolojik bölmeye göre şişirme miktarı. 4 modelde de tutarlı şişme.
Figür 6 — Walk-Forward Kanıtı
Ne görüyoruz: Mavi çizgi gerçek dünya, kırmızı çizgi random split iddiası. Kriz anında F1=0.07'ye düşüyor.
Figür 7 — Rastgele Etiket Testi
Ne görüyoruz: Anlamsız etiketlerde bile random split temporal split'in 4 katı skor veriyor.
Figür 8 — Sızıntı Haritası
Ne görüyoruz: Komşuluk sızıntısı 502 kat fark. Aggregated özellikler temporal split'te 3.1x daha fazla katkı.
Figür 9 — Model Karmaşıklığı vs Bölme
Ne görüyoruz: Bölme stratejisinin etkisi model seçiminden daha büyük.
Figür 10 — Bitcoin Olay Haritası
Ne görüyoruz: 49 timestep boyunca suç yoğunluğu. Kapanma sonrası suç 30 kat düşüyor.
Triple Barrier Yöntemi ile İlişki Analizi
Triple Barrier Nedir?
Triple Barrier, Marcos López de Prado'nun "Advances in Financial Machine Learning" (Wiley, 2018) kitabında tanıttığı bir etiketleme yöntemidir.
Bizim Çalışmayla İlişkisi
Doğrudan ilişki: YOK. Triple Barrier bir etiketleme aracıdır, bir bölme stratejisi değildir.
| Boyut | Triple Barrier | Bizim Yöntem |
|---|---|---|
| Ne yapar | Eğitim örneklerine etiket atar | Veriyi nerede keseceğini belirler |
| Pipeline aşaması | Özellik mühendisliği / etiketleme | Model değerlendirme tasarımı |
| Domain | Alım-satım stratejileri | Sahtekarlık tespiti |
Dolaylı Felsefi Bağlantı
López de Prado'nun "finansal veride rastgele bölme yanlıştır" eleştirisi bizim tezimizle aynı düşünce geleneğinden besleniyor. Ama o bunu etiket örtüşmesiyle çözerken, biz ağ topolojisindeki kırılma noktalarıyla çözüyoruz.
Detaylı analiz: project_report.md Bölüm 6.
Gephi ile Ağ Görselleştirme ve Analiz
python prepare_for_gephi.py --data_dir ./dataset
Detaylı Gephi adımları ve karşılaştırılacak 3 kritik dönem için project_report.md Bölüm 7'ye bakınız.
Tepe-Düşüş Kriz Tespit Algoritması (Geliştirilmiş)
Kriz dönemleri grafikte tepeye çıkıp sonra düşüşe geçtiği anda oluşur:
1. Bileşik kriz sinyali = 0.4×norm(kenar) + 0.3×norm(yoğunluk) + 0.3×norm(derece)
2. Düzleştir: hareketli ortalama (pencere=5)
3. Birinci türev: pozitif=tırmanma, negatif=düşüş
4. Tepe tespiti: birinci türev pozitiften negatife geçtiği an
5. Ana kriz tepesi: düşüş şiddeti en büyük olan tepe
Detaylı implementasyon: peak_descent.py
Veri Temizleme ve Ön İşleme Pipeline
Elliptic Veri Setinin Sorunları
| Sorun | Detay | Etki |
|---|---|---|
| %77 etiketsiz | 203K düğümün sadece 46K'sı etiketli | Eğitim verisi sınırlı |
| %90 vs %10 dengesizlik | İllicit çok az (%9.8) | Model "herkes licit" demeye eğilimli |
| PCA ile gizlenmiş özellikler | Ne olduğunu bilmiyoruz | Özellik mühendisliği sınırlı |
| %16.7 outlier hücre | İllicit örnekler daha fazla aykırı değer içeriyor | Temizleme illicit sınıfını orantısız etkileyebilir |
| Aggregated özellikler | Komşuluktan türetilmiş | Sızıntı kanalı olabilir |
Uygulanan Pipeline
- NaN/Inf → 0 dönüştür
- IQR outlier clipping — Q1-1.5×IQR, Q3+1.5×IQR sınırlarına kırp
- RobustScaler — median ve IQR bazlı ölçekleme
- SMOTE — sentetik azınlık örnekleri üret (eğitim setinde)
- Threshold optimizasyonu — her model için 0.1–0.9 aralığında en iyi eşik
Tek Komutla Tüm Deneyleri Çalıştırma (run_all.py)
pip install pandas numpy scikit-learn matplotlib seaborn lightgbm xgboost networkx scipy imbalanced-learn torch torch-geometric
python run_all.py --data_dir ./dataset
Bu script sırayla şunları yapar:
| Adım | Ne Yapıyor? | Süre |
|---|---|---|
| 1 | Veri yükle ve temizle | ~1 dk |
| 2 | 6 pipeline'ı karşılaştır | ~3 dk |
| 3 | 49 timestep topolojik metrik hesapla (NetworkX) | ~3 dk |
| 4 | Kırılma noktası tespiti (sağlık skoru) | ~5 sn |
| 5 | GraphSAGE graf verisi hazırla | ~10 sn |
| 6 | 5 strateji × 4 model = 20 deney | ~15 dk |
| 7 | Walk-forward validasyon (4 model) | ~18 dk |
| 8 | 5 figür oluştur ve kaydet | ~10 sn |
Toplam: ~40 dakika. Çıktılar output/ klasörüne kaydedilir.
Ön Literatür Taraması (Hakemli Yayınlar — SCI / SCI-E İndeksli)
| # | Makale | Dergi / Konferans | İndeks | Söyledikleri | Biz Ne Yapıyoruz | Link |
|---|---|---|---|---|---|---|
| 1 | Rubachev, I. et al. (2024). "TabReD" | NeurIPS 2024 | SCI-E (Core A*) | Zaman bazlı bölme model sıralamasını değiştiriyor | Neden değiştiğini ağ topolojisiyle açıklıyoruz | Paper |
| 2 | Wang, Y. et al. (2024). "Topological Concentration" | ICLR 2024 | SCI-E (Core A*) | TDS keşfettiler ama bölme kararına bağlamadılar | TDS'yi bölme kararına çeviriyoruz | Paper |
| 3 | Huang, S. et al. (2023). "TGB" | NeurIPS 2023 | SCI-E (Core A*) | Sabit kronolojik bölme, AML domain'i yok | Kırılma noktasına göre bölme + AML | Paper |
| 4 | Poursafaei, F. et al. (2022). "Better Eval Dynamic LP" | NeurIPS 2022 | SCI-E (Core A*) | Negatif örnekleme sıralamayı değiştiriyor | Bölme stratejisinin etkisini gösteriyoruz | Paper |
| 5 | Weber, M. et al. (2019). "Elliptic Dataset" | KDD 2019 | SCI-E (Core A*) | Sabit kronolojik bölme, RF F1=0.796 | RF F1=0.884 ile +8.8 puan iyileştiriyoruz | Paper |
| 6 | Lo, W.W. et al. (2023). "Inspection-L" | Applied Intelligence | SCI-E (IF:3.4) | SSL + RF ile F1=0.828 (transductive) | Strict-inductive RF ile F1=0.884 | Paper |
| 7 | Rossi, E. et al. (2020). "TGN" | ICML 2020 | SCI-E (Core A*) | Dinamik graf çerçevesi sundular | Bölme noktası ağ yapısına göre olmalı | Paper |
| 8 | Wu, Z. et al. (2021). "GNN Survey" | IEEE TNNLS | SCI (IF:10.4) | Sabit snapshot yetersiz dediler | Topolojik kırılmaya göre bölme öneriyoruz | Paper |
| 9 | Al Sahili & Awad (2023). "STGNN Survey" | AI Review | SCI-E (IF:12.0) | Statik graf varsayımı sınırlayıcı | Zamansal değişkenliği bölme kararına çeviriyoruz | Paper |
| 10 | Pareja, A. et al. (2020). "EvolveGCN" | AAAI 2020 | SCI-E (Core A*) | EvolveGCN-O F1≈0.77 (transductive) | Ağın evrimindeki kırılmadan bölüyoruz | Paper |
| 11 | Thimonier, H. et al. (2024). "AD for Fraud" | DMKD | SCI-E (IF:4.8) | COVID kaynaklı shift gösterdiler | Shift anını bölme noktası yapıyoruz | Paper |
| 12 | Luu (2026). "When Graph Structure Becomes a Liability" | Preprint | — | Strict-inductive'de RF tüm GNN'leri yeniyor (F1=0.821); transductive sızıntı 39.5 puan şişme | Topolojik kırılma ile RF F1=0.884'e çıkarıyoruz | Paper |
1-11 numaralı makaleler SCI veya SCI-E indeksli hakemli yayınlardır. 12 numara yeni bir preprint olup tezimizi doğrulayan en güncel çalışmadır.
Detaylı tarama: literature_review.md
Raporlar
| Rapor | İçerik |
|---|---|
| crisp_dm_report.md | ★ CRISP-DM süreç raporu — 6 faz, tüm kararlar ve çıktılar |
| project_report.md | Detaylı analiz raporu — Triple Barrier, walk-forward tabloları, rastgele etiket testleri |
Proje Yapısı
├── README.md # Bu dosya
├── project_report.md # Kapsamlı proje raporu (Triple Barrier analizi dahil)
├── run_all.py # ★ Tek komutla tüm deneyleri çalıştır (GraphSAGE dahil)
├── data_audit.py # Veri denetimi ve ön işleme pipeline karşılaştırması
├── dataset/ # Kaggle'dan indirilen veri seti
│ ├── elliptic_txs_features.csv
│ ├── elliptic_txs_classes.csv
│ └── elliptic_txs_edgelist.csv
├── topological_breakpoint.py # Ana deney: 4 model × 5 strateji = 20 deney
├── proof_mechanism.py # Kanıt testleri 1-5
├── honesty_test.py # Kanıt testi 6: Dürüstlük testi
├── leakage_map.py # Sızıntı haritası
├── peak_descent.py # Tepe-düşüş kriz tespit algoritması
├── prepare_for_gephi.py # Gephi görselleştirme için veri hazırlama
├── elliptic_event_aware.py # Olay-farkında bölme deneyleri
├── output/ # ★ run_all.py çıktıları
│ ├── results/ # Sayısal sonuçlar (CSV, JSON)
│ ├── figures/ # Figürler (5 adet)
│ └── run_all_output.log # Çalıştırma logu
├── topo_figures/ # Ek figürler
├── proof_figures/ # Kanıt mekanizması figürleri
├── figures/ # Olay analizi figürleri
├── topo_results/ # Topolojik kırılma sonuçları
├── proof_results/ # Kanıt test sonuçları
└── results/ # Olay analizi sonuçları
Tekrarlanabilirlik
pip install pandas numpy scikit-learn matplotlib seaborn lightgbm xgboost networkx scipy imbalanced-learn torch torch-geometric
python run_all.py --data_dir ./dataset
Sonuç
Random split %96 F1 rapor ediyor ama bunun %15'i yapay şişme. Kriz anında model çöküyor (F1=0.07). Rastgele etiketlerde bile random split skor üretiyor. Ağ üzerinden komşuluk sızıntısı 502 kat farkla kanıtlandı.
Bizim topolojik kırılma yöntemi kronolojik bölmeyi +15 puan geçiyor ve walk-forward dürüstlük testinde sadece -%0.4 sapma ile en dürüst strateji. Rastgele bölme +%15.2 şişirirken, kronolojik -%10.9 ile pesimist. Topolojik kırılma tam ortada.
Literatürdeki en güçlü strict-inductive sonuç Luu (2026) RF F1=0.821 iken, bizim topolojik kırılma ile RF F1=0.884 — daha az eğitim verisi kullanarak +6.3 puan iyileştirme.
4 farklı model (GraphSAGE, Random Forest, XGBoost, LightGBM) ile tutarlı sonuçlar: bölme stratejisinin etkisi model seçiminden çok daha büyük.
Karmaşık model geliştirmeden önce, veriyi doğru bölün.