Files
2nd/10_Wiki/Topics/AI_and_ML/E-commerce-Optimization.md
T
koriweb d8a80f6272 chore(wiki): dangling 링크 canonical 정규화 (768파일/1200건)
이름만 다른(표기 변형) [[위키링크]]를 대상 문서의 canonical 제목으로 치환해
끊겼던 1,200개 링크를 연결. 제목/파일명 정규화 일치만 적용하고 별칭 매칭은
과병합 위험으로 제외(애매성 가드). 원본은 _link_reconcile_backup/ 에 백업.
도구: Datacollect/scripts/link_reconcile_apply.mjs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:24:15 +09:00

8.3 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score verification_status tags raw_sources last_reinforced github_commit tech_stack
wiki-2026-0508-e-commerce-optimization E-commerce Optimization 10_Wiki/Topics verified self
CRO
conversion rate optimization
ecommerce growth
funnel optimization
none A 0.95 applied
ecommerce
conversion
optimization
growth-hacking
ab-testing
cro
ux
2026-05-10 pending
language framework
Python / TypeScript GA4 / Mixpanel / Optimizely / VWO

E-commerce Optimization

매 한 줄

"매 funnel 의 매 step 의 conversion 의 increase". 매 visitor → cart → checkout → purchase → repeat 의 매 leakage 의 fix. 매 modern: 매 ML personalization + 매 A/B + 매 LLM (review summary, search). 매 metric: CVR, AOV, LTV.

매 핵심

매 funnel

  1. Acquisition: 매 ad → land.
  2. Engagement: 매 product browse.
  3. Conversion: 매 add to cart → checkout.
  4. Retention: 매 repeat purchase.
  5. Advocacy: 매 review / referral.

매 key metric

  • CVR (Conversion Rate): 매 purchase / visit.
  • AOV (Average Order Value).
  • LTV (Lifetime Value).
  • CAC (Customer Acquisition Cost).
  • Cart abandonment rate.
  • Repeat rate.

매 lever

  • UX: 매 PDP, search, navigation.
  • Pricing: 매 dynamic + bundle.
  • Personalization: 매 reco + DCO.
  • Trust: 매 review + social proof.
  • Speed: 매 Core Web Vitals.
  • Promotion: 매 discount + urgency.

매 modern AI

  • Reco: 매 sequence + transformer.
  • Visual search: 매 CLIP-based.
  • Review summary: 매 LLM.
  • Chat: 매 product question.
  • Smart bundle: 매 ML 의 affinity.

매 응용

  1. DTC brand: 매 owned channel.
  2. Marketplace: 매 search + reco.
  3. Subscription: 매 churn + upsell.
  4. Luxury: 매 service + AOV.
  5. B2B: 매 quote + repeat.

💻 패턴

Funnel analytics

import pandas as pd

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'])

A/B test (CUPED-adjusted)

import numpy as np
from scipy import stats

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)

Cart abandonment recovery

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)

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

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)

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)

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

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

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)

// 매 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)

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)

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

🤖 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