mcpField
A
analytics-product

analytics-product

github.com/sickn33数据与数据库48.7k113 次安装今天更新
代码仓库

关于 analytics-product

面向产品团队的产品分析技能,涵盖事件跟踪、漏斗、群组、留存、实验和产品指标。强调明确测量窗口与同意要求,并避免将示例误作基准。

主要功能

  1. 01事件分类与跟踪指导
  2. 02漏斗与群组分析
  3. 03留存率和 North Star 指标
  4. 04PostHog 功能标志示例
  5. 05A/B 测试设计与显著性

适用场景

  1. 01埋点前定义产品事件
  2. 02调查转化漏斗流失
  3. 03计算群组留存率
  4. 04规划并评估 A/B 测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill analytics-product

安装后在 Claude Code 中输入/analytics-product确认已加载。

详细介绍

ANALYTICS-PRODUCT — 用数据决策

概述

产品分析 — PostHog、Mixpanel、事件、漏斗、同期群、留存、北极星指标、OKR 和产品仪表盘。在以下情况启用:配置事件追踪、创建转化漏斗、同期群分析、留存、DAU/MAU、功能开关、A/B 测试、北极星指标、OKR、产品仪表盘。

何时使用此技能

  • 用于定义激活事件、调查漏斗下滑,或在显式指定分母和窗口的情况下计算留存。
  • 在埋点之前,记录产品决策、数据来源、适用的同意授权、时区和分析单位。

何时不要使用此技能

  • 任务与产品分析无关
  • 更简单、更具体的工具可以处理该请求
  • 用户需要通用辅助,而不需要领域专业知识

工作原理

[objeto]_[verbo_passado]

Correto:   user_signed_up, conversation_started, upgrade_completed
Errado:    signup, click, conversion

Analytics-Product — 用数据决策

"In God we trust. All others must bring data." — W. Edwards Deming


示例说明:某助手的事件

AURI_EVENTS = {
    # Aquisicao
    "user_signed_up":        {"props": ["source", "medium", "campaign"]},
    "onboarding_started":    {"props": ["step_count"]},
    "onboarding_completed":  {"props": ["time_to_complete", "steps_skipped"]},

    # Ativacao
    "first_conversation":    {"props": ["intent", "response_time"]},
    "aha_moment_reached":    {"props": ["trigger", "session_number"]},
    "feature_discovered":    {"props": ["feature_name", "discovery_method"]},

    # Retencao
    "conversation_started":  {"props": ["intent", "user_tier", "device"]},
    "conversation_completed":{"props": ["messages_count", "duration", "rating"]},
    "session_started":       {"props": ["days_since_last", "platform"]},

    # Receita
    "upgrade_viewed":        {"props": ["trigger", "current_tier"]},
    "upgrade_started":       {"props": ["target_tier", "trigger"]},
    "upgrade_completed":     {"props": ["tier", "plan", "revenue"]},
    "subscription_canceled": {"props": ["reason", "tier", "tenure_days"]},
    "payment_failed":        {"props": ["attempt_count", "error_code"]},
}

Posthog 实现(Python)

from posthog import Posthog
import os

posthog = Posthog(
    project_api_key=os.environ["POSTHOG_API_KEY"],
    host=os.environ.get("POSTHOG_HOST", "https://app.posthog.com")
)

def track(user_id: str, event: str, properties: dict = None):
    posthog.capture(
        distinct_id=user_id,
        event=event,
        properties=properties or {}
    )

def identify(user_id: str, traits: dict):
    posthog.identify(
        distinct_id=user_id,
        properties=traits
    )

## Uso:

track("user_123", "conversation_started", {
    "intent": "business_advice",
    "device": "alexa",
    "user_tier": "pro"
})

激活漏斗示例(假设数字)

Visita landing page          (100%)
    | [meta: 40%]
Clicou "Experimentar"         (40%)
    | [meta: 70%]
Completou cadastro            (28%)
    | [meta: 60%]
Fez primeira conversa         (17%)  <- AHA MOMENT
    | [meta: 50%]
Voltou no dia seguinte        (8.5%)
    | [meta: 40%]
Usou 3+ dias na semana        (3.4%)
    | [meta: 20%]
Converteu para Pro            (0.7%)

优化漏斗

Para cada drop-off > benchmark:
1. Identificar: onde exatamente o usuario sai?
2. Entender: por que? (session recordings, surveys)
3. Hipotese: qual mudanca poderia melhorar?
4. Testar: A/B test com amostra estatisticamente significante
5. Medir: janela e amostra predefinidas, efeito com intervalo, qualidade e guardrails
   Nao encerrar cedo por um p-value favoravel; investigar SRM e perdas de tracking
6. Aprender: mesmo se falhar, entende-se o usuario melhor

同期群分析(周留存)

def calculate_cohort_retention(events_df):
    """
    events_df: DataFrame com colunas [user_id, event_date, event_name]
    Retorna: matriz de retencao [cohort_week x week_number]
    """
    import pandas as pd

    first_session = events_df[events_df.event_name == "session_started"] \
        .groupby("user_id")["event_date"].min() \
        .dt.to_period("W")

    sessions = events_df[events_df.event_name == "session_started"].copy()
    sessions["cohort"] = sessions["user_id"].map(first_session)
    sessions["weeks_since"] = (
        sessions["event_date"].dt.to_period("W") - sessions["cohort"]
    ).apply(lambda x: x.n)

    cohort_data = sessions.groupby(["cohort", "weeks_since"])["user_id"].nunique()
    cohort_sizes = cohort_data.unstack().iloc[:, 0]
    retention = cohort_data.unstack().divide(cohort_sizes, axis=0) * 100

    return retention

