訂閲模式案例分析

訂閲模式在SaaS、媒體、電商等領域廣泛應用,主要分為按月、季度、年訂閲三種形式。以下是典型案例:

Netflix
採用按月訂閲,提供不同套餐(基礎/標準/高級),利用自動續費減少用户流失。年訂閲通常提供折扣,例如“年付省15%”。

Adobe Creative Cloud
提供月付和年付選項,年訂閲可節省約20%。季度訂閲較少見,但適合短期項目需求。

The New York Times
新聞類訂閲強調年費優惠,首年折扣高達50%,後續自動恢復原價,利用價格錨定效應。


代碼實現(Python示例)

數據庫模型設計

from django.db import models

class SubscriptionPlan(models.Model):
    name = models.CharField(max_length=100)  # 如"基礎版"
    duration = models.CharField(
        max_length=10,
        choices=[('month', '月'), ('quarter', '季'), ('year', '年')]
    )
    price = models.DecimalField(max_digits=6, decimal_places=2)
    stripe_price_id = models.CharField(max_length=100)  # 支付系統ID

    def __str__(self):
        return f"{self.name} ({self.get_duration_display()})"

價格計算邏輯

def calculate_prorated_price(old_plan, new_plan, days_used):
    """
    計算從月訂閲升級到年訂閲的差價
    old_plan: 當前訂閲計劃對象
    new_plan: 目標訂閲計劃對象
    days_used: 當前週期已使用天數
    """
    daily_rate = float(old_plan.price) / 30
    credit = daily_rate * days_used
    return float(new_plan.price) - credit

Stripe支付集成

import stripe
stripe.api_key = "your_api_key"

def create_subscription(customer_id, price_id):
    subscription = stripe.Subscription.create(
        customer=customer_id,
        items=[{'price': price_id}],
        payment_behavior='default_incomplete',
        expand=['latest_invoice.payment_intent']
    )
    return subscription

關鍵設計要點

折扣策略
年訂閲價格通常滿足:12*月價 > 年價 > 9*月價,確保用户感知到優惠。季度訂閲定價建議為:3*月價 > 季價 > 2.5*月價

續費提醒
在訂閲到期前7天、3天、當天發送郵件/SMS提醒:

from datetime import timedelta

def send_reminder(subscription):
    expiry_date = subscription.end_date
    reminders = [
        (expiry_date - timedelta(days=7), "7天后到期"),
        (expiry_date - timedelta(days=3), "3天后到期"),
        (expiry_date, "今天到期")
    ]
    for date, msg in reminders:
        if timezone.now().date() == date:
            send_email(subscription.user, msg)

取消訂閲流程
提供暫停而非立即終止選項,保留用户數據3-6個月,降低流失率。代碼實現需包含挽留優惠:

def cancel_subscription(user):
    plan = user.subscription.plan
    if plan.duration == 'year' and user.subscription.active_days < 30:
        offer_discount(20)  # 未滿30天提供20%折扣挽留

數據分析指標

  1. MRR (月經常性收入)

    def calculate_mrr():
        monthly = Subscription.objects.filter(plan__duration='month').count()
        yearly = Subscription.objects.filter(plan__duration='year').count()
        return monthly*monthly_price + yearly*(yearly_price/12)
    
  2. Churn Rate (流失率)

    def churn_rate(start_date, end_date):
        lost_users = User.objects.filter(
            subscription__end_date__range=(start_date, end_date),
            subscription__auto_renew=False
        ).count()
        total_users = User.objects.filter(subscription__isnull=False).count()
        return (lost_users / total_users) * 100
    
  3. LTV (用户生命週期價值)
    公式:
    $LTV = \frac{ARPA \times Gross Margin}{Churn Rate}$
    其中ARPA(每用户平均收入)計算:

    def arpa():
        return Subscription.objects.aggregate(
            avg_revenue=models.Avg('plan__price')
        )['avg_revenue']