案例 058 封号风险也是成本
案例 058 封号风险也是成本
摘要:同时挂着两个平台跑单,一个时段能多抓 12.0% 的单,代价是被系统判定「异常接单」的违规分往上涨。本题把「重叠在线时段数」当成唯一的决策杠杆:班次 24 个时段、单平台时段收益 \(r_{t}\) 合计 795.0 元,双开时段的收益溢价 \(\pi=0.12\),而封号概率按 \(P=0.02+0.25\theta^{2}\) 随重叠占比 \(\theta\) 走高,一封号 3 天少赚 \(\Lambda=900\) 元。目标写成「毛收入 + 溢价 \(-\) 期望封号损失」,\(P(\theta)\) 用 5 段折线(addGenConstrPWL)线性化,另设 0-1 变量 \(b\) 标记是否越过 100 分审查线。三种策略的结果:全合规 718.0 元(\(\theta=0\))、适度违规 737.4 元(\(\theta=20.8\%\))、激进违规 631.9 元(\(\theta=87.5\%\))。结论是反直觉的:违规确实多赚了 29.5 元毛收入,但期望封号成本同时涨了 10.1 元,净赚只剩 19.4 元;重叠占比压到 20.8%(第 5 段双开)时期望净收益最高,再往前一步就开始下行。
关键词:风险预算;分段线性近似;期望损失;混合整数规划;平台合规;灵敏度分析
1 问题提出
1.1 问题是什么
午晚高峰两个平台同时爆单,骑手最自然的动作是「两台手机都开着,哪个先派就抢哪个」。这在系统眼里就是异常:同一时刻、同一位置、两个平台同时在线接单,判定为「跨平台异常接单」的概率随重叠时长上升。轻则扣分限流,重则封号 3 天——900 元直接归零。
班次从 10:00 到 22:00,切成 24 个 30 min 时段,每段的单平台收益 \(r_{t}\) 在 18.0—52.0 元之间(图 1),高峰 9 段合计 412.0 元,全天 795.0 元。双开一段的收益是 \(r_{t}(1+\pi)\),\(\pi=0.12\)——这就是全部诱惑:一段双开多赚 6.2 元(高峰)到 2.2 元(深夜)。
表 1 八个代表时段的收益与风险记分(全 24 段见 data_058.csv,溢价按 12% 计)
| 时刻 | \(r_{t}\) /元 | 高峰 | \(\pi r_{t}\) /元 | 最优决策 | 违规分 |
|---|---|---|---|---|---|
| 10:00 | 26 | 否 | 3.12 | 单开 | 0 |
| 11:00 | 44 | 是 | 5.28 | 单开 | 0 |
| 12:00 | 52 | 是 | 6.24 | 双开 | 5 |
| 13:00 | 34 | 否 | 4.08 | 单开 | 0 |
| 15:30 | 20 | 否 | 2.40 | 下线 | 0 |
| 17:00 | 42 | 是 | 5.04 | 单开 | 0 |
| 18:00 | 50 | 是 | 6.00 | 双开 | 5 |
| 21:30 | 18 | 否 | 2.16 | 下线 | 0 |
1.2 为什么要优化
第一,基线风险是躲不掉的。\(\theta=0\) 时 \(P\) 仍有 2%,也就是说全合规骑手每班次也要背 18 元期望损失(900×0.02),一年 300 个班次就是 5,400 元。任何策略比较都必须以这个「平台误伤基线」为分母,否则会把 2% 当成零。
第二,溢价与风险不是线性对消的。溢价按 \(r_{t}\) 线性涨,风险按 \(\theta^{2}\) 平方涨——前者是匀速的,后者是加速的,所以一定存在一个拐点。本题要算的就是这个拐点。
第三,「适度」需要定义。行业里说「别太过分」,量化下来就是「重叠占比不超过 30%」。这个 30% 是拍出来的还是算出来的?如果是算出来的,它和精确最优差多少?这是本题真正要回答的问题。
1.3 Gurobi 如何求解
变量四组:\(z_{t,p}\in\{0,1\}\) 时段 \(t\) 是否挂平台 \(p\)、\(a_{t}\) 是否在线、\(o_{t}\) 是否双开、\(b\) 是否触发封号;连续变量 \(\theta\)、\(P\)、\(S\)。双开与在线用三条线性不等式从 \(z\) 里「挤」出来(式 3),不需要额外的逻辑约束。\(P(\theta)\) 用 addGenConstrPWL 在 \(\theta\in[0,1]\) 上取 5 段节点 \(\{0,0.2,0.4,0.6,0.8,1.0\}\)——凸函数的分段线性是外逼近,模型比真实风险略保守,最大偏差 0.0025(约 2.3 元)。封号指示 \(b\) 用大 M 与审查线挂钩(式 5),但不进目标函数(目标里已经是期望值),只用于事后判定哪一档策略真的会被封。
2 数学模型
2.1 符号说明
\(t=0,\dots,T-1\) 为时段(\(T=24\)),\(p\in\{0,1\}\) 为平台;\(r_{t}\) 为单平台时段收益;\(\pi\) 为双开溢价率;\(\Lambda\) 为封号 3 天的收入损失;\(\theta\) 为重叠占比;\(P\) 为封号概率;\(s\) 为每重叠时段违规分(5 分);\(\underline{S}\) 为审查线(100 分);\(n_{\max}\) 为在线时段上限(21 段);\(\beta\) 为风险预算(0.30)。
2.2 目标函数
三项各有分工:第一项 \(\sum r_{t}a_{t}\) 是「只要有在线就有底薪」,第二项 \(\pi\sum r_{t}o_{t}\) 是双开溢价,第三项 \(\Lambda P\) 是把封号概率折成钱。第三项是本题的全部新意:它让「提高收益」和「降低风险」变成同一个可比较的量纲。 注意 \(o_{t}\) 只在双开时为 1,所以第二项不会重复计算基础收入。
2.3 约束条件
封号概率取题给的二次式,\(\theta\) 是重叠段数占总段数的比例。这条式子里的 0.02 是平台误判的基线,0.25 是违规的边际敏感度——两个系数都不由骑手决定,骑手只能决定 \(\theta\)。
\(o_{t}\) 与 \(z_{t,p}\) 的联动:双开时 \(z_{t,0}+z_{t,1}=2\),下界逼出 \(o_{t}\ge 1\),上界又压住 \(o_{t}\le 1\),于是 \(o_{t}=1\);单开时上界 \(o_{t}\le 0\)。\(a_{t}\) 同理,保证「在线」不被重复计数两次收入。
5 段折线的凸组合写法,与 addGenConstrPWL 等价。节点取等距 0.2,\(P\) 的节点值 \(\{0.02,0.03,0.06,0.11,0.18,0.27\}\) 全在真实曲线上——折线在节点之间高于曲线,这就是外逼近保守性的来源。
违规分是重叠段数的线性累加,\(b=1\) 当且仅当 \(S\ge100\)(大 M 取 400 足够,\(S\) 的上界是 120 分)。\(b\) 不参与目标,只用于判定「这个策略在现实中会不会真的被封」。
在线上限 21 段(每天至少下线 3 段吃饭、换电、歇脚),风险预算 \(\beta\) 只在「适度违规」策略里生效。第一项约束是收益的天花板,第二项是风险的闸门——两者一起把可行域切成一条窄带。
2.4 规模与性质
24×2 个平台变量、3×24 个辅助 0-1 变量、3 个连续变量、1 个 PWL 约束,约束约 198 条。规模极小,根节点即证最优(gap 0,单次 0.02 s 级)。真正的工作量不在求解,而在扫参:本题共 38 次求解,其中二维热图 20 点、两个一维扫描各 7 点,全部在 3 s 内完成。 结构上这是一个「二次风险 + 线性收益」的凸资源分配问题:把时段按时段收益降序排,前 \(k\) 段双开就是最优结构——这解释了为什么最优解的重叠时段全部落在高峰(图 1)。
3 Gurobi 求解实现
3.1 建模要点
风险函数不能写进目标(Gurobi 不接受二次项与 0-1 变量混合的高效求解路径),用 PWL 一步到位:
THP = [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]
PP = [0.02 + 0.25*x*x for x in THP]
md.addConstr(th * T == gp.quicksum(o[t] for t in range(T)))
md.addGenConstrPWL(th, P, THP, PP, name="riskPWL")
md.addConstr(S == SCORE*gp.quicksum(o[t] for t in range(T)))
md.addConstr(S <= S_LINE - 1 + 400*b) # b=0 时压住 S
md.addConstr(S >= S_LINE * b) # b=1 时要求 S 越线
两个实现细节。第一,\(b\) 的两条约束方向必须是「\(S\) 大才逼 \(b\) 大」,如果写成对称的大 M,求解器会随便取 \(b=1\) 白拿一个封号标记。第二,\(\theta\) 必须写成等式 \(\theta T=\sum o_{t}\) 而不是不等式,否则 PWL 会在 \(\theta\) 上做手脚(把 \(\theta\) 取小、\(P\) 取小),目标值虚高。这两个坑都会让结果「看起来更好」,也正是风险模型最容易被做假的地方。
3.2 求解结果
表 2 三种策略与精确最优的对照($\pi=0.12$,$\Lambda=900$ 元,$s=5$ 分/段)
| 策略 | 双开 /段 | 重叠占比 /% | 毛收入 /元 | 封号概率 /% | 期望损失 /元 | 期望净收益 /元 | 违规分 |
|---|---|---|---|---|---|---|---|
| 全合规 | 0 | 0.0 | 736.0 | 2.0 | 18.0 | 718.0 | 0 |
| 适度违规(\(\beta=0.30\)) | 5 | 20.8 | 765.5 | 3.1 | 28.1 | 737.4 | 25 |
| 精确最优(折线目标) | 5 | 20.8 | 765.5 | 3.1 | 28.1 | 737.4 | 25 |
| 激进违规(全时段双开) | 21 | 87.5 | 824.3 | 21.4 | 192.4 | 631.9 | 105 |
四行读下来:全合规 718.0 元;适度违规 737.4 元;精确最优 737.4 元;激进违规 631.9 元。30% 预算解与折线目标下的精确最优完全重合(5 段 = 5 段),说明这条行业红线在本案的参数下不紧——真正的临界在 29.2%(见 4.8),红线比它只紧 0.8 个百分点。 激进策略是反面教材:毛收入最高(824.3 元),封号概率 21.4%、违规分 105 分越过审查线,期望净收益反而比全合规低 86.1 元。
4 结果分析

