🕌

サンプル数とRSMEスコアの揺らぎの関係

2 min read

はじめに

回帰タスクでよく使われるRSMEについて、サンプル数を変えた時の揺らぎについて調べました。

コンペではLBのスコアにオーバーフィットしがちですが、どの程度のサンプル数の場合にどの程度の確率的揺らぎが存在するかの感覚を持っておくと、「オーバーフィットしているかどうか?」の指針になると考えたからです。

理論値

まず、RSMEは以下のようにかけます。

\mathrm{RSME} = \sqrt{\frac{1}{N}\sum{(y_i - \hat{y}_i)}}

今、残差e_i = y_i - \hat{y}_iの分布が平均1, 標準偏差\sigmaの正規分布に従うと仮定すると、

\mathrm{RSME} = \sqrt{\frac{1}{N}\sum{e_i}} = \frac{\sigma}{\sqrt{N}} \sqrt{\sum{z_i}}

とかけます(ただし、z_i = e_i / \sigma \sim N(0, 1))。
右辺の\sqrt{\sum{z_i}}は自由度N\chi分布に従うので、その平均および標準偏差はそれぞれ、

E[\mathrm{RSME}] = \sigma \sqrt{\frac{N-1}{N}}\left(1-\frac{1}{4N} + O\left(\frac{1}{N^2}\right)\right)
\sqrt{\mathrm{Var}[\mathrm{RSME]}} = \frac{\sigma}{\sqrt{N}}\left(\frac{1-1/N}{2}\right)\left(1+O\left(\frac{1}{n}\right)\right)

とかけます[1]。
簡単のために\sigmaで正規化して、Nが十分に大きいと仮定すると、

\sqrt{\mathrm{Var}[\mathrm{RSME]}}/\sigma \simeq 1
\sqrt{\mathrm{Var}[\mathrm{RSME]}}/\sigma \simeq \frac{1}{2\sqrt{N}}

とかけます。表にすると以下のようになります。

N RSMEの標準偏差
100 0.05
1000 0.01581
10000 0.005
100000 0.00158

テストセットのサンプル数が数1000程度のコンペはよくありますが、この条件だと0.005~0.015程度の揺らぎがあることがわかります。
これはモデルに起因する揺らぎではなく、純粋にサンプルデータに起因する揺らぎです。

例えば、N=1000, RSME=0.5の場合、標準偏差は0.01581 * 0.5 = 0.00791になるので、このような条件で小数点以下3桁以下でup/downしたことで一喜一憂しても意味がないと言えます。

シミュレーション

残差が標準正規分布に従うと仮定して場合、サンプル数を100-100,000まで変えたときのRSMEの標準偏差について、理論値数値計算によってシミュレーションした結果を以下に示します。
試行回数を増やすにつれて理論値に近づいていく様子がわかります。




ソースコードは[2]に示します。

まとめ

モデルのサンプル数を変えた場合のRSMEの揺らぎについて調査しました。
サンプル数とスコアの関係について感覚を持っておくと、モデルの予測結果を提出する時に意味のないスコアのUP/Downで一喜一憂しなくてよくなります。また、テストデータに過剰適合しているかどうかの判断基準にもなります。

参考資料

[1] https://en.wikipedia.org/wiki/Chi_distribution
[2] https://gist.github.com/bilzard/b4a435946227213edc852a7e6e665f63

Discussion

ログインするとコメントできます