01-data-engineering-overview
Yomiya 只读产品分析数据工程说明
Section titled “Yomiya 只读产品分析数据工程说明”分析流水线已将 MySQL、Server Log、GA4 和 D1 的现有只读数据统一为五张聚合表和 四份发现报告,并补上观察资格、风险集匹配、订阅时点状态、隐私抑制和可验证 provenance。
当前状态仍是 not_decision_grade。这套包可用于描述覆盖、历史关联和测量缺口,
不能直接驱动产品行为修改。
flowchart LR
A["yomiya-service 既有只读 MCP 配置"] --> B["Root 分析实现"]
C["GA4 Metadata-first"] --> B
D["Cloudflare D1 SELECT"] --> B
B --> E["进程内用户级关联"]
E --> F["仅聚合 CSV / JSON / Markdown"]
F --> G["方法学验证 347 checks + 12 tests"]
G --> H["Root 快照哈希与隐私验证"]
Root 保存分析实现和聚合快照;MCP 的认证、SSH 和数据库只读账号仍由
yomiya-service 本地配置负责。分析不依赖写入型 Admin MCP,也不要求把查询接口
加入产品服务。
数据源与读取边界
Section titled “数据源与读取边界”| 数据源 | 读取内容 | 约束 | 当前状态 |
|---|---|---|---|
| MySQL Readonly MCP | 内容、阅读、收藏、讲解、推送、用户、导入、额度、RevenueCat | 只读 allowlist;keyset pagination;有上限 | ok,grant 已验证只读 |
| Server Log Access MCP | featured request/response 与后续详情请求 | 只访问允许目录;不保存原文 | partial,157 个目标响应均截断 |
| GA4 Data API | Metadata、事件及支持的聚合维度 | Metadata-first;小 cell 抑制 | ok |
| Cloudflare D1 | RevenueCat 聚合事件与原币种收入 | 固定 SELECT;rows_written=0 | ok,低计数组移除 |
| GitHub 代码与文档 | 字段、DTO、事件和查询语义 | 只读审查 | 已纳入口径 |
每个行为源分别记录最早和最近有效时间。对每个用户、索引日和窗口判断:
completeleft_censoredright_censoredleft_and_right_censoredunavailable
只有完整窗口进入该行为的分母。未开始采集、停止更新和真正没有行为不再共用一个 数值 0。
- 购买时点为首次可关联的生产
INITIAL_PURCHASE。 - 每个买家在其购买时点建立风险集;当时尚未购买的人可作为对照,未来购买者不会 永久排除。
- 匹配为不复用 1:1 greedy matching,使用 caliper。
- 基线协变量结束于待测暴露窗口之前,避免窗口重叠。
- 输出匹配前后最大绝对 SMD、对照复用、有效样本量、p 值和 Benjamini-Hochberg FDR。
- 零暴露、无 discordant pair、小隐私 cell、无匹配或失衡时返回
not_estimable,不生成 OR。
目前保留的候选仍只是历史关联,不是因果估计。
套餐状态与额度
Section titled “套餐状态与额度”D30/D60/D90 entitlement 仅使用该时点之前已发生的事件重建。更晚的续订或重新
订阅不能改写过去状态。额度改为“用户 × 完整计费周期 × 资源”粒度,区分 bounded
与 unbounded,并输出分位数和达限比例;不再把所有周期合并为 pooled
used/limit。
内容与 attraction score
Section titled “内容与 attraction score”内容 cohort 是观察窗内实际被打开、收藏、讲解、推送或首页交付的可见内容, 不要求内容在 90 天内发布。由于目前没有跨内容可比较的 delivered exposure 分母,attraction score 只输出描述性分桶,不输出“校准通过”、单调性结论或异常 内容标签。
GA4 与 D1 隐私
Section titled “GA4 与 D1 隐私”GA4 保存 property timezone、sampling、thresholding、data-loss、API rowCount 和
拆分对账状态;低于 5 名用户的 cell 被抑制,动态页面路径被模板化。GA4 拆分与
全局事件无法对账时明确保留 not_reconciled,不得把它解释为用户漏斗。
D1 低于 5 个事件的聚合行整行移除,不保存精确事件时间。存在被移除分组时,收入 只表示可发布下界并标为 partial。
- Server Log:安全复用未变化且确认没有完整 featured body 的文件聚合缓存;缓存 与可见文件集合分别使用 SHA-256 对账。
- MySQL:限定窗口重算。去重、首次购买、滚动随访与风险集匹配不可安全相加。
- GA4:每轮重新 Metadata-first 查询;
totalUsers不按日相加。 - D1:每轮重跑小型只读聚合。
这是安全的混合增量,不是用户级数据仓库。
运行时验证器包含 347 项实际检查,覆盖:
- 必需文件、行数和统一
analysis_as_of; - MySQL allowlist、只读 grant 与查询执行回执;
- GA4 Metadata-first、隐私、报表元数据与拆分对账;
- D1 零写入、隐私阈值与时间粗化;
- Server Log 文件集合、缓存集合、时区和截断状态;
- 来源观察资格、风险集、匹配平衡、FDR 与结构性零;
- 订阅时点状态、完整额度周期、内容 cohort 和 attribution score 边界;
- 脚本与聚合产物 SHA-256;
- 敏感字段、原始日志和原始标识扫描。
独立 Node 测试另覆盖 12 个方法学反例。Root 包级验证器再检查冻结快照哈希、 manifest、工程脚本哈希和隐私。检查数量不再被宣传为方法正确性的替代证据。
当前不可回答
Section titled “当前不可回答”- 首页模块和 random source 表现:完整 featured body 为 0。
- 首页 viewable impression:只有服务端 delivered 证据。
- Basic 是否应隐藏、额度是否合理、Podcast 预览长度:数据不具决策级覆盖。
- PDF 购买路径:缺少稳定且完整的用户级链路。
- 哪个 paywall trigger 转化最好:GA4 聚合不能连接 RevenueCat 用户,且拆分未全部 对账。
- attraction score 是否校准有效:缺少可比较曝光分母。
当前必须保留的限制
Section titled “当前必须保留的限制”- MySQL 是
yomiya-staging,尚未证明为生产镜像。 - access log 只覆盖约 7 天,且 157 个目标响应均源端截断。
- RevenueCat 事件关联率 67.5%,不是人员级用户关联率;去重身份引用映射率为 52.0%,alias 解析仍不完整。
- GA4 与 D1 只能发布聚合,不能反向连接购买用户。
- 多币种收入没有授权汇率策略。
- PDF 与 Podcast 学习层行为不可用。
- MySQL 跨表使用统一 as-of 和 keyset pagination,但不是事务一致性快照。