\chapter{多时间尺度预警模型设计}

本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略、超参数配置和评估框架。

\section{模型选型论证}

本研究选择LSTM-Attention和XGBoost作为对比模型组，基于以下考量：

\begin{itemize}
    \item \textbf{LSTM}：作为时序建模的经典深度学习方法，擅长捕捉序列中的长距离依赖模式。气象数据天然具有时序自相关结构（今天的气温与昨天和前天高度相关），LSTM的门控机制设计使其成为此类数据的自然选择。
    \item \textbf{注意力机制}：高温健康风险的关键时间点（如温度急剧升高的日期）在14天窗口中的位置是不固定的。自注意力机制无位置偏置的特性，使其能自适应地关注窗口内任意位置的关键信号。
    \item \textbf{XGBoost}：作为结构化/表格数据上的SOTA方法，在许多Kaggle竞赛和工业应用中已证明其优于深度学习方法。其树结构天然适合类别不平衡数据——每棵树可学习特定的类别划分规则，多样性集成有助于覆盖少数类。
    \item \textbf{对比价值}：「序列Deep Learning vs 展平Tree Ensemble」是环境健康预测中的典型技术路线分歧。通过在同一数据集上进行严格对比，本研究为该领域的方法选择提供实证参考。
\end{itemize}

\section{LSTM-Attention模型设计}

\subsection{总体架构}

模型采用「输入投影$\rightarrow$BiLSTM编码$\rightarrow$多头自注意力$\rightarrow$全局池化$\rightarrow$多任务输出」的架构范式：

\begin{enumerate}
    \item 输入投影层：19维$\rightarrow$128维线性映射
    \item 2层双向LSTM：隐藏维128，时间维14$\rightarrow$256（双向拼接）
    \item LSTM投影层：256$\rightarrow$128维，衔接注意力
    \item 4头自注意力：头维32，捕捉关键时间步
    \item 全局平均池化：时间维压缩至128维固定向量
    \item 3个独立输出头：128$\rightarrow$32$\rightarrow$4（对应三级风险+正常）
\end{enumerate}

\subsection{参数量计算}

模型总参数量为983,628，按模块分布如下：

\begin{table}[H]
\centering
\caption{LSTM-Attention模型参数分布}
\begin{tabular}{lcr}
\toprule
\textbf{模块} & \textbf{参数量} & \textbf{占比} \\
\midrule
Input Projection (19$\rightarrow$128) & 2,432 + 128 = 2,560 & 0.3\% \\
BiLSTM Layer 1 & 4 × [(128+128)×128 + 128] × 2 & 65.9\% \\
BiLSTM Layer 2 & 4 × [(256+128)×128 + 128] × 2 &  \\
LSTM Projection (256$\rightarrow$128) & 32,896 + 128 = 33,024 & 3.4\% \\
MHA (4 heads, d\_k=32) & 4 × 3 × (128×32) + (128×128) & 6.6\% \\
3 Output Heads (128$\rightarrow$32$\rightarrow$4) & 3 × [(128×32+32) + (32×4+4)] & 1.3\% \\
\bottomrule
\textbf{总计} & \textbf{983,628} & 100.0\% \\
\bottomrule
\end{tabular}
\end{table}

LSTM层占参数量的约三分之二，符合序列模型中以循环层为主导的典型分布。注意力层仅占6.6\%的参数，但其在决定模型行为方面起关键作用——它决定了哪些时间步的信息被传递到输出头。

\subsection{输入投影层}

将19维气象特征通过全连接映射至128维：

\begin{equation}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}, \quad \mathbf{X} \in \mathbb{R}^{B \times 14 \times 19}
\end{equation}

投影至128维是性能与效率的折中——更高维度（256/512）会显著增加LSTM的计算量，更低维度（64）可能导致信息瓶颈。

\subsection{BiLSTM编码层}

使用2层堆叠双向LSTM：

\begin{itemize}
    \item 输入维：128（经投影层）
    \item 隐藏维：128（每方向）
    \item 双向输出维：256（前向128 + 后向128连接）
    \item 层间Dropout：0.3
    \item 激活函数：tanh（LSTM标准）
\end{itemize}

2层堆叠使低层LSTM捕获局部时序模式（如日际温度波动），高层LSTM整合这些模式为更抽象的序列表示。Dropout作用于层间而非时间步内，避免破坏LSTM的时序连续性。

\subsection{多头自注意力层}

在LSTM输出的14个时间步上施加4头自注意力：

\begin{itemize}
    \item 头数$h=4$：提供4个不同的「视角」审视序列
    \item 每头维度$d_k=32$：128/4，平衡表达能力与计算量
    \item 无位置编码：LSTM输出已编码时序位置信息
\end{itemize}

注意力层后接残差连接和层归一化（LayerNorm），前者提供恒等映射路径缓解深层网络的优化难度，后者稳定训练过程中的激活统计特性。

\subsection{多任务输出层}

三个输出头共享LSTM和注意力层的表示，各自通过2层FC（128$\rightarrow$32$\rightarrow$4）输出对应时间尺度的4类logits。

多任务共享表示的理论依据是：三个时间尺度的风险预测都依赖于同一底层物理机制（温度-湿度-健康的关联），共享特征提取有助于知识复用和正则化，减少各任务的过拟合风险。

\section{训练策略与超参数配置}

