블로그로 돌아가기
SEO

파이썬으로 키워드 클러스터링 도구 만들기 — TF-IDF와 HDBSCAN 조합

파이썬으로 키워드 클러스터링 도구 만들기 — TF-IDF와 HDBSCAN 조합

키워드 그룹핑은 12,000행 스프레드시트와 손으로 채워야 하는 "의도별 분류" 열을 마주하기 전까지는 단순하게 들리는 SEO 작업이다.

수동 클러스터링은 확장되지 않고, 규칙 기반 그룹핑은 한 단어도 공유하지 않지만 명백히 함께 묶여야 하는 표현들 사이의 의미적 중첩을 놓친다.

이 글에서 다루는 프레임워크는 TF-IDF 벡터화로 피처 벡터를 생성하고, 밀도 기반 클러스터링 알고리즘인 HDBSCAN으로 묶는 방식이다.

키워드 클러스터링이 필요한 이유

키워드 클러스터링은 토픽 생성의 촉매다.

콘텐츠 작가에게 개별 키워드 수백 개를 브리핑하는 대신, 클러스터링은 의미적으로 관련된 쿼리를 일관된 토픽으로 묶어 더 넓은 검색 의도를 충족하는 콘텐츠를 훨씬 쉽게 생산하게 한다.

결과물은 의미적 관계, 토픽 권위, 내부 링크, 관련 쿼리 전반의 가시성을 강화하는 토픽 세트다.

여기에는 두 가지 핵심 난제가 있다. 데이터 전처리와 토픽 클러스터링이다.

난제 1: 데이터 전처리

SEO 키워드 익스포트는 노이즈가 많다. 특히 자체 데이터베이스에서 나온 경우 더 그렇다.

불용어와 비ASCII 문자 제거는 수작업으로 할 수 없다. 그래서 대규모 데이터 정제를 자동화해야 하고, 파이썬은 대용량 키워드 데이터셋을 최소한의 수작업으로 정제·정규화·변환하는 파이프라인을 만들 유연성을 제공한다.

난제 2: 클러스터 개수를 모른다

키워드 데이터를 분석할 때 데이터셋을 탐색하기 전에는 몇 개의 토픽 그룹이 존재하는지 거의 알 수 없다.

이 때문에 k-means 같은 알고리즘은 적합하지 않다. 클러스터 개수를 사전에 지정해야 하기 때문이다.

TF-IDF와 HDBSCAN 조합이 특히 효과적인 이유가 여기 있다.

TF-IDF + HDBSCAN이 작동하는 방식

TF-IDF는 각 키워드를 수치 벡터로 변환한다. 데이터셋 내에서 변별력 있는 용어에 더 큰 가중치를 주고, 많은 키워드에 걸쳐 자주 등장하는 용어의 가중치는 낮춘다.

이 벡터들이 HDBSCAN에 입력된다. 밀도 기반 클러스터링 알고리즘으로, 클러스터 개수를 사전에 정의하지 않고도 자연스러운 그룹을 식별한다.

HDBSCAN의 핵심 장점: 노이즈 식별

모든 키워드를 억지로 클러스터에 밀어넣는 대신, 이상치에 -1 라벨을 부여해 어떤 토픽에도 속하지 않는 키워드를 제외한다.

이것은 SEO 데이터셋에서 특히 가치가 크다. 키워드 익스포트에는 더 넓은 주제 그룹에 자연스럽게 들어맞지 않는 매우 구체적인 롱테일 쿼리가 많이 포함되기 때문이다.

이런 용어를 임의로 배정해 클러스터 품질을 떨어뜨리는 대신, HDBSCAN은 이들을 격리해 더 깨끗하고 일관된 토픽 클러스터를 만든다.

빅쿼리에서 키워드 목록 가져오기

클러스터링 전에 키워드 목록이 필요하다.

서치 콘솔 속성이 이미 빅쿼리로 익스포트되고 있다면 UI 익스포트보다 나은 소스다. 1,000행 상한이 없고 샘플링되지 않기 때문이다.

