Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

37 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿง‘โ€๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๊ธฐ์ˆ  ์Šคํƒ

Language

Tool

Stack

Database

๐Ÿšง ์„ค๊ณ„

๐Ÿ“‰ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

image

๐Ÿ“‚ AI Directory

.
โ”œโ”€โ”€ data                  # AI ๋ชจ๋ธํ•™์Šต์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์…‹
โ”‚   โ”œโ”€โ”€ df_merged.csv     # ๋ณ‘ํ•ฉ๋œ ๋…ธ๋“œ ๋ฐ์ดํ„ฐ์…‹ (unknown ๋ผ๋ฒจ ํฌํ•จ)
โ”‚   โ”œโ”€โ”€ elliptic_data_v2.pt # PyTorch Geometric์šฉ ์ „์ฒด ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ elliptic_node_final.csv # ์ตœ์ข… ์ „์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ ํ”ผ์ฒ˜ ๋ฐ์ดํ„ฐ์…‹
โ”‚
โ”œโ”€โ”€ model_train           # AI ๋ชจ๋ธํ•™์Šต ๊ณผ์ •
โ”‚   โ””โ”€โ”€ train_gnn+pge_explainer.ipynb # GNN GAT + Explainer ๋ชจ๋ธ ํ•™์Šต ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ models                # ํ•™์Šต๋œ ๋ชจ๋ธ ์ €์žฅ์†Œ
โ”‚   โ””โ”€โ”€ saved
โ”‚       โ”œโ”€โ”€ elliptic_gat_best.pt # ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ธ GNN GAT ํ•™์Šต ๋ชจ๋ธ ํŒŒ์ผ
โ”‚       โ””โ”€โ”€ explainer_pg.pt      # GNN ์˜ˆ์ธก ๊ฒฐ๊ณผ ํ•ด์„์„ ์œ„ํ•œ Explainer ๋ชจ๋ธ ํŒŒ์ผ
โ”‚
โ”œโ”€โ”€ .env                  # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ํŒŒ์ผ (Neo4j ์ ‘์† ์ •๋ณด, OpenAI API Key ๋“ฑ)
โ”œโ”€โ”€ .gitignore            # Git ๋ฒ„์ „ ๊ด€๋ฆฌ ์ œ์™ธ ํŒŒ์ผ ๋ชฉ๋ก
โ”œโ”€โ”€ api_server.py         # FastAPI ๊ธฐ๋ฐ˜ AI ๋ชจ๋ธ ์„œ๋น™ ์„œ๋ฒ„ ์ฝ”๋“œ
โ”œโ”€โ”€ final.py              # ๋ฐ์ดํ„ฐ ๋กœ๋“œ, ๋ชจ๋ธ ์ถ”๋ก , ๊ฒฐ๊ณผ ๋ถ„์„ ๋“ฑ ์ „์ฒด ๋ถ„์„ ๋กœ์ง ์‹คํ–‰ ์ฝ”๋“œ
โ”œโ”€โ”€ README.md             # ํ”„๋กœ์ ํŠธ ์„ค๋ช… ๋ฌธ์„œ
โ””โ”€โ”€ requirements.txt      # ํ•„์š”ํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ฒ„์ „ ๋ชฉ๋ก

๐Ÿ“‚ AI Part

0. Dataset

Elliptic Dataset

Code_Generated_Image

Elliptic ๋ฐ์ดํ„ฐ์…‹์€ ์Šคํ…Œ์ด๋ธ” ์ฝ”์ธ ๊ฑฐ๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  elliptic_txs_features.csv, elliptic_txs_classes.csv, elliptic_txs_edgelist.csv 3๊ฐœ์˜ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์™€ ์—ฃ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์–ด Neo4j ์ง€์‹๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ•์— ์ ํ•ฉํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

โ‘  ๊ฑฐ๋ž˜ ๊ด€๊ณ„๋„ (elliptic_txs_edgelist.csv)

  • ํ–‰: 203,769๊ฐœ ์—ด: 2๊ฐœ
  • ๊ฑฐ๋ž˜ ๊ด€๊ณ„ ์ฆ‰, ์ž๊ธˆ ์ด๋™ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ
  • A์ง€๊ฐ‘์—์„œ B์ง€๊ฐ‘์œผ๋กœ ์ฝ”์ธ์ด ์ด๋™ํ–ˆ๋‹ค๋ฉด, ์ด๋Š” '๊ฑฐ๋ž˜(Transaction)'๋ผ๋Š” ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ๋กœ ํ‘œํ˜„๋จ
