Introduction to Inhabit

Project Overview

The Inhabit model is a high-resolution simulation framework designed to analyze and project the interactions between household demographics and dwelling stock dynamics. By leveraging longitudinal data from the Socio-Economic Panel (SOEP), the model constructs a cross-tabulated inhabit matrix that tracks how different types of households (defined by income, size, age, and type) occupy different types of dwellings (defined by building type, ownership, condition, and room count).

The core objective of Inhabit is to simulate residential mobility and housing allocation over time, allowing researchers and policymakers to evaluate the impact of various housing policies, demographic shifts, and market constraints.

A profound explanation of the models functionality, constraints and future updates (from spring 2026 on) can be found a our paper: https://link.springer.com/article/10.1007/s10901-026-10300-x

Key Features

  • Empirical Foundation: Uses SOEP panel data to establish realistic baseline occupancy patterns.

  • Dynamic Projection: Simulates yearly changes in household and dwelling stocks.

  • Intelligent Allocation: Matches searching households to available dwellings based on configurable preference models and constraints.

  • Census Alignment: Calibrates results to match official German Census 2022 targets using Iterative Proportional Fitting (IPF).

  • Scenario Support: Allows for “what-if” analysis through configurable scenarios (e.g., changes in move-out rates, dwelling splitting, or anti-underoccupation policies).

Project Structure

The project is organized into several key components:

  • Core Module: * inhabit_matrix.py: The main entry point that orchestrates the yearly simulation loop, including disaggregation, projection, and matrix updates.

  • Calibration: * calibrate.py: Used for initial parameter calibration and establishing baseline weights.

  • Support Scripts (located in scripts/): * allocation.py: Implements the household-to-dwelling matching algorithm. * census_calibration.py: Handles the IPF calibration to census targets. * dwelling_stock.py & household_stock.py: Manage the evolution of stocks over time. * move_out_rate.py: Predicts household mobility using regression analysis. * soep_loader.py: Processes raw survey data into model-ready formats. * inputs.py: Manages configuration, scenarios, and file paths.

  • Analysis & Visualization: * Scripts such as occupation_charts.py, ds_charts.py, and evaluation_plots.py generate figures to analyze occupancy patterns, under/overoccupation, and model performance.

Workflow Outline

  1. Data Loading: Load empirical inhabitant and dwelling data.

  2. Disaggregation: Categorize data into multi-dimensional matrices.

  3. Stock Update: Adjust household and dwelling counts for the target year.

  4. Move-Out Simulation: Calculate which households leave their current dwellings.

  5. Allocation: Match searching households to vacant or new dwellings based on preferences.

  6. Calibration: Align the resulting distribution with official statistics.

  7. Analysis: Generate metrics and charts to evaluate the outcome.

Inhabit Model Outline