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:
- Test for stationarity and apply differencing
- Identify model order using ACF/PACF
- Fit and validate the model
- 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