\subsection{损失函数：Focal Loss}

采用Focal Loss（$\alpha=0.5, \gamma=2.0$），详见第2.5节。三任务总损失为等权重平均：

\begin{equation}
\mathcal{L}_{\text{total}} = \frac{1}{3}\left(\mathcal{L}_{\text{short}} + \mathcal{L}_{\text{medium}} + \mathcal{L}_{\text{long}}\right)
\end{equation}

\subsection{优化器与调度器}

\begin{itemize}
    \item 优化器：AdamW（lr=$1\times10^{-3}$, weight\_decay=$1\times10^{-4}$, $\beta_1=0.9$, $\beta_2=0.999$）
    \item 学习率调度：ReduceLROnPlateau（mode='min', factor=0.5, patience=5）
    \item 梯度裁剪：全局范数上限1.0
    \item 早停：patience=15 epoch（验证损失无改善时触发）
    \item 最大训练轮数：50
    \item Batch Size：32
\end{itemize}

\subsection{训练超参数调优记录}

针对极度不平衡问题，进行了6轮系统调优实验：

\begin{table}[H]
\centering
\caption{LSTM训练超参数调优实验记录}
\label{tab:lstm_tuning}
\begin{tabular}{cccccc}
\toprule
\textbf{轮次} & \textbf{损失函数} & \textbf{类别权重} & \textbf{Batch} & \textbf{采样器} & \textbf{结果} \\
\midrule
1 & Focal($\alpha$=0.5,$\gamma$=2) & 无 & 32 & 无 & Acc=0.940, 全预测0类 \\
2 & Focal($\alpha$=0.5,$\gamma$=3) & [1,3,5,8] & 32 & 无 & Acc=0.940, 全预测0类 \\
3 & Focal($\alpha$=0.75,$\gamma$=3) & 1/count 反比 & 16 & 无 & Acc=0.025, 全预测3类 \\
4 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 64 & 无 & Acc=0.025, 全预测3类 \\
5 & Focal($\alpha$=0.5,$\gamma$=2) & 无 & 32 & 1/√count 采样 & Acc=0.940, 全预测0类 \\
6 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 16 & 1/√count 采样 & Acc=0.025, 收敛缓慢 \\
\bottomrule
\end{tabular}
\end{table}

调优揭示了一个困境：无权重时模型收敛至多数类；有权重或采样时模型过度预测少数类。两头极端之间的「中间地带」极窄——一旦权重超过阈值，优化轨迹迅速跳变至对端。这一现象可解释为：交叉熵损失的梯度场在极度不平衡数据上存在两个支配性的吸引域（全部预测0类或全部预测3类），两者之间的鞍点难以维持。

\section{XGBoost基线模型}

\subsection{模型配置}

\begin{itemize}
    \item 估计器数量（n\_estimators）：200
    \item 最大深度（max\_depth）：6
    \item 学习率（learning\_rate）：0.05
    \item 子采样率（subsample）：1.0（使用全部样本）
    \item 列采样率（colsample\_bytree）：1.0
    \item 正则化：$\lambda=1$（L2），$\gamma=0$（最小分裂增益）
    \item 目标函数：multi:softmax（4类多分类）
    \item 评估指标：mlogloss + merror
    \item 设备：CUDA（GPU加速）
    \item 分类器数量：3个独立模型（short/medium/long）
\end{itemize}

\subsection{输入特征处理}

XGBoost不原生处理三维时序数据，将(N, 14, 19)的序列展平为(N, 266)的扁平特征矩阵。这种展平策略保留了全部特征信息但丢失了时序的序关系（order relationship）。XGBoost通过树的分裂规则间接捕获特征交互，不依赖时序顺序。

\section{评估指标设计}

\subsection{宏平均F1（Macro F1）——首要指标}

宏平均F1对每个类别独立计算F1后取算术平均，给予所有类别同等权重：

\begin{equation}
\text{F1}_c = \frac{2 \times \text{Precision}_c \times \text{Recall}_c}{\text{Precision}_c + \text{Recall}_c}, \quad c \in \{0, 1, 2, 3\}
\end{equation}
\begin{equation}
\text{Macro F1} = \frac{1}{4}\sum_{c=0}^{3} \text{F1}_c
\end{equation}

选择Macro F1而非准确率的原因：在95\%-5\%的类别分布下，准确率高度偏向多数类（全预测0类可获95\%准确率但F1≈0.25）。Macro F1通过等权平均消除了这一偏差。

\subsection{辅助指标}

\begin{itemize}
    \item \textbf{混淆矩阵}：$\mathbf{C} \in \mathbb{N}^{4\times 4}$，元素$C_{ij}$为真实类$i$被预测为类$j$的样本数。提供模型在各风险等级的详细诊断信息
    \item \textbf{准确率}：作为参考指标报告，但不作为模型选择依据（因其在不平衡数据上的欺骗性）
\end{itemize}

\subsection{评估流程}

\begin{enumerate}
    \item 加载训练时的最佳checkpoint（基于验证损失）
    \item 在测试集（164,365条样本）上进行推理
    \item 分别计算三个时间尺度的混淆矩阵和指标
    \item 生成LSTM vs XGBoost的对比图表
\end{enumerate}

评估代码实现于\texttt{src/models/evaluate.py}，使用matplotlib生成300dpi的PNG图表，中文标注通过SimHei字体配置实现。