图 1 班次 24 个时段的单平台收益,红色为最优解选择双开的时段
4.1 收益的时段结构 图 1 的 24 根棒棒糖是全部「原料」:两段高峰(11:00—12:30、17:00—19:00)贡献 412.0 元,占全天 795.0 元的 51.8%。红色的双开时段全部落在高峰,一段也没浪费在平峰——这是凸风险的直接后果:风险按 \(\theta^{2}\) 计,不区分时段,所以必须把「违规额度」花在收益最高的时段上。 这也解释了为什么最优解是「结构性的」:先排序,再截断。

图 2 各时段的双开溢价与单平台收益近似成正比,高峰时段最诱人
4.2 溢价的分布 图 2 横轴是单平台时段收益、纵轴是双开溢价,两者严格共线(溢价 = 0.12·\(r_{t}\)),气泡面积表示该时段收益。这条直线就是诱惑的形状:高峰时段一段双开多赚 6.2 元,是平峰时段 2.2 元的近三倍。 但风险成本对每个时段是一样的(每段 5 分),因此「每分违规分买到的收益」在高峰是平峰的近三倍——这就是为什么最优解宁可放弃平峰在线,也要保住高峰双开。

图 3 三种策略的期望净收益与封号概率
4.3 三策略对比 图 3 是本例的核心:全合规 718.0 元 / 2.0%、适度违规 737.4 元 / 3.1%、激进违规 631.9 元 / 21.4%。柱高差异看着不大(19.4 元),但配上右轴的封号概率就看清楚了:从全合规到适度违规,概率从 2% 升到 3.1%,期望成本涨了 10.1 元,毛收入涨了 29.5 元,两账相抵净赚 19.4 元——违规的「净利润率」只有 65.7%。 再往激进走,成本涨得比收入快,-86.1 元是净亏。

图 4 三种策略的累计违规分曲线,激进策略第 20 段越过审查线
4.4 违规分是怎么攒起来的 图 4 左轴是累计违规分、右轴是毛收入(细线)。全合规那条一直贴着零轴;适度违规在第 5 段双开后停在 25 分,离 100 分的审查线还有 75 分余量;激进违规在第 20 段越过审查线,最终 105 分。审查线不是「会不会被抓」的开关,而是「被抓的代价有多确定」的分界:\(b=1\) 意味着不再有 2% 的运气成分,而是封号几乎必然。 图 4 里三条曲线的斜率差别,就是三种策略在风险上的全部差别。

图 5 收益溢价对最优净收益与最优重叠占比的影响
4.5 溢价灵敏度 图 5 左轴期望净收益、右轴最优重叠占比。溢价从 0 提到 0.36,最优净收益从 718.0 元升到 843.8 元,最优重叠占比从 0.0% 一路爬到 58.3%。这是一条「诱惑越大越敢违规」的单调曲线,而且爬升是加速的:溢价每加 0.06,\(\theta^{*}\) 的增量越来越大。 原因是边际条件 \(\pi r_{k}=\Lambda\cdot 0.5\theta/T\) 里右边也随 \(\theta\) 上升,只有更强的溢价才推得动。本案的 0.12 落在曲线中段偏左,\(\theta^{*}=20.8\%\)。

