铁路"买短乘长"分析 — 数据打通与防控体系搭建方案
一、现状与目标
| 维度 | 现状 | 目标 |
|---|---|---|
| 数据存储 | 票务、闸机数据在 MySQL 中独立存储 | 建立统一关联视图 |
| 识别规则 | 无 | 从零搭建识别规则引擎 |
| 分析目的 | — | 防控策略优化 |
二、数据打通方案
2.1 关联键设计
两个系统之间的关联是整个方案的核心难点。需要通过多字段组合进行模糊匹配:
票务系统 ←─────关联─────→ 闸机系统
│ │
├─ 证件号(脱敏hash) ←→ 证件号(脱敏hash) 主键
├─ 车次 ←→ 车次 辅助
├─ 乘车日期 ←→ 进站日期 辅助
└─ 票面到站 ←→ 实际出站 对比字段
2.2 建表与关联SQL方案
步骤1:统一数据视图
-- 票务数据视图
CREATE VIEW v_ticket AS
SELECT
ticket_id,
passenger_hash, -- 证件号脱敏hash
train_no, -- 车次
travel_date, -- 乘车日期
from_station, -- 票面起站
to_station, -- 票面到站
seat_class, -- 席别
ticket_price, -- 票价
purchase_channel, -- 购票渠道
purchase_time -- 购票时间
FROM ticket_system.tickets
WHERE status = '已出票'; -- 排除退票
-- 闸机数据视图
CREATE VIEW v_gate AS
SELECT
gate_id,
passenger_hash, -- 证件号脱敏hash
train_no, -- 车次
travel_date, -- 乘车日期
entry_station, -- 进站
entry_time, -- 进站时间
exit_station, -- 出站
exit_time -- 出站时间
FROM gate_system.gate_records
WHERE entry_time IS NOT NULL
AND exit_time IS NOT NULL;
步骤2:关联匹配
-- 通过 证件hash + 车次 + 日期 进行关联
CREATE VIEW v_ticket_gate_joined AS
SELECT
t.ticket_id,
t.passenger_hash,
t.train_no,
t.travel_date,
t.from_station AS ticket_from,
t.to_station AS ticket_to,
g.entry_station AS actual_from,
g.exit_station AS actual_to,
t.ticket_price,
t.seat_class
FROM v_ticket t
INNER JOIN v_gate g
ON t.passenger_hash = g.passenger_hash
AND t.train_no = g.train_no
AND t.travel_date = g.travel_date;
步骤3:异常行为识别
-- 买短乘长嫌疑记录
CREATE VIEW v_short_long_suspect AS
SELECT
*,
CASE
WHEN actual_to != ticket_to
AND station_order(actual_to) > station_order(ticket_to)
AND supplement_id IS NULL -- 无补票记录
THEN '买短乘长嫌疑'
ELSE '正常'
END AS suspect_flag
FROM v_ticket_gate_joined
LEFT JOIN supplement_records s
ON ticket_id = s.ticket_id;
station_order()为自定义函数,根据线路方向返回站序号,用于判断实际到站是否超出票面到站。
三、识别规则引擎(从零搭建)
3.1 规则分层架构
┌─────────────────────────────────────┐
│ 规则引擎(三层) │
├─────────────────────────────────────┤
│ L1 确定性规则 → 命中即标记 │
│ L2 统计性规则 → 概率评分 │
│ L3 行为模式规则 → 画像匹配 │
└─────────────────────────────────────┘
3.2 L1 确定性规则(硬规则)
命中即判定,零误判:
| 规则ID | 规则描述 | SQL条件 |
|---|---|---|
| L1-01 | 实际出站超出票面到站,且无补票记录 | actual_to > ticket_to AND supplement IS NULL |
| L1-02 | 实际进站与票面起站不一致 | actual_from != ticket_from |
| L1-03 | 票面区间为相邻站,但实际乘坐超过3个区间 | station_diff(ticket_to, ticket_from)=1 AND station_diff(actual_to, actual_from)>3 |
3.3 L2 统计性规则(软规则)
计算嫌疑评分,设定阈值:
| 规则ID | 规则描述 | 评分逻辑 |
|---|---|---|
| L2-01 | 单次行程票价差额占比 |
(应补票价 - 已付票价) / 应补票价 > 50% → +30分 |
| L2-02 | 乘车频率异常 | 同一乘客月内短途购票>5次 → +20分 |
| L2-03 | 购票-乘车时间差异常 | 开车前30分钟内购票且短途 → +15分 |
| L2-04 | 高发线路匹配 | 该车次/区段历史嫌疑率>10% → +10分 |
评分阈值:
| 总分 | 等级 | 处置建议 |
|---|---|---|
| ≥60 | 高风险 | 列入重点巡查名单 |
| 30-59 | 中风险 | 加强随机查验 |
| <30 | 低风险 | 常规流程 |
3.4 L3 行为模式规则(画像规则)
| 规则ID | 规则描述 | 识别方式 |
|---|---|---|
| L3-01 | 惯犯识别 | 同一乘客历史L1命中≥3次 |
| L3-02 | 固定线路模式 | 固定车次+固定短途区间,重复出现 |
| L3-03 | 规避查验模式 | 仅在查票率<5%的车次出现 |
四、防控策略优化框架
4.1 策略矩阵
| 策略类型 | 具体措施 | 触发条件 | 预期效果 |
|---|---|---|---|
| 技术防控 | 闸机出站校验票面到站 | L1规则命中 | 前端阻断 |
| 动态查验 | 高风险车次增加巡检频次 | L2评分≥30 | 提高查处率 |
| 信用惩戒 | 累计违规记入信用档案 | L3惯犯 | 降低再犯率 |
| 票价优化 | 调整短途票价梯度,压缩套利空间 | L2-01高发线路 | 消除经济诱因 |
| 限购策略 | 高风险乘客限制短途购票频次 | L3-01命中 | 从源头控制 |
4.2 防控效果评估闭环
数据打通 → 规则识别 → 策略执行 → 效果监测 → 规则迭代
↑ │
└────────────────────────────────────────┘
关键评估指标:
| 指标 | 定义 | 计算方式 |
|---|---|---|
| 查出率 | 查验中发现的嫌疑比例 | 嫌疑人数 / 总查验人数 |
| 嫌疑率 | 总体买短乘长行为占比 | 嫌疑订单数 / 总订单数 |
| 补票率 | 主动补票占比 | 主动补票数 / 嫌疑订单数 |
| 再犯率 | 处罚后再次违规比例 | 二次违规人数 / 已处罚人数 |
| 票款损失率 | 逃票造成损失占比 | 未收票款 / 应收总票款 |
五、实施路线图
| 阶段 | 周期 | 任务 | 交付物 |
|---|---|---|---|
| Phase 1 | 第1-2周 | 数据探查与质量评估 | 两系统字段清单、缺失率报告 |
| Phase 2 | 第3-4周 | 数据打通与关联匹配 | 统一关联视图、匹配率报告 |
| Phase 3 | 第5-6周 | L1规则开发与验证 | 确定性规则集、命中数据 |
| Phase 4 | 第7-8周 | L2/L3规则开发与评分 | 评分模型、风险名单 |
| Phase 5 | 第9-10周 | 防控策略设计与试点 | 策略方案、试点效果评估 |
| Phase 6 | 第11-12周 | 全量上线与监控看板 | 防控系统、效果监测看板 |
六、需要进一步确认的问题
- 两系统的证件号字段是否格式一致? 若格式不同(如一方存明文一方存加密),需增加清洗转换步骤
- 是否已有站序映射表? 判断"实际到站是否超出票面到站"需要线路方向的站序信息
- 闸机覆盖率如何? 无闸机小站的数据缺失会直接影响L1规则的召回率
- 是否有权限创建跨库视图? 票务与闸机若在不同MySQL实例,需确认跨库查询或数据同步方案