Skip to content

Le-soleile/Forecasting-Model

Repository files navigation

全球航运预抵模型

2025 全国大学生交通科技大赛(http://www.nactrans.net/)

基于船舶历史航行信息预测其抵达的目的地和时间,获得国家三等奖

项目标识

项目简介

本项目面向全球航运场景中的船舶预抵问题,主要完成 船舶抵达港口预测 任务。

模型根据船舶历史行为、当前位置、航行状态以及港口相关信息,预测船舶最可能抵达的目标港口。到港时间不由模型直接预测,而是根据预测港口及船舶航行信息进行后续计算。

项目来源于 2025 全国大学生交通科技大赛时序预测赛道,并获得国家三等奖。

项目背景

在实际航运管理中,提前判断船舶可能抵达的港口,对港口调度、泊位安排、航线分析和运输计划都有重要意义。

由于船舶航行会受到历史航线、当前位置、船舶类型、港口分布以及临时调度等因素影响,单纯依赖人工经验或简单规则很难稳定判断目的港。本项目尝试通过历史数据建模,缩小候选港口范围,并提升港口预测的准确性和推理效率。

功能说明

本项目当前主要支持以下功能:

  • 根据船舶及航行信息预测抵达港口
  • 基于历史可达港口构建候选港口集合
  • 使用 pos.csv 生成有效港口掩码,减少无效搜索范围
  • 支持训练、验证和测试数据加载
  • 支持模型训练过程中的早停与学习率调度
  • 自动保存最优模型
  • 加载训练好的模型并生成测试集预测结果

项目结构

project/
├── config.py        # 配置文件
├── data_loader.py   # 数据加载与预处理
├── model.py         # 模型定义
├── train.py         # 训练脚本
└── predict.py       # 预测脚本

文件说明

config.py

集中管理项目运行所需的配置参数,包括:

  • 数据文件路径
  • 模型超参数
  • 训练参数
  • 批大小、学习率、训练轮数等设置
  • 模型保存路径
  • 预测结果保存路径
  • 运行设备配置

程序会自动检测当前环境是否支持 GPU,并根据实际情况选择 CPU 或 CUDA 设备。

data_loader.py

负责数据读取、预处理和训练样本构建,主要包括:

  • 读取原始数据文件
  • 清洗异常或缺失数据
  • 构建船舶、港口等字段的词汇表
  • 处理未知船舶和未知港口
  • 根据 pos.csv 生成有效港口掩码
  • 构建 PyTorch Dataset
  • 创建训练、验证和测试 DataLoader

其中,pos.csv 是通过历史数据处理得到的船舶可达港口集合。该文件可以帮助模型缩小候选港口范围,减少无效计算,同时提升预测效率和准确率。

model.py

定义港口预测模型结构。

模型输入船舶、港口及航行相关特征,输出候选港口的预测得分。预测阶段会结合有效港口掩码,过滤掉明显不合理的港口候选项。

train.py

模型训练脚本,主要功能包括:

  • 加载训练集和验证集
  • 初始化模型、损失函数和优化器
  • 执行训练循环
  • 在验证集上评估模型效果
  • 使用学习率调度策略优化训练过程
  • 支持早停机制,避免过拟合
  • 保存验证效果最好的模型参数

predict.py

模型预测脚本,主要功能包括:

  • 加载训练完成后的最优模型
  • 读取测试数据
  • 对测试样本进行港口预测
  • 保存预测结果

默认预测结果文件为:

test_predictions1.csv

使用流程

1. 准备环境

建议使用 Python 3.8 及以上版本。

安装依赖:

pip install -r requirements.txt

如项目未提供 requirements.txt,可根据代码中使用的库手动安装,例如:

pip install torch pandas numpy scikit-learn

2. 准备数据

请将训练、测试及辅助数据文件放入配置文件指定的位置。

项目中需要重点准备的文件包括:

train.csv              # 训练数据
test.csv               # 测试数据
pos.csv                # 船舶历史可达港口信息

其中,pos.csv 用于记录船舶在历史数据中可能到达的港口选项。预测时,模型会优先在这些有效候选港口中进行判断,从而降低计算开销并提升预测稳定性。

3. 检查配置

在运行训练前,请先检查 config.py 中的参数配置,包括:

  • 数据路径是否正确
  • 模型保存路径是否存在
  • 批大小是否适合当前显存
  • 学习率和训练轮数是否需要调整
  • 是否正确识别 GPU

4. 训练模型

运行训练脚本:

python train.py

训练过程中,程序会在验证集上监控模型表现,并自动保存效果最好的模型。

5. 执行预测

训练完成后,运行预测脚本:

python predict.py

预测完成后,可查看输出文件:

test_predictions1.csv

数据说明

项目主要使用以下类型的数据字段:

字段类型 说明
船舶信息 船舶编号、船舶类型等基础属性
航行信息 经纬度、速度、航向、时间等动态信息
港口信息 港口编号、港口位置、历史到达记录等
候选港口信息 船舶历史可达港口集合,由 pos.csv 提供

实际字段名称以数据文件和 data_loader.py 中的处理逻辑为准。

预测结果

预测脚本会生成测试集对应的港口预测结果,输出文件默认为:

test_predictions1.csv

结果文件通常包含样本标识及预测港口等信息。具体字段以 predict.py 中的保存逻辑为准。

注意事项

  • 本模型只预测船舶抵达港口,到港时间需根据预测港口及船舶航行信息另行计算
  • pos.csv 对预测速度和精度影响较大,建议使用充分清洗后的历史数据生成
  • 所有数据文件建议使用 UTF-8 编码
  • 训练前请确认 GPU 是否可用,显存不足时可适当减小 batch size
  • 未知船舶和未知港口会被特殊处理,但可能影响预测精度
  • 不同数据切分方式会影响最终结果,复现实验时应保持配置一致
  • 若数据中存在大量缺失值、异常经纬度或错误港口记录,建议先进行清洗

模型特点

  • 面向实际港口预测任务,目标明确
  • 使用历史可达港口信息缩小预测范围
  • 支持未知船舶和未知港口处理
  • 训练流程包含早停和学习率调度
  • 代码结构简洁,便于复现和扩展

后续优化方向

  • 补充更详细的数据字段说明
  • 增加样例数据,方便快速运行
  • 输出 Top-K 港口预测结果
  • 增加模型评估脚本
  • 增加可视化分析模块
  • 优化未知船舶场景下的预测效果
  • 引入更多航行状态和港口特征

适用场景

本项目可用于以下方向:

  • 船舶目的港预测
  • 港口调度辅助分析
  • 航运轨迹数据挖掘
  • 船舶历史航线分析
  • 时空序列建模研究
  • 交通科技竞赛项目复现与学习

致谢

感谢 2025 全国大学生交通科技大赛提供的交流平台,也感谢团队成员在数据处理、模型设计、训练调参和结果分析中的贡献。

License

本项目主要用于竞赛复盘、学习交流和科研参考。

About

2025全国大学生交通科技大赛三等奖项目,用于对船舶到达时间、抵达港口进行预测,方便航运管理。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages