// SLIDE 01 — HOOK

SPONSORSHIP CHANGES SILENTLY.

Key fact: A firm that filed 600 H-1B petitions in 2021 may have closed the program by 2023 without announcing it.

The Department of Labor's PERM disclosure files document what employers did, not what they will do next quarter.

NARRATION

The core problem is deceptively simple: a student on F-1 OPT status has ninety days left in their authorized work window and a job description in front of them. The immediate question reads like a lookup—does this company sponsor visas?—but it is fundamentally not. Sponsorship is not a binary property carved into the company; it is a property that changes over time. A firm that aggressively filed H-1B petitions three years ago may have quietly shut down the program. Conversely, a company that historically never sponsored may have recently opened a visa program. The PERM database and USCIS filing records tell us what employers did. They do not tell us what employers will do when this student's application arrives. The data is stale by design. The challenge is inferential: how do we estimate the latent current state—the sponsorship policy right now—when all we have are proxies generated under different past states?

// SLIDE 02 — THE STAKES

A LOOKUP PROBLEM / MASQUERADING ASINFERENCE.

LookupRetrieve a known fact from a database. Sponsorship status is in the table.
InferenceEstimate a latent state from biased, stale, multiply-sourced proxies under explicit assumptions about staleness and bias.

The framing matters: if you assume this is a lookup, you inherit the staleness. If you frame it as inference, you can test sensitivity to your assumptions.

NARRATION

The difference between these two framings is load-bearing. If you treat sponsorship status as a lookup—a property of the company that either is or isn't documented—then you read the PERM and USCIS files at face value and conclude the student should or should not apply based on what those files say. You have no handle on the fact that policy may have drifted. If instead you frame the problem as inference—estimating a latent unobserved current state from multiple proxies, each of which is stale and biased in different ways—then you have leverage. You can ask: what does the verdict look like if this data is three months old versus eighteen months old? What if the job description language is recycled boilerplate versus current policy intent? What if we weight PERM filings more heavily, or less? Sensitivity analysis becomes the mechanism to construct a verdict that is honest about its own uncertainty and robust to the assumptions you are least confident about.

// SLIDE 03 — CAUSAL DIAGRAM

WHAT GENERATES / WHATREVEALS IT.

P_tCurrent sponsorship policy—the latent state we want to infer.
D_histHistorical PERM filings from past policy P_{t−k}. Downstream of old policy, not current.
D_uscRecent USCIS petition records. Generated by P_t with filing-and-publication delay measured in months.
JJob description language. Noisy signal of P_t—cloned across postings, carries ATS template boilerplate.
ŝThe system's sponsorship score. A function of D_hist, D_usc, and J, combined under explicit weights.
NARRATION

The structural insight is this: we have one latent target—current policy P_t—and three proxies that bear on it. The historical PERM record D_hist was generated by P_{t−k}, not P_t. That is the staleness gap. The arrow from past policy to historical data exists. The arrow from current policy to historical data does not. Any verdict drawn from old filings is reading a parent the latent state no longer has. Recent USCIS petitions D_usc come from current policy but with a lag—months pass between when a company decides to file and when the petition appears in disclosed records. The job description J sometimes reveals current policy wording, but the channel is noisy: the same template text gets reused across postings written in different years, recruiters copy-paste boilerplate without intent, and the wording may reflect aspiration rather than current practice. These three signals generate the composite score ŝ. The load-bearing move is to treat the verdict as a function of these three noisy, multiply-stale proxies, and then test how it shifts when you vary your assumptions about how stale each proxy is.

// SLIDE 04 — THE STALENESS GAP

HISTORY DOES NOT / PREDICTCHANGE.

Key gap: D_hist is downstream of P_{t−k}. Current policy P_t does not generate the historical record. That one-way causal edge is broken.

A company can close its sponsorship program without filing new PERM applications. The absence of a recent filing does not tell you the policy changed; it only tells you no new petitions were filed.

NARRATION

