본문으로 건너뛰기
이커머스
90분

E-Commerce 분석 — 주문 정제부터 RFM 세그먼테이션, 온톨로지까지

가상의 온라인 쇼핑몰 JaffleMart 시나리오로 ERP/CRM 원시 데이터에서 정제 → RFM 세그먼테이션 → 온톨로지 → 대시보드까지 한 사이클 통과합니다.

워크숍 목표

다 끝내고 나면 D.Hub 안에서 다음 흐름을 한 사이클 손으로 통과한 셈이 됩니다.

  • 시나리오 1개를 포털로 적재해 ecommerce_rawanalytics 두 sub-collection, 데이터셋 4종, 코드 노드 4종, 파이프라인 3종, 온톨로지 3엔티티/2관계, 대시보드, 지식 1종을 한꺼번에 등록합니다.
  • ERP(Oracle) 의 raw_orders 와 CRM(PostgreSQL) 의 raw_customers 두 원천 데이터셋의 스키마를 살펴봅니다.
  • orders_cleaning 파이프라인으로 필수 컬럼 null 을 제거한 cleaned_orders 를 만듭니다.
  • customer_segmentation 파이프라인으로 RFM(Recency / Frequency / Monetary) 점수를 계산해 champion / loyal / at_risk / new 4개 세그먼트를 부여합니다.
  • EC_CustomerEC_purchasedEC_OrderEC_contains_productEC_Product 경로를 그래프 탐색기에서 펼쳐 봅니다.
  • sales_overview 대시보드에서 세그먼트별 매출 비중과 트렌드를 둘러봅니다.

분석가 코스의 데이터셋·대시보드 와 엔지니어 코스의 파이프라인·코드 노드 두 갈래를 e-commerce 시나리오 하나로 묶어 보는 통합 실습입니다. 권장 소요 시간은 90분.

사전 준비

  • D.Hub 포털 접근 가능한 분석가 또는 엔지니어 계정 (Editor 권한 이상)
  • 약 50KB 의 zip 한 개를 받을 다운로드 여유

터미널·Python·dhub2-examples 클론은 필요 없습니다. 입문 튜토리얼인 시나리오 zip 으로 한 번에 가져오기 를 먼저 끝내 두면 1단계가 매끄럽게 풀립니다.

1. 시나리오 적재 (10분)

zip 한 개를 받아 포털의 가져오기 다이얼로그로 올리면 시나리오에 묶인 자산이 한꺼번에 등록됩니다.

ecommerce.zip 다운로드(44 KB)

포털 좌측 사이드바의 컬렉션 으로 들어가 Explorer 상단 헤더 — 페이지 제목 컬렉션 영역 — 오른쪽 더보기(⋯) 메뉴의 가져오기 항목을 누릅니다. 다이얼로그에서 방금 받은 zip 을 선택하면 컬렉션 두 개가 자동으로 만들어집니다.

manifest.json 순서대로 다음 자산이 차례로 올라갑니다.

  1. 컬렉션 2종 — ecommerce_raw (alias: 이커머스 원시 데이터), analytics (alias: 이커머스 분석)
  2. 데이터셋 4종 — raw_orders (raw), raw_customers (raw), cleaned_orders (analytics), customer_analytics (analytics)
  3. 코드 4종 (Python) — null_cleanup, join_datasets, rfm_segmentation, build_ecommerce_ontology
  4. 파이프라인 3종 — orders_cleaning, customer_segmentation, ontology_materialization
  5. 온톨로지 — 엔티티 3종(EC_Customer, EC_Product, EC_Order), 관계 2종(EC_purchased, EC_contains_product)
  6. 지식 1종 — product_manual (제품 카탈로그·시작 가이드)
  7. 대시보드 — sales_overview

적재가 끝나면 좌측 컬렉션 트리에 ecommerce_rawanalytics 두 항목이 나란히 떠 있을 겁니다. raw 랜딩 존 (원시 수집) 과 가공·파생 데이터 를 분리하는 패턴은 iot 워크숍과 동일합니다. raw_ordersraw_customersecommerce_raw 에 들어가고, 파이프라인 산출물은 모두 analytics 컬렉션에 떨어집니다.