표준 GSC 빅쿼리 익스포트 스키마에 단순 쿼리를 날린 뒤,

  1. 결과를 CSV로 내보낸다
  2. query 열 하나만 남긴다
  3. 줄당 키워드 하나로 .txt 파일로 저장한다

그것이 클러스터링 입력이다.

빅쿼리 익스포트가 없어도 서치 콘솔 데이터로 작업할 수 있다. 다만 데이터셋이 더 제한된다. 어느 쪽이든 노트북은 키워드 목록만 있으면 된다.

AI에게 어떻게 요청했나

몇 년 전에도 덜 다듬어진 버전의 스크립트로 그럭저럭 해냈다. AI가 스크립트를 재부팅하고 미세 조정할 때 쉽게 만들어준 것은 다음 두 가지였다.

하드코딩이 아니라 조절 가능한 파라미터를 요청한다

클러스터 민감도와 최소 클러스터 크기는 50개 키워드를 묶느냐 50,000개를 묶느냐에 따라 매우 다르게 작동한다.

이를 상단의 조절 가능한 변수로 요청하니 로직을 건드리지 않고 재튜닝할 수 있었다.

실행 환경을 명시한다

첫 버전은 터미널에서 실행하는 평범한 파이썬 스크립트였다. 그러나 실제 워크플로는 "키워드를 뽑고, 노트북을 돌리고, 클라이언트에게 파일을 건넨다" 였다.

구글 코랩 전용 버전을 요청하자 코드의 형태가 바뀌었다. 코랩 전용 임포트를 감싸는 try/except 블록, argparse 제거 등 작은 수정으로 보이는 것보다 훨씬 큰 변화였다. 플로틀리(Plotly)를 최대한 활용한 더 나은 시각화도 가능해졌다.

실행 흐름

스크립트의 요지는 단순하다. 평평한 키워드 목록을 받아 자동으로 토픽 클러스터로 묶는다.

  1. 줄당 키워드 하나인 .txt 파일을 업로드한다
  2. 텍스트를 정제한다 — 특수문자, 불용어, 비영어 항목 제거
  3. sensitivitymin_cluster_size 파라미터를 조정한다 — 키워드 목록 크기에 맞춰 조절하는 것이 프레임워크 전체의 핵심이다
  4. 클러스터 개수가 만족스러우면 TF-IDF가 각 단어의 집합 내 중요도를 점수화한다
  5. HDBSCAN이 마무리한다
  6. 각 클러스터에 가장 변별력 있는 용어를 기반으로 라벨이 자동 생성된다
  7. 결과를 엑셀 파일로 내보낸다 — 클러스터 그룹 뷰와 키워드별 전체 분해 두 가지

AI가 가치를 더하는 지점

실제로 중요한 결정들 — 워드 임베딩 대신 TF-IDF를 고른 것, 토픽 개수를 모르기 때문에 HDBSCAN을 선택한 것 — 은 여전히 키워드 클러스터링이 어떻게 작동하는지에 대한 이해를 요구한다.

AI가 없앤 것은 보일러플레이트 코드를 다시 만들고, 라이브러리를 연결하고, 노트북을 재사용 가능한 형태로 다듬는 반복 작업이었다.

최종 결과물은 수천 개 키워드를 몇 분 만에 처리해 토픽 분류 체계의 합리적인 초안을 만들어내는 가벼운 클러스터링 도구다.

편집 판단을 대체하지는 않는다. 그러나 수동 그룹핑에 드는 시간을 없애고 콘텐츠 팀에게 훨씬 구조화된 출발점을 준다.

서치 콘솔 데이터를 이미 빅쿼리로 내보내고 있다면 이것은 워크플로의 자연스러운 다음 단계가 된다. 쿼리 추출 → 노트북 실행 → 클러스터 검토 → 고립된 키워드가 아니라 토픽 기반으로 콘텐츠 기획.

실무 정리

첫째, 도구 선택보다 알고리즘 선택 이유를 이해한다. k-means를 피한 이유(클러스터 개수 사전 지정)와 HDBSCAN을 고른 이유(노이즈 -1 라벨링)가 결과 품질을 결정한다. AI에게 코드를 시키더라도 이 판단은 사람이 한다.

둘째, 파라미터를 상단 변수로 뺀다. 50개와 50,000개 키워드에서 같은 설정이 통하지 않는다. 재튜닝 비용을 0에 가깝게 만드는 것이 실사용의 조건이다.

셋째, 데이터 소스를 먼저 고친다. UI 익스포트의 1,000행 상한과 샘플링은 클러스터 품질의 상한을 그대로 결정한다. 빅쿼리 익스포트 설정이 알고리즘 튜닝보다 먼저다.

넷째, 클러스터를 토픽 권위 전략으로 연결한다. 클러스터링의 목적은 스프레드시트 정리가 아니다. AI 검색에서도 '토픽 권위'가 승부를 가른다: 챗GPT 카테고리 점유율 분석에서 다룬 것처럼 카테고리 단위 점유가 목표다.

다섯째, 클러스터를 엔티티로 번역한다. AI 검색은 키워드가 아니라 개념의 출처를 찾는다 — 엔티티 SEO — AI 검색은 키워드가 아니라 개념의 출처를 찾는다를 함께 보면 클러스터를 페이지가 아니라 엔티티 커버리지로 설계하게 된다.

여섯째, 클러스터 결과를 발행 계획이 아니라 정리 계획으로도 쓴다. 노이즈(-1) 그룹과 중복 클러스터는 콘텐츠 발행량보다 중요한 것: 데이터로 보는 '콘텐츠 프루닝' 효과에서 다룬 프루닝 후보와 겹친다.

자주 묻는 질문

왜 k-means 대신 HDBSCAN인가요?

k-means는 클러스터 개수를 사전에 지정해야 하는데, 키워드 데이터는 탐색 전에 몇 개의 토픽 그룹이 있는지 알 수 없습니다. HDBSCAN은 밀도 기반이라 개수를 정의하지 않고도 자연스러운 그룹을 찾습니다.

HDBSCAN의 -1 라벨은 무엇인가요?

어떤 클러스터에도 속하지 않는 이상치에 부여되는 노이즈 라벨입니다. 롱테일 쿼리를 억지로 배정해 클러스터 품질을 떨어뜨리는 대신 격리해서 더 깨끗한 토픽 클러스터를 만듭니다.

키워드 목록은 어디서 가져오나요?

서치 콘솔이 빅쿼리로 익스포트되고 있다면 그쪽이 낫습니다. UI 익스포트와 달리 1,000행 상한이 없고 샘플링되지 않습니다. 결과를 CSV로 내보내 query 열만 남기고 줄당 키워드 하나인 .txt로 저장하면 됩니다.

어떤 파라미터를 조정해야 하나요?

sensitivity(클러스터 민감도)와 min_cluster_size입니다. 50개와 50,000개 키워드에서 매우 다르게 작동하므로 하드코딩하지 말고 상단의 조절 가능한 변수로 빼두어야 로직을 건드리지 않고 재튜닝할 수 있습니다.

AI는 어디까지 대신해주나요?

보일러플레이트 코드 재작성, 라이브러리 연결, 노트북을 재사용 가능하게 다듬는 반복 작업입니다. TF-IDF와 HDBSCAN을 선택하는 판단은 여전히 클러스터링 원리에 대한 이해를 요구하며, 최종 결과도 편집 판단을 대체하지 않습니다.

원문 출처: Search Engine Land

우리 사이트는 지금 어떤 상태일까요?

기사에서 본 내용을 우리 사이트에 대입해 보고 싶다면, 무료 진단으로 현재 상태부터 확인해 보세요.

영업일 기준 24시간 안에 담당자가 직접 답변드립니다.

함께 읽어보세요