Post

复试-交通异常预测项目

复试-交通异常预测项目

问题与挑战

传统模型的不足之处:

  1. 仅关注静态特征 (如 POI、历史流量),忽略事件间的动态演化交互;
  2. 未有效处理数据不平衡, 难以捕捉稀有异常事件的内在模式; (最难的一点)
  3. 空间依赖建模单一, 未考虑多视角 (功能相似、碰撞历史、交通状况) 的网格交互;
  4. 动态特征演化易出现「过平滑」, 导致正常与异常事件的特征差异被掩盖。

任务的共性挑战:

  1. 数据不平衡: 异常事件在时空上极度稀疏, 模型易过度拟合正常事件, 难以学习异常模式;
  2. 静态 - 动态特征的联合建模: 静态特征 (如 POI) 是固定的, 动态特征 (如事件交互) 是时变的, 二者的依赖关系复杂, 需设计灵活的融合机制;
  3. 多视角空间依赖捕捉: 网格 (也就是某个地区) 间的影响不仅来自地理邻近, 还来自功能相似、碰撞历史关联等, 单一空间图无法全面覆盖; (另类的数据融合问题)
  4. 动态演化中的过平滑: 动态特征随时间更新时, 易因正常事件的累积导致异常与正常事件的特征趋同, 降低模型区分度;
  5. 训练效率与时间依赖的平衡: 动态演化具有强时间依赖, 传统批处理会破坏时序关系, 而单样本训练效率极低。

Pasted image 20260109152510.png

数据集

数据集: 纽约市 (NYC) 和芝加哥 (Chicago) 的真实时空数据集。

数据构成: 时空数据: 城市网格划分: 按经纬度将纽约市 (NYC) 排除公园 / 湖泊等无碰撞区域); 时间切片: 将时间按 1 小时为单位分割 (如 2016-06-01 16:00-17:00 为一个切片) 特征数据: 静态特征: POI (车库、学校、商业区等)、交通设施 (公交站、高速、信号灯)、天气 (降雨 / 积雪 / 温度); 动态特征: 交通流量 (出租车上下车位置 / 时间)、历史碰撞事件; 标签: 每个 “网格 - 时间切片” 的二元标签 (1 = 有碰撞异常, 0 = 无异常)

数据集预处理

数据预处理(3 步):

  1. 归一化:用 Max-Min 归一化将所有特征(如 POI 数量、交通流量)映射到 [0,1] 区间,避免因特征量级差异(如 POI 数为 “千级”,天气温度为 “十级”)导致模型偏向量级大的特征;

  2. 特征构造:计算 “差异特征 $D_t$” 对每个网格,用当前时刻的静态特征(如当前交通流量)减去 “过去 5 个正常时刻的特征均值”,公式为:\(D_t^l = O_t^l - \frac{1}{n} \sum_{i=1}^{n} O^l(t_i, \text{nor})\)($O_t^l$ 为网格 l 在 t 时刻的原始特征,n=5 为历史正常样本数);

    设计意图:异常事件的特征通常偏离正常状态,能放大这种偏离,帮助模型快速识别异常;

  3. 数据集划分:按 “时间顺序” 将数据分为训练集(60%)、验证集(20%)、测试集(20%),而非随机划分 —— 避免未来数据泄露到历史数据中(如用 2016 年 12 月数据训练,预测 2015 年数据,不符合真实场景)。

时空信息编码器

空间编码

数学原理

对经度进行以下操作,获得编码向量

\[\begin{aligned} PE(l_{lat}, 2k) &= \sin(\frac{l_{lat}}{10000^{2k/D}}) \\ PE(l_{lat}, 2k + 1) &= \cos(\frac{l_{lat}}{10000^{2k/D}}) \end{aligned} \quad k = 0, 1, ..., \frac{D}{2} - 1\]

同理,对纬度也进行如下操作