2. 원시 데이터 둘러보기 (10분)

ecommerce_raw 컬렉션을 열어 raw_orders 데이터셋부터 봅니다. 미리 보기 탭 에서 주문 트랜잭션이 잡힙니다.

  • order_id — 주문 고유 식별자
  • customer_id — 고객 외래키 (raw_customers 와 조인)
  • product_id / product_name — 상품
  • order_date — 주문 일시
  • quantity, unit_price, total_amount — 수량·단가·금액
  • statuscompleted / cancelled / pending

raw_customers 는 CRM 에서 끌어온 고객 프로필입니다. 컬럼은 customer_id, name, email, signup_date, region, tier (standard / silver / gold / platinum).

두 데이터셋의 스키마 탭 에서 customer_id 가 양쪽에서 같은 타입(string) 으로 잡혀 있는지 확인합니다. RFM 계산이 customer_id 기준 group-by 라 타입이 어긋나면 §3 의 파이프라인이 멈춥니다.

3. 주문 정제 파이프라인 (15분)

analytics 컬렉션의 파이프라인 섹션에서 orders_cleaning 을 눌러 워크플로우 편집기를 엽니다. 노드 하나, null_cleanup 스크립트가 raw_orders 의 필수 컬럼이 null 인 행을 제거해 cleaned_orders 를 만듭니다.

스크립트 본문의 핵심은 한 줄 — order_id, customer_id, total_amount, order_date 네 컬럼 중 하나라도 null 이면 drop. cancelled 주문도 함께 걸러 RFM 계산이 유효 거래 만 보도록 정렬합니다.

상단 Run 을 눌러 실행합니다. 끝나면 좌측 트리로 돌아가 cleaned_orders미리 보기 탭 을 엽니다. 행 수가 raw_orders 보다 살짝 적어진 (null + cancelled 제거분) 게 맞으면 3단계 끝입니다.

4. RFM 세그먼테이션 (15분)

이번 단계가 워크숍의 핵심입니다. analytics 컬렉션의 파이프라인 섹션에서 customer_segmentation 을 열면 노드 두 개가 보입니다.

  • join_datasetscleaned_orders + raw_customerscustomer_id 로 inner join. 출력은 고객별 거래 누적.
  • rfm_segmentation — 고객별 R/F/M 세 점수와 최종 세그먼트 라벨을 부여. 출력은 customer_analytics.

rfm_segmentation 노드의 스크립트 미리 보기 를 펼치면 RFM 계산 식이 잡힙니다.

Recency  = (오늘 − 마지막 주문일) 일수 → 작을수록 좋음
Frequency = 주문 횟수             → 클수록 좋음
Monetary  = total_amount 합계      → 클수록 좋음

세 점수는 각각 1~5 분위로 떨어지고, 조합으로 4개 세그먼트가 결정됩니다.

세그먼트조건 (대략)
championR≥4, F≥4, M≥4 — 최근 자주 많이 산 고객
loyalF≥4, M≥3 — 자주 사는 고객
at_riskR≤2, 과거 F≥3 — 한동안 안 산 단골
newF=1 — 최초 거래 1회

Run 을 눌러 실행합니다. 끝나면 customer_analytics 미리 보기에서 segment 컬럼이 4 라벨로 떨어져 있고, 세그먼트별 행 수가 대략 champion : loyal : at_risk : new ≈ 2 : 4 : 2 : 2 비율로 잡힙니다 (시드 데이터 기준).

5. 온톨로지 + 그래프 탐색 (15분)

이제 그래프 시점입니다. analytics 컬렉션의 파이프라인 섹션에서 ontology_materialization 을 누릅니다. 노드 하나, build_ecommerce_ontology 스크립트가 cleaned_orders + raw_customers + customer_analytics 세 데이터셋을 batch 모드로 읽어 다음 5개 산출물을 upsert 모드로 적재합니다.

산출물종류의미
EC_Customer엔티티고객. 키: customer_id. 속성: name, tier, segment, region
EC_Product엔티티상품. 키: product_id. 속성: name, unit_price
EC_Order엔티티주문. 키: order_id. 속성: order_date, total_amount, status
EC_purchased관계EC_CustomerEC_Order
EC_contains_product관계EC_OrderEC_Product

