📋 题目描述
NS-2026-01 智慧饭堂:人流与备餐预测
赛题任务
本题编号为 NS-2026-01。
任务介绍
校园饭堂需要根据历史就餐人数、日期、天气、课程周、考试周、节假日和菜单信息提前准备食材。你是一名饭堂运营预测员,需要预测未来一段时间内不同饭堂区域和饭点的人流量或备餐需求。
你的任务是:
- 根据历史饭点级数据建立预测模型。
- 对测试时间段中每个
date,meal,canteen_area输出预测人数。 - 处理周期性、节假日、考试周、天气变化、菜单类型和异常日期影响。
赛题背景
短周期时间序列预测广泛用于校园运营、餐饮备货、交通调度和能源管理。饭堂人流量具有明显的星期、饭点和区域周期,但考试周、节假日、天气、活动和菜单变化会造成局部异常。
本题考察:
- 表格特征工程、回归建模与公开规则复现。
- 时间序列训练/验证切分。
- 异常日期、节假日和事件特征处理。
- 线上 public 分数与本地验证差异分析。
一个稳健的方案通常应包含:
- 按时间顺序划分 validation,而不是随机拆分。
- 为星期、饭点、区域、课程周、考试周、节假日、天气和菜单构造特征。
- 对异常日期和节假日做单独分析,避免被短期波动误导。
- 使用简单均值、最近周期均值或树模型作为 baseline,再验证每个改动是否真实提升。
赛题数据
在本页下方“相关资源”处下载数据包,或在 https://modelscope.cn/datasets/SteamedFresh/NS-2026-A-data 处获取。
NS-2026-01-data/├── train.csv├── test.csv├── calendar.csv├── weather.csv├── menu.csv├── example_submission/│ └── results.csv└── tools/ └── check_format.py数据说明
train.csv
| 字段 | 类型 | 含义 |
|---|---|---|
date | string | 日期,格式 YYYY-MM-DD |
meal | string | breakfast、lunch、dinner |
canteen_area | string | 饭堂区域 ID |
volume | float | 实际就餐或备餐量 |
test.csv
字段与 train.csv 基本一致,但不包含 volume。
附加特征表
calendar.csv 包含课程周、星期、是否节假日、是否考试周、是否调休、是否大型活动等字段。weather.csv 包含公开需求指数、温度、降雨、湿度、天气类别。menu.csv 包含饭点菜单类别、热度等级或促销活动。
正式发布数据包含 650 个连续校园日期、3 个饭点和 6 个饭堂区域。训练集为前 560 天,共 10080 行;测试集为后 90 天,共 1620 行。
评测说明
提交说明
提交文件必须压缩为:
NS-2026-01-answer.zip压缩包内必须只包含:
results.csv注意:压缩包内不得包含文件夹,仅包含 results.csv 文件本体。
提交格式
date,meal,canteen_area,volume2026-06-01,lunch,A01,2480格式要求:
- 必须包含且仅包含
date,meal,canteen_area,volume四列。 - 必须覆盖
test.csv中全部date,meal,canteen_area三元组。 - 三元组不得重复,不得出现测试集之外的三元组。
volume必须为有限非负数。
得分计算
总分 500:
| 指标 | 分值 |
|---|---|
| MAE 得分 | 200 |
| RMSE 得分 | 150 |
| MAPE 得分 | 150 |
评分公式:
mae_score = 200 * max(0, 1 - MAE / mae_ref)rmse_score = 150 * max(0, 1 - RMSE / rmse_ref)mape_score = 150 * max(0, 1 - MAPE / mape_ref)score = mae_score + rmse_score + mape_score正式题包使用以下固定参考阈值:
| 参数 | 值 |
|---|---|
mae_ref | 1000.0 |
rmse_ref | 1500.0 |
mape_ref | 0.50 |
评分脚本保证最终分数范围为 0 到 500。示例提交只用于说明格式,不代表合理成绩;建议参赛者按时间切分验证集,不要随机切分。
无效提交情况
CSV 无法解析、字段错误、三元组缺失或重复、预测值为负数、NaN、inf 或无法转换为数值时,将判为 0 分。
条款
AI 协助规则
本题 AI 协助等级为 A1。
Writeup 补充要求
本题额外要求说明验证集如何按时间切分,不能只随机切分。必须展示至少一张预测曲线或残差分布图,说明模型在哪些日期失误。
Writeup 还必须包含异常日期、节假日、考试周或菜单特征处理方式,本地 validation 分数、线上 public 分数和差异分析,生成 results.csv 的推理截图,以及使用公开公式、外部数据或 AI 工具的边界说明。
Writeup需包含最终提交压缩包文件 SHA256,指平台上传的 NS-2026-01-answer.zip 的 SHA256。
1. 基本信息
-
队长用户名:Ayin
-
队伍名:L.Corp
-
题号:NS-2026-01
-
最终官网提交记录:
- 提交时间:2026-05-23 18:49:14
- 最终有效得分:489.09 分

