CharCNN 모델의 기본 뼈대입니다.
진행 목표 사항은
1.데이터셋 확장
2.성능 향상(recall 90% 이상, accuracy 90% 내외, FN최소화)
3.모델 구조 개선(필터 수 증가, kernel size 추가 등...)
이 있습니다.
역할 분담: 7번 항목의 내용을 참고해서 자유롭게 해 주시면 됩니다. 학습+평가/데이터로 분할하는 것을 추천드리는 편입니다.
입력:
http://paypa1-login.xyz
출력:
{
"score": 0.91,
"label": "malicious"
}의미:
score: 악성일 확률(0 ~ 1)label: 최종 판단 결과
데이터 파일 저장 폴더입니다.
원본 CSV 파일 위치
예:
url,label
https://google.com,0
http://paypa1-login.xyz,1전처리 후 학습용 데이터 저장 위치
train.csvvalid.csvtest.csv
학습 완료 후 생성되는 결과물입니다.
학습된 모델 파일
문자를 숫자로 바꾸는 사전 파일
실제 코드 폴더입니다.
| 파일명 | 역할 |
|---|---|
| config.py | 설정값 관리 |
| preprocess.py | 데이터 정리 및 분할 |
| dataset.py | URL → 숫자 배열 변환 |
| model.py | CharCNN 모델 구조 |
| train.py | 모델 학습 |
| evaluate.py | 성능 평가 |
| predict.py | URL 단일 예측 |
| explain.py | XAI 로그 기능 |
pip install -r requirements.txtdata/raw/urls.csv
형식:
url,label
https://google.com,0
http://paypa1-login.xyz,1라벨 기준:
0= 정상1= 악성
python src/preprocess.py결과:
data/processed/train.csv
data/processed/valid.csv
data/processed/test.csv
python src/train.py결과:
saved/charcnn.pt
saved/char_vocab.json
예상 로그:
Epoch 1 train_loss: 0.68
Epoch 2 train_loss: 0.55
Epoch 3 train_loss: 0.42
loss가 감소하면 정상입니다.
python src/evaluate.py출력 예:
Accuracy : 0.91
Precision: 0.88
Recall : 0.94
F1 Score : 0.91
python src/predict.py --url "http://paypa1-login.xyz"출력:
{
"score": 0.91,
"label": "malicious"
}python src/predict.py --url "http://paypa1-login.xyz" --xai출력:
{
"score": 0.91,
"label": "malicious",
"xai": {
"top_chars": []
}
}MAX_LEN
BATCH_SIZE
EPOCHS
LEARNING_RATE
EMBED_DIM
NUM_FILTERS
KERNEL_SIZES
DROPOUT
THRESHOLD| 지표 | 의미 |
|---|---|
| Accuracy | 전체 정확도 |
| Precision | 악성이라 한 것 중 진짜 악성 비율 |
| Recall | 실제 악성 중 잡아낸 비율 |
| F1 Score | Precision + Recall 균형 |
보안 탐지에서는 Recall이 매우 중요합니다.
악성 URL을 놓치면 위험합니다.
saved/charcnn.pt 없음
해결:
python src/train.pysaved/char_vocab.json 없음
해결:
python src/train.pyModuleNotFoundError: torch
해결:
pip install -r requirements.txt예:
모든 URL이 정상
모든 URL이 악성
accuracy 낮음
확인 사항:
- 데이터 라벨 오류
- 정상/악성 비율 불균형
- 데이터 수 부족
- learning rate 문제
- URL 수집
- 라벨 검수
- 중복 제거
- 데이터 균형 조절
- train.py 실행
- config 튜닝
- 최고 성능 모델 기록
- evaluate.py 실행
- confusion matrix 분석
- 오탐/미탐 URL 정리
- config.py 값
- dataset.py 문자 인코딩 구조
- model.py 핵심 구조
- explain.py 내부 로직 **단순 설명 보조용이므로 방해되면 삭제해도 OK
- label 기준 (
0=정상,1=악성)
EPOCHS 증가
10 → 20 → 30
LEARNING_RATE 변경
0.001 / 0.0005 / 0.0001
BATCH_SIZE 조절
16 / 32 / 64
MAX_LEN 조절
128 / 200 / 256
DROPOUT 조절
0.3 / 0.5