Beyond Predicting Responses: Conformal Inference for Latent Distributional Parameters¶
作者: Minxing Zheng, Wenbin Zhou, Shixiang Zhu
主题: 因果推断
相关性: 7/10
链接: https://arxiv.org/abs/2608.03607
一、领域脉络与小综述¶
这个方向是什么¶
本文研究的子方向是为不可观测的、实例特定的分布参数构建不确定性集合。其根本的统计问题是:在层次数据生成机制中,每个实例有一个控制其观测响应分布的潜在参数,但该参数在历史与未来实例中均不可观测;研究者仅能观测到上下文-响应对和一个已知的前向模型(forward model),如何为新的实例的潜在参数构造一个具有有限样本覆盖保证的预测集?该方向当前处于早期发展阶段——核心挑战在于将共形预测(conformal prediction)的分布自由、有限样本保证从可观测响应空间转移到不可观测的潜在参数空间,而现有方法要么需要潜在标定标签,要么需要知道潜在参数的总体分布。
发展脉络¶
-
奠基工作:共形预测的建立与扩展。 Shafer and Vovk [2008] 和 Lei et al. [2018] 建立了共形预测的基本框架,为可观测响应提供了分布自由的有限样本预测集。Angelopoulos and Bates [2021] 提供了该领域的温和入门。这些工作确立了共形预测的核心优势:无需分布假设、有限样本边际覆盖保证。留下的口子:共形预测要求预测目标在标定数据中可观测,因此无法直接应用于潜在参数。
-
主要进展:共形预测向不可观测目标的扩展。 一系列工作试图将共形预测应用于标定数据中目标不完整或不可观测的场景。Einbinder et al. [2024] 研究了标签噪声下共形集的鲁棒性;Feldman et al. [2025] 处理了噪声或缺失标签;Javanmardi et al. [2023] 推广到集值、部分观测标签。对于本质不可观测的量,Alaa et al. [2023] 提出了共形元学习器(conformal meta-learners),利用伪结果和随机占优条件为个体处理效应构建区间。Lei and Candès [2021] 在潜在结果框架下为反事实和个体处理效应提供了共形推断。留下的口子:这些方法要么需要一个误差模型(corruption model)、要么需要一个候选标签集、要么需要一个伪结果,其分布近似于不可观测的潜在误差。它们没有直接利用前向模型来评估每个候选潜在参数的兼容性。
-
当前前沿:概率与生成式共形方法。 Wang et al. [2023] 和 Zheng and Zhu [2024] 提出了概率共形预测,利用条件生成模型的样本来构建灵活的、可能不连通的预测区域。这些方法丰富了响应空间共形集的形式,但其目标仍是可观测响应。留下的口子:这些响应空间共形集可以被用作中间对象,通过前向模型反演到潜在参数空间。
-
本文的位置: 本文提出 LatentCP,通过一个简单的视角转换——先在可观测响应空间校准不确定性,再通过前向模型将其转移回潜在空间——从而在无需潜在标定标签或混合分布知识的情况下,为潜在分布参数提供有限样本覆盖保证。本文还引入了一个多水平聚合程序,通过e-value视角组合多个响应空间误覆盖率下的证据,以提高效率。
子线索聚类¶
-
共形预测的扩展(响应空间)。 包括:标准共形预测 [Shafer and Vovk, 2008, Lei et al., 2018, Angelopoulos and Bates, 2021];功能响应 [Lei et al., 2015, Diquigiovanni et al., 2022];时间序列 [Zaffran et al., 2022, Xu et al., 2024];结构化输出 [Zargarbashi et al., 2023, Lekeufack et al., 2024, Cherian et al., 2024];概率/生成式共形 [Wang et al., 2023, Zheng and Zhu, 2024]。这一簇的核心是为可观测响应构建更灵活、更复杂的预测集。
-
共形预测向不可观测目标的扩展。 包括:标签噪声下的共形 [Einbinder et al., 2024, Feldman et al., 2025];部分观测标签 [Javanmardi et al., 2023];共形元学习器 [Alaa et al., 2023];反事实共形 [Lei and Candès, 2021]。这一簇的核心是通过某种代理或转换,将共形保证从可观测目标转移到不可观测目标。
-
潜在变量推断(经典方法)。 包括:EM算法 [Dempster et al., 1977, Balakrishnan et al., 2017];贝叶斯后验 [Tanner and Wong, 1987, Hoffman and Gelman, 2014];经验贝叶斯 [Efron and Morris, 1973, Soloff et al., 2025];变分推断 [Blei et al., 2017];模拟推断 [Beaumont et al., 2002, Lueckmann et al., 2021]。这一簇的核心是利用似然或模拟来估计潜在状态或混合分布,但通常需要指定或估计潜在参数的总体分布,且其不确定性估计对误设敏感 [Kleijn and van der Vaart, 2006]。
-
e-value与不确定性集合并。 包括:e-value理论 [Vovk and Wang, 2021];共形e-预测 [Gauthier et al., 2025];不确定性集合并 [Gasparin and Ramdas, 2024, Alami et al., 2026]。这一簇提供了组合证据和合并集合的理论工具,本文的多水平聚合直接利用了e-value的一阶矩性质。
这个方向在追问的核心问题¶
- 如何在不观测潜在标定标签的情况下,为潜在参数提供有限样本覆盖保证? 这是本文直接回答的问题。现有方法要么需要标签(共形预测),要么需要总体分布(贝叶斯/经验贝叶斯)。
- 如何选择响应空间的误覆盖率γ以优化潜在集效率? 本文发现潜在集效率对γ呈非单调依赖,并提出了基于独立调优样本的选择方法。
- 如何组合多个响应空间误覆盖率下的证据以提高效率? 本文通过e-value视角提出了多水平聚合程序,并证明了其有效性。
- 当前主流方法与已知瓶颈: 主流方法(经验贝叶斯、似然法、代理标签共形)在弱识别、观测非可识别性、潜在异质性下可能严重欠覆盖。瓶颈在于它们要么依赖对潜在总体分布的正确设定,要么依赖一个唯一的逆映射,而这些在本文设定的问题中通常不可得。
⚠️ 作者的 framing¶
这是作者的说法: 作者将缺口 frame 成“无需潜在标定标签、唯一逆映射或潜在混合分布知识,即可提供有限样本边际覆盖保证”。他们将自己的方法定位为“共形预测与潜在变量推断的交集”,并强调其“prior-free”和“mixing-law robustness”特性。
被淡化或回避的竞争路线: - 贝叶斯/经验贝叶斯方法被描述为“对误设敏感”,但作者没有深入讨论当混合分布π(·|x)可以被合理估计时(例如,通过NPMLE [Soloff et al., 2025]),这些方法在效率上的潜在优势。本文的合成实验显示,当这些方法的假设成立时,它们可以很高效,但经常欠覆盖。 - 条件覆盖被明确列为局限性(“marginal rather than conditional coverage”),但作者没有讨论如何将本文框架扩展到条件覆盖,也没有与提供条件覆盖的方法(如某些贝叶斯方法)进行深入比较。 - 前向模型的正确设定被列为关键假设。作者没有讨论当Pθ(·|x)被误设时,覆盖保证会如何退化,也没有提供稳健性程序。
什么明显该被引/该存在、却没出现在intro里? - 关于条件共形预测(conditional conformal prediction)的文献,例如 Barber et al. (2021) 或 Romano et al. (2019) 关于通过分位数回归实现条件覆盖的工作。本文的覆盖是边际的,而条件覆盖是更理想的目标。讨论为何条件覆盖在潜在参数设定下更难实现,以及本文的边际保证在什么意义上仍然有用,会是一个有价值的补充。 - 关于反事实预测与不确定性量化的更广泛文献,特别是与本文设定(已知结构模型,但潜在变量不可观测)相关的因果推断工作。虽然引用了 Lei and Candès [2021] 和 Alaa et al. [2023],但可以更系统地讨论与因果推断中“识别”问题的联系。
张力¶
未见明显对立引用。被引工作之间没有在略不同条件下得出相反结论的情况。它们主要是在不同设定下解决不同的问题,本文则试图填补一个明确的空白。
二、最核心、最简单的例子 / 数学问题¶
第一步:把符号、模型、可观测数据交代清楚¶
- 符号:
X ∈ X:上下文变量(可观测的协变量)。θ ∈ Θ:潜在分布参数(不可观测的、实例特定的参数)。Y ∈ Y:响应变量(可观测的)。P_X:上下文的边际分布。π(· | x):给定上下文x时,潜在参数θ的条件分布(未知的混合分布)。P_θ(· | x):给定上下文x和潜在参数θ时,响应的条件分布(已知的前向模型)。D_n = {(X_i, Y_i)}_i=1^n:由n个上下文-响应对组成的标定数据集。对应的潜在参数θ_1, ..., θ_n是不可观测的。(X_{n+1}, θ_{n+1}, Y_{n+1}):一个新的实例。X_{n+1}可观测,θ_{n+1}和Y_{n+1}不可观测。α ∈ (0, 1):目标潜在空间误覆盖率。γ ∈ (0, α):响应空间误覆盖率(辅助参数)。-
U_α(X_{n+1}):为θ_{n+1}构建的潜在不确定性集合,目标是P(θ_{n+1} ∈ U_α(X_{n+1})) ≥ 1-α。 -
模型:
- 数据生成机制是一个层次模型:
X ~ P_Xθ | X = x ~ π(· | x)(潜在异质性)Y | (X=x, θ) ~ P_θ(· | x)(前向模型)
-
关键假设:
- 前向模型
{P_θ(· | x) : θ ∈ Θ}是已知的,且可以计算。 - 混合分布
π(· | x)是未知的。 - 上下文-潜在参数对
{(X_i, θ_i)}是可交换的(Assumption 1)。
- 前向模型
-
可观测数据:
- 研究者实际能观测到的是:
n个上下文-响应对{(X_i, Y_i)}_i=1^n,以及新实例的上下文X_{n+1}。 - 想要但观测不到的是:所有实例的潜在参数
θ_1, ..., θ_{n+1},以及新实例的响应Y_{n+1}。
第二步:讲最小内核¶
本文的核心思路可以归结为一个最简特例:高斯位置模型,无上下文(即X是常数)。
- 设定:
- 上下文
X是常数,可以忽略。 - 潜在参数
θ是实数,θ ~ π(·),π未知。 - 前向模型:
Y | θ ~ N(θ, 1),即P_θ是均值为θ、方差为1的高斯分布。 - 可观测数据:
D_n = {Y_1, ..., Y_n},其中Y_i ~ N(θ_i, 1),θ_i ~ π(·)。 - 新实例:
θ_{n+1}未知,Y_{n+1}未观测。 -
目标:为
θ_{n+1}构建一个1-α水平的预测集U_α。 -
最小内核操作:
-
响应空间共形预测:选择一个非一致性得分,例如
S(y) = |y - median(Y_1, ..., Y_n)|。在标定数据上计算得分,得到(1-γ)分位数q_{1-γ}。构建响应空间共形集C_γ = [median - q_{1-γ}, median + q_{1-γ}]。根据共形预测理论,P(Y_{n+1} ∈ C_γ) ≥ 1-γ。 -
前向兼容性:对于任意候选潜在参数
θ,计算其前向兼容性:p_γ(θ) = P_{Y ~ N(θ, 1)}(Y ∈ C_γ) = Φ(q_{1-γ} - (θ - median)) - Φ(-q_{1-γ} - (θ - median)), 其中Φ是标准正态CDF。p_γ(θ)是θ的分布落在共形集C_γ内的概率。 -
反演:定义潜在不确定性集为:
U_α(γ) = {θ ∈ R : p_γ(θ) ≥ 1 - γ/α}。 这个集合包含了所有其前向分布与响应空间证据“足够兼容”的θ。 -
为什么成立(直觉):
- 令
R_γ = 1 - p_γ(θ_{n+1})为真实潜在参数θ_{n+1}的分布落在C_γ外的概率。 - 由共形预测保证,
E[R_γ] = P(Y_{n+1} ∉ C_γ) ≤ γ。 - 事件
θ_{n+1} ∉ U_α(γ)等价于R_γ > γ/α。 - 由马尔可夫不等式:
P(θ_{n+1} ∉ U_α(γ)) ≤ E[R_γ] / (γ/α) ≤ γ / (γ/α) = α。 -
因此,
P(θ_{n+1} ∈ U_α(γ)) ≥ 1-α。 -
核心数学困难:这个最小内核展示了本文的核心思想:将响应空间的共形保证,通过前向模型和马尔可夫不等式,转化为潜在空间的覆盖保证。一般情形下的主要工作是处理有上下文的情况、更复杂的前向模型、以及如何选择最优的
γ(包括多水平聚合)。
三、这篇论文做了什么¶
三句话¶
- 研究了什么问题:在已知前向模型但未知潜在混合分布、且潜在参数在历史与未来实例中均不可观测的设定下,如何为实例特定的潜在分布参数构建具有有限样本边际覆盖保证的不确定性集合。
- 核心工具/方法:提出了 LatentCP 框架,该框架首先在可观测响应空间构建一个共形预测集,然后根据每个候选潜在参数诱导的响应分布赋予该集合的概率来反演保留候选参数。进一步,通过将归一化的不兼容性得分视为e-value,引入了一个多水平聚合程序来组合多个响应空间误覆盖率下的证据。
- 主要结论:LatentCP 在无需潜在标定标签、唯一逆映射或混合分布知识的情况下,为潜在参数提供了有限样本边际覆盖保证(Theorem 1)。其多水平扩展(Theorem 2)在保持有效性的同时,可以(在某些设定下)提高效率。合成实验表明,在弱识别、观测非可识别性和潜在异质性下,LatentCP 维持了名义覆盖,而经验贝叶斯、似然法和代理标签共形方法则严重欠覆盖。
关键设定与假设¶
- Assumption 1 (Exchangeable context-latent pairs and conditional response generation):上下文-潜在参数对
{(X_i, θ_i)}是可交换的,且给定这些对后,响应是独立地从各自的前向分布中生成的。这个假设是共形预测有效性的基础。它比独立同分布假设稍弱,允许潜在参数分布依赖于上下文,但要求这种依赖关系在实例之间是可交换的。 - 已知前向模型:
{P_θ(· | x) : θ ∈ Θ}是已知的,并且可以计算其概率(或密度/质量函数)。这是本文方法的核心输入,也是与贝叶斯/经验贝叶斯方法相比,本文方法所需的最关键的结构性知识。 - 未知混合分布:
π(· | x)是未知的,且不需要被估计。这是本文方法相对于贝叶斯/经验贝叶斯方法的主要优势——它提供了对混合分布误设的鲁棒性。 - γ ∈ (0, α):响应空间误覆盖率
γ必须严格小于目标潜在空间误覆盖率α。这是马尔可夫不等式转移保证成立的必要条件。 - ν ∈ P(Γ) 固定:对于多水平构造,聚合分布
ν必须在独立于标定数据和新实例的调优样本上预先选定。这是保证条件有效性(conditional on tuning sample)的关键。
主要结果¶
- Theorem 1 (Finite-sample validity of LatentCP):对于任何固定的
γ ∈ (0, α),由公式(5)定义的潜在不确定性集U_α(x; γ)满足P(θ_{n+1} ∈ U_α(X_{n+1}; γ)) ≥ 1-α。 - 直觉:通过马尔可夫不等式,将响应空间的
γ级误覆盖率放大到潜在空间的α级。 - 必要条件:Assumption 1 成立,且
γ < α。 -
解决的技术难点:如何在不观测
θ_{n+1}的情况下,将响应空间的共形保证“转移”到潜在空间。关键技巧是使用前向兼容性p_γ(θ, x)作为桥梁。 -
Theorem 2 (Validity of the randomized construction):对于任何在独立于标定数据和新实例的集合
Γ ⊂ (0, α)上固定的概率分布ν,由公式(6)定义的e-value基潜在不确定性集U_α(x; ν)满足P(θ_{n+1} ∈ U_α(X_{n+1}; ν)) ≥ 1-α。 - 直觉:归一化的不兼容性得分
e_γ(θ, x)在真实潜在参数处是一个e-value(期望≤1)。对e-value进行平均仍然是一个e-value,因此马尔可夫不等式仍然适用。 - 必要条件:Theorem 1 的条件,且
ν固定。 -
解决的技术难点:如何组合多个响应空间误覆盖率下的证据而不破坏覆盖保证。关键技巧是认识到
e_γ的e-value性质,使得加权平均成为可能。 -
Proposition 1 (Sandwich property):对于有限集合
Γ = {γ_1, ..., γ_K}和离散分布ν = Σ w_k δ_{γ_k},多水平聚合集U_α(x; ν)严格介于所有固定水平集的交集和并集之间:∩_k U_α(x; γ_k) ⊆ U_α(x; ν) ⊆ ∪_k U_α(x; γ_k)。 - 直觉:加权平均的e-value不会比所有单个e-value都大(否则会小于交集),也不会比所有单个e-value都小(否则会大于并集)。
- 解决的技术难点:揭示了多水平聚合的几何性质,解释了为什么它既可能缩小也可能扩大集合,取决于不同水平提供的信息是否互补。
证明路线与技术技巧¶
- 整体路线(Theorem 1):
- 定义随机变量:定义
R_γ = 1 - p_γ(θ_{n+1}, X_{n+1}),即真实潜在参数的前向分布落在响应共形集C_γ外的概率。 - 建立矩约束:由共形预测的边际覆盖保证(公式(3))和全期望公式,证明
E[R_γ] = P(Y_{n+1} ∉ C_γ(X_{n+1}; D_n)) ≤ γ。 - 应用马尔可夫不等式:事件
θ_{n+1} ∉ U_α(X_{n+1}; γ)等价于R_γ > γ/α。应用马尔可夫不等式:P(R_γ > γ/α) ≤ E[R_γ] / (γ/α) ≤ γ / (γ/α) = α。 -
结论:因此
P(θ_{n+1} ∈ U_α(X_{n+1}; γ)) ≥ 1-α。 -
整体路线(Theorem 2):
- 定义e-value:定义
e_γ(θ, x) = (1 - p_γ(θ, x)) / γ。由Theorem 1的证明可知,E[e_γ(θ_{n+1}, X_{n+1})] ≤ 1。 - 构造聚合e-value:对于分布
ν,定义e_ν(θ, x) = ∫ e_γ(θ, x) dν(γ)。由Tonelli定理和线性期望,E[e_ν(θ_{n+1}, X_{n+1})] = ∫ E[e_γ(θ_{n+1}, X_{n+1})] dν(γ) ≤ 1。 - 应用马尔可夫不等式:事件
θ_{n+1} ∉ U_α(X_{n+1}; ν)等价于e_ν(θ_{n+1}, X_{n+1}) > 1/α。应用马尔可夫不等式:P(e_ν > 1/α) ≤ α * E[e_ν] ≤ α。 -
结论:因此
P(θ_{n+1} ∈ U_α(X_{n+1}; ν)) ≥ 1-α。 -
关键跳跃点:
- 从响应空间覆盖到潜在空间覆盖的转移:这是本文最核心的跳跃。它不依赖于任何关于
θ_{n+1}的分布假设,仅依赖于响应空间的共形保证和前向模型。马尔可夫不等式是这一跳跃的数学工具。 -
e-value视角的引入:认识到
e_γ是一个e-value,使得多水平聚合变得自然且有效。这个视角将问题从“组合集合”转变为“组合证据”,并允许使用e-value的简单平均性质。 -
技术技巧点名:
- 共形预测 (Conformal Prediction):用于在响应空间构建具有有限样本保证的预测集
C_γ。 - 马尔可夫不等式 (Markov's Inequality):用于将响应空间的误覆盖率
γ放大到潜在空间的误覆盖率α。 - e-value (E-values):用于将归一化的不兼容性得分
e_γ识别为e-value,从而允许通过加权平均进行聚合,且保证聚合后的统计量仍为e-value。 - Tonelli定理 (Tonelli's Theorem):用于交换期望和积分,证明聚合e-value的期望不超过1。
- 独立调优样本 (Independent Tuning Sample):用于选择最优的
γ或聚合分布ν,而不破坏标定数据的独立性,从而保证Theorem 2的条件有效性。
真实例子与应用¶
- 数据:Monitoring Trends in Burn Severity (MTBS) 记录的1984-2023年加州1,689次大型野火事件。
- 场景:预测每个空间单元(县或50公里网格)在未来四年窗口内的潜在火灾发生率
λ。前向模型是Y | λ ~ Poisson(Δλ),其中Y是观测到的火灾次数,Δ是面积-时间暴露量。上下文X包括空间坐标、时间、历史火灾率等。 - 方法应用:
- 在1984-2003年的数据上拟合一个梯度提升模型来预测火灾次数。
- 在2004-2007年的调优样本上选择最优的响应空间误覆盖率
γ(通过最小化潜在集大小)。 - 在2008-2015年的标定样本上重新校准共形响应集
C_γ。 - 对于2016-2023年的每个测试上下文,构建潜在不确定性集
U_α(X) = {λ : P_{Y~Poisson(Δλ)}(Y ∉ C_γ) ≤ γ/α}。 - 结果:
- 调优后的
γ = 0.0278。 - 响应集在测试集上的经验覆盖率为0.992。
- 与固定选择
γ = α/2相比,调优将平均潜在集大小从0.551降低到0.490,降低了11.1%。 - 多水平聚合在该应用中没有带来额外收益(最优的两水平聚合退化为单水平)。
- 图7展示了县级的潜在强度不确定性地图,揭示了空间异质性。
- 这个例子想说明什么:
- 验证理论:展示了LatentCP在真实数据上能够产生有效的覆盖(响应集覆盖接近名义水平)。
- 展示实用性:展示了如何将响应级的不确定性(预测火灾次数)转化为更有意义的潜在级不确定性(预测火灾发生率),后者可以用于长期规划决策。
- 展示调优的价值:通过独立调优样本选择
γ可以显著提高效率。 - 说明多水平聚合的局限性:在某些应用中,单水平调优可能就足够了,多水平聚合不一定带来额外收益。
🔎 结论是否比证明窄¶
- 条件覆盖 vs. 边际覆盖:论文明确承认其保证是边际的(marginal),而非条件的(conditional)。这是一个重要的窄化。证明严格建立了
P(θ_{n+1} ∈ U_α(X_{n+1})) ≥ 1-α,但并未声称P(θ_{n+1} ∈ U_α(x) | X_{n+1}=x) ≥ 1-α。在应用中,对于某些特定的x,实际覆盖可能远低于名义水平。 - 前向模型正确设定:证明依赖于前向模型
P_θ(·|x)是正确指定的。论文在“Conclusion and Discussion”中将其列为局限性,但并未提供任何关于模型误设下的理论保证或稳健性程序。因此,结论严格限制在前向模型正确的前提下。 - 多水平聚合的效率优势:Theorem 2 证明了多水平聚合的有效性,但并未保证其效率优势。Proposition 1 的夹逼性质表明,聚合集可能比最好的单水平集更大(当稀释了强信号时)。论文通过合成实验(图3(d))展示了效率优势可能发生,但也通过其他实验(图3(a-c))展示了它可能不发生。因此,结论是“多水平聚合可以(但不总是)提高效率”,而非“多水平聚合总是更高效”。
四、开放问题¶
-
条件覆盖:如何将 LatentCP 从边际覆盖扩展到条件覆盖?这需要构建一个依赖于上下文
x的响应空间共形集C_γ(x),并保证其条件覆盖。这通常需要更强的假设(如局部可交换性)或更复杂的非一致性得分(如分位数回归)。扎根点:论文在“Conclusion and Discussion”中明确提到“The framework provides marginal rather than conditional coverage”。 -
前向模型误设:当已知的前向模型
P_θ(·|x)被误设时,LatentCP 的覆盖保证会如何退化?能否设计一个对模型误设稳健的程序?例如,能否通过一个保守的模型类或一个校准步骤来吸收误设?扎根点:论文在“Conclusion and Discussion”中明确提到“relies on an adequately specified forward model”和“Extending it to forward-model misspecification”。 -
高维或分布值潜在参数:当
θ是高维或函数值(如一个分布)时,如何高效地评估前向兼容性p_γ(θ, x)并构建不确定性集?论文在连续参数空间中使用网格法,这在低维是可行的,但在高维会遭遇维数灾难。能否利用现代技术(如变分推断、生成模型)来近似兼容性评估?扎根点:论文在“Conclusion and Discussion”中明确提到“high-dimensional or distribution-valued latent parameters constitutes important future work”。 -
计算可扩展性与统计-计算权衡:对于高维
θ,评估p_γ(θ, x)的计算成本可能很高。是否存在一个统计-计算权衡?即,为了获得计算上可行的程序,是否需要牺牲一些统计效率(例如,更大的不确定性集)?这与研究者的“statistical-computational tradeoff”兴趣高度相关。扎根点:论文在“Computational Implementation”部分讨论了计算复杂度,但未涉及统计-计算权衡。这是一个自然的延伸。
Maintained by 陈星宇 · Homepage · Source on GitHub