準富裕層のどこにいる?パレート分布で自分の資産ポジションを見極めてみた
2025年2月2日にアップデートしました.

野村総合研究所の金融資産ピラミッドは資産運用界隈では大人気で,たしかに,「自分は今,アッパーマス層にいるんだな」とわかるだけでも,自分の相対的資産額を把握するには役立ちますが,本当に知りたいのは,たとえば「自分はアッパーマス層の中でどこらへんにいるのか?」だと思います.
しかし,このピラミッドからわかるのは,各レイヤーにおける世帯ごとの平均資産額だけで,これだけで自分がその集団の中のどこにいるかをイメージするのは難しいです.
そこでこの記事では,私が属する準富裕層を例に,統計学とPythonを使うことでレイヤーの中での資産分布を統計的に推定し,自分がレイヤーの中でどこに位置するのかを深堀りしてみました.
準富裕層の分布仮定:パレート分布
統計分布と聞くと,まずはメジャーな正規分布が思い浮かびますが,準富裕層が正規分布に従って分布していると仮定すると,両端の5,000万円と1億円にはほとんどいなくて,中心の7,500万円あたりに多く分布していることになりますが,これは不自然です.
そうではなく,資産額が大きくなるほどに世帯数も少なくなると考えるのが自然だと思うので,今回はパレート分布を仮定しました.
パレート分布は所得分布をモデリングする時に多く用いられる確率分布で,グラフは右肩下がりとなり,今回の例で言うと資産5,000万円付近が最も多く,保有資産額が多くなるに従って世帯数が少なくなるという分布です.
統計値の推定とヒストグラム
分布を仮定したので,ここから代表的な基本統計量を推定していきます.
平均値は準富裕層の合計資産額と合計世帯数から7,929万円と計算できますが,他の統計値はわからないので統計的に推定する必要があります.
記事の趣旨から外れるので詳細の説明は省きますが,まず,パレート分布の形状を決めるβというパラメーターがあり,これは尺度(5,000万円)と平均(7,929万円)から求められるので,これによってパレート分布の形状がわかります.
パレート分布の形状がわかれば基本統計量の推定が可能になり,ここでは平均値に加えて
- 第一四分位数(25%点)
- 中央値
- 第三四分位数(75%点)
を求めます.
これらがわかれば自分がどこにいるのかのイメージは結構はっきりしてきます.
Pythonで計算すると,以下のように求まります.
- 第一四分位数(25%点): 5,561万円
- 中央値: 6,460万円
- 第三四分位数(75%点): 8,344万円
平均値が7,929万円なので,中央値もここら辺かと思いましたが,まさに「平均の罠」ですね.

このモデルでは中央値は平均よりもずっと低い約6,500万円となり,第三四分位数が8,344万円となりました.
今回の結果から,準富裕層の分布は次のようになっていると想定されます.
- 純資産5,000万円以上5,560万円未満:下位25%未満
- 純資産5,560万円以上6,460万円未満:下位25%から50%
- 純資産6,460万円以上7,930万円未満:50%から上位25%
- 純資産7,930万円以上1億円未満:上位25%以上
2021年の金融資産ピラミッドでは,超富裕層と富裕層の合計が約2.7%,準富裕層が6.0%です.
ここから考えると,純資産が8,000万円以上であれば準富裕層の上位25%だと想定されるので,日本全体で見たらトップ5%に入ると想定されます(5.0% > 4.2% = 2.7% + 1.5%)
あくまでも準富裕層の分布をパレート分布と仮定して統計的に推定したものにすぎませんが,参考になれば幸いです.
最後に,Pythonでのコードを載せておきます.
import numpy as np
import matplotlib.pyplot as plt
# Given parameters
sample_size = 3250000
xmin = 5000
xmax = 10000
average = 7929
# shape parameter beta
beta = (average / (average - xmin))
# Estimate first quartile Q1,median Q2,third quartile Q3
q1 = xmin*((1/0.75)**(1/beta))
q2 = xmin*((1/0.5)**(1/beta))
q3 = xmin*((1/0.25)**(1/beta))
# Generate the Pareto distributed data
pareto_data = (np.random.pareto(beta, sample_size) + 1) * xmin
# Filter data to be within the specified range
pareto_data = pareto_data[pareto_data <= xmax]
# Plotting the histogram
plt.figure(figsize=(10, 6))
plt.hist(pareto_data, bins=100, density=True, alpha=0.75, color='blue')
plt.title('Pareto Distribution Histogram')
plt.xlabel('Asset(in JPY M.)')
plt.ylabel('Frequency')
plt.text(5560, 0.00045, 'First Quartile(25%): 5561')
plt.text(6450, 0.00026, 'Median(50%): 6460')
plt.text(7929, 0.00013, 'Average: 7929')
plt.text(8344, 0.0001, 'Thrid Quartile(75%): 5561')
plt.grid(True)
plt.show()
ディスカッション
コメント一覧
まだ、コメントがありません