[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,63 +1,262 @@
|
||||
---
|
||||
id: wiki-2026-0508-e-commerce-optimization
|
||||
title: E commerce Optimization
|
||||
title: E-commerce Optimization
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [P-Reinforce-AI-EC-OPT]
|
||||
aliases: [CRO, conversion rate optimization, ecommerce growth, funnel optimization]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.99
|
||||
tags: [Ecommerce, Conversion, Optimization, GrowthHacking]
|
||||
confidence_score: 0.95
|
||||
verification_status: applied
|
||||
tags: [ecommerce, conversion, optimization, growth-hacking, ab-testing, cro, ux]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-20
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: Python / TypeScript
|
||||
framework: GA4 / Mixpanel / Optimizely / VWO
|
||||
---
|
||||
|
||||
# [[E-commerce-Optimization|E-commerce-Optimization]] (이커머스 최적화)
|
||||
# E-commerce Optimization
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "장바구니에서 결제로 이어지는 길목의 모든 돌멩이를 치우는 과정." 단순한 방문자 수를 넘어, 구매 전환률(CVR), 객단가(AOV), 고객 생애 가치(LTV)를 극대화하기 위해 데이터에 기반하여 UI/UX와 추천 로직을 끊임없이 개선하는 지점이다.
|
||||
## 매 한 줄
|
||||
> **"매 funnel 의 매 step 의 conversion 의 increase"**. 매 visitor → cart → checkout → purchase → repeat 의 매 leakage 의 fix. 매 modern: 매 ML personalization + 매 A/B + 매 LLM (review summary, search). 매 metric: CVR, AOV, LTV.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **Conversion Rate Optimization (CRO)**:
|
||||
- **Funnel [[Analysis|Analysis]]**: 유저가 어느 단계(검색 -> 상세 -> 장바구니 -> 결제)에서 이탈하는지 파악.
|
||||
- **One-click Checkout**: 결제 단계를 비약적으로 단축하여 충동 구매 지원.
|
||||
- **Personalization**:
|
||||
- **Recommendation Engine**: "이 상품을 본 고객이 함께 본 상품" (협업 필터링).
|
||||
- **[[Dynamic Pricing|Dynamic Pricing]]**: 수요와 유저 가치에 따라 실시간 가격 변동.
|
||||
- **Technical SEO**: 상품 상세 페이지의 로딩 속도 최적화(LCP) 및 구조화된 데이터(JSON-LD) 적용.
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- 단기적인 매출 최적화(다크 패턴, 가짜 할인 등)는 고객의 '심리적 장부'에 마이너스를 기록하여 장기적인 브랜드 가치를 훼손한다. 현대의 최적화는 단순히 '오늘 한 개 더 파는 것'이 아니라, 리텐션(Retention) 중심의 지표 설계를 통해 지속 가능한 성장을 추구해야 한다.
|
||||
### 매 funnel
|
||||
1. **Acquisition**: 매 ad → land.
|
||||
2. **Engagement**: 매 product browse.
|
||||
3. **Conversion**: 매 add to cart → checkout.
|
||||
4. **Retention**: 매 repeat purchase.
|
||||
5. **Advocacy**: 매 review / referral.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Related: [[Core-Web-Vitals|Core-Web-Vitals]] , A_B-Testing-Platforms
|
||||
- Metric: Lifetime-Value (LTV)
|
||||
### 매 key metric
|
||||
- **CVR** (Conversion Rate): 매 purchase / visit.
|
||||
- **AOV** (Average Order Value).
|
||||
- **LTV** (Lifetime Value).
|
||||
- **CAC** (Customer Acquisition Cost).
|
||||
- **Cart abandonment rate**.
|
||||
- **Repeat rate**.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### 매 lever
|
||||
- **UX**: 매 PDP, search, navigation.
|
||||
- **Pricing**: 매 dynamic + bundle.
|
||||
- **Personalization**: 매 reco + DCO.
|
||||
- **Trust**: 매 review + social proof.
|
||||
- **Speed**: 매 Core Web Vitals.
|
||||
- **Promotion**: 매 discount + urgency.
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### 매 modern AI
|
||||
- **Reco**: 매 sequence + transformer.
|
||||
- **Visual search**: 매 CLIP-based.
|
||||
- **Review summary**: 매 LLM.
|
||||
- **Chat**: 매 product question.
|
||||
- **Smart bundle**: 매 ML 의 affinity.
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### 매 응용
|
||||
1. **DTC brand**: 매 owned channel.
|
||||
2. **Marketplace**: 매 search + reco.
|
||||
3. **Subscription**: 매 churn + upsell.
|
||||
4. **Luxury**: 매 service + AOV.
|
||||
5. **B2B**: 매 quote + repeat.
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
## 💻 패턴
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### Funnel analytics
|
||||
```python
|
||||
import pandas as pd
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
def funnel_drop(events_df):
|
||||
steps = ['view_landing', 'view_product', 'add_to_cart', 'checkout', 'purchase']
|
||||
counts = []
|
||||
user_set = None
|
||||
for step in steps:
|
||||
users = set(events_df[events_df.event == step].user_id)
|
||||
if user_set is None: user_set = users
|
||||
else: user_set = user_set & users
|
||||
counts.append((step, len(user_set)))
|
||||
|
||||
drops = []
|
||||
for i in range(1, len(counts)):
|
||||
drop = 1 - counts[i][1] / counts[i-1][1]
|
||||
drops.append((counts[i-1][0], counts[i][0], drop))
|
||||
return pd.DataFrame(drops, columns=['from', 'to', 'drop_rate'])
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### A/B test (CUPED-adjusted)
|
||||
```python
|
||||
import numpy as np
|
||||
from scipy import stats
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
def cuped_test(control, treatment, control_pre, treatment_pre):
|
||||
"""매 pre-experiment covariate 의 variance 의 reduce."""
|
||||
pre = np.concatenate([control_pre, treatment_pre])
|
||||
post = np.concatenate([control, treatment])
|
||||
theta = np.cov(pre, post)[0, 1] / np.var(pre)
|
||||
|
||||
c_adj = control - theta * (control_pre - pre.mean())
|
||||
t_adj = treatment - theta * (treatment_pre - pre.mean())
|
||||
return stats.ttest_ind(c_adj, t_adj)
|
||||
```
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### Cart abandonment recovery
|
||||
```python
|
||||
def abandoned_cart_email(user, cart, hours_since=2):
|
||||
if cart.total < 50: return None # 매 ROI gate
|
||||
|
||||
discount = compute_personalized_discount(user, cart)
|
||||
return {
|
||||
'subject': f'Still thinking about your {cart.items[0].name}?',
|
||||
'discount': discount,
|
||||
'expires': now() + timedelta(hours=24),
|
||||
'urgency': cart.items[0].inventory < 10,
|
||||
}
|
||||
```
|
||||
|
||||
### Recommender (collaborative filtering)
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
def item_item_cf(user_item, target_item, k=20):
|
||||
"""매 cosine similarity 의 매 item 의 closest k."""
|
||||
item_vec = user_item[:, target_item]
|
||||
sims = []
|
||||
for j in range(user_item.shape[1]):
|
||||
if j == target_item: continue
|
||||
sim = np.dot(item_vec, user_item[:, j]) / (
|
||||
np.linalg.norm(item_vec) * np.linalg.norm(user_item[:, j]) + 1e-9
|
||||
)
|
||||
sims.append((j, sim))
|
||||
return sorted(sims, key=lambda x: -x[1])[:k]
|
||||
```
|
||||
|
||||
### Personalized search ranking
|
||||
```python
|
||||
def rerank(query_results, user):
|
||||
scored = []
|
||||
for item in query_results:
|
||||
base = item.relevance_score
|
||||
affinity = predict_affinity(user, item) # 매 ML
|
||||
margin = item.margin
|
||||
|
||||
score = 0.6 * base + 0.3 * affinity + 0.1 * margin
|
||||
scored.append((item, score))
|
||||
return [i for i, _ in sorted(scored, key=lambda x: -x[1])]
|
||||
```
|
||||
|
||||
### Review summarization (LLM)
|
||||
```python
|
||||
def summarize_reviews(reviews, n_pros=3, n_cons=3):
|
||||
prompt = f"""Summarize the {len(reviews)} customer reviews below.
|
||||
Output JSON with {n_pros} pros and {n_cons} cons (one short phrase each).
|
||||
Reviews:
|
||||
{format_reviews(reviews)}"""
|
||||
return llm.generate(prompt)
|
||||
```
|
||||
|
||||
### Bundle pricing (cross-sell)
|
||||
```python
|
||||
def bundle_recommend(cart, catalog, threshold=0.7):
|
||||
# 매 affinity from co-purchase data
|
||||
last_item = cart.items[-1]
|
||||
candidates = [(c, affinity(last_item, c)) for c in catalog if c.id != last_item.id]
|
||||
candidates.sort(key=lambda x: -x[1])
|
||||
|
||||
bundles = []
|
||||
for c, score in candidates[:5]:
|
||||
if score > threshold:
|
||||
bundle_price = (last_item.price + c.price) * 0.9
|
||||
bundles.append({'item': c, 'bundle_price': bundle_price, 'savings': last_item.price + c.price - bundle_price})
|
||||
return bundles
|
||||
```
|
||||
|
||||
### LTV prediction
|
||||
```python
|
||||
import xgboost as xgb
|
||||
|
||||
def predict_ltv(user_features):
|
||||
"""매 first 30-day signal → 매 12-month LTV."""
|
||||
model = xgb.XGBRegressor(n_estimators=300, max_depth=6).fit(X_train, y_train)
|
||||
return model.predict(user_features.reshape(1, -1))[0]
|
||||
```
|
||||
|
||||
### Cohort retention
|
||||
```python
|
||||
def retention_curve(orders_df):
|
||||
orders_df['cohort_month'] = orders_df.groupby('user_id').order_date.transform('min').dt.to_period('M')
|
||||
orders_df['order_month'] = orders_df.order_date.dt.to_period('M')
|
||||
orders_df['period'] = (orders_df.order_month - orders_df.cohort_month).apply(lambda x: x.n)
|
||||
|
||||
cohort = orders_df.groupby(['cohort_month', 'period']).user_id.nunique().reset_index()
|
||||
return cohort.pivot(index='cohort_month', columns='period', values='user_id')
|
||||
```
|
||||
|
||||
### Page speed (Core Web Vitals)
|
||||
```javascript
|
||||
// 매 client-side measure
|
||||
import { onLCP, onINP, onCLS } from 'web-vitals';
|
||||
onLCP(({ value }) => analytics.track('LCP', { value }));
|
||||
onINP(({ value }) => analytics.track('INP', { value }));
|
||||
onCLS(({ value }) => analytics.track('CLS', { value }));
|
||||
```
|
||||
|
||||
### Visual search (CLIP-style)
|
||||
```python
|
||||
from transformers import CLIPModel
|
||||
model = CLIPModel.from_pretrained('openai/clip-vit-large-patch14')
|
||||
|
||||
def visual_search(query_image, catalog_embeds):
|
||||
q_emb = model.get_image_features(preprocess(query_image))
|
||||
sims = (q_emb @ catalog_embeds.T).softmax(-1)
|
||||
return sims.topk(20).indices
|
||||
```
|
||||
|
||||
### Smart upsell (post-purchase)
|
||||
```python
|
||||
def upsell(order, catalog):
|
||||
bought_categories = {item.category for item in order.items}
|
||||
candidates = [c for c in catalog if c.category in bought_categories]
|
||||
return sorted(candidates, key=lambda c: c.cross_sell_score, reverse=True)[:3]
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Lever |
|
||||
|---|---|
|
||||
| Low CVR | UX + trust |
|
||||
| Low AOV | Bundle + upsell |
|
||||
| High CAC | Retention + LTV |
|
||||
| Cart abandon | Recovery email + urgency |
|
||||
| Slow site | Core Web Vitals |
|
||||
| Repeat low | Subscription + reco |
|
||||
|
||||
**기본값**: 매 funnel 진단 + 매 leak step 의 fix + 매 A/B 검증 + 매 reco / personalization for scale.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[E-commerce]] · [[Growth-Hacking]]
|
||||
- 변형: [[CRO]] · [[Funnel-Optimization]]
|
||||
- 응용: [[Recommender-Systems]] · [[A-B-Testing]] · [[Dynamic Pricing & Offers]]
|
||||
- Adjacent: [[Dynamic-Creative-Optimization]] · [[Core-Web-Vitals]] · [[Customer-Lifetime-Value]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 e-commerce site. 매 marketplace. 매 DTC.
|
||||
**언제 X**: 매 information-only. 매 niche / B2B-large-account.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Optimize without funnel data**: 매 wrong step.
|
||||
- **AOV at expense of trust**: 매 dark pattern.
|
||||
- **No A/B test**: 매 noise 의 confuse.
|
||||
- **CAC ↑ chase**: 매 LTV 의 ignore.
|
||||
- **Reco without diversity**: 매 echo bubble.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (ConversionXL, Baymard, Booking.com Eng).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-04-20 | Auto-reinforced |
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — funnel + 매 A/B / cart / reco / LTV / cohort / CWV code |
|
||||
|
||||
Reference in New Issue
Block a user