\[\begin{aligned} PE(l_{lon}, 2k) &= \sin(\frac{l_{lon}}{10000^{2k/D}}) \\ PE(l_{lon}, 2k + 1) &= \cos(\frac{l_{lon}}{10000^{2k/D}}) \end{aligned} \quad k = 0, 1, ..., \frac{D}{2} - 1\]

Q1:为什么要对位置信息进行编码操作?

A1:为了解决非线性,非周期,破坏语义信息三个问题

  • 非线性:经纬度和地理位置的对应关系并非线性表示
  • 非周期:空间邻近性的断裂,比如179.9和0
  • 破坏语义信息:都是首都,但是简单的经纬度并不能体现这一点(查的距离很远,但是特点可能相似,这时候需要我们用低频的角度去看)

Q2:为什么要对奇偶不同的k进行正余弦变换

A2:因为$PE_k(x) = \sin(\omega_k x)$是有歧义的,因为$\sin(x) = \sin(\pi - x)$所以不同位置可能编码一样,比如函数值1/2对应了30度和150度,但是分为$(\sin(\omega x), \cos(\omega x))$,则可以表示单位圆上的一个点

Q3:这个k是什么?

A3:表示频率的敏感度,高频的话就对一些细微的差距很敏感,可以用于识别小范围的变化(比如下个十字路口和这个十字路口的区别)。低频则是对更宏观的变化的识别(比如跨城市)

时间编码

输入:当前时间 $t$ 与历史事件起始时间 $t_1$ 的时间差(而非绝对时间,如“距离上次碰撞已过去 3 小时”);

编码逻辑:用指数衰减函数编码时间差,公式为:$ZE(t, 2k) = \sin((t - t_1)/10000^{2k/D})$

\[ZE(t, 2k + 1) = \cos((t - t_1)/10000^{2k/D})\]

最终得到时间编码向量 $ZE(t) \in \mathbb{R}^{2D}$;

Q:为什么用相对时间?而非绝对时间,每天的绝对时间没有特征么?比如早晚高峰时间?

绝对思维太笨了,想对思维更灵活 风险是“事件驱动”,且随时间间隔衰减,比如某一时刻高速路上发生了车祸,后面发生车祸的概率也会增大,比如追尾

静态嵌入(这个地方本来就危险不危险?)

  1. 输入特征: 原始静态特征$O_t \in \mathbb{R}^{N \times D}$ (N 为网格数, D 为特征维度, 如 POI、天气)、差异特征$D_t \in \mathbb{R}^{N \times D}$ (当前与历史正常的偏差);

    \(D_{t}^{l} = O_{t}^{l} - \frac{1}{n}\sum_{i=1}^{n}{O^{l}}_{(t_{i}, nor)}\) 这里的n取5,nor表示要挑数据中的正常状态的特征,应该是按例此刻最近的五个正常的时间

  2. 特征融合: 将$O_t$与$D_t$拼接, 得到“静态特征基础向量”$O_t \oplus D_t \in \mathbb{R}^{N \times 2D}$ ($\oplus$表示拼接);

这里就是单纯的把两个向量拼在一起了

  1. 加入时空编码: 将“静态特征基础向量”与“空间编码$PE$”“时间编码$ZE$”再次拼接, 得到最终静态嵌入$X_t^s \in \mathbb{R}^{N \times 2D}$ (注: 此处维度仍为 2D, 因$PE$和$ZE$的信息已通过融合融入, 实际计算中会调整维度匹配);

这里的维度不匹配的情况就体现了融合,比如2048到1024 ——两个格子取平均塞进去,如果1024到2048,那就把一个格子平分成两份

$X_t^s$是一个N行2D列的矩阵,行代表网格,D代表特征,所以每一行就是代表某个网格里面的静态特征(不全是静态,是由原始静态特征$O$,动态的差异特征$D_t$,动态的时空编码$PE+ZE$共同组成的“综合环境状态”),举个例子 \(X_t^s = \begin{bmatrix} \text{网格1的特征向量} \\ \text{网格2的特征向量} \\ \vdots \\ \text{网格1000的特征向量} \end{bmatrix} = \begin{bmatrix} 0.12 & -0.56 & 0.03 & \dots & 0.99 \\ -1.20 & 0.45 & 0.88 & \dots & -0.01 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0.05 & 0.11 & -0.32 & \dots & 0.77 \end{bmatrix}_{1000 \times 128}\)

