Skip to main content

A package to conduct policy analysis using PolicyEngine tax-benefit models.

Project description

PolicyEngine.py

A Python package for tax-benefit microsimulation analysis. Run policy simulations, analyse distributional impacts, and visualise results across the UK and US.

Quick start

from policyengine.core import Simulation
from policyengine.tax_benefit_models.uk import PolicyEngineUKDataset, uk_latest
from policyengine.outputs.aggregate import Aggregate, AggregateType

# Load representative microdata
dataset = PolicyEngineUKDataset(
    name="FRS 2023-24",
    filepath="./data/frs_2023_24_year_2026.h5",
    year=2026,
)

# Run simulation
simulation = Simulation(
    dataset=dataset,
    tax_benefit_model_version=uk_latest,
)
simulation.run()

# Calculate total universal credit spending
agg = Aggregate(
    simulation=simulation,
    variable="universal_credit",
    aggregate_type=AggregateType.SUM,
    entity="benunit",
)
agg.run()
print(f"Total UC spending: £{agg.result / 1e9:.1f}bn")

Documentation

Core concepts:

Examples:

  • examples/income_distribution_us.py: Analyse benefit distribution by decile
  • examples/employment_income_variation_uk.py: Model employment income phase-outs
  • examples/policy_change_uk.py: Analyse policy reform impacts

Installation

pip install policyengine

Features

  • Multi-country support: UK and US tax-benefit systems
  • Representative microdata: Load FRS, CPS, or create custom scenarios
  • Policy reforms: Parametric reforms with date-bound parameter values
  • Distributional analysis: Aggregate statistics by income decile, demographics
  • Entity mapping: Automatic mapping between person, household, tax unit levels
  • Visualisation: PolicyEngine-branded charts with Plotly

Key concepts

Datasets

Datasets contain microdata at entity level (person, household, tax unit). Load representative data or create custom scenarios:

from policyengine.tax_benefit_models.uk import PolicyEngineUKDataset

dataset = PolicyEngineUKDataset(
    name="Representative data",
    filepath="./data/frs_2023_24_year_2026.h5",
    year=2026,
)
dataset.load()

Simulations

Simulations apply tax-benefit models to datasets:

from policyengine.core import Simulation
from policyengine.tax_benefit_models.uk import uk_latest

simulation = Simulation(
    dataset=dataset,
    tax_benefit_model_version=uk_latest,
)
simulation.run()

# Access calculated variables
output = simulation.output_dataset.data
print(output.household[["household_net_income", "household_benefits"]])

Outputs

Extract insights with aggregate statistics:

from policyengine.outputs.aggregate import Aggregate, AggregateType

# Mean income in top decile
agg = Aggregate(
    simulation=simulation,
    variable="household_net_income",
    aggregate_type=AggregateType.MEAN,
    filter_variable="household_net_income",
    quantile=10,
    quantile_eq=10,
)
agg.run()
print(f"Top decile mean income: £{agg.result:,.0f}")

Policy reforms

Apply parametric reforms:

from policyengine.core import Policy, Parameter, ParameterValue
import datetime

parameter = Parameter(
    name="gov.hmrc.income_tax.allowances.personal_allowance.amount",
    tax_benefit_model_version=uk_latest,
    data_type=float,
)

policy = Policy(
    name="Increase personal allowance",
    parameter_values=[
        ParameterValue(
            parameter=parameter,
            start_date=datetime.date(2026, 1, 1),
            end_date=datetime.date(2026, 12, 31),
            value=15000,
        )
    ],
)

# Run reform simulation
reform_sim = Simulation(
    dataset=dataset,
    tax_benefit_model_version=uk_latest,
    policy=policy,
)
reform_sim.run()

Country models

UK

Three entity levels:

  • Person: Individual with income and demographics
  • Benunit: Benefit unit (single person or couple with children)
  • Household: Residence unit

Key benefits: Universal Credit, Child Benefit, Pension Credit Key taxes: Income tax, National Insurance

US

Six entity levels:

  • Person: Individual
  • Tax unit: Federal tax filing unit
  • SPM unit: Supplemental Poverty Measure unit
  • Family: Census family definition
  • Marital unit: Married couple or single person
  • Household: Residence unit

Key benefits: SNAP, TANF, EITC, CTC, SSI, Social Security Key taxes: Federal income tax, payroll tax

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

AGPL-3.0

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

policyengine-3.1.10.tar.gz (177.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

policyengine-3.1.10-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file policyengine-3.1.10.tar.gz.

File metadata

  • Download URL: policyengine-3.1.10.tar.gz
  • Upload date:
  • Size: 177.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for policyengine-3.1.10.tar.gz
Algorithm Hash digest
SHA256 f813cd0ed69f6a1d99884379db76979edb44fd0b4c72fe2060ea51386acc0e7e
MD5 47a9692d76c3d9a12d9d51d6ea92c0e8
BLAKE2b-256 ac6c8d89cac480e050d09f7930aa11dce1018d5cd790b220147eac5f3ab2e65e

See more details on using hashes here.

File details

Details for the file policyengine-3.1.10-py3-none-any.whl.

File metadata

  • Download URL: policyengine-3.1.10-py3-none-any.whl
  • Upload date:
  • Size: 65.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for policyengine-3.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 f599eb8826d599dc246c2d4c59ccb66b397aa9faddbb9917fb86542590c3b8a9
MD5 6bccbb9f29a16a08d2b6f126b83f7449
BLAKE2b-256 e4802ff037f32b5c204582c7ea3dc938374c5198a1d0828d1fc12b7addb0c44c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page