E-Commerce 분석 — 주문 정제부터 RFM 세그먼테이션, 온톨로지까지
가상의 온라인 쇼핑몰 JaffleMart 시나리오로 ERP/CRM 원시 데이터에서 정제 → RFM 세그먼테이션 → 온톨로지 → 대시보드까지 한 사이클 통과합니다.
워크숍 목표
다 끝내고 나면 D.Hub 안에서 다음 흐름을 한 사이클 손으로 통과한 셈이 됩니다.
- 시나리오 1개를 포털로 적재해
ecommerce_raw와analytics두 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/new4개 세그먼트를 부여합니다.EC_Customer→EC_purchased→EC_Order→EC_contains_product→EC_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 순서대로 다음 자산이 차례로 올라갑니다.
- 컬렉션 2종 —
ecommerce_raw(alias: 이커머스 원시 데이터),analytics(alias: 이커머스 분석) - 데이터셋 4종 —
raw_orders(raw),raw_customers(raw),cleaned_orders(analytics),customer_analytics(analytics) - 코드 4종 (Python) —
null_cleanup,join_datasets,rfm_segmentation,build_ecommerce_ontology - 파이프라인 3종 —
orders_cleaning,customer_segmentation,ontology_materialization - 온톨로지 — 엔티티 3종(
EC_Customer,EC_Product,EC_Order), 관계 2종(EC_purchased,EC_contains_product) - 지식 1종 —
product_manual(제품 카탈로그·시작 가이드) - 대시보드 —
sales_overview
적재가 끝나면 좌측 컬렉션 트리에 ecommerce_raw 와 analytics 두 항목이 나란히 떠 있을 겁니다. raw 랜딩 존 (원시 수집) 과 가공·파생 데이터 를 분리하는 패턴은 iot 워크숍과 동일합니다. raw_orders 와 raw_customers 만 ecommerce_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— 수량·단가·금액status—completed/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_datasets—cleaned_orders+raw_customers를customer_id로 inner join. 출력은 고객별 거래 누적.rfm_segmentation— 고객별 R/F/M 세 점수와 최종 세그먼트 라벨을 부여. 출력은customer_analytics.
rfm_segmentation 노드의 스크립트 미리 보기 를 펼치면 RFM 계산 식이 잡힙니다.
Recency = (오늘 − 마지막 주문일) 일수 → 작을수록 좋음
Frequency = 주문 횟수 → 클수록 좋음
Monetary = total_amount 합계 → 클수록 좋음
세 점수는 각각 1~5 분위로 떨어지고, 조합으로 4개 세그먼트가 결정됩니다.
| 세그먼트 | 조건 (대략) |
|---|---|
champion | R≥4, F≥4, M≥4 — 최근 자주 많이 산 고객 |
loyal | F≥4, M≥3 — 자주 사는 고객 |
at_risk | R≤2, 과거 F≥3 — 한동안 안 산 단골 |
new | F=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_Customer → EC_Order |
EC_contains_product | 관계 | EC_Order → EC_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 (막대) —
region별SUM(total_spend)내림차순 - Avg Order Value by Tier (막대) —
tier별AVG(avg_order_value)내림차순
위젯 카드 우측 ⋯ 메뉴에서 편집 을 누르면 SQL 쿼리 모드로 본문이 보입니다. 다섯 위젯 모두 SQL 쿼리 모드 로 짜여 있어 분석가 코스에서 익힌 간편 모드 vs 쿼리 모드 토글의 쿼리 모드 쪽 사례집 으로 옆에 두고 비교해도 좋습니다.
7. 다음 단계 + 회고 (5분)
여기까지 왔다면 한 e-commerce 시나리오 위에서 다음 다섯 흐름을 한 번씩 통과한 셈입니다.
- 시나리오 적재 →
ecommerce_rawvsanalyticssub-collection 분기 - 정제 파이프라인 → null + cancelled 제거
- RFM 세그먼테이션 → 4 라벨 부여
- 온톨로지 평탄화 → 고객-주문-상품 그래프
- 대시보드 → 세그먼트별 매출 시각화
끌리는 방향으로 한 발 더 들어갑니다.
- 분석가 코스 의 첫 대시보드 레슨에서
sales_overview위젯의 SQL 모드를 손으로 재구성해 봅니다. - 엔지니어 코스 의 파이프라인 스케줄링 레슨으로 가서, RFM 파이프라인을 매일 04:00 자동 실행으로 등록합니다 (시나리오 매니페스트 기본값).
- 자기 도메인 시나리오 를
dhub2-examples에 추가합니다. 본 워크숍의 흐름 — 원시 → 정제 → 세그먼트 → 온톨로지 → 대시보드 — 은 다른 거래 도메인(SaaS billing, 모빌리티 라이딩)에도 거의 형판처럼 들어맞습니다.
검증 체크리스트
워크숍이 끝났는지는 다음 5가지로 자가 점검합니다.
- 컬렉션 트리에
ecommerce_raw와analytics두 컬렉션이 다 보이고,raw_orders·raw_customers가ecommerce_raw에,cleaned_orders·customer_analytics가analytics에 떨어져 있는지 orders_cleaning1회 실행 뒤cleaned_orders행 수가raw_orders보다 적은지 (null + cancelled 제거 확인)customer_segmentation실행 뒤customer_analytics의segment컬럼이 4 라벨(champion/loyal/at_risk/new) 로 분포돼 있는지- 그래프 탐색기에서
EC_Customer한 노드를 시작점으로EC_purchased→EC_Order→EC_contains_product→EC_Product4-홉 경로를 펼칠 수 있는지 - 대시보드
sales_overview의 Customer Segments 위젯에서 4 라벨 (champion / loyal / at_risk / new) 이 모두 도넛 조각으로 잡히는지