페이스북은 어떻게 가짜 계정을 잡아낼까?


페이스북은 지난 2019년 매 분기당 20억 개에 달하는 가짜 계정들을 차단하였다고 합니다. 가짜 계정은 스팸, 피싱, 악성코드 유포 등 다양한 사이버 범죄 목적으로 사용할 수 있기 때문에 빨리 찾아내고 차단하는 것이 중요합니다. 페이스북에서는 이러한 가짜 계정들의 생성을 막기 위해 규칙 기반 및 간단한 기계학습 기반의 필터링을 진행하고 있습니다.

그러나 이러한 노력에도 불구하고 많은 가짜 계정들이 필터링을 뚫고 생성되어 활발히 활동하고 있으며, 사람이 하나하나 검사하기에는 너무도 많아 자동으로 걸러내는 방법이 필요합니다. 이미 활성화된 계정들 중 악의적 목적을 가진 가짜 계정들만을 걸러내는 일은 매우 어렵고, 잘못하면 일반 사용자의 계정을 차단할 위험도 있습니다. 이에 페이스북에서는 Deep Entity Classification (DEC)라는 딥러닝 기반 가짜 계정 탐지 기술을 활용하고 있다고 합니다.


DEC에 대해 소개하기 전에 일반적으로 떠올릴만한 머신러닝을 이용한 가짜 계정 탐지 방식을 살펴보겠습니다. 먼저 다수의 계정 데이터를 확보합니다. 그리고 각 계정의 위치, 친구, 연령, 직업 등의 정보들을 특징점으로 사용하고, 해당 계정이 가짜 계정인지 일반 계정인지를 구분하여 학습용 데이터셋을 만듭니다. 그리고 모델을 학습시켜서 사용하면 왠지 잘 될 것 같습니다.

하지만 이러한 고전적인 접근 방식에는 크게 두 가지 문제가 존재합니다.
첫 번째로, 이와 같은 방식으로는 제한된 수의 특징점만을 활용할 수 있으며 악의적인 사용자들이 특징점으로 사용되는 정보를 조작하여 시스템을 통과할 수 있습니다. 예를 들어, 친구가 3명 이하인 계정이 가짜 계정일 확률이 높다고 판단한다면 가짜 계정끼리 친구를 많이 맺어 시스템을 속일 수 있는 것이죠.
두 번째로, 많은 수의 계정 데이터에 대해 일반 사용자인지 가짜 계정인지 라벨링, 즉 구분해주기가 어렵습니다. 라벨링을 위해선 사람이 직접 판단해줘야 하는데, 앞서 언급했듯이 사람이 직접 가짜인지 진짜인지 구분해도 될 정도의 양이었다면 애초에 이런 시스템을 구축하려고 하지 않았을겁니다.

따라서, DEC에서는 이와 같은 문제를 해결하기 위해 2만개가 넘는 특징점들을 생성하여 활용한다고 합니다. 또한 사람이 구분해준 정확한 라벨링 데이터는 물론이고 다른 머신러닝 모델이 매긴 다소 부정확한 라벨링 데이터도 활용합니다. 다른 머신러닝 모델에서 매겨진 라벨은 사람이 구분한 것에 비해 정확도는 떨어지지만 훨씬 많은 수를 확보할 수 있다는 장점이 있습니다.

우선 어떻게 많은 수의 특징점을 확보했는지부터 살펴보겠습니다.


위의 그림은 계정 정보들 중에서 가짜 계정인지 일반 사용자인지 구분하기 위해 사용할 수 있는 정보의 예시입니다. 나이, 성별, 국가 등의 정보가 있죠. 이러한 기본적인 정보들로부터 한 단계 더 파고 들어가면 아래와 같은 파생된 정보들을 얻을 수 있습니다.


예를 들어, 하나의 계정을 살펴보면 어떤 운영체제를 가진 어떤 기기에서 접속했는지 알 수 있는데, 한 단계 더 파고 들어가면 해당 기기를 총 몇 개의 계정이 이용하고 있는지도 알 수 있을 것입니다.