This is the core structural fact. When we read a company's PERM filings, we are looking at what that company did under its past sponsorship policy. If the policy was open in years t−1 through t−3, we see filings from those years. If the company changed policy to closed in year t, we do not see that change in the historical record. The historical record is frozen. It documents the past. It does not update to reflect new policy. This means that any attempt to predict future sponsorship based purely on historical volume runs into this wall: the absence of recent petitions could mean the company maintains a selective sponsorship program, or it could mean the program was quietly eliminated. The filing record alone cannot distinguish these states. This is why the system must triangulate across three sources. USCIS petitions, being recent, are more temporally proximate to current policy. Job language, being part of the current posting, may reflect current thinking. And historical PERM, despite being stale, still carries signal about whether a company has ever been a visa sponsor at all. The system builds a verdict by combining these three pieces of evidence, each with its own staleness profile and bias structure.

// SLIDE 05 — THE THREE PROXIES

PERM, USCIS, / JOB LANGUAGE.THREE ANGLES.

D_hist (PERM)Volume band: 200+ certified filings → base score 0.85. Shows historical sponsorship appetite.
D_usc (USCIS)Recent filings with monthly lag. Trend direction: increasing or decreasing. Most temporally proximate to current policy.
J (Job Language)Regex cascade: +0.30 for explicit "will sponsor," −0.40 for "no sponsorship." Noisy but immediate.
NARRATION

Each proxy reflects current policy through a different lens and carries different staleness. The historical PERM record tells us whether the company has ever entered the sponsorship market. A firm with two hundred or more certified PERM applications is a known sponsor. But that signal decays over time; a company that filed heavily five years ago may have shifted strategy. The USCIS petition record is more recent, measured in months rather than years. A firm filing petitions in the current quarter is actively sponsoring. The trend—whether petition volume is increasing or decreasing—adds signal about direction. The job description language is the most immediate: if the posting explicitly says "will sponsor," that is strong evidence of current intent. But the signal is noisy. Job postings are written by different people, recycled across roles, and sometimes express aspiration rather than actual practice. The regex rules capture strong language signals: explicit commitment to sponsorship adds 0.30 to the verdict, explicit refusal subtracts 0.40. The system combines all three: historical volume as a base, recent trends as an adjustment, and language as either a strong signal or a gentle push. The architecture is deliberately multi-source so that no single stale signal dominates.

// SLIDE 06 — IDENTIFICATION STRATEGY

NO EFFECT / ESTIMATIONREQUIRED.

Key move: The system does not estimate a single causal parameter. It constructs a calibrated verdict—visa_confidence, clamped to [0.05, 0.95]—that is honest about its own uncertainty.

Sensitivity analysis, not effect estimation, is the load-bearing causal move. The question is not "what is the effect of sponsorship on hiring?" The question is "what does the verdict look like under different staleness assumptions?"

NARRATION

This reframes what causal inference means in this context. In classical causal estimation, we have an intervention, we observe outcomes under different regimes, and we infer the treatment effect. Here, there is no intervention to estimate. The problem is estimation of a latent state under stale, multiply-biased proxies. The causal structure matters because it tells us which pieces of information are downstream of what we want to estimate and which are not. The identification strategy is to build a composite verdict from the three proxies, each weighted by how much we trust it given its staleness profile, and then to test that verdict's robustness. What if D_hist is actually eighteen months old, not three? What if the job description language is not current policy intent but recycled template text? What if we double-weight the USCIS filings because they are most recent? The system's load-bearing claim is that the verdict it ships—the one it recommends to the student—survives the worst plausible prior about staleness. If the verdict changes from "likely yes" to "likely no" when you assume different staleness, then that verdict is fragile and not trustworthy.

// SLIDE 07 — VISA CONFIDENCE CONSTRUCTION

BASE, TREND, / FRESHNESS, LANGUAGE.FOUR MOVES.

PERM volume bandBase score 0.85Trend adjust ±0.05–0.15
Freshness discountPenalize old dataRegex cascade on JD

The regex rules capture strong language signals: +0.30 for explicit commitment to sponsor, −0.40 for explicit refusal, with positive-strong patterns prioritized over negative-strong.

NARRATION

The visa_confidence score folds four pieces together into a single composite. First, a base score from PERM volume: if a company has filed two hundred or more certified PERM applications, the base is 0.85. This reflects historical sponsorship appetite. Second, a trend adjustment: if recent USCIS filings are increasing, the verdict shifts up by 0.05 to 0.15 depending on magnitude of trend. If decreasing, it shifts down. This captures directional change. Third, a freshness discount: older data contributes less. The penalty depends on how stale the PERM record is and how stale the USCIS record is. This is where the staleness priors matter most. Fourth, a language cascade: the system scans the job description for explicit sponsorship language. If it finds "will sponsor H-1B" or equivalent, it adds 0.30. If it finds "no visa sponsorship," it subtracts 0.40. The asymmetry—stronger penalty for explicit refusal—reflects the observation that positive statements about sponsorship are rarer and more meaningful in job descriptions, while silence or generic language is common. These four pieces feed into a composite that lands between 0.05 and 0.95, clamped to avoid extreme confidence claims.

// SLIDE 08 — SENSITIVITY PROTOCOL

TEST WORST-CASE / STALENESSPRIORS.

Fresh-data priorTreat D_hist and D_usc as recent · JD language as current intent
Stale-data priorD_hist eighteen months old · JD text is template · USCIS alone carries weight

The verdict the system ships is the one that survives the worst plausible prior—the stalest, most pessimistic reweighting the data can withstand.

NARRATION

This is the sensitivity protocol. Rather than asking for the single best estimate of sponsorship probability, the system asks: what does the verdict look like under different assumed staleness regimes? Scenario one: assume the PERM data is fresh and the job description language reflects current policy. The verdict reads one way. Scenario two: assume the PERM data is eighteen months stale and the job description text is recycled boilerplate from years ago. The freshness discount reweights heavily. Scenario three: trust only the USCIS filings because they are most recent; let PERM and language contribute minimally. The verdict shifts again. The system runs these scenarios. If all three scenarios point to "likely sponsor," the verdict is robust. If they point in opposite directions, the verdict is fragile. The verdict the system actually reports is the one that remains honest and defensible under the worst-case prior—the scenario that is most pessimistic about freshness and most generous in reweighting toward historical data. This moves the system away from point estimation and toward a kind of worst-case robust inference. The student's decision should not hinge on an assumption that happens to be wildly optimistic about how fresh the data is.

// SLIDE 09 — SYSTEM ARCHITECTURE

PARSE, EMBED, / SCORE.THREE STAGES.

Groq Llama 3.3 70BStructured profileMiniLM embedding
Cosine similarityMatch score0.40×match + 0.35×visa_conf + 0.25×recency

Resume and job descriptions are embedded into a shared 384-dimensional space by all-MiniLM-L6-v2 and compared by cosine similarity. For international candidates, visa_confidence carries 35% of the final weight.

NARRATION

The matching architecture sits underneath the visa-confidence verdict. When a resume arrives, it is parsed by a Groq-hosted Llama 3.3 70B instance with temperature zero and JSON-object output format. The latency is approximately 1.5 seconds, with a rule-based fallback when the API is unavailable. A 12,000-character truncation prevents extremely long resumes from breaking the parser. The structured profile and job description are both embedded into a shared 384-dimensional space using the all-MiniLM-L6-v2 model. The system then computes similarity scores on several dimensions: semantic similarity via cosine distance, skill overlap, role match, and location match. These four components are combined as 0.50×semantic_similarity + 0.30×skill_overlap + 0.10×role_match + 0.10×location_match. For a domestic candidate, this match_score is the primary signal. For an international candidate, the formula is reweighted: 0.40×match_score + 0.35×visa_confidence + 0.25×recency_score. The recency_score is a tiered decay function: 1.00 at zero to three days old, declining to 0.10 at sixty-plus days old. This ensures that fresh job postings carry more weight. The visa_confidence term, as constructed above, is the load-bearing piece for international candidates. A strong match but low visa_confidence will depress the final score; conversely, lower semantic match but higher visa_confidence can keep a recommendation alive.

// SLIDE 10 — THE ORACLE PROBLEM

THE RECRUITER / RESPONSE ISORACLE?

Key assumption: Any feedback loop that trains the system toward recruiter responses inherits the bias in those responses. Recruiters say no for reasons beyond policy. They say yes inconsistently.

This is what the chapter names as "the identification assumption worth naming." The ground truth for evaluation is proxy itself—biased, noisy, and not identical to current policy.

NARRATION

The system is designed to predict R, the recruiter response—whether the recruiter, eventually, indicates that the company does or does not sponsor visas when the student reaches out. But R is not the same as P_t, the actual current policy. Recruiters say yes for reasons other than formal policy: they may like the candidate and push internally to make an exception. They say no for reasons other than policy: they may have a priority candidate, a hiring freeze, or the requisition may have closed. Across different roles within the same company, the consistency is low. One recruiter says we sponsor and process H-1B applications. Another says we do not. The question is whether the system should be calibrated to match recruiter responses or to infer actual policy. The chapter explicitly names this trade-off. Any training signal that tries to match recruiter verdicts inherits that variance and bias. If you care about what the policy actually is, recruiter response is a noisy proxy. If you care about what the recruiter will say, then matching their response is correct. The chapter does not resolve this but flags it as a judgment call that shapes the entire identification strategy. The system as described is built to predict R, and therefore to inherit the biases in R, even if the student's underlying question is about P_t.

// SLIDE 11 — THESIS

CAUSAL INFERENCE / UNDERSTALENESS.

When your target state is latent and all your proxies are stale in different ways, sensitivity analysis—not point estimation—is the mechanism for honest inference.

The system triangulates across three proxies (historical PERM, recent USCIS filings, job description language), weights them according to staleness assumptions, and reports the verdict that survives the worst-case prior. This is not prediction. It is causal inference under uncertainty.

NARRATION

The central claim threads through the chapter: causal inference when your target is latent and your data are stale requires sensitivity analysis, not point estimation. The classical causal inference toolkit is built for estimating treatment effects under an intervention. Here, there is no intervention. The problem is pure state estimation—inferring current sponsorship policy from historical records, recent filings, and noisy text signals. The causal structure tells us which pieces of information are generated by the state we want and which are generated by past states. Historical PERM data comes from past policy. Recent USCIS filings come from current policy with a lag. Job language is an imperfect signal of current intent. Rather than collapse these into a single estimate—"the company sponsors with probability 0.74"—the system asks: how does the verdict change when I vary my assumptions about staleness? What if the data is fresher or staler than I thought? This move trades point estimation for robustness. The verdict that survives the worst-case staleness prior is the one the system reports. This is appropriate when the cost of a false positive (recommending the student apply when the company actually does not sponsor) differs from the cost of a false negative, and when the student's decision window is fixed. The student cannot wait for more data. They must decide now. The verdict should reflect honest uncertainty about how stale the proxies are.

// SLIDE 12 — CLOSE

CAUSAL INFERENCE / WHEN STALE.THE VERDICT SURVIVES WORST CASE.

STALENESS//SENSITIVITY ANALYSIS//CALIBRATION

Causal Inference · Chapter 22 · Case: VisaMatch

NARRATION

The three threads: staleness is structural, not incidental—data generated by past states cannot reveal current states without explicit causal reasoning. Sensitivity analysis is the mechanism when you have multiply-stale proxies—test the verdict under different staleness assumptions and ship the one that survives worst case. Calibration is the goal—a composite verdict that reflects honest uncertainty about what you can and cannot conclude from stale, biased sources. The VisaMatch case teaches that causal inference is not always about estimating treatment effects. Sometimes it is about inferring latent states from proxies. Sometimes the leverage is not in estimating parameters but in testing robustness. Read this chapter for the problem framing, the vocabulary of staleness and proxy structures, and the practical judgment required to build systems that are honest about their own uncertainty.

01 / 12
Causal Inference · Ch.22 · Nik Bear Brown