Chicago Schelling —— 一次让隔离更严重的轨道交通干预¶
studies/chicago_schelling/ · reference: true · Path C(包装既有模拟器)
以 2010 年人口普查为起点:当第 2 步在南城某普查区开通一座 CTA 轨道车站、
并配以公平住房政策广播时,黑白居住隔离指数 D_bw 在 3 步内如何演化?
原假设是可达性改善会吸引更多元的人口流入、压低 D_bw。结果并非如此。
这个案例是包装既有可信模拟器的样板:把一个 Mesa 风格的芝加哥隔离模型 缝到四个核心接口后面,用真实普查数据驱动它,再在其上叠加一次定时干预与 分受众的信息广播——轨迹记录的是真实发生的事,而不是你希望发生的事。
P / E / B¶
| 是什么 | 来自哪里 | |
|---|---|---|
| P | 570 个持久家庭,由 2010 年普查区物化而来(chicago.census,scale: small)。agent_id 同时编码 race / income bracket / family type / neighborhood type 和普查区 GEOID,所以每一行面板数据都能落到地理位置上。交互结构为 Queen 邻接的 spatial_adjacency,传播模式 independent。 |
population/population.json + population/roster.jsonl |
| E | 双轴上的 4 个层(见下表)。provider 为 chicago.env(scale: small、init_mode: census)。 |
environment/environment.json |
| B | decision chicago.schelling:每个家庭产出 kind 为 move 或 stay 的 Action,并携带 ranked_targets。搬迁在环境的 apply 里真正执行——迁移是环境状态的改写,不是记账。 |
adapter/decision.py |
四个环境层:
| layer | modality | scope | dynamics | 内容 |
|---|---|---|---|---|
city_race_share |
physical | macro | endogenous | 全市种族份额 |
tract_local |
physical | local | endogenous | 本普查区人口结构 + 1 跳 Queen 邻域 |
news |
information | macro | scheduled | 全市政策广播 |
ward_notice |
information | local | scheduled | 普查区级通知 |
干预是第 2 步同时发生的三件事:
- 一个作用在
tract_local的 scheduled event —— 普查区17031612000(New City,南城),cta_stations += 2; - 广播
policy_A_citywide走news通道,audience: "all",ttl 3 —— 车站开通 + 全市公平住房/防迁移方案; - 广播
policy_B_tract走ward_notice通道,受众仅该 GEOID,ttl 3 —— 同一件事,以「你家这条街」的口吻讲。
这种成对设计本身就是要点:同一个事件既作为宏观信息触达所有人,又作为 局部信息触达受影响的普查区——于是后续 fork 可以分别改动这两条通道。
一步是什么,跑多久¶
一步 = 全城一轮迁居决策:每个家庭观察自己的普查区与 Queen 邻域,决定
move 还是 stay,搬迁结算完毕后再计算指标。n_steps: 3、
interaction_rounds: 1、seed: 42 —— 570 个被追踪家庭、4 行指标
(t=0 基线 + 3 个决策步)、study.duckdb 里 2280 行面板数据。
display_metrics 为 D_black_white、D_hispanic_white、D_asian_white、
Isolation_black;存储层里还有更多(各族隔离/暴露指数、迁移诊断量)。
结果¶

| step | D_bw |
D_hw |
D_aw |
Isolation_black |
n_movers |
pct_pop_moved |
mover_alignment_rate |
|---|---|---|---|---|---|---|---|
| 0 | 0.8160 | 0.5582 | 0.3282 | 0.6137 | — | — | — |
| 1 | 0.8068 | 0.5730 | 0.3364 | 0.6240 | 41 | 0.0349 | 0.220 |
| 2(干预) | 0.8447 | 0.5891 | 0.3085 | 0.6083 | 50 | 0.0292 | 0.280 |
| 3 | 0.8464 | 0.6112 | 0.3237 | 0.6162 | 31 | 0.0123 | 0.387 |
假设被证伪。 D_bw 全程上升 +0.0304,且跃升恰好发生在干预步。机制在
面板数据里看得很清楚:目标普查区的白人人口从 13 降到 0,西语裔从 0 增到
241,黑人存量几乎不变。可达性冲击确实降低了迁移成本,但迁移的方向仍由
同群体邻里份额主导——抓住机会的是最邻近的多数群体,而不是回流的白人,结果
该区更加非白人化。
同一批数据还支持两条次级读数。mover_alignment_rate 单调爬升
(0.220 → 0.280 → 0.387):搬迁者随时间更加同类相聚,这是经典的自我
强化 tipping 信号。而 n_movers 在干预步见顶后回落到 31,说明系统是在一次性
冲击后重新收敛到新均衡,而非被持续搅动。
这是有意思的结果,不是失败的运行
一个数字与自己 hypothesis 字段相矛盾的 study,恰恰说明机制在正常工作:
产物记录了证伪、报告解释了机制、adjustable_params 告诉你下一个该拧的
旋钮(报告自己给出的建议:换一个起点就在 tipping 带上的普查区重跑,而不是
一个已经近乎完全隔离的区)。
Grounding¶
grounding/grounding.json 里有 3 条 sourced 事实、3 条声明的假设、2 条建模
参考——切分位置正是你希望的:量级有来源,情景选择被显式声明。
| 条目 | basis | 作用 |
|---|---|---|
| 芝加哥都会区黑白相异指数 = 76(0–100),2010 普查 —— Brown University US2010(Logan/Stults) | sourced |
t=0 D_bw=0.816 的合理性包络 |
| CTA Red Line Extension —— 5.5 英里南城延伸线 | sourced |
第 2 步事件所模仿的真实冲击 |
| Schelling 容忍阈值 30–50% 同群体邻居 | sourced |
决策模型满意度阈值的取值区间 |
干预普查区 = 17031612000 |
assumed |
一个可信的南城站点;真实 RLE 终点更靠南 |
用 cta_stations += 2 表示车站开通 |
assumed |
没有公开口径把「一座车站」映射到该可达性字段 |
| 成对的公平住房/防迁移政策文本 | assumed |
风格化文本,非某项已颁布的芝加哥法令 |
建模参考:Schelling (1971) Dynamic Models of Segregation —— 逐户迁居规则的 出处;以及 2025 年 JAPA 关于轨道交通诱发绅士化的准实验研究——这正是环境里 要把车站与防迁移广播成对投放的理由:文献说族裔构成的变化方向可正可负。
resources.json 按名字记录了本次运行真正消费的两个数据集
(chicago_tracts.geojson、cta_stations.geojson),不含任何 endpoint 或
key——见外部能力。
可以 fork 什么¶
adjustable_params,每条都按「改这个,是为了问那个问题」来读:
| 参数 | 它打开的问题 |
|---|---|
n_steps |
D_bw 是稳定在更高位,还是缓慢回落?3 步答不了。 |
seed |
+0.0304 里有多少只是单个随机种子的迁移抽样? |
| 干预普查区与步数 | 把车站放到一个处于 tipping 带内的普查区:可达性能否融合一个混居社区,哪怕它融合不了一个已隔离社区? |
| 政策广播文本 | 现有文本承诺防迁移,却没给任何人「搬进来」的理由。加一条面向全市的定向吸引广播做 A/B。 |
| metrics 子集 | 当问题是「接触」而非「聚集」时,把 Isolation_black 换成 exposure 系列指标。 |
复用靠 fork 而不是改动:本研究 reference: true,sv-init 会把匹配的问题
路由到它的一个 fork。缝合与 adapter 的机制见
包装既有模拟器(Path C),变体如何被快照见
迭代、版本与报告。