图 6 收益溢价与封号损失二维扫描下的期望净收益,黄框为本案参数
4.6 溢价 × 封号损失 图 6 是 5×4 热图:行是封号损失 \(\Lambda\)(900 元上下各两档),列是溢价。从左到右变深(溢价越高越值得违规),从下到上变浅(封号损失越大越不值)——两条方向相反的力量在中间形成了斜向的等高带。 同一列最上一行与最下一行差 23.7 元,说明 \(\Lambda\) 从 750 涨到 1200(+60%)时违规的净收益几乎被吃光。实务含义:与其纠结「平台查得严不严」,不如先估准「封号到底损失多少」——后者才是决定要不要违规的那个数。

图 7 班次在线时段上限对净收益与重叠占比的影响(第三维)
4.7 在线时长(第三维) 图 7 左轴净收益、右轴最优重叠占比,横轴是在线时段上限。从 15 段放到 21 段,净收益从 593.4 元升到 737.4 元,但重叠段数一动不动停在 5 段(20.8%→20.8%)——多出来的在线时段全是平峰,第 6 段以后的边际收益已经为负,最优解宁可单开也不双开。 这条曲线说明「多在线」和「多双开」是两种完全不同的扩张方式:前者是线性的、安全的,后者是加速付费的。

图 8 重叠占比与期望净收益的前沿,灰区为违规不如全合规的区间
4.8 前沿与临界值 图 8 横轴是重叠占比、纵轴是期望净收益,曲线是「按时段收益降序堆叠」并用精确二次式计风险的解析前沿(与 MIP 解的结构完全一致,只是风险口径更细)。\(k=0\) 时 718.0 元,\(k=7\) 时 738.9 元见顶,之后每多一段就往下掉。峰顶在 29.2%,正好落在 30% 红线下方 0.8 个百分点——行业经验值不是拍出来的,它就是边际等式 \(\pi r_{k}=\Lambda\cdot0.5\,\theta/T\) 的解。 灰色区(净收益低于全合规)要到 $ heta\approx55%$ 才出现,30%—55% 之间是一段「赚得少但仍然赚」的钝区;激进策略 87.5% 已经落到 631.9 元。

