What 50 years of Singapore property prices tell us about risk
Why "average return" lies, why one quarter in 1993 still distorts a 35-year statistic, and what this means for anyone planning to buy property
[Ideas are mine but analysis and texts are generated by AI]
Imagine two friends, Ahmad and Bao. Both decide to buy a private apartment in Singapore. Same building, same size. Ahmad buys in 1996 Q3. Bao buys in 2004 Q1. They both hold for five years.
Ahmad’s apartment, by 2001, is worth about 30% less than what he paid. He still has his mortgage. He’s underwater for almost a decade.
Bao’s apartment, by 2009, is worth about 45% more than what he paid. He’s the smart investor at every dinner party.
Same asset class. Same country. Same five-year holding period. Wildly different outcomes.
Most people, looking at this, will say “Ahmad got unlucky.” Or “Bao timed the market well.” Both are wrong, in an interesting way. The honest explanation is statistical, and once you see it, you’ll never read a “long-run average return” line in a property advert the same way again.
This piece walks through what 50 years of Singapore property data actually look like, what statisticians call fat tails, and the single most important — and most under-appreciated — fact about long-term property risk.
The “average return” story
Open any property-marketing brochure and you’ll see something like: “Singapore private property has appreciated by an average of 6.4% per year over the past 50 years.”
That’s not wrong. We pulled 50 years of quarterly data from SingStat — the URA Private Residential Property Price Index, from 1975 Q1 to 2025 Q4 — and the average comes out to about +1.57% per quarter, which annualises to roughly +6.4%. So far, so consistent.
The trouble is that the average is one of the least useful numbers you can compute about property returns. Here’s the actual time series:
The top panel is the price index. The bottom panel is the quarterly log-returns — basically, how much the index moved each quarter. Notice anything?
That bottom chart is not a tame, well-behaved process. It has periods of intense activity (the 1980–81 boom, the 1993–96 boom, the 1997–98 Asian crisis, the 2008 GFC dip and bounce) and long stretches of relative calm. The quarterly returns range from −15.2% (worst, 2009 Q1) to +24.4% (best, 1981 Q1). A single quarter can easily move the price by more than the average annual return.
Calling the average “+6.4%/yr” technically true and practically misleading is what statisticians call a Mediocristan-vs-Extremistan problem. We’ll come back to that.
The thing we don’t talk about: kurtosis
Here is the single most useful number for thinking about risk in fat-tailed worlds, and almost nobody outside finance ever encounters it: kurtosis.
(Pronounced “kur-TOH-sis.” Greek.)
It’s a measure of how much of the action is in the extremes versus the middle of a distribution. The bigger it is, the more the rare events dominate.
For a “normal” bell-curve distribution — the kind you learned about in school — kurtosis is 3.
For Singapore private residential property quarterly returns? 6.5.
For Singapore HDB resale flat returns? 18.2.
The HDB number is genuinely shocking. It is a direct symptom of one specific quarter: 1993 Q2, when HDB resale prices jumped by 27% in three months as a speculative boom rolled through public housing. That one observation, three decades later, still accounts for 74% of the total kurtosis of the entire HDB return distribution since 1990.
Translation in plain English: when you compute “the kurtosis of HDB returns” using 35 years of quarterly data, three-quarters of the answer comes from one quarter. The other 142 quarters together explain only the remaining 26% of it.
This is what “fat-tailed” means in practice. A single, unusual event dominates a statistic that’s supposed to summarise 35 years.
A picture is worth a thousand standard deviations
Here is the same point in chart form. The bars compare four Singapore property indices on four different “fat-tailedness” measures:
The red dashed lines show what a “normal-ish” distribution would look like.
Pearson kurtosis should be 3 for normal. SG indices range 5.6 to 18.2. Max quartic share — how much of the kurtosis is driven by one observation — should be about 0.05 for normal. SG indices range 0.31 to 0.74. Student-T fitted df, a sophisticated fat-tail measure where lower means fatter, with values near 2 indicating the underlying variance estimate is unreliable: SG indices 2.13 to 2.51. Hill α tail exponent, where lower means heavier tail and below 4 means kurtosis itself is mathematically infinite in the population: SG indices 2.17 to 2.91.
Across every measure, every SG property index is in the “fat-tailed” zone. None of them resemble the bell curve that most financial planning quietly assumes.
Why this matters, in dollars
Most retirement planning, mortgage stress-testing, and “how much can I afford?” calculations implicitly assume returns behave like a normal distribution. They use words like “expected return ± standard deviation” and reason about probabilities the way you’d reason about coin flips.
In a normal-distribution world, a quarter that’s 5σ off the mean is essentially impossible. About 1 in 1.7 million.
In a fat-tailed world, what financial textbooks call a “5σ event” can be a 1-in-100 event, or even more frequent. The 1993 Q2 HDB jump is a 7σ event in a normal model. The 1981 Q1 URA spike is a ~5σ event. The 2009 Q1 GFC dip is a ~3.4σ event. We’ve had multiple of these in 50 years, in just one country, in one asset class.
What that actually means if you’re buying a Singapore property today: your downside in any single quarter could be 15% or more, even with no leverage. Your upside in any single quarter could be 25% or more. The “1-in-50-years” event is more like 1-in-10. Standard deviation, as a measure of “how much can this move,” is simply not informative.
But there’s a more important fact than any of these — and it’s the one I think almost nobody knows about.
The real lesson: it’s clustering, not noise
Here is the most underappreciated finding in all of this. The chart below is the headline diagnostic from Nassim Taleb’s Statistical Consequences of Fat Tails. We applied it to Singapore data:
Each panel is one Singapore property index. The blue line shows the kurtosis (fat-tailedness) of returns aggregated over different time windows — 1 quarter, 2 quarters, all the way to 12 quarters (3 years). The green dashed line shows the same calculation, but with the returns randomly reshuffled in time.
Reshuffling preserves the distribution of returns. Same average, same variance, same fat marginal tails. What it destroys is the order: the relationship between consecutive quarters.
Look at what happens. The blue line (real, actual time-ordered data) stays elevated. Even at 12-quarter aggregation, kurtosis is well above the “normal” baseline of 3. The green dashed line (reshuffled) drops to roughly 3 — Gaussian — by lag 8 or 10.
If property returns were truly fat-tailed but independent quarter-to-quarter, the blue and green lines would look the same. They don’t.
What this means: the multi-year fat-tailed risk in Singapore property is not primarily about how fat-tailed the quarterly distribution is. It’s about the fact that bad quarters cluster together, and good quarters cluster together. The market spends years at a time in a “boom regime” or a “bust regime.”
Visible in the data:
the 1980–81 boom was 6 consecutive quarters of double-digit gains.
The 1993 HDB boom was two consecutive quarters of +27% then +18%.
The 1996–2004 URA bust was 10-quarter, ~45% peak-to-trough drawdown, after which the index stayed below the 1996 peak for over a decade.
The 2008 GFC dip was 4 consecutive negative quarters before recovery.
This is the difference between two mental models. Model A says fat-tailed but independent — each quarter is an independent draw from a fat-tailed distribution; long-run drawdowns wash out via central-limit theorem; standard fat-tail stats describe the risk well; 5-year worst case is moderate. Model B says clustered booms and busts — quarters within a regime are correlated; regimes are persistent; long-run drawdowns compound because all the bad quarters land in the same window; you also need to model regime persistence; 5-year worst case is severe (45%+ drawdowns observed).
The data say Model B is correct.
What this means for an actual buyer
If you buy property today expecting “the long-run average return is 6.4% per year, so over 5 years I should average 32% appreciation,” you’re using Model A. Model A says 5 years of bad luck is a freak event.
Model B says: the 5-year outcome is dominated by what regime you’re in, which is largely determined by when you bought. It’s not about luck. It’s about timing relative to the regime.
Practical consequences:
Late-regime entries are more dangerous than they look. Buying at the top of a sustained price run (high transaction volume, optimistic narratives, rising leverage in the system) raises the conditional probability that you’re at the start of a bust regime. Buying at the bottom of a sustained drawdown (low transaction volume, pessimistic narratives, distressed listings) does the opposite. Same property, same physical asset — wildly different conditional 5-year outcomes.
Holding period interacts with regime, not with calendar time. A 5-year holder who happens to enter the start of a boom regime exits at peak. A 5-year holder who enters at the start of a bust compounds losses. Same hold length, completely different experience.
Leverage that’s “safe in normal times” can ruin you in a long bust. A 70% LTV ratio is a manageable risk in a stable regime — even with the occasional bad quarter. In a 7-year bust regime where prices fall 40%, the same 70% LTV means negative equity for years. You can’t refinance, you can’t sell at non-distressed prices, and you have to keep servicing the loan throughout. Th==e risk is not the worst single quarter; it’s the duration of the bust regime exceeding the buffer your finances can absorb.
Stress-test using historical events, not multiples of σ. When your bank or your spouse asks “what’s the worst case?”, don’t say “two standard deviations down.” Say “what if 1996–2004 happens again?” That’s a 45% drawdown over 7 years with the property essentially impossible to sell at non-distressed prices throughout. If your finances can survive that, you can buy. If they can’t, you can’t, regardless of what the average suggests.
Don’t outsource your regime-judgment to property gurus. Most property advice in Singapore is sold by people whose income depends on you transacting. They are structurally biased to believe whatever bullish or bearish narrative drives volume. Your actual cycle-positioning decision should rest on regime indicators (transaction volumes, price-to-rent ratios, mortgage-to-income ratios, supply pipelines, policy direction) — not on someone else’s confidence.
The bigger lesson
You can extend this beyond property. Almost every domain you care about is fat-tailed in this same way.
Equity markets have clustered crashes (1929, 1987, 2000, 2008, 2020)
Career outcomes are dominated by a few breakthrough years.
Most of your lifetime medical risk is concentrated in a few specific events.
A small fraction of relationships carry most of the long-term consequence.
The intuitive ways we think about averages and volatility — trained by exam questions about coin flips and dice — break down in these domains. The standard deviation underestimates the spread, the mean is dominated by outliers, and “averaging out over the long run” doesn’t happen because the long run is dominated by clustered regimes, not by independent draws.
Want to verify this yourself?
Here’s the entire analysis pipeline. Less than 100 lines of Python. The data is publicly available — no special access required.
import json
import urllib.request
import numpy as np
import pandas as pd
from scipy import stats
# 1. Fetch URA Private Residential PPI from SingStat (public API)
URL = "https://tablebuilder.singstat.gov.sg/api/table/tabledata/M212261?limit=5000"
data = json.loads(urllib.request.urlopen(URL).read())
row = next(r for r in data["Data"]["row"] if r["rowText"] == "Residential Properties")
ppi = pd.Series(
[float(c["value"]) for c in row["columns"]],
index=pd.PeriodIndex(
[pd.Period(f"{c['key'].split()[0]}Q{c['key'].split()[1][0]}", freq="Q")
for c in row["columns"]],
freq="Q",
),
)
# 2. Compute quarterly log-returns
r = np.log(ppi / ppi.shift(1)).dropna().values
# 3. Headline statistics
print(f"n = {len(r)} quarterly observations, 1975Q1 to 2025Q4")
print(f"mean per quarter = {r.mean():+.4f}")
print(f"Pearson kurtosis = {stats.kurtosis(r, fisher=False):.2f} (Gaussian = 3)")
# 4. Single-event dominance test
x4 = r ** 4
print(f"Max single-quarter share of total x^4: {x4.max() / x4.sum():.3f}")
# 5. Clustering test (Taleb's Fig 10.2)
def kurt_at_lag(returns, lag):
n = len(returns) // lag
aggregated = returns[:n*lag].reshape(n, lag).sum(axis=1)
return stats.kurtosis(aggregated, fisher=False)
print(f"raw, lag=12: {kurt_at_lag(r, 12):.2f}")
rng = np.random.default_rng(42)
shuffled = []
for _ in range(200):
s = r.copy(); rng.shuffle(s)
shuffled.append(kurt_at_lag(s, 12))
print(f"reshuffled, lag=12: {np.mean(shuffled):.2f} (mean of 200 shuffles)")
```
When you run it, you'll see the raw lag-12 kurtosis stays well above 3, but the reshuffled version drops to about 2.7 — exactly the volatility-clustering signature this article describes.
Disclosure
Both this article and the Python analysis code were generated by Claude, Anthropic's AI assistant. The data is from SingStat (Singapore's Department of Statistics) and is publicly available. The methodology follows Chapter 10 of Nassim Nicholas Taleb's Statistical Consequences of Fat Tails (2020), particularly Figure 10.2 on the role of volatility clustering in apparent fat-tailedness.
I ran every test described, generated every chart from the actual data, and have full reproducibility. If anything looks wrong, please tell me — fat-tail analysis is famously easy to get subtly wrong, and a second pair of eyes is welcome.