创新点:在融合的时候引入深度学习模型!

动态演化嵌入(解决数据不平衡和动态特征过平滑的问题)

通过“Update-Decay”机制,解决数据不平衡和动态特征过平滑的问题。 目的:记住稀有异常,遗忘冗余正常,保留事件的演化规律

不平衡:静态数据过多 过平滑:信息太多,导致好不容易来个动态的特征,也无法激起什么波动

创新点:

加入自适应平滑门

解释: 时间序列:[11, 13, 9, 13, 15, …] ← 有噪声抖动!(变化一般不会这么急剧,可能是传感器异常) 真实情况: [11, 13, 11, 13, 15, …] ← 应该更平滑

让动态特征更加稳定可靠, 增强鲁棒性 (泛化能力/通用性)。

具体操作

  1. 动态嵌入初始状态

训练开始时,所有网格的动态嵌入\(X_{t=0}^d \in \mathbb{R}^{N \times 2D}\)初始化为 0 向量 —— 表示“无历史事件记忆”。

空白向量会和流量等动态特征相加。

  1. Update 操作(触发条件:网格 $l$ 在 $t$ 时刻有碰撞异常,标签 $y=1$)

计算逻辑:\(X_{(t,l)}^d = \sigma(X_{(t,l)}^s \cdot W_1 + X_{(t-1,l)}^d \cdot W_2)\)

其中:$\sigma$ 为 sigmoid 激活函数(控制输出在 $[0,1]$),$W_1 \in \mathbb{R}^{2D \times 2D}$、$W_2 \in \mathbb{R}^{2D \times 2D}$ 为可训练权重矩阵;

如果出事了,这个动态特征就会记住这个“创伤” 可训练矩阵的意思是,这个参数是会变化的,通过反向传播来改变

  1. Decay 操作(触发条件:网格 $l$ 在 $t$ 时刻无异常,标签 $y=0$)

计算逻辑:\(X_{(t,l)}^d = X_{(t-1,l)}^d \cdot e^{-\phi \cdot (t-t_0)}\)

对可能出事的路口(创伤)的遗忘过程

其中:$\phi$ 为衰减常数(论文设为 2),$t_0$ 为网格 $l$ 上一次发生异常的时间;

问题

  1. 为什么更新过程有静态特征,而衰减过程没有静态特征?

    • 静态特征是“风险的基础盘”,不同网格面对相同动态变化表现形式应该是不一样的(无人的道路撞车的影响和闹市区撞车的影响不同,后者可能会导致堵车很长时间)
  2. 为什么衰减的时候没有静态特征

    • 遗忘冗余正常,还可以保留事件的时间演化规律
    • 没有新事故,环境特征就不再起作用了,剩下的只是记忆随时间的自然衰减,环境(静态特征)只负责“制造”风险,而不负责“维持”风险(如果老师按照1的思路拷打你,既然不同网格对动态变化的反应不一样,那衰减不应该也不一样吗?回答就是:尝试加入静态特征,但是效果不如不加好,因为会导致动态特征过平滑)
    • Decay的目标是遗忘,如果加上了静态特征的话,你要多久才能遗忘干净呢
  3. 如何处理正常数据的?(如何平衡正常和异常数据的?/如何淡化正常数据的影响?/如何解决数据类型不平衡问题?)

    • 强调Decay设计,通过Update-Decay共同协调

空间相互影响表示学习

注意力机制多图卷积(Multi-GCN with Attention)(同样为了防止过平滑)

传统的图卷积(GCN)往往是“一视同仁”地取平均值(大家都听),而这里引入注意力机制(Attention)就是为了“偏心”——谁跟我像,谁跟我关系铁,我就多听谁的。

