跳转到内容

data_quality

这次流水线成功统一读取 MySQL、Server Log 和 Cloudflare D1 的只读数据。GA4 使用既有 Viewer 服务账号并坚持先调用 Metadata;当前结果为 ok。MySQL 配置指向 yomiya-staging,因此这些数字不能在没有环境确认的情况下直接表述为生产全量。

当前决策就绪状态固定为 not_decision_grade。以下结果用于描述与继续完善测量,不支持隐藏 Basic、调整额度、修改首页排序、决定 Podcast 预览长度或宣称某行为促进购买。

统一分析时点为 2026-07-30T11:09:51.387Z。所有 MySQL 与 D1 时间过滤均使用这个冻结时点;MySQL 使用 keyset pagination,但 MCP 不允许事务控制,因此跨表仍是“统一 as-of 的尽力一致”,不是数据库事务快照。

数据集最早有效时间最近时间表内总行数时间缺失/异常
news2015-12-31T08:11:03.000Z2026-07-30T00:12:24.000Z60771141
reads2026-04-09T21:35:08.000Z2026-07-30T03:07:18.000Z206210
favorites2026-06-12T02:38:17.000Z2026-07-29T23:59:57.000Z14380
explains2026-01-26T02:08:34.000Z2026-06-22T03:35:59.000Z2020
push2026-04-11T23:12:02.000Z2026-07-30T03:07:26.000Z1318070
users2026-01-16T23:04:15.000Z2026-07-30T00:34:11.000Z55810
imports2026-02-16T16:34:58.000Z2026-07-29T15:59:34.000Z2510
quota00
revenuecat_mysql2026-03-04T19:24:26.000Z2026-07-29T12:40:36.000Z1630

Server access log 可见文件的修改时间覆盖 2026-07-23T10:16:13.530Z 至 2026-07-30T11:09:51.319Z,共识别并覆盖 131 个 access 文件;本次实际读取 4 个,复用安全零完整响应缓存 127 个。目标文件名虽为 90d,当前可见日志并没有 90 天历史。MCP 返回发生 0 次字节截断,0 个文件触及单次匹配上限,扫描失败 0 个,时区或时钟异常文件 0 个。缓存条目集合与可见文件集合均使用不透明 SHA-256 对账。

D1 RevenueCat 实际覆盖 2026-06-29T00:00:00.000Z 至 2026-07-29T23:59:59.999Z,只读聚合读取 49 个生产事件。收入按原币种保留,没有汇率换算;低于隐私阈值的 26 个聚合分组已整行移除,因此套餐收入可能是可发布下界而不是总额。

Metadata 与聚合报表均已成功读取。

脚本不会尝试查询 Metadata 中没有出现的自定义参数。本次先成功调用 Metadata,再读取 101 个事件聚合行和 20 个自定义维度。 事件、页面、屏幕、App 版本、平台、设备、国家、获客渠道和自定义维度的可用结果保存在 analytics/sources/ga4_aggregate.json。每个报表同时保留 API rowCount、时区、thresholding、sampling 和 data-loss 元数据;低于 5 名用户的 cell 已抑制,动态页面路径已模板化。

GA4 拆分状态实际维度聚合行数
pageokpagePath17
screenokunifiedScreenName23
app_versionokappVersion23
platformokplatform2
deviceokdeviceCategory3
countryokcountry23
acquisition_channelokfirstUserDefaultChannelGroup5
关键事件用户数事件数
paywall_view8431374
explainer_prompt_submit285567
explainer_response_success275537
import_submit74448
purchase_start201255
import_processing_success45184
paywall_plan_select4986
purchase_success6568
purchase_cancelled4757
in_app_purchase88
explainer_paywall_triggered已抑制已抑制

Metadata 已确认存在 content_idplan_idpaywall_triggerpaywall_source_screen 自定义维度。事件清单包含 paywall、import、explain 与 purchase 相关事件;Metadata 和事件清单中均未发现 PDF 对应项,因此 PDF 记为“未观测到”,而不是假设其值为 0。套餐、触发与事件的拆分状态为:plan=ok,trigger=ok,source_screen=ok,plan_trigger=ok。

  • RevenueCat 生产事件:163
  • 可关联到本地用户的事件:110
  • 未关联事件:53
  • 事件关联率:67.5%
  • 可关联独立用户:53
  • 可直接映射的独立身份引用:53/102(52.0%)

事件关联率的分子和分母都是 RevenueCat 事件行,不是用户。身份引用映射率按去重后的 RevenueCat 身份字符串计算,但由于 alias 解析不完整,它仍不是经过验证的“人员级用户关联率”。未关联事件不会被强行归到用户,因此购买前行为、套餐使用和内容购买归因的样本量小于事件总量。

  • users 主键代理重复:0;用户 UUID 重复:0。
  • read_records 用户×内容重复行:0。
  • RevenueCat event_id 重复:0。
  • 当前内容元数据中缺少频道:0;缺少主题关联:2021。
  • explain 会话 202 条,会话表 total_messages 合计 238,独立消息表只有 36 条,因此消息量采用会话表字段。
  • 未来时间戳检查:0 条。
  • 首页只表示服务端已交付,不表示用户真的看见;截断的 response_body 被完全排除。
  • 首页扫描覆盖所有 MCP 当前列出的 access 文件,但 MCP 文件目录、每次 200 条匹配及 512 KiB 返回上限仍是可见性边界。
  • 首页来源 source type/source id 是依据当前 DTO 内容结构推断,输出中标有 source_inferred=true
  • 购买匹配缺少用户级国家和 App 版本;GA4 聚合数据不能反向拼接到用户。
  • 内容 cohort 纳入过去 90 天实际被打开、收藏、讲解、推送交付或首页交付的 VISIBLEMEMBERSHIP_VISIBLE 内容;不再要求内容必须在 90 天内发布。
  • 付费用户占比使用内容打开时点重建的 RevenueCat entitlement;只纳入注册时间与购买历史覆盖都完整的用户,身份无法关联者不进入分母。
  • explain_conversations 的 total_messages 与独立消息表覆盖并不一致,本分析采用会话表的 total_messages。
  • read_records 是用户×内容的更新型记录,无法还原精确打开事件数;重复访问使用 updated_at 与 created_at 的时间差代理。
  • PDF 行为没有覆盖完整购买窗口的稳定用户级事件,因此不以 0 代替缺失。
  • 购买前研究会逐用户、逐索引日、逐来源判断完整观察资格;结构性零、小隐私 cell、无匹配或匹配不平衡均不输出 OR。
  • attraction_score 当前缺少可比较的 delivered exposure 分母,因此只保留分桶描述,不输出校准结论或异常内容标签。
  • 没有写出邮箱、姓名、IP、Token、原始用户 ID 或原始访问日志。
  • 只保存聚合结果;原始标识只在进程内用于关联,进程结束即丢弃。
  • MySQL 只使用 SELECT/SHOW;数据库 grant 核验状态为 verified_readonly,原始 grant 文本没有持久化。D1 查询的返回元数据显示 rows_written=0。
  • 没有修改 Cloudflare 配置、产品代码、首页、付费墙或线上数据。