쿨링 샴푸 기획기 ① | 올리브영 리뷰 크롤링 및 가설 설정

PROJECT OVERVIEW

이번 글은 「쿨링 샴푸 기획기」 시리즈의 첫 번째 글입니다. 올리브영 온라인몰에서 쿨링 샴푸 상품과 리뷰 데이터를 직접 수집하고, 이후 분석을 위한 데이터 기반을 구축했습니다.
크롤링 대상과 수집 범위를 정의하고, 신제품 기획을 위한 초기 가설을 설정하는 과정을 정리했습니다.

PROJECT 쿨링 샴푸 리뷰 분석
PURPOSE 신제품 컨셉 및 마케팅 인사이트 도출
DATA SOURCE 올리브영 온라인몰
SEARCH KEYWORD 쿨링 샴푸
DATASET 상품 43개 · 리뷰 753개
TOOLS Python · Playwright · Pandas

왜 쿨링 샴푸인가?

저는 주변에서 흔히 말하는 ‘쿨친놈’입니다. 계절과 상관없이 두피가 조금만 답답해도 시원한 샴푸를 찾고, 새로운 쿨링 샴푸가 나오면 직접 사서 써볼 정도로 관심이 많았습니다.

하지만 막상 제품을 고르려고 하면 항상 같은 고민이 생겼습니다. ‘진짜 시원한 걸까?’, ‘향은 어떨까?’, ‘머리카락이 뻣뻣해지진 않을까?’ 리뷰는 많지만 기준이 모두 달라 어떤 제품을 선택해야 할지 판단하기 어려웠습니다.

그래서 이번에는 소비자의 감각을 데이터로 확인해 보기로 했습니다. 단순히 평점이 높은 제품이 아니라, 사람들이 어떤 경험을 긍정적으로 이야기하고 어떤 이유로 불만을 남기는지 리뷰 데이터를 직접 수집해 분석했습니다.

좋아하는 제품을 더 잘 이해하기 위해 시작한 프로젝트가, 소비자의 구매 경험을 데이터로 해석하는 프로젝트가 되었습니다.

분석 질문

데이터를 수집하기 전에 가장 먼저 정리한 것은 소비자는 실제로 어떤 기준으로 쿨링 샴푸를 평가하는가?였습니다.

제품 상세 페이지에서는 대부분 ‘강력한 쿨링감’을 핵심 장점으로 소개하지만, 실제 구매자들은 전혀 다른 요소를 중요하게 생각할 수도 있습니다.
따라서 리뷰를 분석하기에 앞서 소비자의 구매 경험에 대해 몇 가지 질문을 세우고, 이후 데이터를 통해 하나씩 확인해 보기로 했습니다.

Research Questions

Q1. 소비자는 정말 ‘시원함’을 가장 중요한 기준으로 제품을 평가할까?

Q2. 쿨링감 외에도 소비자가 함께 중요하게 언급하는 요소는 무엇일까?

Q3. 만족과 불만족을 결정하는 핵심 요인은 어떤 경험에서 비롯될까?

데이터 수집

분석을 위해 올리브영 온라인몰에서 ‘쿨링 샴푸’를 검색하여 판매 중인 상품과 리뷰 데이터를 직접 수집했습니다. 단순히 리뷰만 저장하는 것이 아니라, 상품 정보와 리뷰를 하나의 데이터셋으로 연결해 제품 단위의 분석이 가능하도록 데이터를 구성했습니다.

올리브영은 상품 목록과 리뷰가 JavaScript를 통해 동적으로 생성되는 구조였습니다. 따라서 브라우저를 실제 사용자처럼 제어하고, 리뷰 API 응답까지 확인할 수 있는 Playwright를 사용해 크롤러를 구현했습니다.

올리브영 리뷰 크롤링 프로세스
Figure 01. 올리브영 상품 및 리뷰 데이터 수집 과정
01 검색 조건 설정
올리브영 온라인몰에서 ‘쿨링 샴푸’를 검색한 뒤 리뷰 많은 순으로 상품을 정렬했습니다.
특정 상품을 제외하기 위한 기준이 아니라, 소비자 반응이 많이 축적된 상품부터 순차적으로 수집하기 위한 기준으로 활용했습니다.
02 상품 목록 정보 수집
검색 결과 페이지를 순회하며 브랜드, 상품명, 가격, 상품 URL 등 기본 상품 정보를 수집했습니다.
특히 상품 URL은 이후 상세 페이지로 이동하고, 리뷰 데이터와 상품 정보를 연결하기 위한 기준값으로 함께 저장했습니다.
03 상품 상세 페이지 탐색
수집한 상품 URL을 기준으로 각 상세 페이지에 접속한 뒤 리뷰 탭으로 이동했습니다.
페이지가 완전히 로드된 이후 Review API 요청이 발생할 때까지 대기하도록 구현했으며, 상품마다 최대 20개의 리뷰를 동일한 방식으로 수집했습니다.
04 Review API 응답 수집
리뷰 화면의 HTML을 직접 파싱하는 대신, 리뷰 탭 진입 시 발생하는 네트워크 요청을 감지했습니다.
API의 JSON 응답에서 리뷰 본문, 평점, 작성일 등의 데이터를 추출하여 화면 구조 변경의 영향을 줄이고, 보다 안정적으로 리뷰 데이터를 확보할 수 있었습니다.
05 상품 정보와 리뷰 연결
수집한 리뷰 데이터에 상품명, 브랜드, 가격, 상품 URL을 함께 연결했습니다.
이를 통해 리뷰 단위뿐 아니라 상품별 리뷰 수와 평점, 주요 키워드 등을 비교할 수 있는 분석용 데이터 구조를 구성했습니다.
06 DataFrame 변환 및 CSV 저장
최종 데이터는 Pandas DataFrame으로 변환한 뒤 CSV 파일로 저장했습니다.
컬럼명과 데이터 형식을 정리하여 이후 전처리와 EDA를 별도의 병합 작업 없이 바로 수행할 수 있도록 분석용 데이터셋을 구축했습니다.