Run 을 눌러 실행하고, 좌측 사이드바의 온톨로지 영역에서 엔티티 3종을 확인합니다. 그래프 탐색기 를 열고 다음 Cypher 한 줄로 첫 인스턴스를 띄웁니다.

MATCH (c:EC_Customer {segment: 'champion'})-[:EC_purchased]->(o:EC_Order)-[:EC_contains_product]->(p:EC_Product)
RETURN c, o, p
LIMIT 25

champion 세그먼트 고객의 구매 그래프 25개가 뜨면 5단계 끝입니다. 노드를 더블 클릭해 이웃을 확장하면 한 고객이 산 모든 상품의 패턴이 보입니다.

6. 대시보드 둘러보기 (15분)

analytics 컬렉션의 대시보드 섹션에서 sales_overview (alias: 매출 현황 대시보드) 를 엽니다. 위젯 5종이 한 화면에 묶여 있고, 모두 customer_analytics 한 데이터셋만 봅니다.

  • Total Customers (statistic) — COUNT(DISTINCT customer_id)
  • Total Revenue (statistic) — SUM(total_spend)
  • Customer Segments (도넛) — segment 별 고객 수 (champion/loyal/at_risk/new 분포)
  • Revenue by Region (막대) — regionSUM(total_spend) 내림차순
  • Avg Order Value by Tier (막대) — tierAVG(avg_order_value) 내림차순

위젯 카드 우측 ⋯ 메뉴에서 편집 을 누르면 SQL 쿼리 모드로 본문이 보입니다. 다섯 위젯 모두 SQL 쿼리 모드 로 짜여 있어 분석가 코스에서 익힌 간편 모드 vs 쿼리 모드 토글의 쿼리 모드 쪽 사례집 으로 옆에 두고 비교해도 좋습니다.

7. 다음 단계 + 회고 (5분)

여기까지 왔다면 한 e-commerce 시나리오 위에서 다음 다섯 흐름을 한 번씩 통과한 셈입니다.

  • 시나리오 적재 → ecommerce_raw vs analytics sub-collection 분기
  • 정제 파이프라인 → null + cancelled 제거
  • RFM 세그먼테이션 → 4 라벨 부여
  • 온톨로지 평탄화 → 고객-주문-상품 그래프
  • 대시보드 → 세그먼트별 매출 시각화

끌리는 방향으로 한 발 더 들어갑니다.

  • 분석가 코스첫 대시보드 레슨에서 sales_overview 위젯의 SQL 모드를 손으로 재구성해 봅니다.
  • 엔지니어 코스파이프라인 스케줄링 레슨으로 가서, RFM 파이프라인을 매일 04:00 자동 실행으로 등록합니다 (시나리오 매니페스트 기본값).
  • 자기 도메인 시나리오dhub2-examples 에 추가합니다. 본 워크숍의 흐름 — 원시 → 정제 → 세그먼트 → 온톨로지 → 대시보드 — 은 다른 거래 도메인(SaaS billing, 모빌리티 라이딩)에도 거의 형판처럼 들어맞습니다.

검증 체크리스트

워크숍이 끝났는지는 다음 5가지로 자가 점검합니다.

  • 컬렉션 트리에 ecommerce_rawanalytics 두 컬렉션이 다 보이고, raw_orders · raw_customersecommerce_raw 에, cleaned_orders · customer_analyticsanalytics 에 떨어져 있는지
  • orders_cleaning 1회 실행 뒤 cleaned_orders 행 수가 raw_orders 보다 적은지 (null + cancelled 제거 확인)
  • customer_segmentation 실행 뒤 customer_analyticssegment 컬럼이 4 라벨(champion / loyal / at_risk / new) 로 분포돼 있는지
  • 그래프 탐색기에서 EC_Customer 한 노드를 시작점으로 EC_purchasedEC_OrderEC_contains_productEC_Product 4-홉 경로를 펼칠 수 있는지
  • 대시보드 sales_overviewCustomer Segments 위젯에서 4 라벨 (champion / loyal / at_risk / new) 이 모두 도넛 조각으로 잡히는지