티스토리 뷰

728x90

KB에서 주최한 금융문자 분석 경진대회에 제출한 소스를 이제야 리뷰합니다.

 

대회에 대해서 간략히 소개 하자면, 고객에게 발송된 SMS 내용을 텍스트 형태로 주고, 라벨링은 스팸SMS인지 아닌지 0/1로 구성된 데이터를 이용하여, 스팸을 예측할 수 있는 모델을 만드는 대회입니다.

 

데이터의 형태는 아래과 같이 되어있네요.

text spam_yn
 안녕하세요. 금융상품 블라블라... 1
 고객님, 감기조심하세요. 블라블라... 0

 

대회의 특징은 모델의 결과물을 0/1 과 같이 binary classification 이 아닌 스팸 확률값 자체를 결과물로 제출해야한다는 점입니다.

 

저는 많은 기법들 가운데서 "나이브 베이즈" 알고리즘을 사용했습니다.

나이브 베이즈 알고리즘을 이해하기 위해서는 "조건부 확률"을 알아야 합니다. 사건 B가 발생하였을 때 사건 A가 발생할확률로, 간단히 이야기 하면 특정 단어가 있다면, 이것이 스팸일 확률을 구하는 것입니다.

 

전체적인 모델 구현 단계는 아래와 같습니다.

1. 텍스트 데이터 전처리 (특수기호 제거, 영문제거, 숫자제거)

2. 명사 추출 ( SMS의 경우 글자수 제한으로 인해 띄어쓰기가 되어있지 않아, 형태소 분석기로 RmecabKo를 사용하였습니다)

3. 데이터 사전을 구축하였습니다 (low frequency가 5 이상인 것)

4. 데이터 사전을 기반으로 document term matrix를 만들고, 나이브 베이즈 알고리즘으로 모델을 생성하였습니다.

5. train data와 test data를 사전에 7:3 비율로 나누어, test data 에 적용 시켜 모델의 적정성을 평가하였습니다.

 

결과, 어떤 이유이유에서 인지, 실제 데이터로 정확성을 확인한 결과 82% 정확도입니다.

모델 자체가 과적합 되었다고 볼 수 있을거 같습니다.

과적합을 줄이는 요소에 대해서 공부를 더 해야할 거 같네요...

 

 

1,2,3등은 정확도 99% 수준으로 매우 높은 것을 알 수 있습니다.

 

1. 텍스트 전처리에 대해서 조금더 공부를 해야할 거 같습니다. 전처리 방법에 따라 왜곡이 많이 일어나는거 같습니다.

2. 과적합을 줄이는 방법에 대해 공부할 예정입니다.

3. 나이브 베이즈 알로리즘 외 다른 알고리즘은 없는지 공부할 예정이며, 우승자의 소스를 분석할 예정입니다.

 

깃허브 : https://github.com/jasonlee8318/R-programming/blob/master/naive-bayes_KB_sms_spam.R

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함