米国の税・給付金を丸ごとシミュレート!PolicyEngine US で政策分析をPythonから

タグ PolicyEnginePython税制シミュレーション社会給付SNAPMedicaid政策分析マイクロシミュレーションcolumnコラムlinuxLinuxwindowsWindowsGitHubオープンソースpolicyengine-us
🚀 今すぐ試せます! デモスクリプトをダウンロードして、解凍後にターミナルで bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。 (macOS / Linux 環境が必要)

米国の税・給付金を丸ごとシミュレート!PolicyEngine US で政策分析を Python から

ひとことでいうと

PolicyEngine US は、米国の連邦・州レベルの税制と社会給付制度をまとめて試算できる Python ライブラリです。年収・家族構成・居住州などを入力するだけで、連邦所得税や SNAP(食料支援給付金)・Medicaid(低所得者向け医療保険)など数百の制度に基づく金額が計算できます。政策立案者・研究者・ジャーナリストが「ある制度変更が家計にどう影響するか」を数字で確かめるためのオープンソース基盤として開発されており、Python が書ければすぐに使い始められます。


こんな人におすすめ

1. 政策研究者・シンクタンク担当者 税制改正案や給付金の変更が、特定の所得層にどう影響するかをコードで再現性高く検証したい方に向いています。シナリオをパラメータとして切り替えるだけで「改正前」「改正後」の比較ができます。

2. ファイナンシャルアドバイザー・税務専門家 顧客の収入・家族構成・居住州を入力して、連邦税・州税と受給可能な給付金の組み合わせをシナリオ別に比較したい方に適しています。顧客ごとの状況を辞書形式(キーと値のペア)で書き換えるだけで再計算できます。

3. データサイエンティスト・学生 公開されたミクロデータ(世帯・個人単位の統計データ)と組み合わせて政策の分配効果を可視化する研究に使えます。ループ処理で所得帯ごとの実効税率カーブを一気に計算し、グラフや CSV に書き出すといった作業も得意です。


インストール・使い方

PolicyEngine US は PyPI(Python の公式パッケージ配布サービス)から一コマンドで入手できます。Python 3.12 以上の環境が推奨されています。


Step 1: インストール

ターミナル(文字を入力してパソコンに命令を送る画面)を開き、次のコマンドをコピー&ペーストして実行してください。

pip install policyengine-us

pip は Python のパッケージ管理ツールです。このコマンドを実行すると、PolicyEngine US と必要なライブラリが自動的にまとめてダウンロードされます。


Step 2: シナリオ(世帯の状況)を定義する

Python ファイルまたは Jupyter Notebook(対話形式でコードを実行できるツール)を開き、以下のコードを記述します。

from policyengine_us import Simulation

situation = {
    "people": {
        "you": {
            "age": {"2024": 35},
            "employment_income": {"2024": 60000},
        }
    },
    "tax_units": {
        "your tax unit": {
            "members": ["you"],
            "filing_status": {"2024": "SINGLE"},
        }
    },
    "households": {
        "your household": {
            "members": ["you"],
            "state_name": {"2024": "CA"},
        }
    },
}

sim = Simulation(situation=situation)

situation という辞書(データのまとまり)に「人物」「申告単位」「世帯」の3層を記述します。ここでは「35 歳・年収 6 万ドル・独身・カリフォルニア州在住」という設定です。Simulation オブジェクト(計算を実行するための「計算機」本体)がこの設定を読み込み、あらゆる試算の出発点になります。


Step 3: 税額や給付金を計算する

federal_tax = sim.calculate("federal_income_tax", 2024)
snap        = sim.calculate("snap", 2024)
print(f"連邦所得税: ${federal_tax[0]:,.0f}")
print(f"SNAP給付:   ${snap[0]:,.0f}/月")

sim.calculate("変数名", 年) の形で、計算したい項目を文字列で指定します。変数名は数百種類用意されており、state_income_tax(州所得税)や medicaid(医療扶助)なども同じ書き方で取得できます。一度 sim を作れば、何度でも異なる変数を追加計算できるのが便利な点です。


動かしてみた

Python 3.12 の環境で pip install policyengine-us を実行すると、依存ライブラリが順番にインストールされ、問題なく完了しました。インストール後にリポジトリ(ソースコードの置き場)のファイル構成を確認したところ、policyengine_us/ ディレクトリの中に次のようなファイルが揃っていることがわかりました。

policyengine_us/system.py
policyengine_us/entities.py
policyengine_us/model_api.py
policyengine_us/programs.yaml
policyengine_us/build_metadata.py

制度のルールを計算するエンジン部分(system.py)と、人・世帯などの定義(entities.py)が明確に分かれており、コードが整理された設計になっています。programs.yaml は計算対象となる給付プログラムの一覧を管理するマスターファイルで、新しい制度を追加する際の起点になります。build_metadata.py はパッケージのビルド時にメタデータを自動生成するスクリプトで、継続的インテグレーション(CI)環境での自動化にも対応した構成です。


ブラウザで試す(デモ)

本記事ではブラウザ上で PolicyEngine US の税・給付金試算を体験できる Gradio(Python から手軽にウェブ画面を作れるツール)デモを用意しています。年収・申告状況・居住州を入力するだけで、連邦所得税と SNAP 給付額の概算がリアルタイムで表示されます。インストール不要でまず動きを確かめたいときに活用してください。


実践のコツ:はじめの一歩

  • 最初に試す変数は 2 つだけにしぼりましょう。federal_income_tax(連邦所得税)と snap(フードスタンプ)を並べると、収入が増えるほど税が増え・給付が減る「綱引き」の構造がすぐに見えてきます。
  • 州を変えて比較するには、state_name の値だけ書き換えた situation を複数用意して、それぞれ Simulation を作るだけです。カリフォルニア州とテキサス州など、税率が大きく異なる組み合わせを選ぶと差がわかりやすくなります。
  • 所得帯ごとの分析for ループが便利です。収入を 1 万ドル刻みで変えながら sim.calculate を繰り返し、結果を pandas(Python のデータ分析ライブラリ)のデータフレームに格納すれば、グラフや CSV にすぐ書き出せます。
  • Simulation は一度生成すれば複数の変数を何度でも計算できます。変数を追加するたびに Simulation を作り直す必要はなく、処理の手間を省けます。
  • programs.yaml を眺めるだけでも、対応している給付プログラムの全体像がつかめます。どんな変数名が使えるか調べるときの手がかりになります。

活用例

  • 給付の崖(benefit cliff)の可視化: 収入がわずかに増えただけで SNAP や Medicaid の受給資格を失い、手取りが逆に減ってしまう「崖」がどの所得水準で発生するかを折れ線グラフで描画する。
  • 引っ越し先の税・給付比較: 同じ世帯条件で state_name だけ変えた複数の Simulation を並べ、州ごとの実質手取り差額を一覧表にして提示する。
  • 政策シナリオ分析: 連邦給付の上限額をパラメータとして変化させた「改正前」「改正後」の 2 シナリオを比較し、財政コストと分配効果を同時に推計する。
  • 家計相談ツールへの組み込み: ファイナンシャルアドバイザーが顧客情報を入力するだけで税負担と受給可能給付を即時提示できる社内ツールをPythonで構築する。
  • 教育・授業での活用: 経済学・公共政策の授業で学生が自分の仮想世帯を設定し、所得変化が実際の手取りにどう影響するかを手を動かしながら体験的に学ぶ。
  • ジャーナリスト・報道: 新しい政策提案が報じられた際に、典型的な家庭モデルを使って「年収 4 万ドルの一人親世帯への影響」などを数字で裏付けた記事を書く。

用語とポイント解説

SNAP(スナップ)

Supplemental Nutrition Assistance Program の略称で、日本で「フードスタンプ」と呼ばれることもある食料支援給付金制度です。かんたんに言うと「低所得世帯が食品を購入できるよう国が支給するお金」です。受給資格は収入・家族人数・資産などで判定され、PolicyEngine US では snap という変数名で月額給付額を試算できます。

Medicaid(メディケイド)

低所得者・障がい者・子どもなどを対象とした公的医療保険制度です。かんたんに言うと「収入が一定以下の人が医療費の自己負担なしまたは低負担で受診できる仕組み」です。州によって受給要件が異なり、PolicyEngine US は居住州の設定に応じた判定を自動で行います。

マイクロシミュレーション(microsimulation)

世帯・個人単位の詳細データを使って、政策変更が個々の家計に与える影響を積み上げ計算する手法です。かんたんに言うと「実際の家庭1件1件のデータで、制度変更の影響を細かく計算する方法」です。全体の平均だけでなく、所得層・家族構成ごとの分布を把握できるのが強みです。

給付の崖(benefit cliff)

収入がわずかに増えたことで受給資格を失い、給付が急に減って手取りが逆に下がってしまう現象です。かんたんに言うと「少し稼ぐと損をする収入の落とし穴」です。PolicyEngine US で収入を段階的に変えながら試算すると、この崖がどの所得水準で起きるかを折れ線グラフで視覚的に確認できます。

Tax Unit(タックスユニット)

確定申告をまとめて行う単位のことです。かんたんに言うと「誰と誰が一緒に税金の申告書を提出するか、というグループ」です。独身なら本人だけ、夫婦合算申告なら配偶者と2人で1つの Tax Unit を構成します。PolicyEngine US では tax_units キーに申告メンバーと filing_status を指定して定義します。

filing_status(申告状況)

確定申告の区分です。かんたんに言うと「一人で申告するか、夫婦でまとめて申告するかの選択肢」です。主な値は SINGLE(独身)・JOINT(夫婦合算)・HEAD_OF_HOUSEHOLD(世帯主)などで、税率や控除額の計算に直接影響します。シナリオによって切り替えるだけで税負担がどう変わるか確認できます。

Simulation オブジェクト

PolicyEngine US の計算の中心となる「計算機」本体です。かんたんに言うと「世帯情報を受け取って、何でも計算してくれる専用の道具」です。一度 Simulation(situation=...) で作成すれば、calculate("変数名", 年) を何度でも呼び出して複数の税・給付額を取得できます。設定を変えたい場合は新しい Simulation を作り直します。

programs.yaml

PolicyEngine US が対応する給付プログラムの一覧を管理するマスターファイルです。かんたんに言うと「このライブラリが計算できる制度の目次ファイル」です。SNAP・Medicaid をはじめ、どのプログラムが計算対象かを確認したいときに参照します。新しい制度を追加する際もここから始まる設計になっています。

state_name(居住州の指定)

世帯が住む米国の州を指定するパラメータです。かんたんに言うと「どの州に住んでいるかをライブラリに伝える設定値」です。州によって所得税率・給付の基準・Medicaid の要件が大きく異なるため、この値を変えるだけで州別の比較分析が簡単に行えます。値には "CA"(カリフォルニア)や "TX"(テキサス)などの略称を使います。


PolicyEngine US はオープンソース(誰でも無料で使え、コードも公開されている)として活発に開発が続いており、米国の複雑な税・給付制度を Python から透明性高く分析できる実用的な基盤です。ぜひ給付の崖の可視化や州別の手取り比較、政策シナリオの定量評価などに活用してみてはいかがでしょうか。