컴퓨터과학/AI_ML강의 (Andrew Ng)

[ML / Andrew Ng] Machine Learning System Design - Building a Spam Classifier

MG# 2022. 5. 31. 12:00

메일을 받았을 때 이를 스팸, 비스팸 메일로 구분하는 모델을 생각해보자. 우선 feature을 정해야 하는데 이메일 안에 담긴 단어의 여부를 파악한다. 예를 들어 deal, buy, discount 등등 스팸메일에서 자주 보이는 단어가 등장하면 스팸메일로 분류하는 식이다. 실제로 훈련을 할 때는 수동적으로 단어 100개를 뽑기보단 training set에서 자주 나타나는 10000 ~ 50000 개의 단어를 선택한다.

모델이 더 작은 오류를 갖게 하기 위해서는 아래의 방법들을 사용하면 된다.

- 데이터를 많이 모은다.

- email header에 기반해 더 정교한 특징을 가진 알고리즘으로 개선한다.

- email body에 기반해 더 정교한 특징을 가진 알고리즘으로 개선한다. (ex. 단어의 미세한 차이, 대소문자, 문장부호 등)

- 의도적으로 틀리게 적은 단어를 검출하는 정교한 알고리즘으로 개선한다. (ex. m0rtgage, med1cine 등)

이제 알고리즘을 개선하는 법에서 알아볼 것이다. 우선 간단한 알고리즘으로 시작해 이를 보충하거나 cv data로 검증해본다. 그리고 learning curve를 그려본 뒤 data나 feature을 늘리거나 다른 방법을 찾아본다. 그리고 error analysis를 한다. 이는 cv data에서 일정한 경향을 띄는 데이터를 수동으로 찾아 대응하는 방법이다.

예를 들어 500개의 cv data 중 100개가 잘못 분류되었다고 하면 이를 두 가지 방법으로 나눈다. 첫번째는 어떤 종류의 이메일인가로 pharma, replica, steal passwords 등이 위 그림과 같은 개수로 있다면 steal passwords 를 가장 많이 놓치고 있으므로 이에 대한 성능을 보강하는 것이 좋을 것이다. 두번째는 알고리즘을 개선할 수 있는 좋은 feature을 찾는 것이다. 위와 같은 특징들이 다음 개수와 같이 있을 때 unusual punctuation을 검출하는 방법이 가장 효과적일 것이다.

위에서 error analysis 는 생각보다 성능 상승에 도움을 못 줄 수도 있다. 그렇기에 위 예시에서 stemming을 하는 것이 도움이 되는지 궁금하면 일단 해보고 이 결과를 확인해보는 것이다. 그렇기에 많고 다양한 방법으로 평가해보는 것이 중요하다.