txId1 (์ถœ๋ฐœ ๋…ธ๋“œ) txId2 (๋„์ฐฉ ๋…ธ๋“œ)
230425980 5530458

โ‘ก ๊ฑฐ๋ž˜ ์†์„ฑ ์ •๋ณด (elliptic_txs_features.csv)

  • ํ–‰: 203,769๊ฐœ ํŠธ๋žœ์žญ์…˜ (๋…ธ๋“œ) ์—ด: 167๊ฐœ
  • ๊ฐ ๊ฑฐ๋ž˜(๋…ธ๋“œ)๊ฐ€ ๊ฐ€์ง€๋Š” 166์ฐจ์›์˜ ๊ณ ์œ ํ•œ ํŠน์ง• ๋ฒกํ„ฐ๋กœ ํ•ด๋‹น ๊ฑฐ๋ž˜ ์ž์ฒด์˜ ํŠน์„ฑ(Local Features)์™€ ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ง‘๊ณ„ ์ •๋ณด(Aggregated Features)๋กœ ์ด๋ฃจ์–ด์ง
  • ํ•ด๋‹น ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š” ๊ฐœ์ธ์ •๋ณด๋ณด์•ˆ์„ ์œ„ํ•ด features์˜ ํŠน์ง•์ด ์ต๋ช…ํ™”๋˜์–ด ์žˆ์Œ
1. Local Features (93๊ฐœ)
- ํ•ด๋‹น ๊ฑฐ๋ž˜ ์ž์ฒด์˜ ์ •๋ณด
- (์˜ˆ: ํƒ€์ž„์Šคํƒฌํ”„ ์™ธ ์ˆ˜์ˆ˜๋ฃŒ, ์ž…/์ถœ๊ธˆ ํšŸ์ˆ˜, ๊ฑฐ๋ž˜๋Ÿ‰ ๋“ฑ ์ •๋ณด ์ต๋ช…ํ™” )
2. Aggregated Features (73๊ฐœ)
- ํ•ด๋‹น ๊ฑฐ๋ž˜์™€ ์—ฐ๊ฒฐ๋œ ์ด์›ƒ ๋…ธ๋“œ๋“ค์˜ ๊ฑฐ๋ž˜ ๊ธฐ๋ฐ˜ ํ†ต๊ณ„ ์ •๋ณด
- (์˜ˆ: ์ด์›ƒ ๊ฑฐ๋ž˜๋“ค์˜ ํ‰๊ท  ๊ฑฐ๋ž˜๋Ÿ‰, ์ด์›ƒ์˜ ์ด์›ƒ์ด ๊ฐ€์ง„ ํ‘œ์ค€ํŽธ์ฐจ ๋“ฑ)

โ‘ข ์ •๋‹ต ๋ ˆ์ด๋ธ” (elliptic_txs_classes.csv)

  • ํ–‰: 203,769๊ฐœ ์—ด: 2๊ฐœ
  • ๊ฑฐ๋ž˜ ์ •์ƒ(0)/๋น„์ •์ƒ(1)/๋ฏธ๋ถ„๋ฅ˜(-1)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ, ๋ถˆ๊ท ํ˜• ๋ฐ์ดํ„ฐ์˜ ํŠน์ง•
  • ๋ฐ์ดํ„ฐ ๋ถ„ํฌ
    • ๋ถˆ๋ฒ• (illicit) - ์•ฝ 4,545๊ฐœ (2%)
    • ํ•ฉ๋ฒ• (licit) - ์•ฝ 42,019๊ฐœ (21%)
    • unknown = ๋ฏธ๋ถ„๋ฅ˜ - ์•ฝ 157,205๊ฐœ (77%)