2. 解题概述
本题要求根据历史就餐数据、日历、天气、菜单等辅助信息,预测未来 90 天内各饭堂区域(6 个)在三个饭点(早/午/晚)的就餐人流量,评价指标为 MAE(200分)、RMSE(150分)、MAPE(150分)之加权和,满分 500 分。
最终方案: 将预测目标从直接预测 volume 改为预测 ratio = volume / demand_index,再以 volume = demand_index * ratio 还原最终预测值。demand_index 与 volume 的相关系数达 0.684,已编码了大部分星期、节假日、天气信息;在 ratio 空间内,目标变量的动态范围从 [32, 3600] 收缩至约 [0.3, 2.0],LightGBM 的分裂精度大幅提升。统计特征全部以历史 ratio 均值构造(如按 (meal, area, weekday, semester_week) 分组的 ratio 均值),替代之前的 volume 均值。
得分对应关系:
| 版本 | 方案描述 | 本地验证 MAE | 线上 MAE | 线上得分 |
|---|---|---|---|---|
| v1 | (meal, area, weekday) 均值查表 | — | 64.20 | 462.6 |
| v2 | LightGBM + lag7/14 + 近8周统计 | 59.x | 63.44 | 462.2 |
| v3 | v2 + 节假日 lag 污染修复 | 57.x | 60.29 | 464.7 |
| v4 | ratio 目标 + ratio 统计特征 | 17.65 | 16.9482 | 489.09 |
3. 关键改进

改进1:将预测目标改为 ratio = volume / demand_index
-
不再直接预测 volume,而是预测
ratio = volume / demand_index,最终volume = demand_index × ratio_pred。 -
原理: 在研究问题时,我们在验证集上比对预测值和真实值的差异,使用了比例验证,这启发了我们将预测值转换为比例(ratio)来降低偏差。对数据重新分析后发现,在 ratio 空间下数据更加稳定。
demand_index与 volume 的相关系数为 0.684,控制 meal/area/weekday/holiday 分组后组内 ratio 的变异系数仅为 6~8%,而 volume 本身的变异系数约 50%。由于 ratio 空间的目标值更稳定,树模型的分裂精度得到显著提升。 -
验证:
方案 本地验证 MAE 本地验证 MAPE 估算得分 LightGBM 直接预测 volume(v3) 57.x 0.0486 ~468 LightGBM 预测 ratio(v4) 17.65 0.0172 488.2
改进2:ratio 统计特征替代 volume 统计特征
- 所有历史均值特征改为在 ratio 空间计算,包括
r_wd_hol、r_wd_sw、r_wd_exam、r_rain、r_event、r_menu、r_pop等 9 个 ratio 统计特征。 - 验证:
r_wd_hol和r_wd_sw在特征重要性中分列前两位(如上图右下所示),去掉这两个特征后 MAE 从 17.65 上升至约 30+。
4. 验证与复现
运行环境
| 项目 | 信息 |
|---|---|
| 操作系统 | Windows 11 |
| Python 版本 | 3.12.11 |
| lightgbm 版本 | 4.6.0 |
| pandas 版本 | 2.3.1 |
| numpy 版本 | 2.2.6 |
硬件环境
- 硬件配置:CPU 单机即可,无需 GPU。
- 内存需求:< 2GB。
- 磁盘空间:~20MB。
- 运行耗时:训练全量模型并推理生成提交文件约耗时 2~3 分钟(6000 rounds)。
重要参数与配置
- 配置文件:无独立配置文件。LightGBM 所有的训练超参数均在 main.py的
params变量中硬编码配置。 - 随机种子:未设置显式随机种子。由于 LightGBM 在 CPU 上运行且在此任务中无强随机动作,结果具有可重复性。
- 数据版本与预处理:使用平台提供的公开训练集
train.csv及辅助表calendar.csv、weather.csv、menu.csv。预处理主要完成时间格式转换、合并辅助表、填充缺失值以及基于训练集计算多维度历史 ratio 均值特征。
复现步骤
# 1. 安装依赖pip install lightgbm pandas numpy
# 2. 将数据文件放在同一目录:# ./train.csv ./test.csv ./calendar.csv ./weather.csv ./menu.csv
# 3. 运行复现脚本(默认从当前目录加载数据,亦可指定路径:python main.py ./数据目录)python main.py验证集切分说明
采用时间顺序切分:训练前 480 天(2024-09-02 ~ 2025-12-25),验证后 80 天(2025-12-26 ~ 2026-03-15)。不能随机切分,原因如下:
- ratio 统计特征(如
r_wd_sw等)必须基于训练集计算,若使用随机切分会造成严重的信息泄露; - 测试集为最后 90 天,只有使用时序切分才能准确模拟测试集的时间跨度和特征分布(如同样包含考试周 sw=17-21)。
5. 异常日期、节假日、考试周、菜单特征处理方式
对数据进行 EDA 分析(分析结果见图),发现以下重要规律,并通过特征工程进行处理:
节假日(is_holiday = 1)
节假日人流约为正常日的 43%(breakfast)~ 57%(dinner)。在 ratio 空间内,节假日组的 ratio 均值远低于正常日,通过 r_wd_hol(按 (meal, canteen_area, weekday, is_holiday) 分组的历史 ratio 均值)精确捕捉。
考试周(is_exam_week = 1)
考试周的 lunch 和 dinner 的 ratio 约比正常周高 10~20%,通过 r_wd_exam(按 (meal, canteen_area, weekday, is_exam_week) 分组的 ratio 均值)进行精确刻画。测试集中包含的 sw=17/18/20/21(考试周)已在训练集中出现过,统计特征能够完全覆盖。
学期周次(semester_week)
EDA 发现学期周次对组内标准化 volume 有极大影响(例如 sw=18 时 lunch 偏高约 +0.83σ,sw=7 时 dinner 偏低约 -0.48σ)。我们通过 r_wd_sw 特征精确编码了每个 (meal, canteen_area, weekday, semester_week) 组合的历史 ratio,这是特征重要性中仅次于 r_wd_hol 的最强特征。
菜单特征
- 菜单中的
special组内 ratio 偏差约为 +0.42σ,而porridge组内 ratio 偏差约为 -0.38σ。 - 我们通过
r_menu(按(meal, canteen_area, menu_type_enc)分组的历史 ratio 均值)和r_pop(按(meal, canteen_area, menu_popularity)分组的历史 ratio 均值)来进行建模捕捉。 is_promotion(是否促销)作为独立特征直接输入模型。
大型活动(campus_event_level)
campus_event_level=2 时的 ratio 比 campus_event_level=0 高出约 +12%,通过 r_event 特征进行处理。
6. 本地验证 vs 线上得分差异分析
| 指标 | 本地验证(后80天) | 线上测试 | 差值 |
|---|---|---|---|
| MAE | 17.65 | 16.9482 | -0.7022 |
| RMSE | 30.95 | 26.8375 | -4.1125 |
| MAPE | 0.0172 | 0.0161 | -0.0011 |
| 总分 | 488.2(估算) | 489.09 | +0.89 |
差异的来源与预期:
- 验证集(sw=3
14,不含考试周)与测试集(sw=1522,含有大量考试周)的周次结构有所差异,但r_wd_sw特征完全覆盖了测试集出现的所有学期周次; - 测试集约有 126 行属于节假日,验证集节假日 MAE ≈ 57,是主要的误差来源;
- 全量训练模型比验证集切分模式多了后 80 天的数据,因此线上泛化效果通常略好于本地验证。
预测曲线与残差分布图