留存区间示例(并非市场基准)

这些数字没有外部来源或验证。仅作为格式示例使用;请替换为可比且成熟同期群的实测基线。

周区间 A区间 B区间 C区间 D
W1<20%20-35%35-50%>50%
W4<10%10-20%20-30%>30%
W8<5%5-12%12-20%>20%

北极星示例假设

Framework:
1. O que cria valor real para o usuario? -> Conversas que geram insight/acao
2. Hipotese a validar: usuarios com 3+ conversas/semana recebem valor recorrente
3. Como medir? -> "Weekly Active Conversationalists" (WAC)

North Star: WAC (Weekly Active Conversationalists)
Definicao: Usuarios com >= 3 conversas na semana que duraram >= 2 minutos

Meta Ano 1: 10.000 WAC
Meta Ano 2: 100.000 WAC

北极星仪表盘

草图:请根据项目调整 db.query 和 calculate_wow_growth。使用显式窗口边界和同一时区;在聚合结果中统计合格用户,而不是每个用户一行。

def calculate_north_star(db, window_start, window_end):
    wac = db.query("""
        SELECT COUNT(*) as wac
        FROM (
            SELECT user_id
            FROM conversations
            WHERE created_at >= :window_start AND created_at < :window_end
              AND duration_seconds >= 120
            GROUP BY user_id
            HAVING COUNT(*) >= 3
        ) AS qualifying_users
    """, {"window_start": window_start, "window_end": window_end}).scalar()

    return {
        "wac": wac,
        "wow_growth": calculate_wow_growth(db, "wac"),
        "target": 10000,
        "progress": f"{wac/10000*100:.1f}%"
    }

使用 Posthog 的功能开关

使用已安装版本的 API。当前 SDK 提供 evaluate_flags;在旧版本中,feature_enabled 的顺序是 (feature, user_id)。在出错或缺少值时,保持安全的控制流。参见 Python 官方文档。在项目授权和同意规则通过之前,不要发送事件/识别信息。

def is_feature_enabled(user_id: str, feature: str) -> bool:
    flags = posthog.evaluate_flags(user_id)
    return flags.is_enabled(feature) is True

if is_feature_enabled(user_id, "new-onboarding-v2"):
    show_new_onboarding()
else:
    show_old_onboarding()

统计显著性计算器

from scipy import stats

def ab_test_significance(
    control_conversions: int,
    control_visitors: int,
    variant_conversions: int,
    variant_visitors: int,
    confidence: float = 0.95
) -> dict:
    counts = (control_conversions, control_visitors, variant_conversions, variant_visitors)
    if any(type(value) is not int or value < 0 for value in counts):
        raise ValueError("Contagens devem ser inteiros nao negativos")
    if not (0 < control_visitors and 0 < variant_visitors
            and control_conversions <= control_visitors
            and variant_conversions <= variant_visitors and 0 < confidence < 1):
        raise ValueError("Denominadores, conversoes ou confianca invalidos")
    control_rate = control_conversions / control_visitors
    variant_rate = variant_conversions / variant_visitors
    lift = (variant_rate - control_rate) / control_rate * 100 if control_rate else None

    table = [
        [control_conversions, control_visitors - control_conversions],
        [variant_conversions, variant_visitors - variant_conversions]
    ]
    if any(sum(row) == 0 for row in zip(*table)):
        return {"status": "insufficient-variation", "recommendation": "No automatic decision"}
    _, p_value, _, expected = stats.chi2_contingency(table)
    if (expected < 5).any():
        return {"status": "sparse-counts", "recommendation": "Use a pre-specified exact method"}

    significant = p_value < (1 - confidence)

    return {
        "control_rate": f"{control_rate*100:.2f}%",
        "variant_rate": f"{variant_rate*100:.2f}%",
        "lift": f"{lift:+.1f}%" if lift is not None else None,
        "p_value": round(p_value, 4),
        "significant": significant,
        "absolute_difference_pp": (variant_rate - control_rate) * 100,
        "recommendation": "Review pre-specified effect, uncertainty and guardrails; no automatic deploy"
    }

6. 提示词建议(不会在客户端安装命令)

命令操作
/event-taxonomy定义事件分类体系
/funnel-analysis分析转化漏斗
/cohort-retention按同期群计算留存
/north-star定义或审查北极星指标
/ab-test计算 A/B 测试显著性
/dashboard-setup创建产品仪表盘
/okr-template产品 OKR 模板

可验证示例

合成输入:在一个封闭窗口内,用户 A 有三次 120 秒的对话,B 有两次,C 有四次 60 秒的对话。预期的 WAC 结果是 1,而不是多行值为 1。在留存方面,报告同期群规模和可观测年龄;尚未结束的一周并不代表零留存。

对于实验,在计算检验之前,记录随机化单位、主要指标、窗口、最小效应、停止规则和护栏指标。显著性示例会拒绝无效分母和稀疏计数;它不是上线决策机制。

局限性

  • 上述指标、分群和助手事件均为假设;它们不能证明基准或用户行为。
  • cohort 片段假设时间戳已规范化且数据完整;未成熟的周需要被屏蔽,没有用户的 cohort 不应除以零。
  • 孤立的 p-value 不能衡量产品价值、消除偏差,也不能替代区间和实验设计。
  • SDK 可能会将数据发送到外部服务。在启用追踪前,应最小化属性、避免对话文本,并验证同意、数据驻留和保留策略。
  • 数据库和界面示例依赖于项目适配器;它们并不代表一个可直接使用的应用。

评论

支持 Markdown