为每个空间图设计“空间注意力块(SP 块)”,学习邻居网格的“贡献权重”(避免平等对待所有邻居),具体流程:

  1. 输入:静态嵌入序列 \(X_s = [X_{t-T+1}^s, ..., X_t^s] \in \mathbb{R}^{T \times N \times 2D}\) (T=5 为历史时间切片数)、动态嵌入序列 \(X_d = [X_{t-T+1}^d, ..., X_t^d] \in \mathbb{R}^{T \times N \times 2D}\);

  2. 注意力权重计算 (以动态嵌入$X_d$为例,其实静态特征也要这样过一遍):

  • 定义 Query (查询)、Key (键)、Value (值):

    • \[Q_d = X_d \cdot W_{dq}\]
    • \[K_d = X_d^{(k+1)} \cdot W_{dk}\]
    • $V_d = K_d$ (值与键来源一致,简化计算)

Q1:为什么K和V设计能一致(邻居动态键和动态值设置的相等,但是不怎么影响效果?)两个都可以直接拿数值表示。

注意,V和K通常是不一样的,K表示表情,V表示内容,但有可能K和V表达的意思比较相近,比如一本书的封面可以判断一本书的大概内容,但是有可能书就只有一页封面,那么内容不就和封面一样了,也就是可以看作V=K

(\(W_{dq} \in \mathbb{R}^{2D \times 2D}\)为权重矩阵),权重,一个学习的人,可以变化的矩阵 ($X_d^{(k+1)}$为邻居网格的动态嵌入,\(W_{dk} \in \mathbb{R}^{2D \times 2D}\))

  • 计算注意力权重 (Softmax 归一化):$A_d = \text{Softmax}(\frac{Q_d \cdot K_d^T}{\sqrt{2D}}) \in \mathbb{R}^{T \times N \times 1 \times (k+1)}$ ($\sqrt{2D}$为缩放因子,避免权重过大)
  • 邻居特征聚合:$X_d’ = A_d \cdot V_d \in \mathbb{R}^{T \times N \times 2D}$ (将邻居特征按权重加权求和)

Q:为什么两个地方越像,注意力越大?

这句话是错的,因为取决于你对数据的训练方式!在本次任务中,两个地方的特点越近似,我们就越需要注意!

仅仅从向量角度来说

我们在计算注意力时用的是 点积(Dot Product):$Q \cdot K^T$ 从几何数学上讲:

  • 方向一致(相似): 当两个向量指向同一个方向,它们的点积最大。
  • 方向垂直(无关): 点积为 0。
  • 方向相反(差异): 点积为负。
  1. 静态嵌入$X_s$执行相同操作, 得到$X_s’$;

  2. 残差连接: 为避免梯度消失, 将聚合后的特征与原始特征相加, 公式为: \(X_f^1 = X_s' \cdot W_s + X_d' \cdot W_d + [X_s; X_d]\)

    上角标代表这是第几次加工 \((W_s, W_d \in \mathbb{R}^{2D \times 2D} \text{为权重}, [X_s; X_d] \text{为原始特征拼接})\)

通过注意力机制,模型能自动判断 “哪个邻居对当前网格的风险影响更大”(如某邻居近期频繁异常,其权重更高)。

为每个城市构建 3 个无向图, $G = (V,A)$ ($V$ 为网格节点, $A$ 为邻接矩阵) 为邻接矩阵), 分别对应不同关联维度。

功能相似图 $G_F$: 基于 POI 分布相似度 (如 “均为商业区” 的网格更相关)

碰撞关联图 $G_A$: 基于历史碰撞记录相似度 (如 “碰撞次数、伤亡情况相似” 的网格更相关)

交通状况图 $G_T$: 基于交通设施分布相似度 (如 “均为高速密集区” 的网格更相关)

多图联合学习

将三类图 $(G_F, G_A, G_T)$ 的 SP 块输出特征投影到统一空间, 公式为:

