{
 "_note": "预注册视图：以下内容逐字取自 claims.json，claims.json 在任何实验开始前写死并锁指纹（work/results/PREREG.sha256）。本文件不含任何跑完之后产生的内容。",
 "written_before_analysis_at": "2026-09-12T06:53:00Z",
 "prereg_core_sha256": "211e54e190586508f249f20425c34cdc270812a9b41e240b1a99b4dbb5e8a5d9",
 "question": "在一个真实的、带时间戳与敌意标记的社交交互图上，给定 5% 的节点扰动预算，一个只从历史日志里学的离线强化学习策略，能不能比平凡启发式更多地降低意见极化方差？还是说单步贪心（挑当前最极端的节点）已经把能拿的都拿走了？",
 "data": {
  "source": "SNAP Reddit Hyperlink Network — soc-redditHyperlinks-body.tsv（Kumar, Hamilton, Leskovec, Jurafsky, WWW 2018）。匿名游客直接下载，无需注册、无需 API key、无需 DUA。",
  "url": "https://snap.stanford.edu/data/soc-redditHyperlinks-body.tsv",
  "sha256": "9bbf57511dc0da7369c2e896d865b68f170136def4f223f4c9e9e10818f4bfb5",
  "why_this_dataset": "需求方指定「Reddit/Twitter 极化话题开源图」。这是该类里唯一同时满足：真实、带秒级时间戳、带每条交互的敌意标记（LINK_SENTIMENT=±1）、且匿名可直接下载的公开图。Twitter 侧的极化话题图（如各类 retweet 网络）在 2023 年 API 关闭后，公开可直连的版本要么无时间戳、要么已下架。",
  "graph": "节点 = 关联负情感边最多的 250 个 subreddit，取训练期诱导子图最大连通分量 → 247 个节点；边 = 两端都在节点集内的全部超链接边 44623 条（其中 8040 条负情感，18.0%），保留真实时间戳与符号；时间窗 = 自然月，2014-01..2017-04 共 40 窗。",
  "holdout": "前 24 窗（2014-01..2015-12）为训练期；后 16 窗（2016-01..2017-04）整段留出。离线 RL 的训练日志一条都不来自留出期。"
 },
 "operational_definition_declared_before_run": {
  "what_is_real": "拓扑、每条交互发生的真实时刻、每条交互是否敌意 —— 全部来自数据集原始字段，没有任何合成成分。演化顺序按真实时间戳。",
  "what_is_simulated": "节点的「意见」数值。该数据集不含任何节点观点标签，也无法从它的符号结构里诚实地提取出一条政治立场轴：我们实测过，这张图远不是结构平衡的（归一化有符号拉普拉斯最小特征值 0.055，不接近 0），其主特征向量由度数主导，247 个节点里只有 3 个落在另一侧。因此本轮不伪造立场轴。",
  "opinion_dynamics": "意见 x_i ∈ [-1,1] 是定义在真实图上的受控状态变量。每个窗内，按真实时间戳逐条处理边 (u→v, 符号 σ)：x_v ← clip(x_v + μ·σ·(x_u − x_v), −1, 1)，μ=0.1（正边同化、负边排斥）。窗末做 Friedkin–Johnsen 锚定与噪声：x ← clip((1−λ)·x + λ·s + ε, −1, 1)，λ=0.1，ε~N(0, 0.01²)。内在意见 s_i = x_i(0) ~ Uniform(−1,1)，由种子决定。",
  "why_random_initial_opinions": "初值随机而非人工设计，是为了让极化结构完全由真实的敌意边与真实时序产生，而不是由我们预先摆好的两个阵营产生。代价是：本轮的意见值不对应任何真实人群的真实立场，任何「Reddit 上的极化下降了 X%」式的解读都是错的。",
  "polarization_metric": "P(t) = 全体节点意见的总体方差 Var(x)，即需求方要求的「极化方差」。",
  "intervention": "节点级扰动：每个留出窗开始时选一个集合 A_t（|A_t| ≤ b=12，占 247 个节点的 4.86%，满足「受控节点 ≤5%」），对 i∈A_t 执行 x_i ← (1−η)·x_i，η=0.5（把该节点当前表达拉向中性一半）。扰动只作用于表达意见 x，不改内在意见 s，因此效果会在 FJ 锚定下逐窗衰减 —— 这正是「何时花预算」成为一个真问题的原因。",
  "budget": "全部干预臂共享同一总预算 B_total = b × 16 / 2 = 96 次「节点×窗」动作，等价于「只能在一半的窗里满额出手」。每个臂实际花掉多少必须逐臂如实报告；任何臂超支即判为实现失败。"
 },
 "arms": [
  {
   "name": "null_no_intervention",
   "is_baseline": true,
   "what": "零模型：完全不干预，预算花费 0。所有「降低了多少极化方差」的说法都以它为参照；没有它，任何下降数字都没有意义。",
   "data_space": "留出期 16 个真实月窗上的意见方差 Var(x)（同一套真实边流、同一 per-seed 起点）",
   "truth_source": "SNAP soc-redditHyperlinks-body.tsv 真实时间戳与 LINK_SENTIMENT"
  },
  {
   "name": "random_budget_matched",
   "is_baseline": true,
   "what": "平凡基线一：在固定的隔窗日程上随机挑 b 个节点扰动，预算与其余干预臂严格相同。",
   "data_space": "留出期 16 个真实月窗上的意见方差 Var(x)（同一套真实边流、同一 per-seed 起点）",
   "truth_source": "SNAP soc-redditHyperlinks-body.tsv 真实时间戳与 LINK_SENTIMENT"
  },
  {
   "name": "degree_top_b",
   "is_baseline": true,
   "what": "平凡基线二：度中心性优先 —— 挑当前窗内活跃度最高的 b 个节点。点名的传统启发式。",
   "data_space": "留出期 16 个真实月窗上的意见方差 Var(x)（同一套真实边流、同一 per-seed 起点）",
   "truth_source": "SNAP soc-redditHyperlinks-body.tsv 真实时间戳与 LINK_SENTIMENT"
  },
  {
   "name": "extremity_top_b",
   "is_baseline": true,
   "what": "平凡基线三，也是**预先指定的主对照**：挑当前 |x_i| 最大的 b 个节点。对「方差」这个目标，单步扰动的收益恰好是 (1−(1−η)²)·x_i²，所以这个启发式是可证明的单步最优。离线 RL 唯一可能赢的地方只剩长程效应与出手时机。",
   "data_space": "留出期 16 个真实月窗上的意见方差 Var(x)（同一套真实边流、同一 per-seed 起点）",
   "truth_source": "SNAP soc-redditHyperlinks-body.tsv 真实时间戳与 LINK_SENTIMENT"
  },
  {
   "name": "offline_rl_fqi",
   "is_baseline": false,
   "what": "实验臂：离线强化学习（Fitted Q Iteration，ExtraTrees 函数逼近，γ=0.9，5 轮迭代）。训练数据只来自训练期窗口、训练期种子下行为策略（50% 随机 + 50% 极端度贪心）产生的日志，学习过程中不与环境交互一次。评估时策略冻结，按优势 Q(φ,1)−Q(φ,0)>0 选 top-b，受同一总预算约束。",
   "data_space": "留出期 16 个真实月窗上的意见方差 Var(x)（同一套真实边流、同一 per-seed 起点）",
   "truth_source": "SNAP soc-redditHyperlinks-body.tsv 真实时间戳与 LINK_SENTIMENT"
  }
 ],
 "controls": {
  "ruler_positive_control": "extremity_double_budget：同一启发式、预算翻倍（b=24，同日程，B_total=192）。方向已知必须更好。这把尺子如果连「预算翻倍」这种已知差距都测不出来，那它测不出 RL 与基线的任何差距，主结论作废。",
  "ruler_negative_control": "random_variant_a 与 random_variant_b：两个只有内部 tie-break 随机数不同的随机策略。它们之间不应出现系统性差异。若出现，说明检验被某种未声明的不对称污染。",
  "graph_null_model": "sign_shuffled：把全部边的 ±1 符号在全时段内随机置换（保持拓扑、时间戳、正负边总数不变），重跑 null 与 extremity_top_b。用来回答「真实的敌意结构到底有没有起作用，还是换成任意符号也一样」。这是描述性对照，不设判据阈值。"
 },
 "protocol": {
  "train_seeds": [
   1,
   2,
   3,
   4,
   5,
   6,
   7,
   8
  ],
  "eval_seeds": [
   101,
   102,
   103,
   104,
   105,
   106,
   107,
   108,
   109,
   110,
   111,
   112
  ],
  "seeds_are_disjoint": "训练种子与评估种子无交集；评估窗口与训练窗口无交集。两层留出同时成立。",
  "paired_design": "每个评估种子先用 null 策略从 2014-01 无干预热身到 2015-12 末，得到该种子的留出期起点状态；所有臂从**同一个**起点、在**同一套**真实边流与噪声序列上跑留出期 16 窗。因此臂之间可以做配对检验。",
  "primary_endpoint": "留出期最后一窗（2017-04）结束时的极化方差 P_end。",
  "secondary_endpoint": "留出期 16 窗极化方差轨迹的曲线下面积（AUC，按窗平均），衡量全程而非只看终点。",
  "primary_test": "offline_rl_fqi 对 extremity_top_b，在 12 个评估种子上做配对 Wilcoxon 符号秩检验（双侧，精确分布），同时报告配对差值中位数与 rank-biserial 效应量。",
  "no_reruns_for_prettier_results": "不因结果不好看而改超参、改臂、改种子或重跑。FQI 超参（ExtraTrees 300 棵、min_samples_leaf=20、γ=0.9、5 轮）在本文件写定时一并固定，不做任何搜索。"
 },
 "prediction": {
  "H1_primary": "离线 RL 在留出期末的极化方差低于 extremity_top_b（即降幅更大）：配对 Wilcoxon 双侧 p<0.05 且配对差值中位数 >0。",
  "H2_sanity": "全部预算匹配的干预臂都显著低于零模型 null_no_intervention：各自配对 Wilcoxon 双侧 p<0.05 且中位差 >0。",
  "H3_ruler_positive": "extremity_double_budget 显著优于 extremity_top_b：配对 Wilcoxon 双侧 p<0.05 且中位差 >0。",
  "H4_ruler_negative": "random_variant_a 与 random_variant_b 之间无系统差异：配对 Wilcoxon 双侧 p>=0.05。",
  "rationale": "对方差目标，单步扰动收益恰是 (1−(1−η)²)·x_i²，极端度贪心是单步最优解。离线 RL 想赢，只能靠两件事：把预算挪到真实交互爆发的月份（时机），以及扰动那些会把意见扩散出去的枢纽节点（长程）。这两件事在真实 Reddit 时变图上是否真的存在可利用的结构，是一个开放问题。**我们认为 H1 很可能不成立。** 若 H1 不成立，那是一个对需求方同样有用的结论：它说明在真实时变图上，节点级扰动的去极化收益基本被单步贪心吃干净了，离线 RL 要证明自己得换问题设定（换干预算子、换预算结构、或换到策略必须预测未来冲突的设定），省下后续投入。"
 },
 "decision_rule": {
  "H1_refuted_if": "配对 Wilcoxon 双侧 p>=0.05，或配对差值中位数 <=0（即 RL 没比极端度贪心更低）",
  "H2_refuted_if": "任一预算匹配干预臂相对零模型的配对 p>=0.05 或中位差 <=0",
  "H3_refuted_if": "预算翻倍相对单倍的配对 p>=0.05 或中位差 <=0 —— 此时判定尺子失效，主结论一并作废，如实上报",
  "H4_refuted_if": "两个随机变体之间配对 p<0.05 —— 此时判定检验被未声明的不对称污染，主结论一并作废，如实上报",
  "count_criteria_must_report_continuous": "凡出现「N/12 个种子上 X 优于 Y」这类计数式说法，报告时必须在同一处并列给出：该对比的配对 Wilcoxon 双侧 p 值、配对差值中位数、以及 rank-biserial 效应量。只报计数不报连续量视为未达标。",
  "budget_accounting_is_a_kill_switch": "任一臂实际花费超过其声明预算，该臂结果作废。逐臂实际花费必须进结果文件与报告。"
 },
 "known_confounders_declared_before_run": [
  "**本轮最要命的混杂：预算与起点不对齐。** 一个偷偷多花预算、或从更低方差起点出发的臂会无条件赢。已用三条措施事先消掉：全部臂共享 per-seed 同一起点、共享同一真实边流与同一噪声序列、逐臂如实计数实际花费并设为作废开关。",
  "意见值是模拟的。真实成分是拓扑、时序、敌意标记；意见数值不是真实立场。任何「真实平台上的去极化效果」推断都不成立。",
  "离线 RL 的分布漂移：训练日志来自 2014-01..2015-12 的行为策略，评估在 2016-01..2017-04。Reddit 在这段时间的活跃结构本身在变（留出期边数 17434 条）。RL 输了可能是分布漂移而不是方法本身不行，本轮拆不开这两者。",
  "每节点奖励用 r_i = (x_i(t)² − x_i(t+1)²)/N，这是极化方差里均方项的逐节点精确分解，但丢掉了 −x̄² 那一项。这是一个已声明的信用分配近似，评估时用的是完整的 Var(x)，不用这个近似量。",
  "行为策略只有两种（随机 + 极端度贪心）。离线 RL 的表现受行为策略覆盖度限制，覆盖不到的动作区域学不出来。",
  "subreddit 级的超链接不等于个体用户的观点交互；节点是社区不是人。"
 ],
 "out_of_scope": [
  "大规模超参搜索、网络结构搜索（属后续完整支持层）",
  "在线强化学习 / 与环境交互式训练（本轮按需求方设定只做离线 RL）",
  "多数据集 benchmark（本轮一个数据集）",
  "对真实 Reddit 人群实际观点变化的任何因果断言",
  "GPU 训练（本轮纯 CPU）",
  "任何需申请、需 DUA 的数据"
 ]
}