Skip to content

[Refactor]: 숫자 변형 중복 데이터 정리 및 재측정 #88

Description

@pearseona

🏷️ 이슈 유형

  • feat : 새로운 기능 추가
  • fix : 버그 수정
  • refactor : 동작 변경 없는 구조 개선
  • docs : README 등 문서 추가/수정
  • chore : 설정, 빌드, 의존성 패키지 변경
  • 기타 : 설명 추가 작성

💡기능

#77에서 "동일 문장의 숫자만 변경해 개수를 늘리는 방식은 지양한다"고 정했으나, 데이터셋에 11개 그룹 101행(전체의 9.3%) 이 남아 있습니다.
fingerprint 중복 제거는 숫자가 다르면 걸러내지 못하고, template 그룹화는 묶기만 할 뿐 행을 줄이지 않기 때문입니다.

행수 label / 유형 문장 (숫자 마스킹)
19 phishing / 지인가족사칭 "장모님 저 급히 송금할데가… [금액]이에요"
16 normal / 기타정상 "오늘 당일 하루! 아르바이트 모집… 일급 [금액]"
14 phishing / 채용부업사기 "취업비서 인쿠르트의 김[N]입니다…"
13 phishing / 금융기관사칭 "마스크하고 손소독제를… [금액] 보내줘"
9 · 8 phishing / 지인가족사칭 "형수님 진짜 죄송한데 일본에…"
8 normal / 정상광고프로모션 "환급금 분석결과… 예상환급액 [금액]"
4 · 4 · 3 · 3 normal / 정상카드결제알림 "[은행] 소비쿠폰… 사용 [금액]"

#84에서 test의 정상광고프로모션 오탐 8/8이 실은 환급금 문자 한 템플릿이었습니다.
이 그룹이 통째로 test에 가면서 train에는 표기 없는 광고가 2건만 남았고, 한 문장이 유형 전체 지표를 좌우했습니다.

모델은 변경하지 않고 데이터 중복만 정리합니다.

🛠️할 일 목록

  • 금액·날짜·시각·숫자를 정규화한 canonical form으로 중복을 판정하는 규칙을 정의한다.
  • 그룹당 남길 대표 표본 수와 선택 기준을 정한다(전부 제거하면 금액 불변성 학습 기회가 사라진다).
  • prepare_template_groups에 반영해 이후 데이터도 지속적으로 걸러지게 한다.
  • 정리 전후 행 수·유형별 분포를 기록하고, canonical 중복이 남지 않았는지 검사하는 테스트를 추가한다.
  • sms_split_v3.csv를 보존한 채 새 split을 생성하고 EXPECTED_* 가드를 갱신한다.
  • #84와 동일한 구조 특징 구성(14개)으로 재학습하고 run_error_analysis.py로 전후를 비교한다.
  • #84의 관문 기준으로 재판정한다(1차 ROC-AUC ≥ 0.95 · 2차 FPR 5%에서 Recall ≥ 0.85).

📌 참고 사항 / 제약 조건

  • 목적은 데이터 무결성이지 지표 개선이 아니다. 정리 후 지표가 나빠져도 그대로 기록한다.
  • 이진 label과 원문은 변경하지 않는다. 행을 줄일 뿐 내용을 고치지 않는다.
  • 특징을 함께 바꾸지 않는다. 그래야 데이터 정리 효과만 분리 측정된다.
  • 데이터가 9% 줄어 클래스 균형이 기울면 임계값이 이동한다. #83에서 정상 120건 추가 시 임계값이 0.30→0.16으로 밀린 사례가 있어, #85 임계값 정책을 함께 반영할지 검토한다.
  • 임계값은 validation에서만 선정하고 test·holdout으로 재조정하지 않는다.
  • sms_split_v2.csv·v3.csv와 기존 artifact는 모두 보존한다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

refactorCode changes that neither fix a bug nor add a feature

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions