林澈第一次翻开南桥市“青年技能跃迁计划”的结业表,首先映入眼帘的是密密麻麻的“4,000 元”字样和大面积的留任栏空白。对外行而言,这些空白和雷同金额似乎只是系统漏填或数据污染,但林澈明白,这是系统在给流程和现实留下一道道细缝:有些年轻人的身影被信息遮蔽,有些人的记录根本没有出现在表中,有些人的结果尚未发生,因而无法被捕捉。
自 2021 年启动以来,这个项目面向完成基础测评的青年提供课程券、面试辅导和企业对接等支持。表格里出现的姓名、金额和各种记录其实都经过编码处理,仅供教学模拟。对分析者而言,处理这样的数据并不意味着要把每个空白格填上数值,而是首先要厘清:哪些人被包含在表内,系统具体暴露了多少信息,以及每种结果的空缺究竟代表怎样的过程状态。
在林澈看来,理解“谁被看到、被看到多少、哪些结果其实还未发生或未有记录”,是分析前绕不开的第一道门——如果不能分辨这些状态混杂在一起,后续所有定量分析都很容易被误导。

结业后三个月,林澈能在名册里找到安宁,也能找到柏舟。两人的收入栏都显示“未超过报告线”,却不是没有记录;系统仍告诉她,两人的真实月收入不高于 4,000 元。她先把这两行标成区间信息,而不是把它们改写成精确的 4,000。
同一张名册里,未被合作企业录用的学员仍有姓名、课程券和联系记录,却没有“本企业留任天数”。林澈没有把这格补成零,因为未进企业与进企业后立即离职不是同一件事。她意识到,结果变量是否已产生,比单元格是否为空更先要判断。
林澈还发现,最近一批学员的企业回传较慢。若她不保留导出日期、阈值版本和回访状态,最近批次会显得收入更低、录用更少。她把每一步发生的日期写进观察流程,避免将后台延迟误读为项目变化。
她给自己定了一个简单任务:每得到一列受限结果,先写一句完整的话——“谁进入了这张表、这个人知道到什么程度、观察在哪一天结束”。这句话若写不出来,任何回归式都还没有开始的资格。有一次,林澈发现某个月边界收入突然翻倍。她没有先解释为项目服务变差,而是回到流程表,发现线上表单刚把低端收入改成了统一选项。记录规则的改变足以改变分布外观,必须和经济变化分开报告。
观察机制也决定变量的时间零点。收入可以以结业后三个月为参考,录用以正式通知为结果时点,留任却应从实际到岗日起算。把不同起点混在同一张“项目后表现”表里,会把求职等待、岗位匹配和留任混成一个指标。
林澈先做了一次小测试,把两种典型记录分别处理:
表面上,这两种做法都导致了低收入数据的缺失,但实际上,背后涉及的统计处理却完全不同:
在实际分析中,这类差异直接影响后续统计模型的选择和分析的严密性。林澈因此在测试后,特别提醒自己和同事:每种缺失形式都要分开标注、分开思考,不能简单视作“数字丢失”处理。
当人仍在表中、真实值只在边界一侧可知,叫删失。只有满足条件的人能出现在导出表中,叫截断。某个结果只在通过另一道门之后才出现,例如留任只对录用者记录,叫样本选择。名称不是考试标签,它告诉你样本到底留下了什么证据。
时间会再添一层限制。结案日仍在岗者的离职尚未发生在观察窗内,属于右删失;系统要到入职满三十天才建档,意味着更早离职者可能完全不在记录里,属于延迟进入。林澈不会因为它们都带有“未完成”状态,就用同一种办法处理。她把“拒绝回答”也单独留在状态码里。拒答并不自动表示收入低于线,随机抽样后未回访也不自动表示按结果截断。只有知道业务规则和发生顺序,才可把一个空白解释成区间、选择或普通未响应。
这种命名会直接改变分析问题。删失时你尚可利用边界组人数,截断时必须承认文件只描述条件样本,选择时则先确认结果对谁有定义。即使三种情形都让样本变小,保留下来的证据并不相同。
林澈在练习中让同事先不看模型名,只用“人还在不在”“值知道到哪一步”“结果是否已经开始”给每行记录分类。多数混淆在这三句话里就会暴露,不需要等到回归结果相互矛盾才发现。
林澈把六位学员的电话回访单排在桌上。安宁真实收入可能是 2,700 元,柏舟可能是 3,950 元,页面都只写“≤4,000”;楚望的 4,080 元和岑遥的 5,600 元则精确显示。把前两人一律当成挣了 4,000 元,会让低端收入看起来更高、更整齐。
她没有立刻运行 Tobit,而是先检查 4,000 元堆积是否来自系统。若某企业使用不同报告线,或电话回访比线上填报更常出现边界值,单一规则就不成立。最低工资、补贴资格和工资档位也会制造真实的阈值聚集,不能只凭直方图宣布数据被删失。
林澈还比较了课程券组和未获券组中边界行的比例。若一组更常落在边界,简单比较精确收入者的均值会自动丢掉不同数量的低端记录。她先展示这层构成差异,再讨论课程券与收入的关联。
当林澈确认真实收入可看作连续过程,而页面把不高于报告线的一侧压平后,才用两层方程表达这个故事。第一层描述潜在收入,第二层描述页面显示;(c) 是 4,000 元报告线。
这两行没有找回安宁的真实工资。它们让边界组贡献“收入在这一侧”的信息,让精确组贡献数值形状。林澈因此分别查看跨线概率、潜在收入变化和观测收入变化,不把一列系数简化成课程券唯一的收入效应。
她随后把普通回归与删失规格放在同一张工作纸上,但不把它们当作可以互换的答案。若课程券只帮助学员跨过报告线,几乎不影响高收入段,或不同行业的波动差别很大,单一潜在方程就需要被质疑。

后来,林澈收到另一份文件。文件名仍写“结业收入”,但管理员只导出了收入高于 4,000 元的行。安宁和柏舟这次连编号也不在;林澈不知道文件外有多少人,更不能把导出表平均收入写成全体结业者平均收入。
她意识到,这不是把边界行删掉以后仍可照用删失模型的场景。记录能否出现已由收入越线决定,样本分布被重新筛过。未获课程券却能进入文件的人,可能拥有更强经验、通勤或行业资源,因此条件样本中的比较会改变原有构成。
例如,课程券组有七成越过报告线,未获券组只有四成越过线。导出后留下的未获券者未必是原组的平均成员,而可能更接近资源丰富的少数。林澈不会把导出后的两组差异直接说成课程券的总体效应。
条件化并不总是错误。若问题本来就是为高收入岗位提供服务画像,林澈可以描述已越线者的行业和技能;她只需把分母写清楚。问题出在把条件样本的图景误说成完整项目名册的图景。
若每个人的阈值 (a) 已知,且导出确实只按公开阈值执行,林澈可以将“被看见的机会”写进条件密度。公式中的分母正是超过线的概率,不是为了使式子更复杂。
但这条公式不能修复未知的人工挑选。若企业只上传“表现亮眼”的人,或回访员优先联系看似高收入者,林澈要找回完整名册、导出条件和筛选日志;没有这些记录,她只能诚实描述“高于报告线的已见结业者”。
她把报告标题也改掉了。与其写“课程券提高青年收入”,不如写“在收入高于报告线的结业者中,课程券状态与报告收入的条件关联”。这不是保守措辞的装饰,而是在提醒读者:文件之外的人没有被模型看见。
这样写还能让后续服务更准确。若项目组只想了解越线者的岗位去向,林澈就把它作为条件画像交付;若项目组想判断全体收入改善,她就要求恢复名册和阈值外记录,而不是把两种目的塞进同一张回归表。

企业端的表让林澈更谨慎。只有被录用者拥有工号,因而只有他们有入职、离职和在岗天数。未录用者可能已经在别处工作,也可能仍在求职;无论哪种情况,“在这家企业留任多久”对他们都没有与录用者相同的定义。
林澈首先把涉及课程券和企业留任的核心问题分为三类,并明确梳理:
课程券是否提高了学员被录用的机会?
在已被录用的人中,课程券状态是否与留任时长(或稳定性)有关?
如果所有合格学员都获得同等录用机会,课程券将如何影响潜在的留任时长?
这三类问题各有价值,但“分母”不同:有的以所有学员为基础,有的只聚焦录用者;同时,所要求的因果推断条件也各不一样。例如,分析留任时长是否受课程券影响时,样本仅限于被录用的人,已无法涵盖所有课程券持有人及非持有人。
企业端的留任表,通常只能直接回答第 2 个问题:在被企业录用者内部,不同课程券状态与留任之间的条件关联。若需回答第 1 个或第 3 个问题,则必须获得更完整的录用数据或外部信息。
她画出一张小图:课程券、课程表现、通勤稳定性和岗位空缺都指向录用;通勤稳定性和岗位质量又指向留任。只分析录用者,相当于站在多种原因共同决定的门后比较两组人。偏误可能变大、变小或反向,不能预先猜定方向。
林澈拿通勤作例子:没有课程券却被录用的学员,可能平均拥有更近的住处或更强经验;获得课程券后被录用的学员,构成又可能不同。两组在门后出现的差异,未必来自课程券进入岗位后的作用。
这也是为什么“控制录用与否”并非自动补救。录用发生在课程券之后,既可能承接课程券的作用,也可能成为多个原因碰撞的选择点。研究者必须先说清估计的是哪一种条件关系,才可决定是否建模该门。
当林澈要采用经典选择模型时,她先把条件说完整:给定 后, 联合正态,条件均值为零, 的条件方差为 , 的条件方差为 1,并允许两者相关。
逆米尔斯比在这里是模型根据录用概率生成的校正项,不是自动消偏按钮。林澈还需要说明哪些录用前因素已测量,以及是否存在可信变量只影响录用、却没有合理路径直接影响留任;课程券若本身分配不随机,选择模型也不能替她处理这一层混杂。
本例留任时长还可能右删失,该式仅说明录用选择机制,不能替代持续时间模型;若同时估计录用选择和右删失,应采用与两机制相容的联合选择—生存模型,否则结论仅限受聘者中的条件描述。
结案日是 2025 年 12 月 31 日。一位学员在十一月实际入职,到结案日仍在岗;林澈知道的只是他至少留任到结案日,而不是他已经失败或永远不会离职。她把这个人保留在风险集中,直到结案时才停止观察。
另一位学员九月失联。林澈保留其最后确认在岗日和失联原因,却不假定失联后的离职风险更高或更低。删除这位学员带来的偏误方向取决于失联与未来离职风险的关系,必须通过失联前特征和情景分析讨论。
还有一位学员在实际入职满三十天才被系统建档。林澈保留实际入职日和进入日,并让风险集自实际入职后第 30 天的进入日开始;早于进入日已经离职的人不一定有机会出现,不能被当作从入职首日就持续被观察。

她把四条时间线贴在白板上:一条在八月离职,一条结案仍在岗,一条九月失联,一条满三十天才出现。只有把每条线的开始、停止和事件逐一标出,团队才不会把“尚未发生”“未被记录”和“已经离职”混为一种零值。
持续时间分析先承认事件时间可能尚未知晓,再保存最小观察时长和事件指标。令 (T_i) 为真实离职时间,(C_i) 为结案或失联时间,林澈记录的是下面两项,而不是一列粗糙的“留满六个月”。
林澈用生存函数描述留任超过某时长的概率,并在曲线旁标出每个时点仍在风险集的人数。她比较课程券组时也检查入职月份、企业和岗位;如果失联集中在不稳定岗位,或两组入职季节不同,一条漂亮的曲线并不能自己证明课程券造成差异。
林澈没有把每个受限结果都交给同一套“修复”方法。收入边界保留的是区间信息,截断文件缺的是人,受聘者留任面对的是结果定义与进门选择,结案前在岗面对的是事件尚未发生。删失、截断、选择和加权对应不同观察机制,不能互换。
她考虑逆概率加权时,先问结果是否对目标总体每个人都已定义。若回答的是“本企业留任”,未录用者并没有这个结果,加权不能把它变成全体学员结论;若回答的是全体都有定义的稳定就业,她才继续判断进入观察是否能在基线特征条件下看作随机。
在这个较窄的问题里,权重让按基线特征看不易被观察到、却恰好被观察到的人代表更多相似对象。它依赖选择前信息足够、每类人都存在被观察机会,以及极端权重不会让少数记录决定结果。
若某类有照护责任的学员从未被合作企业录用,林澈不会试图用无限大的权重制造他们的本企业留任。重叠不足不是软件警告可以忽略的小问题,而是在告诉她:数据没有提供这一类人的可比较证据。
林澈会检查加权前后的基线差异、预测概率是否贴近零或一,以及敏感性结论是否改变。若关键的求职动力、岗位质量或失联原因根本没有测量,她不会用一组权重伪装成已经解决选择问题,而会把结论收缩为条件描述。
她也把下一轮的数据改造写进建议:保留完整名册、报告线版本、录用前特征、岗位空缺、最后在岗日期和失联原因。对管理者而言,补一列能解释“谁被看见”的字段,常常比在旧表上叠加一个更复杂模型更有用。
最终交付前,林澈把分析报告从系数表改成一段读得懂的路径。她先写项目名册人数,再写收入边界人数、导出后人数、录用人数、仍在风险集人数和失联人数。这样,读者不用猜测每个结果到底来自谁。
她给收入结果写道:“在完成测评且仍在名册中的学员中,不高于 4,000 元的月收入以边界状态保留;以下估计利用该区间信息。”她给留任结果写道:“合作企业录用者以实际入职日为时间零点,自各自建档进入日加入风险集,处理延迟进入;结案仍在岗者按右删失处理。”两句话都说明了对象和规则。
若课程券并非随机分配,林澈把结论写为“调整后的关联”或“在所列假设下的估计差异”。她不把受聘者中的比较外推为所有青年,更不把一项选择模型的显著性翻译成不带条件的项目因果效应。
她把同一份结果交给项目经理前,会先读一遍标题、图注和第一句结论。只要其中任何一句省略了“高于报告线”“受聘者”或“截至结案日”这样的范围,她就知道读者可能会把数据露出的部分误当成全部。

报告边界
林澈最后遮住模型名称,请同事只看样本流和结论句。若同事仍能回答“谁被看见、谁没被看见、数值知道到什么程度、结果不适用于谁”,这份有限因变量分析才没有把数据露出的缝隙误写成完整世界。