User Propensity Score Matching
Estimate whether an operational intervention created incremental impact by comparing treated users with untreated users who looked similar before the intervention. Keep the workflow independent of any analytics platform. Operate read-only by default and never write cohorts, tags, tables, or reports back to a source system without explicit approval.
What This Skill Solves
Game teams often compare campaign participants with non-participants and mistakenly attribute pre-existing user differences to the campaign. This skill reduces that selection bias with propensity score matching (PSM), then exposes the evidence needed to decide whether the comparison is credible.
Explain the distinction on first use:
- Propensity prediction asks who is likely to pay, churn, or participate.
- Propensity score matching asks whether an intervention helped users who received it.
Primary users are game operations, growth, monetization, product, and data teams. Common delivery variants include:
- Campaign, offer, coupon, or bundle effectiveness.
- Push, inbox, win-back, or churn-intervention effectiveness.
- Feature, mode, difficulty, or gameplay-change effectiveness.
- Acquisition-channel, retargeting, support, or compensation effectiveness.
The standard output is an evidence package containing matched users, propensity scores, balance diagnostics, the average treatment effect for treated users (ATT), an approximate confidence interval, limitations, and an operational recommendation.
Beginner Entry Point
Ask only these three business questions before discussing statistical parameters:
- What intervention should be evaluated?
- What outcome should improve?
- When did the intervention occur?
Then restate one executable design containing the treatment group, candidate control group, pre-treatment feature window, post-treatment outcome window, and eligible population. If the request is vague, propose two or three designs and wait for selection before querying business data.
Use these defaults unless the user supplies justified alternatives:
- Estimand: ATT.
- Matching: 1:1 nearest neighbor, without replacement.
- Caliper: 0.2 standard deviations of the propensity-score logit.
- Covariates: demographics, activity, progression, historical payment, and prior intervention exposure measured before treatment.
- Acceptance gate: at least 70% of treated users matched and every post-match absolute standardized mean difference below 0.10.
Game Industry Use Cases
| Scenario |
Example treatment |
Candidate outcomes |
| Campaign effectiveness |
Joined a seasonal, login, or guild campaign |
Retention, activity, revenue, LTV |
| Offers and promotions |
Received a bundle, discount, or coupon |
First purchase, repeat purchase, revenue |
| Messaging and reactivation |
Received push, inbox, or win-back messaging |
Return, reactivation, retention |
| Churn intervention |
Received compensation, resources, or support |
Churn, reactivation, future revenue |
| Features and modes |
Adopted or was exposed to a dungeon, guild, PvP, or pet feature |
Activity, retention, revenue |
| Difficulty and experience |
Was affected by level, reward, or matchmaking changes |
Completion, retries, churn |
| Advertising and acquisition |
Came from a channel or received retargeting |
Retention, revenue, LTV |
| Incident handling |
Received customer support or incident compensation |
Retention, refunds, future revenue |
Six-Dimension Analysis Framework
Evaluate every request across all six dimensions. Do not skip a dimension because the script completed successfully.
| Dimension |
Required evidence |
Decision question |
| 1. Causal design |
Treatment, index time, estimand, outcome, and observation windows |
Is the comparison aligned to one defensible causal question? |
| 2. Eligibility and sample |
Inclusion rules, exclusions, unique-user counts, and missingness |
Did treated and control users have the same opportunity to receive treatment? |
| 3. Overlap and positivity |
Propensity distributions, common-support counts, and match rate |
Are comparable controls available for enough treated users? |
| 4. Covariate balance |
Pre/post standardized mean differences for every covariate |
Did matching remove observable pre-treatment differences? |
| 5. Effect and uncertainty |
ATT, relative lift, standard error, and confidence interval |
Is the effect meaningful and sufficiently precise? |
| 6. Robustness and actionability |
Alternative specifications, residual risks, and targetable segments |
Does the conclusion survive reasonable choices and support a safe action? |
Required Data and Minimum Conditions
Build one row per eligible user. Read references/data-contract.md before extraction.
Required fields:
- A stable user ID used only for joining and output, never as a model covariate.
- A binary treatment indicator.
- A known intervention or index time.
- Numeric pre-treatment covariates covering major drivers of both treatment and outcome.
- An optional post-treatment outcome. Without it, the skill may match users and diagnose balance but must not estimate ATT.
Recommended production conditions:
- At least 100 treated users and 200 candidate controls. Smaller samples are exploratory only.
- At least five meaningful pre-treatment covariates across activity, progression, monetization, profile, and prior exposure when those domains are relevant.
- No duplicate user IDs in the modeling dataset.
- Primary-covariate missingness no greater than 5% after eligibility rules. At 5% to 10%, document and justify preprocessing. The script reports missing and invalid values by field and rejects any covariate above 10% by default. Above 10%, stop and redesign or apply an approved missing-data method before matching; do not weaken the command-line gate to bypass review.
- Treatment and control users drawn from the same calendar period and eligibility rules.
- Covariate windows ending strictly before treatment and outcome windows beginning after treatment.
For event-based sources such as AE/TE, resolve the real project, treatment event or property, pre-period behavior and profile fields, outcome event or property, user identity, and timezone before extraction. Never invent event or property names.
Supported Data Environments
Reuse the environment already supplied or authorized. Do not force migration.
| Environment |
Approach |
| CSV or TSV |
Validate columns and run scripts/psm.py directly |
| Excel or spreadsheet |
Read the selected sheet and convert it to a user-level UTF-8 CSV |
| Database or warehouse |
Use an available read-only query tool to build the user-level table |
| Notebook or Python |
Export a DataFrame that follows the data contract |
| AE or TE |
Read references/ae-adapter.md only for an AE/TE request |
| Other analytics platforms |
Use the platform export, API, or SQL capability to prepare the same contract |
AE CLI is an optional adapter, not a requirement for this skill.
Boundary Statement
Do not use this skill when:
- A credible randomized A/B experiment exists; analyze the experiment instead.
- The request is only to predict payment, churn, or participation.
- Treatment timing cannot be determined.
- Reliable pre-treatment covariates are unavailable or a key confounder is known to be missing.
- Treatment and control groups have almost no common support.
- Treatment materially affects other users, such as an intervention assigned at guild or server level, unless the design and standard errors operate at that level.
- The requested conclusion would exceed the observed population or time window.
PSM adjusts only for observed differences. Never describe a PSM estimate as proof of causality.
Mandatory Execution Sequence
Complete the steps in order. Each step must produce its stated output before continuing.
Step 1: Frame the Causal Question
Action
- Confirm the binary treatment, index time, post-treatment outcome, eligible population, and ATT estimand.
- List candidate pre-treatment confounders and explain why each may affect both treatment and outcome.
- Confirm that treatment precedes the outcome.
Output
- A one-paragraph design specification and a field/window table.
Stop if
- Treatment, timing, population, or outcome remains ambiguous.
Step 2: Resolve and Inspect the Data Source
Action
- Use supplied files directly, or inspect connected source metadata before querying.
- For AE/TE, follow references/ae-adapter.md.
- Prefer read-only queries and exports. Never request secrets embedded in connection strings.
Output
- Confirmed source, table/report/project, fields, timezone, expected user grain, and read path.
Stop if
- The source cannot reproduce the treatment, windows, or user identity.
Step 3: Build the Eligible User Dataset
Action
- Apply identical eligibility rules to treatment and candidate-control users.
- Aggregate to one row per user.
- End covariate windows before treatment and begin outcome windows after treatment.
- One-hot encode categorical variables, reasonably cap extreme values when justified, and document missing-value handling.
Output
- A UTF-8 CSV conforming to
references/data-contract.md, plus row count, unique-user count, treated/control counts, duplicates, and missingness.
Stop if
- Duplicate IDs, post-treatment leakage, incomplete pagination, or unexplained high missingness remains.
Step 4: Run the Primary Match
Action
Run the deterministic implementation:
python3 scripts/psm.py \
--input <users.csv> \
--id-col user_id \
--treatment-col treatment \
--outcome-col revenue_7d \
--covariates level,login_days,pay_amount_pre7d,vip,prior_campaigns \
--output-dir <output-dir> \
--ratio 1 \
--caliper 0.2 \
--max-covariate-missing-rate 0.10
Omit --outcome-col for matching-only analysis. Use --with-replacement only when a limited control pool justifies reusing controls. Reused controls make matched-set effects dependent, so the bundled script suppresses its approximate standard error and confidence interval in that mode; use a reviewed dependence-aware bootstrap or cluster-robust method if uncertainty is required.
Output
matched_pairs.csv: treated-control links and match distances.
scored_users.csv: propensity scores and support status.
report.json: per-field missing/invalid rates, model convergence, sample, balance, and effect diagnostics.
Stop if
- The script rejects high covariate missingness, the propensity model does not converge, no common support exists, or no treated users can be matched.
Step 5: Apply Quality Gates
Action
- Read all three outputs and apply the validation priorities below.
- Report the maximum post-match absolute SMD, propensity-score SMD, matched-treated count, and match rate.
Output
- A PASS, WARN, or FAIL decision with the evidence for every failed threshold.
Stop if
- Any P0 condition or P1 fail condition remains unresolved. Do not report ATT as a decision metric.
Step 6: Run Predeclared Sensitivity Checks
Action
- Compare the primary specification with justified alternatives such as calipers 0.10 and 0.25, 1:2 matching when controls are abundant, or matching with replacement when controls are scarce.
- Keep the causal question, outcome window, and core confounders fixed.
- Do not select a specification because it produces a favorable effect.
Output
- A comparison table of match rate, maximum post-match SMD, ATT, and confidence interval for each specification.
Stop if
- Direction or magnitude changes materially without a substantive explanation; label the result unstable.
Step 7: Report the Business Result
Action
Report:
- Business question, population, and windows.
- Original and matched sample counts.
- Overlap and balance evidence.
- ATT and relative lift when an outcome exists, plus the approximate 95% confidence interval only when controls are not reused. When matching with replacement, state that the bundled interval is unavailable and name the dependence-aware method required to produce one.
- Sensitivity results and residual confounding risks.
- A scoped recommendation: expand, narrow, continue testing, or stop.
Output
- A decision-ready summary and links or paths to the three standard artifacts.
Stop if
- The narrative implies effects outside common support or claims causality beyond the evidence.
Step 8: Write Back Only with Approval
Action
- If requested, propose the exact destination, asset name, schema, matched-user count, and overwrite behavior.
- Obtain explicit approval before creating a cohort, tag, table, or report.
Output
- Either a preserved local evidence package or a verified external asset with creation evidence.
Stop if
- Permissions, schema, destination, or import capability is uncertain.
Validation Priorities and Thresholds
| Priority |
Condition |
Required response |
| P0 |
Post-treatment leakage, duplicate user IDs, invalid treatment values, outcome used as a covariate, covariate missingness above the approved gate, a non-convergent propensity model, or no common support |
Stop and rebuild the dataset, model, or design |
| P1 fail |
Match rate below 70%, any post-match ` |
SMD |
| P1 warning |
Any post-match `0.10 <= |
SMD |
| P2 |
Wide confidence interval, low power, or sensitivity across reasonable specifications |
Limit the recommendation and propose more data or an experiment |
| Pass |
Match rate at least 70% and every post-match ` |
SMD |
Degradation and Recovery Strategy
| Problem |
Safe degradation or recovery |
| AE/TE access is unavailable |
Export a user-level CSV and run the platform-independent path |
| Categorical covariates exist |
One-hot encode before invoking the numeric-only script |
| Outcome is unavailable |
Produce matched users and balance diagnostics only; do not report ATT |
| Control pool is small |
Restrict common support first, then consider matching with replacement, disclose reused controls, and suppress the bundled naive confidence interval |
| Match rate is below 70% |
Narrow the estimand to supported treated users and avoid generalizing to excluded users |
| Balance is poor |
Correct data issues, add substantively justified nonlinear terms or interactions, then adjust caliper |
| Common support is absent |
Stop; do not manufacture a comparison or extrapolate |
| Sample size is small |
Label results exploratory and recommend longer observation or a randomized test |
| A key confounder is unavailable |
State that residual bias is likely and do not make a causal operational claim |
| One specification alone looks favorable |
Run and disclose predeclared sensitivity checks; never cherry-pick |
Output Interpretation
matched_pairs.csv is the auditable mapping between each treated user and selected control users. Smaller distance means closer estimated treatment propensity.
scored_users.csv supports overlap inspection and downstream segmentation. A propensity score is not a churn or payment probability; it is the estimated probability of receiving treatment given observed covariates.
report.json is the decision gate. Interpret ATT only after overlap and balance pass.
- For binary outcomes, ATT is a percentage-point difference. For continuous outcomes, ATT is expressed in the outcome's original units.
- Relative lift is contextual and can be unstable when the matched-control mean is near zero; always show the absolute ATT.
model.converged must be true before interpreting scores or matches. The script stops rather than emitting artifacts from a non-convergent model.
- With replacement,
standard_error_approx and ci95_approx are null because reused controls induce dependence. Do not reconstruct a naive interval from the matched rows.
Automatic Correction Rules
Corrections must improve design quality, not the apparent effect:
- Fix data-contract violations and leakage first.
- Add only pre-treatment covariates supported by the causal rationale.
- Add nonlinear terms or interactions only when their relationship is plausible and documented.
- Tighten common support or caliper before accepting imbalance.
- Use replacement only when control scarcity is the documented reason.
- Preserve every attempted specification and roll back any change that worsens balance without solving a higher-priority problem.
Read references/validation-and-tuning.md for the validated fixture, sensitivity template, and correction log.
FAQ
Is PSM the same as an A/B test?
No. An A/B test uses randomized assignment and is preferred when credible. PSM uses observed historical data and cannot remove unmeasured confounding.
Why is the match rate low?
Treated users may differ greatly from available controls, the caliper may be strict, or eligibility rules may be inconsistent. Inspect common support before changing parameters.
Can this skill run without AE/TE?
Yes. It works with any source that can produce the documented user-level CSV.
Can it run without an outcome?
Yes, but only to create comparable groups and validate balance. It cannot estimate incremental effect without a post-treatment outcome.
Does a significant ATT prove causality?
No. It supports a conditional comparison under observed-covariate assumptions. State residual risks and recommend randomization when feasible.
What should I do if quality gates fail?
Do not publish the effect. Follow the degradation order, retain the failure evidence, and redesign the data or evaluation.
References
- Data contract
- Methodology and limitations
- AE/TE adapter
- Validation, sensitivity, and correction
Language Constraint
Respond in the same language as the user's request. Keep identifiers, command names, fields, and artifact filenames unchanged when translation would make execution ambiguous.
1---2name: propensity-score-matching3description: Trigger when game operations, marketing, product, or data teams need to estimate the incremental effect of a non-random campaign, offer, message, feature, channel, or intervention from user-level CSV, spreadsheet, database or warehouse, or AE/TE data. Validate pre-treatment covariates, estimate propensity scores, match comparable controls, diagnose overlap and balance, and return ATT, confidence bounds, matched users, and quality evidence. Do not use when a credible randomized experiment exists, treatment timing is unknown, or observed covariates cannot support a defensible comparison.4---56# User Propensity Score Matching78Estimate whether an operational intervention created incremental impact by comparing treated users with untreated users who looked similar before the intervention. Keep the workflow independent of any analytics platform. Operate read-only by default and never write cohorts, tags, tables, or reports back to a source system without explicit approval.910## What This Skill Solves1112Game teams often compare campaign participants with non-participants and mistakenly attribute pre-existing user differences to the campaign. This skill reduces that selection bias with propensity score matching (PSM), then exposes the evidence needed to decide whether the comparison is credible.1314Explain the distinction on first use:1516- **Propensity prediction** asks who is likely to pay, churn, or participate.17- **Propensity score matching** asks whether an intervention helped users who received it.1819Primary users are game operations, growth, monetization, product, and data teams. Common delivery variants include:20211. Campaign, offer, coupon, or bundle effectiveness.222. Push, inbox, win-back, or churn-intervention effectiveness.233. Feature, mode, difficulty, or gameplay-change effectiveness.244. Acquisition-channel, retargeting, support, or compensation effectiveness.2526The standard output is an evidence package containing matched users, propensity scores, balance diagnostics, the average treatment effect for treated users (ATT), an approximate confidence interval, limitations, and an operational recommendation.2728## Beginner Entry Point2930Ask only these three business questions before discussing statistical parameters:31321. What intervention should be evaluated?332. What outcome should improve?343. When did the intervention occur?3536Then restate one executable design containing the treatment group, candidate control group, pre-treatment feature window, post-treatment outcome window, and eligible population. If the request is vague, propose two or three designs and wait for selection before querying business data.3738Use these defaults unless the user supplies justified alternatives:3940- Estimand: ATT.41- Matching: 1:1 nearest neighbor, without replacement.42- Caliper: 0.2 standard deviations of the propensity-score logit.43- Covariates: demographics, activity, progression, historical payment, and prior intervention exposure measured before treatment.44- Acceptance gate: at least 70% of treated users matched and every post-match absolute standardized mean difference below 0.10.4546## Game Industry Use Cases4748| Scenario | Example treatment | Candidate outcomes |49|---|---|---|50| Campaign effectiveness | Joined a seasonal, login, or guild campaign | Retention, activity, revenue, LTV |51| Offers and promotions | Received a bundle, discount, or coupon | First purchase, repeat purchase, revenue |52| Messaging and reactivation | Received push, inbox, or win-back messaging | Return, reactivation, retention |53| Churn intervention | Received compensation, resources, or support | Churn, reactivation, future revenue |54| Features and modes | Adopted or was exposed to a dungeon, guild, PvP, or pet feature | Activity, retention, revenue |55| Difficulty and experience | Was affected by level, reward, or matchmaking changes | Completion, retries, churn |56| Advertising and acquisition | Came from a channel or received retargeting | Retention, revenue, LTV |57| Incident handling | Received customer support or incident compensation | Retention, refunds, future revenue |5859## Six-Dimension Analysis Framework6061Evaluate every request across all six dimensions. Do not skip a dimension because the script completed successfully.6263| Dimension | Required evidence | Decision question |64|---|---|---|65| 1. Causal design | Treatment, index time, estimand, outcome, and observation windows | Is the comparison aligned to one defensible causal question? |66| 2. Eligibility and sample | Inclusion rules, exclusions, unique-user counts, and missingness | Did treated and control users have the same opportunity to receive treatment? |67| 3. Overlap and positivity | Propensity distributions, common-support counts, and match rate | Are comparable controls available for enough treated users? |68| 4. Covariate balance | Pre/post standardized mean differences for every covariate | Did matching remove observable pre-treatment differences? |69| 5. Effect and uncertainty | ATT, relative lift, standard error, and confidence interval | Is the effect meaningful and sufficiently precise? |70| 6. Robustness and actionability | Alternative specifications, residual risks, and targetable segments | Does the conclusion survive reasonable choices and support a safe action? |7172## Required Data and Minimum Conditions7374Build one row per eligible user. Read [references/data-contract.md](references/data-contract.md) before extraction.7576Required fields:7778- A stable user ID used only for joining and output, never as a model covariate.79- A binary treatment indicator.80- A known intervention or index time.81- Numeric pre-treatment covariates covering major drivers of both treatment and outcome.82- An optional post-treatment outcome. Without it, the skill may match users and diagnose balance but must not estimate ATT.8384Recommended production conditions:8586- At least 100 treated users and 200 candidate controls. Smaller samples are exploratory only.87- At least five meaningful pre-treatment covariates across activity, progression, monetization, profile, and prior exposure when those domains are relevant.88- No duplicate user IDs in the modeling dataset.89- Primary-covariate missingness no greater than 5% after eligibility rules. At 5% to 10%, document and justify preprocessing. The script reports missing and invalid values by field and rejects any covariate above 10% by default. Above 10%, stop and redesign or apply an approved missing-data method before matching; do not weaken the command-line gate to bypass review.90- Treatment and control users drawn from the same calendar period and eligibility rules.91- Covariate windows ending strictly before treatment and outcome windows beginning after treatment.9293For event-based sources such as AE/TE, resolve the real project, treatment event or property, pre-period behavior and profile fields, outcome event or property, user identity, and timezone before extraction. Never invent event or property names.9495## Supported Data Environments9697Reuse the environment already supplied or authorized. Do not force migration.9899| Environment | Approach |100|---|---|101| CSV or TSV | Validate columns and run `scripts/psm.py` directly |102| Excel or spreadsheet | Read the selected sheet and convert it to a user-level UTF-8 CSV |103| Database or warehouse | Use an available read-only query tool to build the user-level table |104| Notebook or Python | Export a DataFrame that follows the data contract |105| AE or TE | Read [references/ae-adapter.md](references/ae-adapter.md) only for an AE/TE request |106| Other analytics platforms | Use the platform export, API, or SQL capability to prepare the same contract |107108AE CLI is an optional adapter, not a requirement for this skill.109110## Boundary Statement111112Do not use this skill when:113114- A credible randomized A/B experiment exists; analyze the experiment instead.115- The request is only to predict payment, churn, or participation.116- Treatment timing cannot be determined.117- Reliable pre-treatment covariates are unavailable or a key confounder is known to be missing.118- Treatment and control groups have almost no common support.119- Treatment materially affects other users, such as an intervention assigned at guild or server level, unless the design and standard errors operate at that level.120- The requested conclusion would exceed the observed population or time window.121122PSM adjusts only for observed differences. Never describe a PSM estimate as proof of causality.123124## Mandatory Execution Sequence125126Complete the steps in order. Each step must produce its stated output before continuing.127128### Step 1: Frame the Causal Question129130**Action**131132- Confirm the binary treatment, index time, post-treatment outcome, eligible population, and ATT estimand.133- List candidate pre-treatment confounders and explain why each may affect both treatment and outcome.134- Confirm that treatment precedes the outcome.135136**Output**137138- A one-paragraph design specification and a field/window table.139140**Stop if**141142- Treatment, timing, population, or outcome remains ambiguous.143144### Step 2: Resolve and Inspect the Data Source145146**Action**147148- Use supplied files directly, or inspect connected source metadata before querying.149- For AE/TE, follow [references/ae-adapter.md](references/ae-adapter.md).150- Prefer read-only queries and exports. Never request secrets embedded in connection strings.151152**Output**153154- Confirmed source, table/report/project, fields, timezone, expected user grain, and read path.155156**Stop if**157158- The source cannot reproduce the treatment, windows, or user identity.159160### Step 3: Build the Eligible User Dataset161162**Action**163164- Apply identical eligibility rules to treatment and candidate-control users.165- Aggregate to one row per user.166- End covariate windows before treatment and begin outcome windows after treatment.167- One-hot encode categorical variables, reasonably cap extreme values when justified, and document missing-value handling.168169**Output**170171- A UTF-8 CSV conforming to `references/data-contract.md`, plus row count, unique-user count, treated/control counts, duplicates, and missingness.172173**Stop if**174175- Duplicate IDs, post-treatment leakage, incomplete pagination, or unexplained high missingness remains.176177### Step 4: Run the Primary Match178179**Action**180181Run the deterministic implementation:182183```bash184python3 scripts/psm.py \185 --input <users.csv> \186 --id-col user_id \187 --treatment-col treatment \188 --outcome-col revenue_7d \189 --covariates level,login_days,pay_amount_pre7d,vip,prior_campaigns \190 --output-dir <output-dir> \191 --ratio 1 \192 --caliper 0.2 \193 --max-covariate-missing-rate 0.10194```195196Omit `--outcome-col` for matching-only analysis. Use `--with-replacement` only when a limited control pool justifies reusing controls. Reused controls make matched-set effects dependent, so the bundled script suppresses its approximate standard error and confidence interval in that mode; use a reviewed dependence-aware bootstrap or cluster-robust method if uncertainty is required.197198**Output**199200- `matched_pairs.csv`: treated-control links and match distances.201- `scored_users.csv`: propensity scores and support status.202- `report.json`: per-field missing/invalid rates, model convergence, sample, balance, and effect diagnostics.203204**Stop if**205206- The script rejects high covariate missingness, the propensity model does not converge, no common support exists, or no treated users can be matched.207208### Step 5: Apply Quality Gates209210**Action**211212- Read all three outputs and apply the validation priorities below.213- Report the maximum post-match absolute SMD, propensity-score SMD, matched-treated count, and match rate.214215**Output**216217- A PASS, WARN, or FAIL decision with the evidence for every failed threshold.218219**Stop if**220221- Any P0 condition or P1 fail condition remains unresolved. Do not report ATT as a decision metric.222223### Step 6: Run Predeclared Sensitivity Checks224225**Action**226227- Compare the primary specification with justified alternatives such as calipers 0.10 and 0.25, 1:2 matching when controls are abundant, or matching with replacement when controls are scarce.228- Keep the causal question, outcome window, and core confounders fixed.229- Do not select a specification because it produces a favorable effect.230231**Output**232233- A comparison table of match rate, maximum post-match SMD, ATT, and confidence interval for each specification.234235**Stop if**236237- Direction or magnitude changes materially without a substantive explanation; label the result unstable.238239### Step 7: Report the Business Result240241**Action**242243Report:2442451. Business question, population, and windows.2462. Original and matched sample counts.2473. Overlap and balance evidence.2484. ATT and relative lift when an outcome exists, plus the approximate 95% confidence interval only when controls are not reused. When matching with replacement, state that the bundled interval is unavailable and name the dependence-aware method required to produce one.2495. Sensitivity results and residual confounding risks.2506. A scoped recommendation: expand, narrow, continue testing, or stop.251252**Output**253254- A decision-ready summary and links or paths to the three standard artifacts.255256**Stop if**257258- The narrative implies effects outside common support or claims causality beyond the evidence.259260### Step 8: Write Back Only with Approval261262**Action**263264- If requested, propose the exact destination, asset name, schema, matched-user count, and overwrite behavior.265- Obtain explicit approval before creating a cohort, tag, table, or report.266267**Output**268269- Either a preserved local evidence package or a verified external asset with creation evidence.270271**Stop if**272273- Permissions, schema, destination, or import capability is uncertain.274275## Validation Priorities and Thresholds276277| Priority | Condition | Required response |278|---|---|---|279| P0 | Post-treatment leakage, duplicate user IDs, invalid treatment values, outcome used as a covariate, covariate missingness above the approved gate, a non-convergent propensity model, or no common support | Stop and rebuild the dataset, model, or design |280| P1 fail | Match rate below 70%, any post-match `|SMD| >= 0.20`, or propensity-score `|SMD| >= 0.20` | Do not use ATT for an operational decision |281| P1 warning | Any post-match `0.10 <= |SMD| < 0.20` | Show the imbalance prominently and attempt a justified correction |282| P2 | Wide confidence interval, low power, or sensitivity across reasonable specifications | Limit the recommendation and propose more data or an experiment |283| Pass | Match rate at least 70% and every post-match `|SMD| < 0.10` | Report the estimate with scope and residual-bias caveats |284285## Degradation and Recovery Strategy286287| Problem | Safe degradation or recovery |288|---|---|289| AE/TE access is unavailable | Export a user-level CSV and run the platform-independent path |290| Categorical covariates exist | One-hot encode before invoking the numeric-only script |291| Outcome is unavailable | Produce matched users and balance diagnostics only; do not report ATT |292| Control pool is small | Restrict common support first, then consider matching with replacement, disclose reused controls, and suppress the bundled naive confidence interval |293| Match rate is below 70% | Narrow the estimand to supported treated users and avoid generalizing to excluded users |294| Balance is poor | Correct data issues, add substantively justified nonlinear terms or interactions, then adjust caliper |295| Common support is absent | Stop; do not manufacture a comparison or extrapolate |296| Sample size is small | Label results exploratory and recommend longer observation or a randomized test |297| A key confounder is unavailable | State that residual bias is likely and do not make a causal operational claim |298| One specification alone looks favorable | Run and disclose predeclared sensitivity checks; never cherry-pick |299300## Output Interpretation301302- `matched_pairs.csv` is the auditable mapping between each treated user and selected control users. Smaller distance means closer estimated treatment propensity.303- `scored_users.csv` supports overlap inspection and downstream segmentation. A propensity score is not a churn or payment probability; it is the estimated probability of receiving treatment given observed covariates.304- `report.json` is the decision gate. Interpret ATT only after overlap and balance pass.305- For binary outcomes, ATT is a percentage-point difference. For continuous outcomes, ATT is expressed in the outcome's original units.306- Relative lift is contextual and can be unstable when the matched-control mean is near zero; always show the absolute ATT.307- `model.converged` must be true before interpreting scores or matches. The script stops rather than emitting artifacts from a non-convergent model.308- With replacement, `standard_error_approx` and `ci95_approx` are `null` because reused controls induce dependence. Do not reconstruct a naive interval from the matched rows.309310## Automatic Correction Rules311312Corrections must improve design quality, not the apparent effect:3133141. Fix data-contract violations and leakage first.3152. Add only pre-treatment covariates supported by the causal rationale.3163. Add nonlinear terms or interactions only when their relationship is plausible and documented.3174. Tighten common support or caliper before accepting imbalance.3185. Use replacement only when control scarcity is the documented reason.3196. Preserve every attempted specification and roll back any change that worsens balance without solving a higher-priority problem.320321Read [references/validation-and-tuning.md](references/validation-and-tuning.md) for the validated fixture, sensitivity template, and correction log.322323## FAQ324325### Is PSM the same as an A/B test?326327No. An A/B test uses randomized assignment and is preferred when credible. PSM uses observed historical data and cannot remove unmeasured confounding.328329### Why is the match rate low?330331Treated users may differ greatly from available controls, the caliper may be strict, or eligibility rules may be inconsistent. Inspect common support before changing parameters.332333### Can this skill run without AE/TE?334335Yes. It works with any source that can produce the documented user-level CSV.336337### Can it run without an outcome?338339Yes, but only to create comparable groups and validate balance. It cannot estimate incremental effect without a post-treatment outcome.340341### Does a significant ATT prove causality?342343No. It supports a conditional comparison under observed-covariate assumptions. State residual risks and recommend randomization when feasible.344345### What should I do if quality gates fail?346347Do not publish the effect. Follow the degradation order, retain the failure evidence, and redesign the data or evaluation.348349## References350351- [Data contract](references/data-contract.md)352- [Methodology and limitations](references/methodology.md)353- [AE/TE adapter](references/ae-adapter.md)354- [Validation, sensitivity, and correction](references/validation-and-tuning.md)355356## Language Constraint357358Respond in the same language as the user's request. Keep identifiers, command names, fields, and artifact filenames unchanged when translation would make execution ambiguous.