Files
2nd/10_Wiki/Topics/AI_and_ML/전자상거래 소비자 참여 및 보상 시스템 최적화.md
T
2026-05-10 22:08:15 +09:00

6.5 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-전자상거래-소비자-참여-및-보상-시스템-최적화 전자상거래 소비자 참여 및 보상 시스템 최적화 10_Wiki/Topics verified self
E-commerce Engagement
Reward System Optimization
보상 시스템
none A 0.88 applied
e-commerce
growth
rewards
personalization
2026-05-10 pending
language framework
typescript Next.js/Node

전자상거래 소비자 참여 및 보상 시스템 최적화

매 한 줄

"매 reward 는 dopamine schedule 의 design". e-commerce engagement 는 LTV (lifetime value) 곡선의 변형 문제로, 매 variable-ratio reinforcement + loss-aversion + social proof 의 조합. 2026 현재 매 ML personalization (reinforcement learning bandits) 으로 매 user 마다 다른 reward 를 발사.

매 핵심

매 4대 lever

  • Frequency: visit cadence — 매 daily login bonus, streak
  • Depth: AOV (average order value) — 매 threshold reward, free shipping bar
  • Breadth: category exploration — 매 cross-sell coupon
  • Retention: churn prevention — 매 win-back, lapsed user offer

매 reward 분류

  • Hedonic: tier badge, exclusive access — 매 status driver
  • Utilitarian: point/coupon, cashback — 매 economic driver
  • Social: referral, leaderboard — 매 viral driver
  • Surprise: random box, lucky draw — 매 dopamine spike

매 응용

  1. Subscription churn 감소 — predictive offer 발사.
  2. Cart abandonment 회복 — personalized incentive.
  3. New-user onboarding — 매 first-week reward sequence.

💻 패턴

Multi-armed bandit reward selector

class ContextualBandit {
  private weights: Map<string, number[]> = new Map()

  selectReward(userCtx: UserContext, candidates: Reward[]): Reward {
    const arms = candidates.map(r => ({
      reward: r,
      score: this.predict(userCtx, r),
    }))
    // Thompson sampling
    const sampled = arms.map(a => ({
      ...a,
      sample: a.score + this.gaussianNoise(0.1),
    }))
    return sampled.sort((a, b) => b.sample - a.sample)[0].reward
  }

  update(userCtx: UserContext, reward: Reward, outcome: number) {
    const key = this.featureKey(userCtx, reward)
    const w = this.weights.get(key) ?? [0, 0]
    w[0] += outcome
    w[1] += 1
    this.weights.set(key, w)
  }
}

LTV-aware coupon sizing

function couponAmount(user: UserProfile, basket: Cart): number {
  const ltvDecile = user.ltvPercentile
  const marginalLTV = user.predictedLTV - user.realizedLTV
  // 매 high-LTV / low-realized = 매 invest more
  const cap = Math.min(marginalLTV * 0.15, basket.total * 0.25)
  // 매 churn risk multiplier
  const risk = 1 + user.churnProb * 0.5
  return Math.round(cap * risk)
}

Streak / habit loop

class StreakEngine {
  async onLogin(userId: string, now: Date) {
    const last = await this.getLastLogin(userId)
    const days = daysBetween(last, now)
    let streak = days === 1 ? (await this.getStreak(userId)) + 1 : 1
    if (streak > 0 && streak % 7 === 0) {
      await this.grantReward(userId, { type: "weekly_streak", multiplier: streak / 7 })
    }
    await this.setStreak(userId, streak)
  }
}

Cart abandonment recovery

async function abandonRecovery(cart: Cart, user: User) {
  const elapsed = Date.now() - cart.lastUpdate
  if (elapsed < 1000 * 60 * 30) return // 매 too early
  const offer = await bandit.selectReward(user.context, [
    { type: "free_shipping" },
    { type: "5_percent_off" },
    { type: "loyalty_2x_points" },
  ])
  await sendEmail(user.email, renderRecovery(cart, offer))
  await sendPush(user.deviceTokens, renderPush(offer))
}

Gamified tier progression

type Tier = "bronze" | "silver" | "gold" | "platinum"
const TIER_THRESHOLDS: Record<Tier, number> = {
  bronze: 0, silver: 500, gold: 2000, platinum: 10000,
}

function tierProgress(spend: number): { tier: Tier; progress: number; nextAt: number } {
  const tiers: Tier[] = ["bronze", "silver", "gold", "platinum"]
  let cur: Tier = "bronze"
  for (const t of tiers) if (spend >= TIER_THRESHOLDS[t]) cur = t
  const next = tiers[tiers.indexOf(cur) + 1]
  if (!next) return { tier: cur, progress: 1, nextAt: spend }
  const nextAt = TIER_THRESHOLDS[next]
  return { tier: cur, progress: (spend - TIER_THRESHOLDS[cur]) / (nextAt - TIER_THRESHOLDS[cur]), nextAt }
}

Referral viral loop

async function referralReward(referrer: string, referee: string, firstOrder: Order) {
  if (firstOrder.total < 30) return // 매 anti-fraud floor
  await grantPoints(referrer, 500)
  await grantCoupon(referee, { value: 10, expiresInDays: 30 })
  await track("referral_completed", { referrer, referee, orderValue: firstOrder.total })
}

매 결정 기준

상황 Reward type
New user (D0-D7) Welcome bundle + first-purchase bonus
Active mid-LTV Streak + tier progress
High-LTV at churn risk Personalized win-back, hedonic perk
Low-LTV, high acquisition cost Bundle / referral, no deep coupon
Cart abandonment Free shipping (cheap) → coupon (expensive) escalate

기본값: contextual bandit + LTV-capped budget + 매 hedonic + utilitarian mix.

🔗 Graph

🤖 LLM 활용

언제: copy generation (개인화 message), reward strategy ideation, A/B test hypothesis. 언제 X: 매 real-time bandit decision (latency budget < 50ms) — pre-trained model 로.

안티패턴

  • All-or-nothing coupon: 매 같은 coupon 모두에게 — margin 폭탄.
  • Streak punishment: 매 1일 miss 로 reset — 매 user frustration.
  • Dark pattern reward: 매 hidden cost / forced opt-in — 매 churn 가속.
  • Tier inflation: 매 너무 빠른 tier-up — 매 status 의미 상실.
  • Reward 의 marginal cost 무시: 매 LTV 보다 큰 reward — unit economics 붕괴.

🧪 검증 / 중복

  • Verified (Reichheld Loyalty Effect, Hooked by Nir Eyal, Shopify rewards docs).
  • 신뢰도 A.

🕓 Changelog

날짜 변경
2026-05-08 Phase 1
2026-05-10 Manual cleanup — e-commerce engagement & reward optimization