diff --git a/app/src/Router.tsx b/app/src/Router.tsx index 06beac16b..47cc49106 100644 --- a/app/src/Router.tsx +++ b/app/src/Router.tsx @@ -7,6 +7,7 @@ import BlogPage from './pages/Blog.page'; import DashboardPage from './pages/Dashboard.page'; import DonatePage from './pages/Donate.page'; 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 PrivacyPage from './pages/Privacy.page'; @@ -156,6 +157,10 @@ const router = createBrowserRouter( path: 'support', element:
Support page
, }, + { + path: 'microsim', + element: , + }, { path: 'research', 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 000000000..ed9eb6210 Binary files /dev/null and b/app/src/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png differ diff --git a/app/src/pages/Microsim.page.tsx b/app/src/pages/Microsim.page.tsx new file mode 100644 index 000000000..da7b36ed8 --- /dev/null +++ b/app/src/pages/Microsim.page.tsx @@ -0,0 +1,232 @@ +import { useNavigate } 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 HeroSection from '@/components/shared/static/HeroSection'; +import StaticPageLayout from '@/components/shared/static/StaticPageLayout'; +import { TitleCardWithHeader } from '@/components/shared/static/TextCardWithHeader'; +import TwoColumnView from '@/components/TwoColumnView'; +import { useCurrentCountry } from '@/hooks/useCurrentCountry'; +import heroImage from '@/images/posts/how-machine-learning-tools-make-policyengine-more-accurate.png'; + +export default function MicrosimPage() { + const navigate = useNavigate(); + const countryId = useCurrentCountry(); + const isUK = countryId === 'uk'; + const optimize = isUK ? 'optimise' : 'optimize'; + const analyze = isUK ? 'analyse' : 'analyze'; + const modeling = isUK ? 'modelling' : 'modeling'; + + 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}. + + + ), + }, + ]} + /> + + + + { + e?.stopPropagation(); + window.open( + `/${countryId}/research/enhanced-cps-beta`, + '_blank', + 'noopener,noreferrer' + ); + }) as unknown as () => void, + 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: ((e: React.MouseEvent | undefined) => { + e?.stopPropagation(); + window.open( + `/${countryId}/research/uk-spi-validation`, + '_blank', + 'noopener,noreferrer' + ); + }) as unknown as () => void, + 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: ((e: React.MouseEvent | undefined) => { + e?.stopPropagation(); + window.open('https://github.com/PolicyEngine', '_blank', 'noopener,noreferrer'); + }) as unknown as () => void, + background: 'gray', + }, + ]} + /> + + + + ); +}