\[\hat{X}_f = X_f^F \cdot W_{GF} + X_f^A \cdot W_{GA} + X_f^T \cdot W_{GT}\]

其中: $X_f^F, X_f^A, X_f^T$ 分别为三类图的 SP 块输出, \(W_{GF}, W_{GA}, W_{GT} \in \mathbb{R}^{4D}\) 为可训练权重 (反映每类图的贡献度) ;通过学习权重可以让模型知道“哪类空间关联对预测更重要”

Q:这里的Xf Xa Xt都是怎么得到的?

  • 模型在计算注意力 $A_d$ 时,只看那些“POI 功能相似”的邻居(比如找其他商业区)。

  • 然后套用残差公式:$X_f^F = \text{Attention}(G_F) \dots + [X_s; X_d]$。

Q:4D是怎么来的

注意到 $W \in \mathbb{R}^{4D}$。

还记得上一张图里的残差连接公式吗?

\[X_f^1 = \dots + [X_s; X_d]\]

这里有一个 $[X_s; X_d]$ 的拼接操作。

  • $X_s$ 是 $2D$ 维。

  • $X_d$ 是 $2D$ 维。

  • 拼在一起就是 $4D$ 维

特征融合与预测

整合“时空演化特征”和“空间关联特征”,通过时序建模输出每个网格的异常概率。具体操作(两步):

  1. FC-LSTM 层(捕捉时空依赖):

输入:多图联合特征$\hat{X}_f \in \mathbb{R}^{T \times N \times 4D}$(T=5 为时间切片数,N为网格块数,4D 为特征维度);

作用:同时建模“时间维度的演化”(LSTM 层)和“特征维度的关联”(FC 层):

FC 层:将每个网格的 4D 特征映射为非线性表示,捕捉“静态 - 动态特征的交互”(如“雨天 + 近期异常”的组合风险);理解为加了个激活函数

LSTM 层:处理 T 个时间切片的特征,捕捉“时间序列依赖”(如“连续 2 小时流量异常→下 1 小时碰撞风险高”);

输出:LSTM 的隐藏状态$H_t \in \mathbb{R}^{N \times 4D}$(包含 N 个网格的时空融合特征)。

  1. 全连接层:(前馈神经网络)

输入:LSTM 隐藏状态$H_t$;

计算逻辑:通过全连接层 + Sigmoid 激活函数,将特征映射为 [0,1] 区间的概率:\(\hat{Y}_{t+1} = \sigma(H_t \cdot W_3 + b)\)

其中:$W_3 \in \mathbb{R}^{4D \times 1}$为权重矩阵,b 为偏置,\(\hat{Y}_{t+1} \in \mathbb{R}^N\)为每个网格的“下一时间切片异常概率”;

损失函数

根据目的的不同,设置不同的损失函数。

模型训练的“优化目标”:同时解决 数据不平衡(异常样本少); 动态特征过平滑。

损失函数设计成了两部分,第一部分是利用交叉熵解决数据不平衡,第二部分是动态损失函数,通过让变换更加突出,解决数据过平滑的问题

1.改进 Focal Loss(解决数据不平衡)仅通过“难度权重”关注难分类样本,未考虑动态特征的演化;

\[L_F = -\alpha \cdot (1 - \hat{Y})^\gamma \cdot Y \cdot \log(\hat{Y}) - (1 - \alpha) \cdot \hat{Y}^\gamma \cdot (1 - Y) \cdot \log(1 - \hat{Y})\]

见到log条件反射般的想到交叉熵(解决数据不平衡,学着学着趋同的情况,增加熵,保持分离度)

其中:$\alpha = 0.25$(平衡正负样本权重),$\gamma = 2$(放大难分类样本的损失),$\epsilon = 0.9$(对预测概率 > 0.9 的易分类样本,损失衰减);

2.动态损失(解决过平滑)

计算逻辑:仅在 Update 操作(y=1)时生效,公式为:$$L_D = \max(0, a - X_{(t,l)}^d - X_{(t-1,l)}^d )$$

其中:a=6 为阈值(论文实验确定);