- 0 (Licit): ๊ฑฐ๋ž˜์†Œ, ์ง€๊ฐ‘ ์„œ๋น„์Šค ๋“ฑ ํ•ฉ๋ฒ•์  ๊ฑฐ๋ž˜ (์ •์ƒ)
- 1 (Illicit): ๋‹คํฌ์›น, ๋žœ์„ฌ์›จ์–ด, ์ž๊ธˆ์„ธํƒ ๋“ฑ ๋ถˆ๋ฒ• ๊ฑฐ๋ž˜ (๋น„์ •์ƒ)
- Unknown: ์•„์ง ๋ถ„๋ฅ˜๋˜์ง€ ์•Š์€ ๊ฑฐ๋ž˜ (์ „์ฒด์˜ ์•ฝ 98% ์ฐจ์ง€, ์ค€์ง€๋„ ํ•™์Šต ํ™œ์šฉ ๊ฐ€๋Šฅ)

1. GNN-Based Anomaly Detection : Final Methodology & Evolution

gnnmodel_info

GNN๋ชจ๋ธ ํ•™์Šต ๋‹จ๊ณ„์—์„œ๋Š” GAT ๋ชจ๋ธ ๋„์ž… ์ดˆ๊ธฐ์— ๋ฐ์ดํ„ฐ ์ •๊ทœํ™” ๋ถ€์žฌ์™€ ํด๋ž˜์Šค ๋ถˆ๊ท ํ˜•์œผ๋กœ ์ธํ•œ Gradient Explosion(NaN ๋ฐœ์ƒ) ๋ฐ ๋‚ฎ์€ F1-Score(0.04) ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ GCN ๋ณ€๊ฒฝ๊ณผ Weighted Loss, BatchNorm ๋“ฑ์„ ๋„์ž…ํ•˜์—ฌ ํ•™์Šต ์•ˆ์ •์„ฑ๊ณผ Recall์„ ๊ฐœ์„ ํ–ˆ์œผ๋‚˜, ๋ชจ๋ธ์ด ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ(Edge)๋ณด๋‹ค ๋…ธ๋“œ ์ž์ฒด ํ”ผ์ฒ˜์— ๊ณผ๋„ํ•˜๊ฒŒ ์˜์กดํ•˜์—ฌ ๋‹จ์ˆœ ์ง€๋„ํ•™์Šต๊ณผ ๋‹ค๋ฅผ ๋ฐ” ์—†๋Š” ๊ฒฐ๊ณผ(์ •ํ™•๋„ 0.9799)๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด์— EdgeForcedGATNet์„ ์ตœ์ข… ๊ณ ์•ˆํ•˜์—ฌ Input Feature์™€ Edge์— ๊ณผ๊ฐํ•œ Dropout์„ ์ ์šฉํ•˜์—ฌ ๋…ธ๋“œ ํ”ผ์ฒ˜ ์˜์กด๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์ด์›ƒ ์ •๋ณด ํ•™์Šต์„ ๊ฐ•์ œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹จ์ˆœ ์ •ํ™•๋„๋Š” ์กฐ์ •๋˜์—ˆ์œผ๋‚˜(0.8878), ์—ฃ์ง€ ์ •๋ณด ํ™œ์šฉ์ด ๊ฒ€์ฆ๋œ ๊ฒฌ๊ณ ํ•œ ๊ทธ๋ž˜ํ”„ ํ•™์Šต ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