误差最大的日期(验证集中)主要集中在:
- 2026-01-02(sw=4,节假日,MAE=75.4):元旦假期,历史中该节假日的样本量较少;
- 2026-01-15(sw=6,campus_event_level=2,MAE=69.0):大型校园活动,训练集中同等条件的样本极其稀少;
- 2026-02-07(sw=9,节假日,MAE=46.0):节假日。
7. AI 使用声明
全局说明
- 本队使用的 AI 工具:Gemini,Claude
- 主要用途:代码辅助、资料查询,数据图生成
逐题声明
NS-2026-01
- 官方等级:A1
- 实际使用:资料查询 / 代码辅助
- AI 是否接触完整题面:否
- AI 是否接触测试输入:否
- AI是否接触提交反馈或排行榜反馈:是
- AI是否生成或修改最终提交:否
- 是否使用商业 API、闭源远程模型或托管式 Agent:是
- 详细说明:使用了Gemini和Claude两个闭源远程模型,主要用于资料查询和代码辅助,最终将分析的数据画成图表的代码由AI协助产出。
Writeup 写作辅助声明
- 是否使用 AI 辅助撰写或润色:是
- 使用工具:Gemini
- 使用范围:语言润色 / Markdown 排版 / 根据本队实验记录整理段落
- AI 接触材料:草稿、代码片段以及真实计算生成的哈希数据。
- AI 是否生成新的实验结果、验证分数或复现命令:否
- 人工核对方式:由本队队长与队员逐字核对事实、代码、日志、分数和复现命令。
8. 最终提交信息与证据截图
最终提交信息
-
平台提交文件名称:NS-2026-01-answer.zip
-
平台提交时间:2026-05-23 18:49:14
-
最终有效得分:489.09
-
答案 ZIP SHA256(提交文件 SHA256):
9896e6d360171ff98c0cdeaae704a38cb9b085b7535040cbe2a5528873b5b4e9 -
内部关键文件 SHA256(提交包内部 SHA256):
-
results.csv:99744624d4b35c8dcf304a84663b993563535a8ea0cf7caccb9304f722a00551
-
-
模型文件清单:无
证据截图
平台提交记录:

硬件与系统环境:

代码运行与输出:

提交文件哈希:

如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时


