3.最终损失函数

将两种损失加权融合,公式为:$L = L_F + \lambda \cdot L_D$

模型训练与优化

  1. 采用按时间顺序批处理训练策略,不采用随机处理以防破坏时序。
  2. 优化器采用Adam(自适应学习率,(觉得太慢了就自己调大),适合大规模时空数据)。
  3. 采取早停策略,验证集性能连续 5 个 epoch 不提升则停止(模拟卷写了几张发现分数提不上来了,可以直接去考试了),降低训练开销并防止过拟合训练。
  4. 最终输出:每个城市网格在“下一个时间切片”(如 1 小时后)的异常概率,预测判断:概率 > 0.5 → 预测为“异常”(需预警),否则为“正常”。

Q&A

为什么两个地方越像,注意力越大?

这个结论仅是对本项目适用,所以这句话是错的,因为取决于你对数据的训练方式!

  1. 相似性是由“可学习的矩阵”定义的

在本项目中,计算注意力的 Q(查询)和 K(键)并不是原始数据,而是经过了线性变换:

• Qd​=Xd​⋅Wdq​

• Kd​=Xd(k+1)​⋅Wdk​

这里的 W 被来源描述为“一个学习的人,可以变化的矩阵”

你的理解正确之处: 在几何上,点积 Q⋅KT 确实在向量方向一致时最大。但是,方向是否一致是由 W 决定的

本项目的体现: 通过反向传播,模型会不断调整 W 的数值。如果训练数据告诉模型“某个看似不相关的邻居对预测碰撞更有帮助”,W 就会演化成能将这两个特征映射到同一方向的形态,从而产生高注意力。

  1. 训练目标:从“物理相似”转向“风险相关”

本项目的组合损失函数 L=LF​+λ⋅LD​ 强制改变了模型“分配注意力”的逻辑,:

打破“过平滑”: 传统的训练方式容易让所有地块特征趋同(越学越像),导致注意力失去分辨力,。

动态损失 (LD​) 的干预: 该损失函数专门用于“让变换更加突出”。它强迫模型在 Update 过程中,必须捕捉到那些即使在原始数据上变化细微、但在风险层面极其重要的动态波动,。

结果: 最终模型学习到的“相似”,不再是地理位置或 POI 数量的单纯接近,而是“风险演化规律的相似”

  1. 多视角图的权重分配

本项目构建了三类图(功能相似图 GF​、碰撞关联图 GA​、交通状况图 GT​),每类图都有自己的权重矩阵,。

训练的导向性: 实验证明,GA​(基于历史碰撞记录)的贡献最大。

理解: 即使两个地方在功能(GF​)上极度相似(比如都是公园),但如果训练过程中发现公园的碰撞特征对预测没有帮助,模型就会通过调整权重 WGF​,降低这部分“相似度”在最终决策中的注意力占比

为什么更新过程有静态特征,而衰减过程没有静态特征?

  • 静态特征是“风险的基础盘”,不同网格面对相同动态变化表现形式应该是不一样的(无人的道路撞车的影响和闹市区撞车的影响不同,后者可能会导致堵车很长时间)

为什么衰减的时候没有静态特征

  • 遗忘冗余正常,还可以保留事件的时间演化规律
  • 没有新事故,环境特征就不再起作用了,剩下的只是记忆随时间的自然衰减,环境(静态特征)只负责“制造”风险,而不负责“维持”风险(如果老师按照1的思路拷打你,既然不同网格对动态变化的反应不一样,那衰减不应该也不一样吗?回答就是:尝试加入静态特征,但是效果不如不加好,因为会导致动态特征过平滑)
  • Decay的目标是遗忘,如果加上了静态特征的话,你要多久才能遗忘干净呢

如何处理正常数据的?(如何平衡正常和异常数据的?/如何淡化正常数据的影响?/如何解决数据类型不平衡问题?)

  • 强调Decay设计,通过Update-Decay共同协调
This post is licensed under CC BY 4.0 by the author.