XAI ๋ชจ๋ธ์˜ 'Feature Dominance' ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐ์—” GNN๋ชจ๋ธ์˜ ๊ฑฐ๋ž˜ ๊ด€๊ณ„์˜ ์ค‘์š”ํ•œ Node์ •๋ณด๋ฅผ ์ค‘์š”๋„ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” GNNExplainer๋ฅผ ํ•™์Šต์‹œ์ผฐ์œผ๋‚˜, ์‹ค์‹œ๊ฐ„ ๊ธˆ์œต ์‚ฌ๊ธฐ ํƒ์ง€ ์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์ƒ Low Latency(๋‚ฎ์€์ง€์—ฐ์‹œ๊ฐ„)๊ฐ€ ํ•„์ˆ˜์ ์ด๋ผ ํŒ๋‹จํ•˜์—ฌ Inductive ๋ฐฉ์‹์˜ PGExplainer๋กœ ๊ณ ๋„ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„ค๋ช… ์ƒ์„ฑ ์‹œ๊ฐ„์„ ์ˆ˜ ์ดˆ(sec) ๋‹จ์œ„์—์„œ 0.0X์ดˆ(ms) ๋‹จ์œ„๋กœ ๋‹จ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. PGExplainer ํ•™์Šต ๊ณผ์ •์—์„œ ๋ชจ๋“  ์—ฃ์ง€์˜ ์ค‘์š”๋„(Mask)๊ฐ€ 0.0000์œผ๋กœ ์ˆ˜๋ ดํ•˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Learning Rate๋ฅผ 0.003์—์„œ์„œ 0.0005 ์ˆ˜์ค€์œผ๋กœ ๋‚ฎ์ถฐ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ๊ทœ์ œ ๊ณ„์ˆ˜๋ฅผ ์™„ํ™”ํ•˜์—ฌ ๋กœ๊ทธ ์—ฐ์‚ฐ์˜ ์˜ํ–ฅ๋ ฅ์„ ์ค„์—ฌ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ์ดํ„ฐ ์…‹์—์„œ ์ตœ๋‹ค์ˆ˜๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๋ฏธ๋ถ„๋ฅ˜ ๊ฑฐ๋ž˜์˜ ์˜ํ–ฅ๋ ฅ์œผ๋กœ NaN๊ฐ’ ์ „ํŒŒ๋˜๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด NaN ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น ๋ฐฐ์น˜๋Š” ๋ฌด์‹œํ•˜์—ฌ Loop ๋‚ด์—์„œ total_loss๊ฐ€ ์˜ค์—ผ๋˜์ง€ ์•Š๋„๋ก ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค.

[ํ•™์Šต ํ™˜๊ฒฝ]

  • GPU : NVIDIA A100-SXM4-40GB(Google Colab ํ™˜๊ฒฝ)
  • Framework : PyTorch 2.9.0, PyTorch Geometric
  • ๋ฐ์ดํ„ฐ ๋ถ„ํ•  : Train 60% / Val 20% / Test 20%

2. Neo4j Knowledge Graph Construction & Evidence Retrieval Pipeline

Gemini_Generated_Image_nyhirknyhirknyhi

GNN ๋ชจ๋ธ&PGExplainer๋ฅผ ํ†ตํ•ด ํŠน์ • ๊ฑฐ๋ž˜ํŒจํ„ด์˜ ๋น„์ •์ƒ์ ์ธ ์›€์ง์ž„์„ ์ฃผ๋ณ€ ๋…ธ๋“œ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ›„, Neo4j ์ง€์‹๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  RAG LLM ๊ธฐ๋ฐ˜ ์„ค๋ช…์„ ํ†ตํ•ด AI๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๋ก ์„ ์ถœ๋ ฅํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ID 99201 ๊ฑฐ๋ž˜๋Š” ์ž์ฒด ์†์„ฑ(๊ธˆ์•ก, ์‹œ๊ฐ„)์€ ์ •์ƒ์ด์ง€๋งŒ, 2๋‹จ๊ณ„ ๊ฑด๋„ˆํŽธ(2-hop)์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์ด ์ตœ๊ทผ ๋ถˆ๋ฒ• ์ž๊ธˆ(Class 1)๊ณผ ๋‹ค์ˆ˜ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ด ๊ฑฐ๋ž˜ ๋˜ํ•œ '์ž๊ธˆ ์„ธํƒ์˜ ์ค‘๊ฐ„ ๊ฒฝ๋กœ'์ผ ํ™•๋ฅ ์ด 85%์ด๋‹ค

๋จผ์ €, ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ๋Š” Elliptic ๋ฐ์ดํ„ฐ์…‹์˜ ํ”ผ์ฒ˜(feature)์™€ ํด๋ž˜์Šค(class) ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜๊ณ , ๋ถ„์„์— ๋ถˆํ•„์š”ํ•œ 'unknown' ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ •ํ™•๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ง€์‹ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์—ฃ์ง€(Edge)์˜ ์†์„ฑ์„ ํ’๋ถ€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ๊ธฐ์กด ์—ฃ์ง€ ๋ฆฌ์ŠคํŠธ์— ์กด์žฌํ•˜์ง€ ์•Š๋˜ '๊ฑฐ๋ž˜ ๊ธˆ์•ก(amount)'๊ณผ '์‹œ๊ฐ„(time)' ์ •๋ณด๋ฅผ ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ, ์ตœ์ข…์ ์œผ๋กœ ์•ฝ 4๋งŒ 6์ฒœ ๊ฐœ์˜ ๋…ธ๋“œ์™€ 3๋งŒ 6์ฒœ ๊ฐœ์˜ ์—ฃ์ง€๋กœ ๊ตฌ์„ฑ๋œ ์ •์ œ๋œ ๋ฐ์ดํ„ฐ์…‹์„ ๋งˆ๋ จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด์–ด์ง€๋Š” ์ถ”๊ฐ€ ๋ณ€์ˆ˜ ๋งคํ•‘ ๋‹จ๊ณ„์—์„œ๋Š” ํ–ฅํ›„ ์—ฐ๋™๋  ๊ฑฐ๋Œ€์–ธ์–ด๋ชจ๋ธ(LLM)์ด ๊ทธ๋ž˜ํ”„์˜ ๋งฅ๋ฝ์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ถˆ๋ฒ• ๊ฑฐ๋ž˜(Class 1)๋กœ ์‹๋ณ„๋œ ๋…ธ๋“œ์—๋Š” 'Hacker', 'Ransomware', 'Lazarus Group'๊ณผ ๊ฐ™์€ ๊ตฌ์ฒด์ ์ธ entity_type๊ณผ commet๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ํ•ฉ๋ฒ• ๊ฑฐ๋ž˜(Class 2)์—๋Š” 'Normal User' ์ •๋ณด๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ๋ก ์  ๊ฐ€์น˜๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

์ค€๋น„๋œ ๋ฐ์ดํ„ฐ๋Š” Neo4j ์ง€์‹๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ• ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๊ด€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์™€ ์—ฃ์ง€ ์ ์žฌ ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜์—ฌ ์ •์ œ๋œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ Neo4j Aura DB์— ์ ์žฌํ•จ์œผ๋กœ์จ, ๊ฑฐ๋ž˜ ๊ด€๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ  ์งˆ์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์กฐํšŒ ๋กœ์ง ๊ตฌ์ถ• ๋‹จ๊ณ„์—์„œ๋Š” ํŠน์ • ์ง€๊ฐ‘ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์—ฐ๊ด€๋œ ๊ฑฐ๋ž˜ ์ฆ๊ฑฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์™„์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ผ ๋˜๋Š” ๋‹ค์ˆ˜์˜ ์ง€๊ฐ‘ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์‹œ์Šคํ…œ์€ ์ž๋™์œผ๋กœ Cypher ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ์ง€๊ฐ‘๊ณผ 1์ดŒ ๊ด€๊ณ„์— ์žˆ๋Š” ๋…ธ๋“œ ๋ฐ ์—ฃ์ง€ ์ •๋ณด๋ฅผ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Evidence Graph) ํ˜•ํƒœ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฐ๊ณผ๋Š” ์ตœ์ข…์ ์œผ๋กœ JSON ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ๋˜์–ด, LLM์ด ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ๊ตฌ์ฒด์ ์ธ ์ฆ๊ฑฐ ๋ฐ์ดํ„ฐ๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. LangChain-based LLM Analysis & Automated AML Reporting Pipeline

Gemini_Generated_Image_6wtou96wtou96wto