图 9 单班次净收益的累积分布:左端台阶的高度就是封号概率
4.9 净收益分布 图 9 是对「执行偏差」的蒙特卡洛(累计分布,台阶高度 = 概率):设实际重叠占比在计划值附近抖动(标准差 5 个百分点),抽 4000×240 个班次。三条分布的均值分别是 717.6、737.0、634.0 元,与确定性结果一致;但左尾完全不同:5% 分位数 709.7、736.5、-85.7 元,标准差 128.2、158.4、367.8 元。前两条在 5% 分位上还没被抽到封号(709.7 与 736.5 元),激进策略的 5% 分位却已经掉到 -85.7 元——同样 240 个班次里,它平均要被封 50 次。风险不是均值问题,是左尾问题:均值只差 19.4 元,最坏 5% 的班次差了 822.2 元。

图 10 第 k 个双开时段的边际净贡献,第 8 段起转负
4.10 边际贡献 图 10 把每个双开时段单独标价:第 1 段边际净贡献 5.8 元,第 7 段 0.2 元,第 8 段 -0.8 元转负。转负的位置就是临界值 29.2%——它不是一个「行业经验」,而是一条边际等式:\(\pi r_{k}=\Lambda\cdot0.5\,\theta/T\)。 代入第 8 段的数:左边溢价 5.0 元,右边新增期望损失 5.9 元,左边已经小于右边,所以停手。反过来看,如果封号损失只有 540.0 元(比如只封 2 天),同一段就仍然值得双开——这就是「临界值随 \(\Lambda\) 移动」的微观机制。
5 结论
- 封号风险的成本可以精确到元,而且比想象的小。 从全合规到适度违规,封号概率从 2% 升到 3.1%,期望损失从 18.0 元升到 28.1 元,只多付 10.1 元;同时毛收入多 29.5 元。净赚 19.4 元/班,一年 300 班约 5818 元——违规的收益是真的,只是薄。
- 临界重叠占比 29.2%,30% 的风险预算刚好把它包住。 精确前沿的峰顶在 29.2%,比红线低 0.8 个百分点;折线模型给出的最优是 20.8%(5 段),比精确解少 2 段、每班少赚 1.2 元。这个差不是误差,是 5 段折线外逼近的保守性:凸函数的分段线性永远高估风险,节点越稀,最优解被压得越靠前。风险函数的折线密度会直接改变决策,这是 PWL 建模里最容易被忽略的一处。
- 激进违规是净亏,亏在概率而不是亏在罚款。 全时段双开毛收入最高(824.3 元),但封号概率 21.4%、违规分 105 分越过审查线(\(b=1\)),期望净收益 631.9 元,比全合规低 86.1 元。「反正封号也就 900 元」这句话错在把概率当成 1:按 21% 摊到每班次,是 190 元的隐性成本。
- 最优解的结构是「把违规额度花在高峰」。 凸风险不区分时段,所以每分违规分必须买最贵的收益(图 1、图 2、图 10):最优解的 5 个双开时段全部落在高峰,平峰全部单开或下线。这条结论可以直接抄成操作规则:双开只开在 11:00—12:30 和 17:00—19:00。
- 决定要不要违规的不是「查得严不严」,是「封号损失多大」。 图 6 里 \(\Lambda\) 从 750 涨到 1200,违规的净收益被吃掉 23.7 元;图 5 里溢价从 0.06 涨到 0.30,净收益涨 89.4 元。两个参数里,\(\Lambda\) 是骑手估不准、平台也不会告诉你的那个——所以实操上应该先按保守值(900 元甚至更高)算,再决定敢不敢双开。
参考文献
[1] Gurobi Optimization LLC. Gurobi Optimizer Reference Manual[Z]. 2024.
[2] Kellerer H, Pferschy U, Pisinger D. Knapsack Problems[M]. Berlin: Springer, 2004.
[3] Martello S, Toth P. Knapsack Problems: Algorithms and Computer Implementations[M]. Chichester: John Wiley & Sons, 1990.
[4] 司守奎, 孙玺菁. 数学建模算法与应用[M]. 3 版. 北京: 国防工业出版社, 2021.

浙公网安备 33010602011771号