페이스북에서는 여기서 한발 더 나아가, 파생된 정보들을 모아서 특정 연산을 해줌으로써 특징점 수를 뻥튀기합니다. 예를 들면 어떤 계정의 친구 계정들에 대해서 그룹 수를 다 파악하여 파생된 정보를 얻고, 이를 평균내서 친구들의 평균 그룹 수를 구하는 식입니다.


그리고 특징점 수를 더욱 늘리기 위해서 연산을 한 단계 더 수행해줍니다. 이런 식으로 DEC에 활용하기 위한 2만개 이상의 특징점을 확보했다고 합니다. 학습을 수행하기 위한 입력 데이터가 만들어졌으니 이제 DEC가 어떻게 학습되는지에 대해 살펴보겠습니다.



DEC는 위와 같이 총 두 단계에 걸쳐 학습을 진행합니다. 우선, 다른 머신러닝 모델로부터 생성된 낮은 정확도의 라벨링 데이터를 활용하여 딥 뉴럴 네트워크를 학습합니다. 이렇게 학습된 네트워크는 임베딩 값, 즉 계정에 대한 벡터값을 출력하게 되는데 이는 다음 단계 모델의 입력으로 사용됩니다. 1단계에서 사용된 데이터는 라벨링이 완벽하지 않아서 실제로 가짜인지 진짜인지 구분하도록 네트워크를 학습시키긴 어렵지만, 괜찮은 임베딩을 출력하도록 학습하기엔 충분하다는 겁니다. 임베딩 값은 가짜 계정들끼리나 일반 계정들끼리는 거리가 가깝지만, 가짜 계정과 일반 계정의 거리는 멀도록 출력해주면 됩니다. 따라서, 꼭 정확한 라벨링 데이터가 있어야만 학습할 수 있는 건 아닙니다.

다음 단계에서는 1단계에서 학습된 임베딩 값과 사람이 매긴 정확한 라벨값을 입력받아서 계정이 가짜인지 일반 사용자인지를 구분하도록 학습을 진행합니다. 정리해보면, 기계로 매긴 라벨은 양이 많지만 정확도가 다소 떨어지므로 계정의 임베딩 값을 뽑기 위한 학습에 사용하고, 사람이 매긴 라벨은 양은 적어도 정확하므로 임베딩 값을 바탕으로 실제로 이 계정이 가짜인지 진짜인지 구분하도록 학습하는데 사용하는 겁니다.


이렇게 학습된 DEC의 성능을 평가해 본 결과입니다. 오프라인 평가란 미리 확보한 데이터셋에 대해 평가를 진행했다는 뜻입니다. 초록색 선이 위에서 소개드린 DEC 최종버전에 대한 성능으로써 recall 0.5 정도까지 precision 0.95 이상의 성능을 보여줍니다. 다른 방법들과 비교하여 훨씬 우수한 성능을 보이고 있습니다.

DEC 도입 이후로 페이스북에서는 가짜 계정 수가 실제 활동하는 계정의 5%가 넘지 않도록 관리하고 있다고 합니다. 도입 전에 비해 많이 줄인 것이겠지만, 페이스북의 월간 활동 계정 수가 25억명인 것을 감안하면 현재는 매월 가짜 계정 1억 2천5백만개 정도가 활동하고 있다는 것을 뜻합니다. 페이스북과 가짜 계정들 간의 전쟁은 끝이 없을 것 같지만, 앞으로도 기술 발전을 통해 더욱 안전하고 건전한 SNS가 되길 바래봅니다.

관련 자료:

<이미지 출처>
- 나머지 그림들: Facebook Scale 19 conference에서의 관련 발표

댓글

이 블로그의 인기 게시물

이제 인공지능과 함께 코딩하세요!

딥마인드, 알파스타를 통해 스타크래프트2까지 정복하다.

오픈소스 음원 분리 엔진 Spleeter