์ด ๋‹จ๊ณ„๋Š” ๋žญ์ฒด์ธ์ด ์•ž์„œ ๊ตฌ์ถ•๋œ GNN GAT ๋ชจ๋ธ์˜ ๊ฒฐ๊ณผ๊ฐ’๊ณผ Neo4j ์กฐํšŒ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ถœ๋ ฅ๋œ 1์ดŒ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ์ฐธ์กฐํ•ด RAG ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์œผ๋กœ LLM ์ž์—ฐ์–ด ๋‹ต๋ณ€ ์ƒ์„ฑ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋žญ์ฒด์ธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ GPT-4o ๋ชจ๋ธ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์„ '๋ธ”๋ก์ฒด์ธ AML ๋ถ„์„ ์ „๋ฌธ๊ฐ€' ํŽ˜๋ฅด์†Œ๋‚˜๋กœ ์„ค์ •ํ•˜๊ณ , ์•ž์„œ ์ „๋‹ฌ๋ฐ›์€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Evidence Graph)์™€ ์œ„ํ—˜ ์ ์ˆ˜(risk score)๋ฅผ ํ”„๋กฌํ”„ํŠธ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, Pydantic ํŒŒ์„œ๋ฅผ ์ ์šฉํ•˜์—ฌ LLM์˜ ๋‹ต๋ณ€์ด ๋‹จ์ˆœ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ '์ƒ์„ธ ์„ค๋ช…', '์š”์•ฝ(20์ž ์ดํ•˜)', 'ํ•ต์‹ฌ ๋ถˆ๋ › ํฌ์ธํŠธ(3๊ฐœ)'์˜ ์ •ํ•ด์ง„ JSON ๊ทœ๊ฒฉ์„ ์—„๊ฒฉํžˆ ๋”ฐ๋ฅด๋„๋ก ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ ๋‹จ๊ณ„์—์„œ๋Š” run_pipeline ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด ๋ชจ๋“  ๊ณผ์ •์„ ํ•˜๋‚˜๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. [GNN, PGExplainer ํƒ์ง€ โ†’ Neo4j ์กฐํšŒ โ†’ LLM ๋ถ„์„]์˜ ํ๋ฆ„์ด ํ•œ ๋ฒˆ์˜ ์‹คํ–‰์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž๋Š” ์‹œ๊ฐํ™” ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜, ํ•ด๋‹น ๊ฑฐ๋ž˜๊ฐ€ ์™œ ์œ„ํ—˜ํ•œ์ง€ ์„ค๋ช…ํ•˜๋Š” ์ž์—ฐ์–ด ์„ค๋ช…์„ ๋™์‹œ์— ๋ฐ›์•„๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

4. Railway API

[๋ฐฐํฌ ํ™˜๊ฒฝ]

  • Dockerfile์„ ์‚ฌ์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
  • FastAPI ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์ฝ”๋“œ ๊ตฌ์„ฑ
  • Railway์— ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๋ฐฐํฌ ๋ฐ ์—”๋“œํฌ์ธํŠธ

์ตœ์ข…์ ์œผ๋กœ API ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ ๋ฐ ์‹คํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ์ค€๋น„ ๋‹จ๊ณ„์—์„œ download_files_only.py ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ gdown์„ ํ™œ์šฉํ•˜์—ฌ 800MB์— ๋‹ฌํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ฐ ๋ชจ๋ธ ํŒŒ์ผ์„ Google Drive์—์„œ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ดˆ๊ณผ(10๋ถ„)๋ฅผ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด Procfile (ํ˜น์€ start.sh)์— ์˜ํ•ด ์„œ๋ฒ„ ์‹คํ–‰ ๋ช…๋ น ์ด์ „์— ๋ถ„๋ฆฌ๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋ชจ๋ธ ๋กœ๋”ฉ ๋‹จ๊ณ„์—์„œ ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ๋“ค์€ api_server.py๊ฐ€ ์‹œ์ž‘๋  ๋•Œ CPU ๋ฒ„์ „์˜ PyTorch๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  2. FastAPI ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ๊ตฌ์ถ•๋˜์–ด ๋†’์€ ์„ฑ๋Šฅ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค /v1/check_wallet ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ง€๊ฐ‘ ์ฃผ์†Œ ๋˜๋Š” ํŠธ๋žœ์žญ์…˜ $\text{ID}$ ๋ชฉ๋ก์„ ๋ฐ›์•„ ๋ถ„์„์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
  3. Pydantic ๋ชจ๋ธ์ธ WalletRequest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ ๋ณธ๋ฌธ(txIds: list[str])์˜ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ตœ์ข…์ ์œผ๋กœ, API์˜ ํ•ต์‹ฌ ๋กœ์ง์ธ check_wallet ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœ๋˜๋Š” run_pipeline ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ „๋‹ฌ๋ฐ›์€ ํŠธ๋žœ์žญ์…˜ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ๋“œ๋œ GNN ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์œ„ํ—˜ ํƒ์ง€ ๋ถ„์„์„ ์‹คํ–‰ํ•˜์—ฌ [๋ฐ์ดํ„ฐ ๋งคํ•‘ โ†’ ๋ชจ๋ธ ์ถ”๋ก  โ†’ ๋ถ„์„ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜]์˜ ์ „์ฒด ๊ณผ์ •์ด ํ†ตํ•ฉ๋˜์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ํŠธ๋žœ์žญ์…˜ ID์— ๋Œ€ํ•œ ์œ„ํ—˜ ์ ์ˆ˜ ๋ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages