From 11cdc23d5af34fab3bd31f8ef21edb38d9f8c55e Mon Sep 17 00:00:00 2001 From: v-lerie Date: Mon, 13 Oct 2025 16:09:27 +0530 Subject: [PATCH 1/3] Migrate Microsimulation page to app v2 using new components --- app/src/Router.tsx | 5 + ...-tools-make-policyengine-more-accurate.png | Bin 0 -> 27270 bytes app/src/pages/Microsim.page.tsx | 206 ++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 app/src/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png create mode 100644 app/src/pages/Microsim.page.tsx diff --git a/app/src/Router.tsx b/app/src/Router.tsx index 11ffd2bc..377f9e7b 100644 --- a/app/src/Router.tsx +++ b/app/src/Router.tsx @@ -1,6 +1,7 @@ import { createBrowserRouter, Navigate, RouterProvider } from 'react-router-dom'; import Layout from './components/Layout'; import HomePage from './pages/Home.page'; +import MicrosimPage from './pages/Microsim.page'; import PoliciesPage from './pages/Policies.page'; import PopulationsPage from './pages/Populations.page'; import ReportOutputPage from './pages/ReportOutput.page'; @@ -75,6 +76,10 @@ const router = createBrowserRouter( path: 'account', element:
Account settings page
, }, + { + path: 'microsim', + element: , + }, ], }, ], diff --git a/app/src/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png b/app/src/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png new file mode 100644 index 0000000000000000000000000000000000000000..ed9eb621004e0c47957c676ea9efa3a095e11d52 GIT binary patch literal 27270 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 IO{c&92Un$HegFUf literal 0 HcmV?d00001 diff --git a/app/src/pages/Microsim.page.tsx b/app/src/pages/Microsim.page.tsx new file mode 100644 index 00000000..e012bd3e --- /dev/null +++ b/app/src/pages/Microsim.page.tsx @@ -0,0 +1,206 @@ +import { useNavigate, useParams } from 'react-router-dom'; +import { Box, Container, List, Text, Title } from '@mantine/core'; +import CalloutWithImage from '@/components/shared/static/CalloutWithImage'; +import { CardsWithHeader } from '@/components/shared/static/CardsWithHeader'; +import PageHeader from '@/components/shared/static/PageHeader'; +import { TitleCardWithHeader } from '@/components/shared/static/TextCardWithHeader'; +import TwoColumnView from '@/components/TwoColumnView'; +import heroImage from '@/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png'; + +export default function MicrosimPage() { + const navigate = useNavigate(); + const { countryId } = useParams<{ countryId: string }>(); + return ( + + + + + countryId && navigate(`/${countryId}/policies`)} + imageSrc={heroImage} + imageAlt="Diagram showing PolicyEngine microsimulation" + /> + + + + + + Microsimulation is a computational technique used to estimate the effects of + policy changes on individuals, households, or other microeconomic units. Unlike + macroeconomic models that focus on aggregate variables, microsimulation models: + + + + + Apply tax and benefit rules to representative samples of the population + + + Calculate outcomes for each household based on their unique characteristics + + Aggregate results to estimate population-wide impacts + + Allow for detailed distributional analysis by income, demographic groups, and + more + + + + + PolicyEngine’s microsimulation models implement tax and benefit systems as code, + allowing users to modify parameters and see how changes affect different + households and the overall population. + + + ), + }, + ]} + /> + + + + + + Open-Source Foundation + + + PolicyEngine builds on OpenFisca, an open-source microsimulation framework developed + by the French government. Our models implement tax and benefit rules as code, + creating a computational representation of current policy and allowing for + modifications to explore reform impacts. + + + + Data-Driven Approach + + + Our models use nationally representative household surveys enhanced with + administrative data to create accurate population samples: + + + + UK: Family Resources Survey with custom survey weights + + + US: Enhanced Current Population Survey with synthetic tax records + + + + + Machine Learning Enhancement + + + We apply machine learning techniques to optimize our population samples: + + + + Gradient descent algorithms to calibrate survey weights to match administrative + totals + + + Quantile regression forests to synthesize missing tax information for US data + + Statistical validation against administrative benchmarks + + + } + rightColumn={ + Relative aggregate error chart + } + /> + + + + + + PolicyEngine continuously validates our models against administrative data to + ensure accuracy: + + + + + Aggregate tax and benefit totals compared to government budget figures + + + Distributional impacts validated against administrative statistics + + + Tax and benefit calculators tested against official examples + + + Ongoing calibration to match the latest data from government sources + + + + + Our UK model has achieved up to 80% lower aggregate error rates compared to + standard survey-based approaches, and our US Enhanced CPS represents a + significant improvement over public microdata for tax modeling. + + + ), + }, + ]} + /> + + + + navigate('/coming-soon'), + background: 'gray', + }, + { + title: 'UK Model Validation', + description: + 'Detailed information about the UK tax and benefit model, including data sources, calibration methodology, and validation results.', + footerText: 'UK Model Validation →', + onClick: () => navigate('/coming-soon'), + background: 'gray', + }, + { + title: 'GitHub Repositories', + description: + 'Access our open-source code repositories for all PolicyEngine models, including tax-benefit rules, data processing pipelines, and web interface.', + footerText: 'PolicyEngine on GitHub →', + onClick: () => window.open('https://github.com/PolicyEngine', '_blank'), + background: 'gray', + }, + ]} + /> + + + ); +} From 2b4e3ae31a69724575e23a1e84a7171040fffe1c Mon Sep 17 00:00:00 2001 From: v-lerie Date: Mon, 13 Oct 2025 16:18:42 +0530 Subject: [PATCH 2/3] Migrate Microsimulation page to app v2 using new components --- app/src/pages/Microsim.page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/pages/Microsim.page.tsx b/app/src/pages/Microsim.page.tsx index e012bd3e..17c697e6 100644 --- a/app/src/pages/Microsim.page.tsx +++ b/app/src/pages/Microsim.page.tsx @@ -11,7 +11,7 @@ export default function MicrosimPage() { const navigate = useNavigate(); const { countryId } = useParams<{ countryId: string }>(); return ( - + Date: Mon, 13 Oct 2025 16:21:53 +0530 Subject: [PATCH 3/3] Migrate Microsimulation page to app v2 using new components --- app/src/pages/Microsim.page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/pages/Microsim.page.tsx b/app/src/pages/Microsim.page.tsx index 17c697e6..081da6f7 100644 --- a/app/src/pages/Microsim.page.tsx +++ b/app/src/pages/Microsim.page.tsx @@ -11,7 +11,7 @@ export default function MicrosimPage() { const navigate = useNavigate(); const { countryId } = useParams<{ countryId: string }>(); return ( - +