做数据产品这些年,我最大的感受是:“产品规则”这四个字,看起来人人都会写,但真的放到数据科学层面去拆解,马上就能看出差距。尤其当你要同时面对B2C、B2B、B2G三种完全不同的商业场景时,同一个“满减规则”,在C端是运营活动,在B端是合同履约,在G端可能就变成了审计对象。
这个系列我计划写五十二篇,今天这篇是第一篇,先把框架和底层逻辑讲清楚。适合正在做数据策略、规则引擎、风控体系或产品配置系统的朋友,也适合想从纯算法转向业务侧的数据分析师。后面几十篇会按照行业拆解具体规则设计,比如电商促销、采购审批、政务补贴发放、物流调度、供应链金融等场景,但如果你连“规则的分层结构”和“不同商业模式的约束差异”都没建立起来,后面那些具体case你大概率会看得很吃力。
1. 三种商业模式下产品规则的底层差异——先弄清“规则为谁而生”
同一个叫“规则”的东西,在B2C、B2B、B2G里根本是三种生物。我在给团队做内部培训时最喜欢用一个类比:B2C的规则是“商场里的促销海报”,B2B的规则是“两家公司签的合同”,B2G的规则是“政府发的红头文件”。三者的稳定性要求、解释权归属、纠错成本完全不在一个量级。
1.1 B2C:流量、体验与个性化
B2C场景下,产品规则的核心目标是驱动用户行为。比如“新用户首单立减”“满300减40”“会员日双倍积分”,这些规则的共同特点是:
- 生命周期短,可能只存在几小时
- 面向海量用户,需要支持人群细分和实时决策
- 对用户体验极其敏感,规则解释不清就会引发投诉
- 允许灰度发布和快速下线,试错成本相对可控
在数据科学层面,B2C规则通常会被拆成“目标人群圈选 + 动作条件 + 权益内容 + 频次限制”四件套。你最需要考虑的是人群重叠和权益叠加问题。举个我刚入行时踩过的坑:一个平台同时跑了“新人立减”和“品类满减”两条规则,系统只是简单做了优先级排序,结果高价值新用户在同时命中两个规则时只享受了一个,转化率反而比只出一个规则时更差。后来我们引入“规则互斥矩阵”,把同类型权益的叠加关系做成配置项,这个问题才解决。
1.2 B2B:流程、权限与稳定
B2B产品规则的和B2C比起来简直是两个物种。企业采购、供应商管理、渠道返利、集团统一采购,这些场景下的规则往往服务于“流程控制”而非“用户激励”。
B2B规则有几个显著特征:
- 规则要嵌入审批流,不单是“给不给折扣”,还要回答“谁有权限批准折扣”
- 数据量远小于C端,但每笔交易的金额高、影响大
- 规则变更需要走合同或协议变更流程,不是产品经理改个配置就能上线的
- 稳定性压倒一切,你很少会看到B2B系统做A/B测试,因为没人敢拿大客户的合同做实验
做B端规则时,我有一个强烈建议:把规则和流程解耦。也就是说,规则引擎只负责“算”,工作流引擎只负责“走”。如果规则里硬编码了审批节点,后面每次调整折扣梯度都要改两套系统,运维成本会指数级上升。
1.3 B2G:合规、审计与全链路留痕
B2G就是另一个极端了。政务采购、补贴发放、公共服务、监管报送,这些场景的产品规则,第一优先级永远是合规。这里不谈具体政策,只谈技术抽象。
G端规则有三个特点躲不开:
- 全程留痕:每条规则的创建、修改、生效、失效,谁在什么时间改了什么参数,必须可追溯
- 审计友好:规则的解释逻辑要能生成自然语言报告,方便审计人员理解,不能只给一堆代码和数据库字段
- 多级校验:一套规则往往要经过业务处室、技术部门、第三方审计的多轮校验,不能上线后再“边跑边修”
数据科学在G端规则的用武之地,往往不是算法模型,而是“规则一致性检测”和“异常识别”。比如说,补贴发放规则要求“人均月收入低于某阈值”,你会遇到收入口径不一致、家庭人口动态变化、多部门数据打架等一堆问题。规则写得再漂亮,数据对不齐就执行不下去。
2. 数据科学视角下,一条产品规则该拆成哪几层
经常有数据分析师问我:“规则和模型有什么区别?”我的回答是:模型给你的是一个概率或分数,规则给你的是一个确定性的决策。但在数据科学实践中,两者往往是嵌套关系——模型输出作为规则的前置条件,规则输出作为最终的引擎决策。
这一章我们抛开具体业务,只谈技术抽象。把一条规则从数据科学角度拆解成四层结构,这个框架可以帮你应付绝大多数场景。
2.1 规则的定义、判定、执行与解释
我习惯把规则拆成四层:
| 层级 | 职责 | 典型内容 | 数据科学关注点 |
|---|---|---|---|
| 定义层 | 描述规则是什么 | 规则编号、名称、业务目标、适用版本 | 规则的业务口径与术语标准化 |
| 判定层 | 判断是否触发 | 条件表达式、阈值、时间窗口、人群集合 | 特征计算、阈值合理性、数据时效性 |
| 执行层 | 决定触发后做什么 | 权益发放、流程跳转、数据标记、风险拦截 | 动作的幂等性、失败重试、事务一致性 |
| 解释层 | 回答为什么触发 | 命中条件明细、参数快照、推演日志 | 规则可解释性、线上日志完整性 |
很多团队做规则只关心“判定层”和“执行层”,定义层和解释层草草了事。结果上线三个月后,运营人员拿着用户投诉来问“为什么这个用户没享受到优惠”,你翻遍代码库都找不到当时的规则版本,这就是解释层缺失的代价。
我强烈建议:每条规则从立项开始就维护一条元数据记录,至少包含业务口径、数据字段来源、上线时间、失效时间、负责人、变更记录。后续再做分析、排查、审计时,这个成本会百倍返还给你。
2.2 从“经验规则”到“数据挖掘规则”的演化路径
产品规则不是一开始就要上人工智能的。我见过太多团队一上来就整复杂模型,最后业务方不接受、运维吃不消,灰头土脸退回原点。
实际上,一个成熟的规则体系通常走四步演化路径:
- 人工经验规则:运营拍脑袋,“老用户给8折”
- 统计规则:数据分析发现老用户中复购率高的集中在某个消费区间,于是定义“近90天消费≥5次且客单价≥200元”的老用户标签
- 模型辅助规则:用逻辑回归或树模型算出用户价值分,规则变成“价值分≥80且非高风险用户”
- 动态自学习规则:规则阈值随环境变化自动调整,例如风控规则根据实时欺诈率动态调整拦截阈值
这个演化路径不是越往后越好,而是要和业务场景的容错度匹配。B2C促销规则可以走到第3-4步,因为试错成本低;B2G补贴规则最好就停在第2步,因为审计需要稳定和可解释。
我在的一个政务类模拟项目X里,团队非要上机器学习来筛选补贴资格,模型AUC做到0.87,听起来很漂亮。结果审计一问“你为什么拒绝老王头的申请”,模型给出的理由是一堆特征权重,无法转化成符合规范的拒绝文书,项目差点推翻重来。后来改成XGBoost特征重要性分析 + 规则决策表的方式,每一步判断都能落到具体条文和证据上,问题才算解决。
2.3 规则与模型的关系怎么处理
这里是数据团队最容易吵架的地方。算法工程师认为模型可以替代规则,业务方觉得模型是个黑盒,不敢用。我的实践结论是:不要非此即彼,而是让两者各干各擅长的。
模型的强项是捕捉非线性关系和复杂交互,规则的强项是稳定、可解释、可控。最优架构往往是:
- 用模型做粗筛:产出风险分、价值分、偏好分,把所有用户排个序
- 用规则做精决策:在分数基础上叠加业务约束(如阈值、白名单、频次限制)
- 用规则做底线:无论模型输出什么,某些合规底线必须一票否决
举个例子,B2C优惠券场景可以用模型预测用户对某个券种的核销概率,但最终能不能发、发几张,还得受“同一用户每周最多领5张”“优惠券不可叠加使用”等规则约束。模型管“愿不愿意”,规则管“能不能够”。
3. 产品规则落地的三个典型闭环:规则生产、AB实验、回归监控
很多文章教你怎么写规则,但很少讲规则上线后怎么运维。我认为,一条规则的完整生命周期应该包含生产、实验、监控三个阶段,缺一个环节都是在给未来埋雷。
3.1 规则生产:数据特征工程与规则版本管理
规则生产阶段,数据科学家的主要工作是特征工程和阈值标定。
特征工程方面,我建议按照“用户属性、行为统计、环境上下文、历史结果”四个维度来组织特征体系。比如一个B2B信贷审批规则,特征可能是:
- 企业属性:成立年限、注册资本、行业分类
- 行为统计:近12个月开票金额、纳税等级、诉讼记录
- 环境上下文:行业景气指数、区域政策支持度
- 历史结果:历史借贷记录、逾期天数、还款率
阈值标定最忌讳拍脑袋。正确做法是拿历史数据做分布分析,找到“临界点”。例如,要用“近90天活跃天数≥15天”作为用户活跃规则的条件,你得先看活跃天数和留存率的关系曲线,找出斜率突变点,而不是单纯取个中位数。
版本管理是规则生产的大坑。我见过太多团队用Excel管理规则版本,改来改去最后谁都不知道线上跑的是哪个版本。后来我们统一用Git管理规则配置,每条规则对应一个文件,每次修改走代码评审。这个习惯救过我很多次。
3.2 实验设计与效果评估:不同商业场景的样本差异
说到AB实验,很多人的第一反应是“随机分组对比转化率”。但这个思路在B2B和B2G场景下往往行不通。
B2C场景实验设计相对成熟:流量大、用户多、随机化容易,可以用经典的“对照组-实验组-双样本检验”。但有几个细节别忽略:
- 对同一用户多次曝光,要按用户维度做分组,而不是按曝光次数
- 新颖效应(诺沃克效应)会让新策略在一开始表现特别好,建议实验持续足够周期
- 评价指标不能只看一个,北极星指标+护栏指标组合起来看,比如“转化率”提升的同时“退换率”有没有恶化
B2B场景下,你可能只有几百个客户,根本无法做纯随机实验。这时我更建议用准实验设计:以地理区域、客户规模或行业划分作为分组依据,配合双重差分法来评估效果。我做过一个渠道返利规则调整,就是对华东和华南两个区域的客户分别执行新旧规则,再用DID消除区域固有差异来估算净效果。
B2G场景就更特殊了。政务项目的规则评估通常不具备实验条件,因为公平性原则不允许把老百姓分成“被优惠组”和“不被优惠组”。这时候的“效果评估”更接近“合规后评估”——查验规则是否覆盖目标人群、是否存在漏发或错发。数据科学家要做的是规则模拟重放:用历史数据重新跑一遍新规则,和真实执行结果做对比,找出系统偏差。
3.3 监控与回归:规则失效时的快速处置
规则上线不等于结束。我在复盘项目时发现,绝大多数线上问题不是算法不对,而是规则依赖的数据或前置条件发生了变化,导致规则逻辑失效。
举个例子:某B2C平台有一条规则“商品价格低于历史最低价95%时自动补差价”,后来运营把价格字段的口径从“含税价”改成了“不含税价”,规则没变,但计算结果全错了。这种问题最坑人,因为你查规则本身没有一点毛病。
所以我建议建立三层监控:
- 数据健康度监控:规则涉及的字段何时更新、空值率、异常波动
- 规则触发率监控:每条规则的触发次数、命中分布、环比变化
- 业务结果监控:规则的直接结果(如优惠券核销率)和间接结果(客诉、毛利变化)
一旦监控指标出现异常,处置节奏要清晰:先暂停规则,再定位原因,然后决定调整还是回滚。不要试图线上改配置,线上配置改动容易引发二次问题,建议先下线再排查。
4. 实操记录:一套跨B2C/B2B/B2G场景的规则引擎设计
前面章节讲得比较抽象,这一章来点实在的。我之前参与设计过一套同时服务C端商城、B端采购平台、G端补贴发放的规则引擎,下面把核心设计思路复盘一遍,你可以拿这个作为模板改造成自己的方案。
4.1 规则模板:条件、动作、权重与优先级
规则引擎的核心数据模型,我始终遵循“条件-动作”模型。条件决定触发与否,动作决定触发之后干什么。为了处理复杂业务,再增加“权重”和“优先级”两个字段。
一个规则的典型JSON结构长这样:
{ "rule_id": "R10023", "rule_name": "B2C新人首单立减20", "scene": "B2C_ORDER", "status": "active", "priority": 100, "conditions": { "type": "all", "items": [ { "field": "user.is_new", "operator": "==", "value": true }, { "field": "order.is_first_order", "operator": "==", "value": true }, { "field": "user.risk_score", "operator": "<=", "value": 60.0, "source": "model:credit_v1" } ] }, "actions": [ { "type": "coupon", "params": { "coupon_id": "CPN_6789", "denomination": 20.0, "expire_days": 7 } } ], "effect": { "start_time": "2026-01-01 00:00:00", "end_time": "2026-03-31 23:59:59", "version": "1.3.2" } }这个结构看起来简单,但有几个设计细节极容易踩坑:
- 版本号和有效期必须废除。版本号是为了审计追溯,有效期是为了计划性上下线
- 条件里可以引用模型分数,但要标明模型的版本。上面的
risk_score来自credit_v1模型,模型升级不影响规则配置的追溯 - 动作必须是幂等的。如果优惠券已经发放过,重复执行不能再次发放
在B2B和B2G场景里,我建议增加“审批”动作类型,而不只是“权益发放”。例如规则命中后,触发一个审批流程,由人工决策是否执行最终动作。
4.2 基于数据的规则配置示例
拿一个真实的B2B场景举例:渠道商返利规则。
业务背景是:平台给一级经销商按照月度采购额返利,返利比例分三档。以前是财务人工计算,经常算错,后来我们改成了数据驱动的规则配置。
具体规则如表所示:
| 月度采购额(万元) | 返利比例 | 前置条件 |
|---|---|---|
| ≥ 200 | 5% | 历史无逾期回款、非现金采购单≥70% |
| ≥ 100 且 < 200 | 3% | 历史无逾期回款 |
| ≥ 50 且 < 100 | 1% | 上月有至少1次成交 |
这个规则看起来清晰,但落到数据科学层面,有三个核心要处理:
- 采购额的口径:是含税开票额还是财务实收额?是订单金额还是发货金额?这个不同口径结果差异巨大。我们在规则引擎里要求字段必须来自“事实表”的同一来源,并在解释层记录口径版本
- 时间窗口的归属:每个月的采购额是自然月还是滚动30天?经销商可能月底下单,但货物下个月才到,算哪个月?我们用“订单提交时间”作为归属基准
- 返利发放形式:计算完返利后,是给现金、抵扣券还是作为下次采购折扣?这一层常常被数据团队忽略,但它决定了后续财务流程怎么衔接
这些细节听完你会觉得都是常识,但就是这些常识,每一条背后都有过一次线上故障。口径不一致导致返利发错金额、被客户投诉财务造假的经历,我真的不想再来第二次。
4.3 规则引擎的技术选型与接口约定
技术选型上,我建议区分“实时规则”和“离线规则”。
实时规则(例如支付时的风控拦截、下单时的优惠计算)需要低延迟,一般用独立的规则引擎服务,内存中加载规则集,通过Redis缓存特征数据,接口RT要求在100ms以内。离线规则(例如月底结算返利、补贴资格批量审批)可以用分布式批处理框架,每天/每周跑一次全量计算即可。
接口约定方面,无论哪种,都建议提供下面几个标准接口:
check(rule_id, context):判断是否触发execute(rule_id, context):执行动作并返回结果explain(rule_id, context):输出完整的命中解释version(rule_id):获取规则的版本和变更记录
explain接口往往最不受重视,但一到客诉和审计时就变成救命稻草。解释层输出要包含:命中的每个条件、使用的数据快照、时间段、模型版本、计算过程的日志ID。
5. 常见问题与排查技巧实录
做规则引擎这几年,被问到最多的问题就集中在几个典型场景。这里整理成速查表,都是实战中验证过的排查路径。
5.1 规则不生效:缓存、时序与字段口径
症状:规则配置改了一小时,线上行为没变化。
排查路径,按顺序来:
- 先看规则状态是否是
active,很多人改完配置忘了发布 - 然后看有效期:
end_time是否已经过期,过期规则不会执行 - 再看缓存:规则引擎常有本地缓存,需要专门的发布接口推送新配置,直接改数据库不会热更新
- 接着查特征数据:上下文里的
user.is_new是否来自实时接口,如果实时接口超时,会走默认值,导致规则判断错误 - 最后查时序:条件里是否有“近30天行为”这类时间窗口计算,窗口边界使用的是自然日还是自然月,这个差异也能让规则结果完全不同
经验之谈:规则不生效的第一原因永远不是代码逻辑,而是“数据还没到位”。你把所有特征数据打一层日志,先确认入参对不对,再往上查规则逻辑,效率最高。
5.2 AB实验置信度不足
症状:实验跑了三周,对照组和实验组的转化率只差0.1个百分点,置信区间太宽,无法下结论。
这种情况我在小流量产品上遇到很多次。三个常用解法:
- 降低指标方差:把“转化率”指标换成“人均GMV”或“首单率”,减少零膨胀数据对结果的影响
- 分层随机化:先按用户历史价值分层,再在每层内部随机分组,可以显著减少组间基线的差异
- 贝叶斯方法:小样本下用贝叶斯因子替代p值,“无法证明显著”至少能告诉你“效果方向有没有可能是正的”
但这里有个核心原则要记住:实验的主要目的不一定是追求统计显著,而是观察效果是否达到业务预期,以及有没有副作用。如果实验目的明确是“验证规则的安全性”,没有显著差异反而是好消息。
5.3 B2G场景的数据权限与合规问题
政务类项目里面,数据科学家面对的最大头疼点往往不是算法,而是数据权限。补贴发放规则需要关联民政、社保、税务等不同口径的数据,但每一份数据都受严格权限管控。
我归纳了几条实操经验:
- 不能把全部原始数据拉到本地,而是把规则计算下推到数据源侧,只留下汇总结果
- 每一次跨域数据关联都要记录关联键、数据版本、字段映射,形成数据血缘版本
- 规则配置里所有涉及个人信息的字段要做脱敏变换,例如身份证号sm3哈希、姓名模糊化
- 规则运行完后输出“数据质量报告”,标明每张表的覆盖率和缺失率,避免审计时说不清
在合规层面,我始终坚持一条原则:宁可规则不运行,也不让数据越权限流转。一次数据事故,可能就葬送掉一整年的信誉。
5.4 面向非技术人员的规则解释
你给业务方讲规则逻辑,讲“IF…ELSE”结构他们是能听懂的,但一引入模型分数、时间窗口、特征快照,他们就懵了。这不是他们笨,是表达方式的问题。
我现在遇到需要向非技术人员解释规则时,会换一种方式:
比如你要解释“近90天活跃天数≥15天,且风险评分≤60分”,我不会说代码字段,而是说:我们给这个用户打了一个“日常活跃”的标签,所谓日常活跃,是指他在过去三个月中,有至少半个月都在使用我们的产品;同时,我们给他做了一个信用画像,评分在60分以下,属于低风险人群。两个条件都满足,系统才认为他是优质新客,授予优惠权益。
这个“翻译”过程看似简单,但非常有用。我建议每个数据团队都建立一个“业务口径字典”,把每一个技术字段映射成业务人员能听懂的解释,甚至翻译成多个语言版本。这个字典不但减少沟通成本,还是新人培训最宝贵的资料。
写在最后:系列规划的由来
先把这个系列的规划说清楚,后面追更的读者心里有个底。
五十二篇会按照“行业场景 + 规则类型”双维度展开,覆盖电商、零售、物流、供应链金融、企业服务、智慧城市、医疗健康等领域的规则设计与数据科学应用。更新节奏是一周一至两篇。为了保证每一篇质量,每篇我都会附带一套可参考的规则模板和一段真实复盘的经历。
最后分享一个个人心得:做产品规则这事儿,本质上是“把业务的模糊意图变成系统的确定性行为”。没有绝对正确和完美的规则,只有持续逼近目标与边界的规则。数据科学的价值不在于帮你找到唯一正确的标准答案,而在于帮你度量偏差、量化影响、暴露盲区。你有足够强的数据习惯和怀疑精神,才能把规则这件事做扎实。
下一篇我会专门聊一聊规则的“可解释性”,这是数据科学和规则交叉的地带,也是B2G场景最容易卡壳的环节。如果你在B2B里遇到过客户质疑返利计算、在B2C里面对过用户投诉优惠不生效,那一篇会对你特别有参考价值。