스팸 필터 중간 결과

블로그나 게시판의 덧글의 스팸성을 판단하는 스팸 필터를 개발하고 있다.
물론 개인적으로 개발하고 있고, 이것을 이용해서 이번 Machine Learning 수업의 프로젝트 자료로 제출을 했고, 계속 여러 펙터를 바꾸고 다른 알고리즘을 집어넣으면서 테스트 하고 있다.

개발 환경은
 

OS : Linux
Language : D Language
library : iconv, ham(형태소 분석기)

쓴 알고리즘은

2만건의 사람이 분류한 덧글 training set을 사용했고, 천여건의 테스트 셋으로 테스트 했는데, 결과가 완전 안습이다.

99.3 %의 테스트 정확도를 자랑한다.

결과가 정말 좋지 않은데, 좋지 않다구 생각하는건 test set을 추출한 시기와 training set을 추출한 시기가 비슷하다는것이다.
스팸이라는것은 시기에 따라서 특정 스팸 패턴이 무수히 반복되기 때문에 아마도 비슷한 시기의 자료를 가지고 하는 테스트는 그다지 신빙성이 없다고 생각한다. 장기적으로 강력한 스팸 필터의 필요성과 그에 대한 고민이 필요할거 같다.

베이지언 룰을 적용하면 0이나 1의 값에 극단적으로 가깝게 나오게 되는데, 카이제곱 방법을 구현해서 한번 더 테스트해봐야 겠다.
수학적으로 굉장히 작은 값을 차이를  뻥티기 해줄수 있는 그런 함수를 사용해야 하는데, log같은 함수를 사용하면 될거 같다.

그리고 스팸에 한번 나와서 0.99의 스팸 확률이 된것과, 여러번 나와서 스팸성이 점차적으로 높아진 단어랑 신뢰도 측면에서 반드시 차이가 있기 때문에  이 부분에 대한 고려가 반드시 있어야 할것이다.

너무 어렵게 생각하지 말고, 수식을 보더라두 직관적으로 이해를 하려고 노력해야 겠다.

결과가 굉장히 기대된다.

일단 위에서 언급한 부분까지 해보고 테스트 해본 다음에 본격적인 논문 실험으로 넘어가야겠다.

아래 파일이 결과 파일인데, 1이 HAM이고 0이 SPAM을 의미한다.

XAMC9DX0Mi.txt

CC BY-NC 4.0 스팸 필터 중간 결과 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.