분석 데이터

크롤링을 통해 상품 정보와 리뷰 정보를 각각 별도의 데이터셋으로 구축했습니다.

상품 데이터셋은 분석 대상이 되는 제품의 기본 정보를, 리뷰 데이터셋은 소비자의 실제 사용 경험과 평점 정보를 담고 있습니다.

이후 두 데이터셋을 함께 활용하여 상품 특성과 소비자 반응을 연결해 분석할 수 있도록 구성했습니다.

DATASET Product
ROWS 43개
COLUMNS 7개
FORMAT CSV · DataFrame
Product Dataset Columns
리뷰순위
리뷰 많은 순 정렬 기준
페이지
검색 결과 페이지 번호
정렬
검색 정렬 방식
브랜드
상품 브랜드명
상품명
올리브영 등록 상품명
가격
판매 가격
상품URL
상품 상세 페이지 주소
Figure 02. Product Dataset Preview
DATASET Review
ROWS 753개
COLUMNS 11개
FORMAT CSV · DataFrame
Review Dataset Columns
리뷰순위
상품 리뷰 순위
브랜드
상품 브랜드명
상품명
상품명
가격
판매 가격
상품내리뷰번호
상품 내 리뷰 번호
리뷰ID
리뷰 고유 식별자
리뷰내용
소비자가 작성한 리뷰 본문
리뷰평점
리뷰 평점(1~5점)
도움돼요수
도움돼요를 받은 횟수
사진여부
포토 리뷰 여부
옵션명
구매 옵션 정보
Figure 03. Review Dataset Preview

분석 데이터 준비

수집한 원본 데이터에는 검색 페이지 정보와 수집 과정에서 사용한 값까지 포함되어 있었습니다.

이번 단계에서는 이후 분석에 필요한 컬럼만 선별하고, 상품 데이터와 리뷰 데이터를 각각 별도의 데이터셋으로 정리했습니다.

이 단계에서는 분석에 필요한 데이터 구조를 정리하는 데까지만 진행했습니다. 결측치 확인, 데이터 타입 변환, 가격 정제, 리뷰 텍스트 전처리 등의 작업은 다음 글에서 상품 데이터 분석과 함께 다룰 예정입니다.

01 분석 컬럼 선택
상품 분석과 리뷰 분석에 직접 활용할 수 있는 컬럼을 중심으로 데이터를 선별했습니다.
상품 데이터에는 리뷰순위, 브랜드, 상품명, 가격, 상품 URL을 남겼고, 리뷰 데이터에는 리뷰 내용과 평점, 도움돼요 수, 사진 여부, 옵션명 등을 포함했습니다.
02 상품·리뷰 데이터 분리
상품의 기본 정보와 소비자 리뷰는 분석 목적이 다르기 때문에 하나의 파일에 모두 담지 않고 각각 별도의 DataFrame으로 구성했습니다.
이를 통해 다음 분석에서 상품 분포와 리뷰 특성을 독립적으로 살펴볼 수 있도록 했습니다.
03 분석용 CSV 저장
선별한 컬럼을 기준으로 상품 데이터와 리뷰 데이터를 각각 CSV 파일로 저장했습니다.
이후 분석 단계에서는 크롤러를 다시 실행하지 않고 저장된 파일을 불러와 전처리와 EDA를 진행할 수 있도록 구성했습니다.

어려웠던 점

프로젝트를 진행하며 데이터를 수집하는 과정에서 예상하지 못했던 문제를 마주했고, 그 과정에서 크롤링 환경과 데이터 수집 방식에 대해 많은 것을 배울 수 있었습니다.

Lesson 01

실행 환경 변경으로 크롤링 안정화

초기에는 Google Colab에서 Playwright를 실행했지만, 브라우저가 정상적으로 열리지 않거나 자동화 접근으로 인식되는 문제가 발생했습니다. 이후 VS Code에서 설치된 Chrome을 직접 제어하는 방식으로 변경하면서 상품 탐색과 리뷰 API 수집을 안정적으로 수행할 수 있었습니다.

Lesson 02

리뷰 수집 범위의 한계

상품당 30개의 리뷰를 수집하는 것을 목표로 했지만, 리뷰 API는 한 번의 요청에서 최대 20개의 리뷰만 반환했습니다. 이후 요청을 이어가는 방식도 여러 차례 시도했지만 안정적으로 구현하지 못해 이번 프로젝트에서는 상품당 20개의 리뷰를 활용했습니다. 향후에는 API 요청 구조를 더 분석해 수집 범위를 확장해보고자 합니다.

NEXT ARTICLE

상품 데이터 전처리 및 EDA

수집한 상품 데이터를 전처리한 뒤 브랜드 구성, 가격 분포, 상품명 키워드를 분석하여 쿨링 샴푸 시장의 특징을 살펴봅니다.

“쿨링 샴푸 기획기 ① | 올리브영 리뷰 크롤링 및 가설 설정”에 대한 1개의 생각

댓글 남기기