스팸 필터 중간 결과

블로그나 게시판의 덧글의 스팸성을 판단하는 스팸 필터를 개발하고 있다.
물론 개인적으로 개발하고 있고, 이것을 이용해서 이번 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

0 0 votes
Article Rating
Subscribe
Notify of
guest

6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
프리맨

문장의 의미를 보고 스팸을 걸러내는 것인가요?
완성되서 야후 메일에 적용되면 훌륭할 것 같습니다~ ^^

고감자

야후 메일에도 훌륭한 스팸 필터가 있는걸로 아는데요.. ^^;

Chung

스팸필터 평가에 대해 트랙백 하나 날렸습니다. 🙂

고감자

감사합니다.

스팸필터니 말씀하신 부분을 반드시 짚고 넘어가야 할거 같네요. ^^

최종욱

CRF에서 여러 자질을 섞는 모델을 참고하는 건 어떨까요. 가중치가 더해진 놈들을 다 더해서 exp로 뻥튀기 한 다음 정규화 하는 방법입니다. 각 가중치를 학습시킬 수도 있고. 흠… 좀 다른건가? ^^;

http://link.egloos.com/3227166

trackback

댓글 스팸 classifier를 평가할 때 단순히 정확률을 고려하여 모델을 튜닝하는 것보다는 false negative와 false positive를 구별하여 false positive를 적절히 낮추는걸 목표로 튜닝하는게 필요하지 않을까?..