← Back to story

PhiladelphiaMethodologyMethodology recipe

Philly publishes both Acct and Actual PSSA cuts. They're byte-identical.

A reproducibility log: the data this analysis touched, the queries it ran, and how a third party would re-run it.

Summary

Self-joined philly_school_year_metrics on (school, year, metric, subgroup) where population_cut='acct' on the left and 'actual' on the right. Computed per-pair delta and summary statistics.

Data sources

  • Database tablephilly_school_year_metrics

    Long-format facts. PK (school_ulcs, year, metric_key, subgroup, population_cut). Carries comparison_group_percentile + citywide_percentile (direction-adjusted).

  • External datasetSDP PSSA & Keystone (OpenDataPhilly CDN)

Steps

  1. Per-pair Acct vs Actual delta.

    SELECT a.school_ulcs, a.year, a.metric_key, a.subgroup::text,
           a.value AS acct, u.value AS actual, (a.value - u.value) AS delta
    FROM philly_school_year_metrics a
    JOIN philly_school_year_metrics u
      ON u.school_ulcs = a.school_ulcs AND u.year = a.year
     AND u.metric_key = a.metric_key AND u.subgroup = a.subgroup
     AND u.population_cut = 'actual'
    WHERE a.population_cut = 'acct'
      AND a.value IS NOT NULL AND u.value IS NOT NULL;

Caveats

The Δ=0 finding holds for 2024-25 SDP PSSA at the school × subgroup grain. It may not hold at the student level (which we don't have) or in future years. Two explanations canvassed in the story; SDP's research office is the natural contact to confirm which.

Reproduce

Load `sdp_pssa_keystone.ts` (loads both Acct + Actual). Run `python pipeline_philly/verify/reconcile_acct_actual.py` to regenerate `docs/qa_reports/philly/__acct_vs_actual.md`.

The recipe lives at data/cities/philly/stories/recipes.ts in the repo.