Section 3: ARIMA Model Development

Learning Objectives

By the end of this section, students will be able to:

  • Understand ARIMA model components for real estate forecasting
  • Identify appropriate ARIMA model orders using ACF/PACF
  • Apply Box-Jenkins methodology to real estate data
  • Build and validate ARIMA models for property markets
  • Generate forecasts with confidence intervals

Introduction

ARIMA models are fundamental tools for real estate time series forecasting. This section teaches how to develop, validate, and apply ARIMA models to property market data and price predictions.

Main Content

ARIMA Model Components

AR (Autoregressive) Component: - Current value depends on past values - Captures momentum and persistence - Order p: number of lagged terms - Real estate price momentum

I (Integrated) Component: - Differencing to achieve stationarity - Order d: number of differences - Removes trend and seasonality - Price changes rather than levels

MA (Moving Average) Component: - Current value depends on past errors - Captures shock persistence - Order q: number of error terms - Market adjustment to shocks

Box-Jenkins Methodology

Model Identification: - Stationarity testing (ADF test) - ACF and PACF analysis - Seasonal patterns identification - Model order selection

Parameter Estimation: - Maximum likelihood estimation - Information criteria (AIC, BIC) - Model comparison - Statistical significance testing

Model Validation: - Residual analysis - Ljung-Box test for autocorrelation - Normality tests - Out-of-sample testing

Example: Residential Price Forecasting

Building an ARIMA model for monthly residential price index forecasting.

Data Preparation:

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# Load and prepare data
df = pd.read_csv('residential_prices.csv', parse_dates=['date'], index_col='date')
prices = df['price_index']

# Test for stationarity
adf_result = adfuller(prices)
print(f"ADF Statistic: {adf_result[0]}")
print(f"p-value: {adf_result[1]}")

Model Identification:

# Plot ACF and PACF
fig, axes = plt.subplots(2, 1, figsize=(12, 8))
plot_acf(prices, ax=axes[0], lags=40)
plot_pacf(prices, ax=axes[1], lags=40)
plt.show()

# First difference if non-stationary
if adf_result[1] > 0.05:
    prices_diff = prices.diff().dropna()
    adf_result_diff = adfuller(prices_diff)
    print(f"After differencing - p-value: {adf_result_diff[1]}")

Model Fitting:

# Fit ARIMA model
model = ARIMA(prices, order=(2, 1, 2))
fitted_model = model.fit()

# Model summary
print(fitted_model.summary())

# AIC and BIC
print(f"AIC: {fitted_model.aic:.2f}")
print(f"BIC: {fitted_model.bic:.2f}")

Forecasting:

# Generate forecasts
forecast_steps = 12
forecast = fitted_model.forecast(steps=forecast_steps)
conf_int = fitted_model.get_forecast(steps=forecast_steps).conf_int()

# Plot forecasts
plt.figure(figsize=(12, 6))
plt.plot(prices.index[-24:], prices.values[-24:], label='Historical')
plt.plot(forecast.index, forecast.values, label='Forecast')
plt.fill_between(conf_int.index, conf_int.iloc[:, 0], conf_int.iloc[:, 1], alpha=0.3)
plt.title('Residential Price Index Forecast')
plt.legend()
plt.show()

Practice Exercise

Build an ARIMA model for commercial property rents:

  1. Test for stationarity and apply differencing
  2. Identify model order using ACF/PACF
  3. Fit and validate the model
  4. Generate 6-month forecasts

Assets

  • ARIMA model development guides
  • Stationarity testing tools
  • Model validation checklists

Summary

ARIMA models provide a systematic approach to real estate time series forecasting. Proper model identification and validation ensure reliable predictions for property markets.

Next Steps

The next section covers exogenous variables and ARIMAX models for enhanced forecasting.


© 2025 Prof. Tim Frenzel. All rights reserved. | Version 1.0.5