ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

金融数据产品从0到1:架构、选型与踩坑实录

金融数据产品从0到1:架构、选型与踩坑实录 在金融行业做数据产品跟互联网行业完全是两种体验。这些年我陆续参与了不少银行、消金、券商侧的大数据平台与数据产品项目每次跟业务方坐在一起聊需求大家最先关心的往往不是模型多先进、平台多牛而是同一个问题手里积累了这么多数据到底能做成什么“真正能用”的东西。这个“真正能用”的东西就是数据产品。这篇博文就围绕“大数据领域数据产品的金融行业应用”展开聊一聊金融场景里数据产品到底是什么、怎么从0到1落地、有哪些关键技术选型以及我在实操中踩过的坑和总结出的经验。无论你是刚入行的大数据开发、想转数据产品经理的同学还是金融行业里需要跟数据团队打交道的业务人员这篇文章应该都能帮你把思路理顺。1. 先搞清楚金融行业的“数据产品”到底是什么1.1 一个容易被误解的词“数据产品”这个词在行业里被用得很泛。有些公司把一套BI报表叫数据产品有些把数据API网关叫数据产品有些甚至把公司的数据中台整体包装成产品。但从金融行业的实际落地角度看我更愿意把它定义为面向特定业务角色以数据为核心输入经过加工、建模、服务化封装后能持续解决某一类业务问题的可复用工具或系统。关键词是“可复用”和“解决业务问题”。临时跑一次取数、写一份分析报告哪怕用了再多大数据技术在我看来都不算数据产品。真正的数据产品应该具备三个特征一是有人持续维护和迭代二是有一批稳定用户在使用三是它的输出能够直接嵌入业务流程、影响业务决策。举个例子。银行信用卡中心经常要做“客户流失预警”。如果只是分析师每月手工跑一次SQL、出一份流失名单这是数据分析但如果把流失预警加工成一套自动化任务每天定时更新客户流失概率并把结果推送到客户经理的工作台甚至通过企业微信自动提醒这就是数据产品。它把数据价值沉淀成了可复用的服务。1.2 金融行业里最常见的数据产品形态金融行业的业务复杂度高、数据敏感性强数据产品往往围绕“风控、营销、经营、监管”四条主线展开。我根据自己的项目经验把常见形态整理成下面这个表格产品类别典型场景核心用户数据输入产出形式客户画像客户360°视图、精准营销客户经理、产品经理客户基础信息、交易流水、行为数据标签体系、画像查询页面风控决策申请反欺诈、贷中监控、额度管理风控审批员、策略分析师申请数据、征信数据、行为数据风控规则引擎、决策流、评分卡经营分析业务日报、收入分析、渠道分析管理层、业务运营交易明细、财务数据、渠道数据可视化报表、指标中台监管报送反洗钱、征信报送、监管统计合规部门交易数据、客户信息报送文件、异常交易预警数据服务数据API、指标查询服务下游应用系统、分析师数仓各层数据API服务、指标集市值得注意的是不要小看“经营分析”这类看起来不那么“高级”的产品。在我接触过的金融机构里使用频率最高、业务价值最容易被感知的往往是报表和指标类产品因为决策层每天都依赖它们。而风控类产品虽然技术含量更高但从投入到产出见效的周期也更长。2. 金融场景为什么是数据产品的“试金石”2.1 业务驱动数据密度与决策时效的双重压力金融行业是典型的数据密集型行业每一笔交易、每一次登录、每一个客服电话都会产生数据。如果这些数据只是躺在数据库里它们就是成本只有当它们被加工成数据产品、反哺业务决策时才变成资产。金融业务对数据产品的需求有两个显著特点数据密度高、决策时效要求不一。以零售信贷为例一笔申请进来系统需要在几秒内完成身份核验、黑名单命中、反欺诈规则检查、额度试算等一系列动作。这背后就需要实时数据产品支撑。而另一个场景比如季度经营分析会的材料则需要离线大数据跑批对时效要求是“明天早上能看到就行”。一个合格的数据产品架构必须同时适应这两种完全不同的时效节奏。用生活化的例子来类比实时风控就像外卖平台的骑手调度每一秒都得响应离线报表就像超市月底盘库存慢慢算没关系但数据必须准。大数据技术在金融行业的落地本质上就是在这两种节奏之间找到平衡点。2.2 合规约束安全、审计与可解释性金融行业做数据产品最大的特殊性在于合规约束。不是“能不能做”的问题而是“怎么做才合规”的问题。这体现在三个层面第一个层面是数据安全。客户姓名、身份证号、手机号、交易记录都属于敏感信息数据产品在加工、存储、展示环节都必须做脱敏处理。比如客户画像页面真实姓名默认显示为“张*”手机号显示为“138****1234”用户需要特定权限才能查看明文。第二个层面是可审计性。金融监管要求所有重要数据操作都有痕迹。一套数据产品上线后谁查了哪些数据、谁修改了哪些规则、模型输出了什么结果都必须有日志可追溯。第三个层面是可解释性。尤其风控类数据产品如果用了过于复杂的机器学习模型业务人员可能“不敢用”。为什么拒绝这笔贷款规则引擎能明确回答“命中反欺诈规则R_003设备在1小时内关联超过3个申请手机号”。但深度神经网络就很难给出这样的解释。所以金融领域风控产品至今仍大量使用评分卡、规则引擎这类可解释性强的技术不是没有道理的。2.3 和其他行业数据产品的差异我碰过电商、内容、出行等不同行业的数据产品对比下来金融行业的差异非常明显互联网行业的数据产品讲究“快”、讲究“个性化推荐”容忍一定的数据不准因为推荐的代价很低。但金融行业讲究“准”和“稳”一个指标口径不对可能导致监管罚款一条规则误杀可能导致成千上万笔业务被拒。在金融行业做数据产品需要有“写错一个数字就可能捅出大篓子”的敬畏心。3. 实操拆解从0到1搭建一个金融风控数据产品3.1 选场景为什么先做申请反欺诈如果你所在金融机构的数据产品还是空白我建议第一个切入场景选“申请反欺诈”。原因有三第一反欺诈痛点足够痛欺诈损失是真金白银业务方愿意投入资源配合第二数据基础相对扎实申请记录、设备信息、关联关系这些数据大多已经沉淀在业务系统里第三成果可量化可以通过“拦截率”“误杀率”等指标直观评估产品价值。我以一个典型消费金融公司为例。业务现状是每天新增几千笔借款申请风控审批员靠人工核查日均处理能力有限欺诈团伙经常批量提交虚假申请。我们的目标很明确搭建一套申请反欺诈数据产品把90%的机器可判申请自动识别出来让审批员集中精力处理高风险人工案件。3.2 搭链路离线画像与实时决策双轨并行产品整体架构是典型的“离线实时”双轨制链路大致是这样的离线链路业务库数据通过Sqoop或DataX同步到Hive数仓经过ODS、DWD、DWS分层加工产出客户申请画像、历史行为标签T1更新后同步到查询引擎支撑审批工作台、报表分析等场景。实时链路申请数据通过接口实时写入Kafka由Flink进行流式处理在窗口期内统计“该设备关联申请数”“该IP当日申请次数”等指标结果写入Redis供决策引擎毫秒级读取。为什么这样设计因为申请反欺诈对时效有硬要求用户提交借款申请后不能在审批环节等太久实时链路保证核心风控指标秒级可用。而一些不要求实时的背景信息比如申请人过去30天的消费行为变化、历史借贷记录完全可以用离线任务跑出来没必要浪费实时计算资源。这种“该实时的实时、该离线的离线”思路是大数据数据产品架构设计的基本原则。当时我们在技术选型上的决策也值得一说实时部分没有一开始就上Flink而是先用Kafka Redis 简单的规则脚本跑通流程等业务量上来之后才逐步引入Flink做复杂事件处理。原因是新产品早期更重要的是快速验证业务价值而不是追求架构的“一步到位”。架构演进跟着业务节奏走这个原则我到现在都坚持。3.3 建核心特征加工与规则策略数据产品真正的核心不是平台而是特征与规则。特征加工是这个产品最耗费精力的环节。我们定义的几个典型特征包括设备维度设备ID在1小时内关联的申请次数、设备首次出现距今天数、设备是否命中黑名单。手机号维度手机号在7天内关联的不同设备数、注册时长、是否属于虚拟运营商号段。IP维度IP所在城市与申请地区是否一致、IP段在24小时内的申请次数。申请行为维度同一客户在1天内的申请次数、申请信息填写耗时、是否频繁修改关键字段。每一个特征的定义都要非常严谨。比如“1小时内关联申请次数”必须明确时间窗口是滚动窗口还是固定窗口数据是包含当前这笔还是剔除当前这笔实操中通常是“包含当前笔”因为要评估的是累计风险。这些加工好的特征最终会落到一张宽表里同时用于策略规则和模型评分。规则方面我们当时部署了大约60条反欺诈规则分三层第一层黑名单硬拒绝命中直接拒第二层规则引擎综合评估多个规则并行打分第三层机器学习模型输出欺诈概率。三层叠加后输出最终决策建议。做规则的团队一定有策略分析师参与技术人员千万不能自己拍脑袋定义规则。比如“同一设备关联3个以上手机号算高风险”到底为什么是3不是5策略分析师会基于历史欺诈案例给出依据。我见过不少技术驱动的团队规则完全由开发定义结果上线后发现误杀率惊人这就是因为没有把业务经验沉淀到规则里。3.4 打磨交付可视化、权限与监控闭环产品做出来之后交付环节同样重要。我们给风控审批员做了一个风险工作台几大功能板块待审批案件队列带风险等级标签、申请详情360°视图展示所有风控特征与命中的规则、批量审批操作区、每日风险看板。权限方面按最小权限原则设计审批员只能看到分配给自己的案件看不到他人的审批记录特征明细里手机号、身份证号按角色脱敏只有合规审批专员有权限查看明文。所有查询和审批操作均记入审计日志。监控闭环也是数据产品必须考虑的。我们搭建了每日数据质量监控和规则命中监控两张看板。前者监控“数仓任务是否正常产出”“特征空值率是否超过阈值”后者监控“每条规则的命中率是否出现明显波动”。举个例子如果某天“1小时内关联3个设备”这条规则的命中率突然从2%涨到8%大概率不是业务异常就是数据异常需要人工介入排查。4. 关键技术选型与参数经验4.1 存储与计算引擎怎么选金融行业大数据架构通常可以总结为“四个层次”数据采集层、数据存储层、数据处理层、数据应用层。但在实际项目里真正的难点在于选型组合。离线存储计算方面Hive Spark的组合依然是主流HDFS作为底层的分布式存储Spark负责复杂的ETL和机器学习特征加工。我见过很多团队纠结“要不要上Hudi/Iceberg这类数据湖格式”我的建议是如果现有数据规模还没到海量级别比如日均新增几千万行的规模传统Hive分区表完全够用别为了技术新鲜感牺牲稳定性。实时计算方面Flink目前基本是事实标准。特别是做风控这类对状态管理要求高的场景Flink的窗口机制、状态后端、Exactly Once语义都比早期的Storm和Spark Streaming更合适。Kafka作为消息中间件保留数据缓冲能力Redis作为特征存储提供毫秒级读写。即席查询和产品化输出方面我倾向于用ClickHouse或Doris来承接明细查询和多维分析。金融数据产品的很多查询是“跑个多维分组看趋势”传统数仓加Impala/Presto也能做但ClickHouse在百亿级数据量下的聚合查询性能表现实在惊艳Doris在金融行业也有很多落地案例选哪个主要看团队技术栈和已有运维能力。4.2 数据质量检查框架怎么搭金融数据产品的生命线是数据质量。我在这块吃过亏所以现在做任何产品都会先把数据质量检查框架搭好再谈上层功能。框架需要覆盖六个维度的校验完整性字段空值率、准确性与源系统核对、一致性跨表同字段口径一致、及时性任务产出时间是否满足SLA、唯一性主键是否重复、有效性取值范围是否合法。具体实现上我常用的做法是开发一个通用的“数据质量检查任务”通过配置化方式定义每张表的校验规则。校验结果写入质量检查结果表再联动告警通知。比如每天晚上3点质量检查任务自动运行检查前一天各层表的数据量是否落在合理区间内。如果某张核心表数据量比前7天均值低20%以上立即触发企业微信告警同时阻断下游依赖该表的任务继续执行。为什么数据质量框架必须“配置化”因为金融机构的表实在太多一张张手写校验脚本根本不现实。配置化之后新增一张表只需要往配置表里插入一条记录声明主键、必填字段和量级波动阈值系统就能自动接管后续检查逻辑。4.3 指标体系与口径管理金融业务的数据产品十有八九会因为“口径不一致”吵架。同一个“新增客户数”市场部说是从获客系统里统计的运营部说按核心系统开户时间统计财务部说按首笔交易时间统计三个数字对不上最终都是数据团队背锅。真正解决口径问题的手段是建设指标体系。指标分为原子指标和派生指标原子指标定义“在什么粒度下、统计哪个事实”比如“客户维度下的放款金额”派生指标在原子指标之上叠加维度、周期、筛选条件比如“本月华南区新客线上放款金额”。一套好用的指标管理系统应该包含指标唯一编码、名称、所属业务域、口径描述、计算公式、来源表及字段、负责人、上线时间、变更记录。在金融行业指标变更还需要走审批流程避免“口头改口径、事后不认账”的情况。我们当时把指标体系直接嵌入报表平台业务人员看报表时点开指标就能看到完整口径说明和变更历史这种透明机制极大减少了沟通成本。5. 常见问题与踩坑实录5.1 特征穿越大数据建模最容易犯的错做风控数据产品时最隐蔽的坑是“特征穿越”。简单说就是建模时用了未来数据来预测过去。最常见的场景是在清洗数据时不小心用了全量数据来计算特征统计值比如用“客户最终是否逾期”这个标签来筛选特征或者用整个周期的数据计算平均消费金额但实际上在决策时点这些数据根本不存在。举例来说我们曾开发过一个额度调整数据产品用客户历史行为预测未来30天逾期概率。开发同学在加工特征时不小心把“过去30天平均消费金额”算成了“从开户到当天的全周期平均消费”这就相当于让模型偷看了未来。模型在训练集上表现极好KS值冲到0.5以上但上线后实际效果断崖式下跌。排查了很久才发现是特征加工窗口计算错误。处理这个问题一个好的习惯是给每个特征打上“时间窗口元数据”明确记录“特征观察截止日距决策时点偏移天数”。凡是做过时间偏移验证的特征才允许进入模型训练同时模型上线前必须做严格的回溯测试。金融行业里一次模型误上线造成的损失可能非常巨大这个环节怎么谨慎都不过分。5.2 数据口径打架一个报表五个数有一段时间我们的经营分析产品非常混乱日活报表显示“昨日活跃用户12万”但客户行为分析模块显示“昨日活跃客户8万”。两边团队差点吵起来最后拉排查发现一个统计的是“所有登录过APP的用户”另一个统计的是“登录APP且有资产余额的客户”。两个口径都有道理但没有统一的指标管理最终导致管理层对报表数据失去信任。我的经验是在数据产品设计阶段就要把核心指标的口径定义明确下来做成“指标字典”并强制所有下游产品引用。如果出现确实需要第二种口径的场景不要复用同一个指标名新建一个带限定词的指标比如“活跃客户-有资产口径”并在页面显著位置标注口径差异。宁可多几个指标也不要让一个指标名承载多种含义。5.3 离线任务凌晨跑不完金融机构的大数据集群有个特点白天业务系统负载高所以批处理任务普遍集中在夜间跑。我们曾经出现过数仓核心任务原定凌晨2点产出实际到早上7点半才跑完导致营销数据产品早上8点推送的客户名单迟迟无法生成直接影响业务。排查下来问题根源在于任务调度优先级混乱。有些非核心报表任务抢占了集群资源把核心任务挤到后面。后来我们做了三件事第一把所有任务按照P0/P1/P2分级P0任务独占高峰期资源窗口第二Spark任务内存参数从默认配置改成按数据量预估配置——常见的问题是executor内存设太小导致频繁GC和Shuffle溢写第三在调度平台配置任务告警如果核心任务超过预估运行时长立即通知值班人员介入。还有一个非常细节但容易忽略的点数据倾斜。金融场景里“头部客户”效应明显按客户ID分桶时经常出现一个桶里有海量数据。解决方式一般是加随机前缀做两阶段聚合或者对倾斜key单独处理。这种问题在数据量小的时候完全暴露不出来一旦数据量上去任务性能可能相差几十倍。5.4 权限管控的严格要求金融行业对数据权限的管控比其他行业严格得多。我曾经以为只要做了页面功能权限谁能看哪个菜单就够了结果在内部审计时被提出了整改要求必须做到字段级和数据行级权限管控。具体来说同样是客户画像产品客户经理只能看到自己名下客户的画像支行行长能看到本支行客户汇总视图但不能看到具体客户明细。某些敏感字段如身份证号、完整手机号即使有权限查看画像也必须经过动态脱敏处理。这些权限逻辑不能散落在各个产品中各自实现而是需要统一封装在权限中心服务里数据产品通过配置方式申请权限模型。在技术实现上有两种常见方案一种是查询时在SQL层面拼接权限过滤条件如where cust_manager user.id另一种是通过数据虚拟化层做统一的行级权限代理。前者实现简单但容易遗漏或出现语法漏洞后者更安全但引入额外依赖。我建议初期用前者等到产品线多了之后迁移到统一权限代理层。5.5 新人上手与团队协作最后一个经验是关于团队的。金融大数据产品项目里光有技术人员是不够的。我见过很多数据团队辛辛苦苦做出产品却因为业务方不买账而失败。核心原因在于产品设计阶段业务参与不足。理想的项目团队构成是“业务方 数据产品经理 数据开发工程师 策略分析师 测试人员”的组合。业务方负责定义痛点和验收标准数据产品经理负责把业务需求翻译成数据需求数据开发负责技术落地策略分析师负责规则和模型逻辑测试人员负责数据准确性验证。我建议每周至少安排一次联合例会让团队所有人对当前产品进度、口径变化、问题排查保持同步。小团队也别怕哪怕只有两三个人也要在角色认知上明确分工。尤其是数据产品经理这个角色他的核心能力不是写SQL会写当然是加分项而是“问对问题”你的决策流程是什么现在数据卡在哪里如果给你一个百分百准确的预测结果你敢直接用它做决策吗问不出这些问题的答案数据产品做得再漂亮也很难在业务中扎根。6. 关于金融数据产品设计的一些个人体会走到这里如果你是零基础建议先抓住一条主线从离线数仓分层与指标体系建设入手试着把一个业务方的临时取数需求做成一份可以每日自动更新的报表再去思考如何沉淀成可复用的产品模块。如果你已经有大数据开发基础建议多花时间理解业务金融机构里懂业务的数据工程师永远比纯技术型的人更有竞争力。踩过这么多坑之后我个人最深的体会是数据产品的“技术含量”并不在于用了多牛的组件而在于是否能把准确、及时、合规的数据在正确的时间送到正确的人手里。一个用最普通技术栈搭建但业务每天离不了的数据产品远胜过一堆技术炫技却没人使用的平台。金融行业尤其如此这里最值钱的不是模型有多聪明而是每一笔决策都能被追溯、每一个数据都能被信任。希望这篇分享能帮你在金融大数据与数据产品的路上少走一些弯路。
返回列表