kyc.tm_kyc_apply.flow_type(UAE_KYC_FULL / UAEPASS / SIGNZY_FULL)。近 7 天完成率:UAE_KYC_FULL 65.5%、UAEPASS 54.9%、SIGNZY_FULL 46.3%。每日 Bad-KYC ~40%(6/6、6/14 飙到 45.5%,对齐 UAEPASS 崩盘窗口)。UAE Pass 根因:94% 失败 = job check timeout(文档核验超时,来自 outman.t_uaepass_monitor_event),仅 6% 用户拒绝。交互式 3-tab 看板已用真实数据更新。唯一剩余卡点:客户端筛选(国家/版本/小程序版本/平台)需 uid ↔ member_id 的 join key。
KYC 是 Botim Pay 所有金融功能(转账、预付卡、充值)的强制前置。KYC 一旦走坏,下游收入就被卡住。现在我们在已提交申请上有服务端成功率(~50% 完成,去重),但看不到顶部漏斗的流失 —— 约 40% 进来的人根本没启动验证方式。这份文档把前端漏斗和服务端完成拼起来看清全貌,并推动三件事:
KYC Flow Entered、KYC Verification Started…)就落在 kMPH5 内,含全部业务属性 —— 包括 Entry Point(意图来源)。业务属性在 JSON 根层或 mp_detail_obj(两种 schema 并存),用 regexp_extract 兼容两种。完成与错误以服务端 KYC 表为准。Bad KYC = 表现出真实意图但未达成服务端成功完成的尝试,排除纯用户取消。一个 session 满足全部条件即为 Bad KYC:
KYC Verification Started(已表现意图),且Completed,且排除(不算 Bad KYC):用户 Cancel、"只是看看"、从未开始、"暂时没带 EID"(会重试)。
指标: Bad KYC 率 = Bad KYC sessions / 到达 Verification Started 的 sessions,按渠道 × 客户端维度切。(session_id 上线后用 session 级;之前用 user 级。)
每个 KYC order 落在唯一一个桶 —— A + B + C + D = 100%:
| 桶 | 含义 | 计算公式(占全部 order) | 实测 | 数据源 |
|---|---|---|---|---|
| A · 无意图 | 进了没选验证方式 | (Entered − Started) / Entered | ~40% | 前端 |
| B · Bad KYC | 有意图但 KYC 失败(审核前) | (Started − KYC_passed − Cancel) / Entered | ~25% | tm_kyc_apply |
| C · 风控/审核拒绝 | KYC 过被审核拒 | Audit_reject / Entered | ~0.4% | tm_audit_task (R) |
| D · 最终成功 | KYC 过 + 审核过 | (KYC_passed − Audit_reject) / Entered | ~35% | tm_kyc_apply |
变量: Entered = Flow Entered distinct uid(分母)· Started = Verification Started · KYC_passed = journey_flag=1 或 step IN ('DOWN','PRE_EID_EXPIRY') · Cancel = 用户取消(user-reject / give-up / not-comfortable,从 Bad KYC 剔除)· Audit_reject = tm_audit_task status=R。
审核漏斗(30d): 进审 2,016 → 拒绝 1,120(55.6%)/ 通过 886(44%);97% 由 CHANNEL_HINT_REVIEW 触发。拒绝原因 Top:Portrait Inspection Failed 66%、Document & ICP mismatch — expiry 17% / DOB 9%。
洞察: 两大损耗 = 无意图(~40%) + Bad KYC(~25%);人工审核(C)极小(月 ~2k 单)。Bad KYC 主要由 UAE Pass job check timeout + UAE KYC "EID not scanned" 构成。
logs_footprint_mp (原始 JSON) + kyc.* 服务端表
│ 拍平 / 解析
▼
① vew.kyc_event_flatten_di DWD 拍平表(一行一事件)
│ GROUP BY
▼
② ads_kyc_channel_funnel_di 分渠道成功漏斗
③ ads_kyc_failure_reason_di 失败原因
④ ads_kyc_leave_reason_di 流失原因
+
⑤ dim_kyc_entry_point 意图 code → 业务名(可选)
+
⑥ dwd_kyc_apply_di 服务端 apply 镜像(TiDB tm_kyc_apply)— 算 Bad KYC 必需
| # | 表 | 层 | 状态 |
|---|---|---|---|
| ① | vew.kyc_event_flatten_di | DWD 拍平 | 已建(按新 schema 重跑) |
| ② | vew.ads_kyc_channel_funnel_di | ADS 结果 | 待建 |
| ③ | vew.ads_kyc_failure_reason_di | ADS 结果 | 待建 |
| ④ | vew.ads_kyc_leave_reason_di | ADS 结果 | 待建 |
| ⑤ | vew.dim_kyc_entry_point | DIM 维表 | 可选 · 待字典 |
| ⑥ | vew.dwd_kyc_apply_di | DWD(服务端) | 待建 · 算 Bad KYC 必需 |
现在能算 Bad KYC 吗? Bad KYC 需要服务端 completion(is_passed),前端拍平表没有 —— 所以它来自 ⑥ dwd_kyc_apply_di(镜像 TiDB tm_kyc_apply)。服务端口径 Bad KYC(按 channel/天)= started − kyc_passed − cancel,建好 ⑥ 即可算。完整分解(含无意图 + 客户端筛选)还需 uid ↔ member_id join key(P0)。
每个渠道流程/页面不同,必须分渠道建漏斗 —— 同一事件不可跨渠道横比。
| 渠道 | 形态 | 关键特征 |
|---|---|---|
| UAE Pass | 跳出 App 授权(对前端黑盒) | 握手段我们看不到,靠服务端错误回调 |
| UAE KYC | 应用内走流程 | 有独有页面:EID Details Viewed / Confirmed |
| signzy | 待确认 | 里程碑事件待研发补充 |
ads_kyc_channel_funnel_di(长表)粒度:dt × channel × 组合维度 × funnel_step。指标:users(distinct uid;session 上线后改 distinct session)。
| step | 全渠道 | UAE KYC | UAE Pass |
|---|---|---|---|
| 0 | Flow Entered(channel=ALL) | — | — |
| 1 | Verification Started | Verification Started | Verification Started |
| 2 | — | EID Details Viewed | UAE Pass Continue |
| 3 | — | EID Confirmed | SDK Return(待埋点) |
| 4 | — | Submitted(服务端) | Submitted(服务端) |
| 5 | — | Completed(服务端) | Completed(服务端) |
ads_kyc_failure_reason_di粒度:dt × channel × failure_source × failure_reason × 维度。来源:frontend_error(Error Type)、server_callback(错误码)、audit_reject(tm_audit_log.memo)、status_page(Page Code)。必须区分用户取消(Cancel) vs 系统错误。
ads_kyc_leave_reason_di粒度:dt × channel × leave_source × leave_page × leave_reason × 维度。主口径是 Exit Bottom sheet Viewed —— 不用 Leave 点击事件(多数用户直接关 App)。
完整 DDL 见 analysis/schema-ddl.sql。②③④ 示例为示例量级(06-01 分布);error_code/server 值待研发确认。
vew.kyc_event_flatten_di — DWD 拍平表(分区 dt · PARQUET)业务字段: uid, event, entry_point, verification_type, kyc_flow_type, kyc_vendor, error_type, page_code, kyc_status, reason, page_dropped_from, cta_clicked, industry, renewal_flow, uri_path
客户端维度: client_version, mp_version, os_version, device_brand, device_model, device_type, net_type, language, region, uid_region, ip_region, ip_isp, event_ts + 分区 dt(均 STRING;event_ts BIGINT)
| uid | event | entry_point | verification_type | kyc_flow_type | kyc_vendor | error_type | region | client_ver | dt |
|---|---|---|---|---|---|---|---|---|---|
| f7bb… | KYC Flow Entered | wallet | New User KYC | AE | 4.9.1 | 20260601 | |||
| f7bb… | KYC Verification Started | wallet | Verify with UAE Pass | New User KYC | UAE pass | AE | 4.9.1 | 20260601 | |
| 192c… | KYC UAE Pass Validation Error | Verify with UAE Pass | New User KYC | Cancel | AE | 4.9.1 | 20260601 | ||
| e0b0… | KYC Emirates ID details Confirmed | TO_REMITTENCE | Scan or upload your Emirates ID | New User KYC | UAE KYC SDK | AE | 4.7.2 | 20260601 |
vew.ads_kyc_channel_funnel_di — 分渠道漏斗(长表 · 分区 dt)字段: channel, entry_point, kyc_flow_type, verification_type, client_version, mp_version, os_platform, region, net_type, step_order INT, step_name, users BIGINT, events BIGINT, dt
| channel | entry_point | flow | region | step_order | step_name | users | dt |
|---|---|---|---|---|---|---|---|
| ALL | wallet | New | AE | 0 | Flow Entered | 4,820 | 20260601 |
| UAE_KYC | wallet | New | AE | 1 | Verification Started | 1,820 | 20260601 |
| UAE_KYC | wallet | New | AE | 3 | EID Confirmed | 968 | 20260601 |
| UAE_KYC | wallet | New | AE | 5 | Completed (server) | 512 | 20260601 |
| UAE_Pass | TO_REMITTENCE | New | AE | 1 | Verification Started | 1,340 | 20260601 |
| UAE_Pass | TO_REMITTENCE | New | AE | 5 | Completed (server) | 198 | 20260601 |
vew.ads_kyc_failure_reason_di — 失败原因(分区 dt)字段: channel, failure_source, failure_reason, error_code, is_user_cancel BOOLEAN, entry_point, kyc_flow_type, verification_type, client_version, mp_version, region, users BIGINT, events BIGINT, dt
| channel | failure_source | failure_reason | error_code | is_user_cancel | users | dt |
|---|---|---|---|---|---|---|
| UAE_Pass | frontend_error | Cancel | true | 1,208 | 20260601 | |
| UAE_Pass | server_callback | UAEPASS_TIMEOUT | E_UP_408 | false | 340 | 20260601 |
| UAE_KYC | status_page | renewNotMatch | false | 286 | 20260601 | |
| UAE_KYC | audit_reject | 上传清晰 EID(正反面) | false | 187 | 20260601 |
vew.ads_kyc_leave_reason_di — 流失原因(分区 dt)字段: channel, leave_source, leave_page, leave_reason, entry_point, kyc_flow_type, client_version, mp_version, region, users BIGINT, dt
| channel | leave_source | leave_page | leave_reason | users | dt |
|---|---|---|---|---|---|
| ALL | exit_sheet | /kyc/home | exit_sheet_viewed | 6,486 | 20260601 |
| UAE_Pass | mp_close | SDK 授权页(待埋点) | (unknown) | 580 | 20260601 |
| UAE_KYC | leave_click | /kyc/document-review | I'll do it later | 312 | 20260601 |
vew.dim_kyc_entry_point — 意图字典(无分区 · 可选)字段: entry_point_code, entry_point_name, category, is_tech_source BOOLEAN, note
| code | name | category | is_tech_source | note |
|---|---|---|---|---|
| wallet | 钱包激活 | wallet | false | |
| TO_REMITTENCE | 国际汇款 | transfer | false | 拼写错 Remittance |
| mp-ogold / mpogold | 黄金理财 | other | false | 两种拼写归并 |
| uniapp | (技术容器) | tech | true | 分析剔除 |
Completed 在跳转流程不触发。| 优先级 | 项 | 原因 |
|---|---|---|
| P1 | 修曝光/点击类 8 个事件双触发(Exit Bottom sheet 28% 最高) | 事件量虚高 10–28% |
| P1 | 完成 + 错误改服务端口径 | 前端 Completed 跳转不触发;UAE Pass 握手黑盒 |
| P2 | 服务端发 session_id,客户端每个埋点携带;分析细化到 session 级 | 去多次尝试噪音,单次尝试漏斗才准 |
| P2 | 离开类事件加具体页面名(自有页 vs SDK 页) | 定位 UAE Pass 黑盒流失点 |
| P3 | UAE KYC 确认页记录重试/离开点击次数 + 遇到的问题 | 诊断应用内验证摩擦 |
| P3 | Entry Point 补采(~30% 为空)+ code 规范 | 意图归因覆盖率 |
kyc_vendor + verification_type → 3 渠道。tm_kyc_apply 能否带 channel / entry_point)。session_id 在服务端关联 member_id / apply。mp-ogold/mpogold、MANDATORY_KYC/_V2)。tr_leave_record 不含它)。