关于 analytics-product
面向产品团队的产品分析技能,涵盖事件跟踪、漏斗、群组、留存、实验和产品指标。强调明确测量窗口与同意要求,并避免将示例误作基准。
主要功能
- 01事件分类与跟踪指导
- 02漏斗与群组分析
- 03留存率和 North Star 指标
- 04PostHog 功能标志示例
- 05A/B 测试设计与显著性
适用场景
- 01埋点前定义产品事件
- 02调查转化漏斗流失
- 03计算群组留存率
- 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 可能会将数据发送到外部服务。在启用追踪前,应最小化属性、避免对话文本,并验证同意、数据驻留和保留策略。
- 数据库和界面示例依赖于项目适配器;它们并不代表一个可直接使用的应用。