Skip to content

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

续作观测室 · anise2

追完了,然后呢?
基于 Bangumi 数据归档与可解释机器学习,观察日本动画在未来迎来下一季(第二季及后续)的长期可能性。

在线访问:https://anise2.github.io/


💡 项目初衷

当一部动画完结、屏幕上浮现“おわり”时,每一个观众心中都会升起同一个念头:“这部作品,还会有下一季吗?”

有人在默默等待官方发布会,有人在社区根据零散的销量和话题讨论推测。anise2(续作观测室) 是一个公开的数据科学与机器学习实验:我们基于过去二十年、数千部日本动画的历史轨迹,结合可解释模型与生存分析,试图理出那些影响续作诞生的客观规律,将冰冷的数据转化为陪伴等待的线索。


🎯 我们在预测什么?

  • 长期概率,而非短视猜想:我们并不预测“明年会不会上映”。一部动画续作从立项、企划到制作往往耗时两三年,更有作品沉寂七八年后迎来文艺复兴。因此模型的目标是:在该系列截至预测时仍未开播下一季的条件下,在未来的任何时候,是否还会推出下一季正式 TV / WEB 动画。
  • 引入生存分析(Waiting Time):“暂时没有续作”绝不等于“永远不会出”。我们采用混合生存模型(Mixture Cure Model):
    1. 作品资质(发生率模型):结合原作类型、历史季数、制作公司过往履历等被保留的特征,评估其孕育续作的底色;前作销量仅在有合格历史记录且被模型保留时使用;
    2. 等待时长(生存时间分布):从最新一季首播计算等待天数,模型在每次数据更新时重新计算后续迎来下一季的条件概率。这一估计依赖等待时间分布假设,尚未校准。

🛡️ 核心防线:严格防“穿越”(时间截断)

机器学习最怕“偷看剧本”(数据泄露)。如果用 2024 年的口碑评分回测 2012 年的动画,得到的高命中率纯属“事后诸葛亮”。本项目确立了极其克制的时间边界:

  1. 历史特征按首播时点截断:进行历史回测时,模型只使用该季首播时已发生的事实(已播正篇数、续作间隔、首播前已有观测记录的前作碟片销量等)。后续发行事件和后来采集的销量不向历史输入倒填;等待天数则计算到预测截点。
  2. 作品固有属性按最新归档补齐:模型假定原作类型(漫改/轻改/原创)、承制动画公司等属性在首播时已经确定,由当前最新归档补充。
  3. 剔除后验噪声字段:当前的社区评分(Bangumi / MAL)、收藏量、用户自定义评价标签、原作连载完结状态等缺乏历史快照的数据,已全数移出训练输入。

这不是完整历史快照回测。当前归档无法认证当年的数据库是否已收录、分类是否一致,也不能验证预测是否早于官方宣布;时间截断不能排除重建历史带来的全部偏差。


📊 回测指标与表现

如果一个模型对所有动画都回答“这一年没有下一季”,其表面“准确率”也会很高,因为一年内没有续作的样本占多数,但它找不回任何正例。长期尚未续作的作品也不能当成永久负例计算准确率。因此我们关注年度找回率(召回率)与当年续作比例:

  • 15 年历史截点(2010–2024)回测结果:
    • 当年续作召回率 ≈ 59.9%:在这组逐年验证中,下一年实际开播续作的作品有约六成在年度截点时进入关注圈(命中 571 / 953 次年度续作),不代表早于官方宣布;
    • 当年续作比例 ≈ 15.9%:进入关注名单的作品中约 16% 在对应的下一年迎来续作;其余仍需继续观察,不能仅凭当年未续作就判定长期预测失败;
    • 平均检索 PR-AUC 达到 0.285。
  • 精简特征,减少无贡献输入:各年度分别依据其训练数据筛选;以这次精简实验的主模型为例,从 206 项输入中剔除了 185 项训练分裂增益为零的字段,保留 21 项输入,其中等待天数由生存公式单独使用。这些结果不能证明模型不存在过拟合。

回测关注圈采用历史验证选出的阈值,与首页的概率筛选预设不同。


📦 数据来源与致谢

  • Bangumi Archive:核心基石,提供 Bangumi 收录的动画条目、时间轴、系列关系与制作署名;本项目关注 2006 年至今的日本动画;
  • 碟片销量(BD / DVD):Someanithing / Andrew Zhou 快照(2020 年前) + ラノベライブラリ(2021 年起已知卷累平口径,不把未知卷归零);
  • MangaUpdates:漫改/轻改动画的改编终点与连载进度,按实际采集日期保存,不视作首播时已知的资料;
  • anime-offline-database & MyAnimeList:跨站 ID 对齐、精美封面与补充信息。

🚀 本地开发与构建

全站采用极轻量的纯静态架构,首屏秒级直出,完全不依赖私有后端服务,所有关注记录仅存储在用户本地浏览器中。

运行环境

  • Node.js >= 18
  • Python >= 3.10(本地预览、测试及数据流水线需要;CI 使用 Python 3.12 与 Node.js 22)

命令

# 安装依赖
npm install

# 启动本地预览(自动 predev 生成静态数据并开启静态服务)
npm run dev
# 浏览器访问 http://localhost:5173

# 打包静态站点(输出至 dist/,供 GitHub Pages 部署)
npm run build

# 运行自动化测试(浏览器端到端测试与性能加载检查)
npx playwright install --with-deps chromium
CI=1 npm run test:browser

自动化流水线

  • .github/workflows/ci.yml 在推送到 main 后运行测试并发布 GitHub Pages;文案与界面修改复用最近一次训练结果,无需重训。PR 只检查,不发布。也可手动运行此工作流。
  • .github/workflows/update-model.yml 每月 1 日北京时间 08:30 运行:自动拉取最新 Bangumi 归档、增量核验商业与跨站数据、重训模型,再调用同一网页发布流程。
  • 最新训练片单保存在 training-snapshots Release 的 site-catalog.json.gz,页面发布时读取;历史快照与查询进度也保存在该 Release。封面仅使用远端外链,不缓存图片。

🤝 欢迎贡献与提建议

本项目是一个持续探索的开放实验,非常欢迎大家参与完善!无论你是动画爱好者还是数据/算法开发者,都可以通过以下方式帮助 anise2 变得更好:

  • 数据勘误与补充:
    • 发现系列作品归组、续作派生关系有误或遗漏;
    • 补充漫画/轻小说改动画的叙事改编终点(如 MangaUpdates 暂缺的卷号/话数记录);
    • 提供具备明确公开来源与日期的碟片销量,或官方企划终结的明确证据(须可核实观察时间,以维护防穿越原则)。
  • 模型与特征构想:
    • 构想更多符合“开播前时间截断”防穿越原则的高价值特征;
    • 探讨生存分析(Survival Analysis)建模策略与概率校准方法的进一步优化。
  • 界面体验与工程改进:
    • 对片单筛选、检索交互、可视化图表及移动端体验提出改进想法;
    • 反馈页面 Bug 或提出代码优化与无障碍访问建议。

欢迎随时提交 Issues 交流讨论,或发起 Pull Requests 贡献代码与数据!


💬 结语

数据是理性的线索,但每一部动画续作的诞生,背后都凝结着原作者、制作团队、投资委员会与无数热切观众的心血与机缘。
愿每一份真挚的等待,都能在未来的某一天,迎来属于它的延续。

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages