⚠ MOCK · Lighthouse Briefings · 本 spec 中数字为示例,标注 REAL 前不作准。
← Lighthouse Briefings · analysis · 2026-06-16
analysis me.botim.pay.kyc

KYC 分析表 · 建表需求与埋点 TODO

分渠道成功漏斗、失败原因、流失原因 — 表层设计 + 需要的埋点整改。
🪪 交互式 mockup: Lighthouse for KYC — 漏斗与 Bad-KYC 分析 ↗
更新 · 2026-06-17 — 服务端口径已确认。 Channel = 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。

00 这文档是什么、为什么这么做

KYC 是 Botim Pay 所有金融功能(转账、预付卡、充值)的强制前置。KYC 一旦走坏,下游收入就被卡住。现在我们在已提交申请上有服务端成功率(~50% 完成,去重),但看不到顶部漏斗的流失 —— 约 40% 进来的人根本没启动验证方式。这份文档把前端漏斗和服务端完成拼起来看清全貌,并推动三件事:

为什么用前端 kMPH5: KYC 业务事件(KYC Flow EnteredKYC Verification Started…)就落在 kMPH5 内,含全部业务属性 —— 包括 Entry Point(意图来源)。业务属性在 JSON 根层或 mp_detail_obj(两种 schema 并存),用 regexp_extract 兼容两种。完成与错误以服务端 KYC 表为准。

00·b Bad KYC — 定义 DRAFT · 待研发确认

Bad KYC = 表现出真实意图但未达成服务端成功完成的尝试,排除纯用户取消。一个 session 满足全部条件即为 Bad KYC:

排除(不算 Bad KYC):用户 Cancel、"只是看看"、从未开始、"暂时没带 EID"(会重试)。

指标: Bad KYC 率 = Bad KYC sessions / 到达 Verification Started 的 sessions,按渠道 × 客户端维度切。(session_id 上线后用 session 级;之前用 user 级。)

00·c KYC 订单全分解(MECE)

每个 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=1step 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" 构成。

01 表架构

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_diDWD 拍平已建(按新 schema 重跑)
vew.ads_kyc_channel_funnel_diADS 结果待建
vew.ads_kyc_failure_reason_diADS 结果待建
vew.ads_kyc_leave_reason_diADS 结果待建
vew.dim_kyc_entry_pointDIM 维表可选 · 待字典
vew.dwd_kyc_apply_diDWD(服务端)待建 · 算 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)。

02 三个渠道

每个渠道流程/页面不同,必须分渠道建漏斗 —— 同一事件不可跨渠道横比。

渠道形态关键特征
UAE Pass跳出 App 授权(对前端黑盒)握手段我们看不到,靠服务端错误回调
UAE KYC应用内走流程有独有页面:EID Details Viewed / Confirmed
signzy待确认里程碑事件待研发补充

03 结果表

② 分渠道成功漏斗 — ads_kyc_channel_funnel_di(长表)

粒度:dt × channel × 组合维度 × funnel_step。指标:users(distinct uid;session 上线后改 distinct session)。

step全渠道UAE KYCUAE Pass
0Flow Entered(channel=ALL)
1Verification StartedVerification StartedVerification Started
2EID Details ViewedUAE Pass Continue
3EID ConfirmedSDK Return(待埋点)
4Submitted(服务端)Submitted(服务端)
5Completed(服务端)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)。

03·b 各表 Schema 与示例数据

完整 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)

uidevententry_pointverification_typekyc_flow_typekyc_vendorerror_typeregionclient_verdt
f7bb…KYC Flow EnteredwalletNew User KYCAE4.9.120260601
f7bb…KYC Verification StartedwalletVerify with UAE PassNew User KYCUAE passAE4.9.120260601
192c…KYC UAE Pass Validation ErrorVerify with UAE PassNew User KYCCancelAE4.9.120260601
e0b0…KYC Emirates ID details ConfirmedTO_REMITTENCEScan or upload your Emirates IDNew User KYCUAE KYC SDKAE4.7.220260601

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

channelentry_pointflowregionstep_orderstep_nameusersdt
ALLwalletNewAE0Flow Entered4,82020260601
UAE_KYCwalletNewAE1Verification Started1,82020260601
UAE_KYCwalletNewAE3EID Confirmed96820260601
UAE_KYCwalletNewAE5Completed (server)51220260601
UAE_PassTO_REMITTENCENewAE1Verification Started1,34020260601
UAE_PassTO_REMITTENCENewAE5Completed (server)19820260601

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

channelfailure_sourcefailure_reasonerror_codeis_user_cancelusersdt
UAE_Passfrontend_errorCanceltrue1,20820260601
UAE_Passserver_callbackUAEPASS_TIMEOUTE_UP_408false34020260601
UAE_KYCstatus_pagerenewNotMatchfalse28620260601
UAE_KYCaudit_reject上传清晰 EID(正反面)false18720260601

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

channelleave_sourceleave_pageleave_reasonusersdt
ALLexit_sheet/kyc/homeexit_sheet_viewed6,48620260601
UAE_Passmp_closeSDK 授权页(待埋点)(unknown)58020260601
UAE_KYCleave_click/kyc/document-reviewI'll do it later31220260601

vew.dim_kyc_entry_point — 意图字典(无分区 · 可选)

字段: entry_point_code, entry_point_name, category, is_tech_source BOOLEAN, note

codenamecategoryis_tech_sourcenote
wallet钱包激活walletfalse
TO_REMITTENCE国际汇款transferfalse拼写错 Remittance
mp-ogold / mpogold黄金理财otherfalse两种拼写归并
uniapp(技术容器)techtrue分析剔除

04 计数口径

  1. 用 distinct users(session 上线后改 distinct session)—— 前端有 10–28% 双触发,事件量不可直接用。
  2. 完成与错误以服务端为准 —— 前端 Completed 在跳转流程不触发。
  3. 分渠道漏斗里程碑不同 —— 同一事件不可跨渠道比。
  4. 流失用 Exit-sheet —— Leave 点击量严重偏低。
  5. channel 从 step 1 起算(Verification Started),Flow Entered 时还未知 —— 顶部 Entered→Started 流失是全渠道口径。

05 埋点 TODO(给研发)

优先级原因
P1修曝光/点击类 8 个事件双触发(Exit Bottom sheet 28% 最高)事件量虚高 10–28%
P1完成 + 错误改服务端口径前端 Completed 跳转不触发;UAE Pass 握手黑盒
P2服务端发 session_id,客户端每个埋点携带;分析细化到 session 级去多次尝试噪音,单次尝试漏斗才准
P2离开类事件加具体页面名(自有页 vs SDK 页)定位 UAE Pass 黑盒流失点
P3UAE KYC 确认页记录重试/离开点击次数 + 遇到的问题诊断应用内验证摩擦
P3Entry Point 补采(~30% 为空)+ code 规范意图归因覆盖率

06 依赖 — 建表前需研发拍板

  1. channel 判定规则:kyc_vendor + verification_type → 3 渠道。
  2. signzy 的里程碑事件。
  3. 服务端错误回调表(channel / error_code / member_id / 时间)。
  4. 服务端完成口径(tm_kyc_apply 能否带 channel / entry_point)。
  5. session_id 在服务端关联 member_id / apply。
  6. Entry Point code → 业务名字典(归并 mp-ogold/mpogoldMANDATORY_KYC/_V2)。
  7. UAEPASS 流失:服务端是否有记录(tr_leave_record 不含它)。