👻

母比率の区間推定で機械学習モデルを評価する 〜機械学習の仕事に統計を使ってみる〜

2022/09/24に公開

この記事では、母比率の区間推定を用いた機械学習モデルを評価する方法を書きます。
統計学を使うことで機械学習モデルの評価をより精密に実施することを目指します。

正解率90%はどんなデータに対しても90%なのか?

機械学習モデルの学習/評価方法の以下のフローを考えてみます。

  1. 全3000万のデータから訓練データとテストデータを合わせて数千件ほど抽出する
  2. 訓練データとテストデータに対してラベル付けを実施する
  3. 訓練データでモデル学習
  4. テストデータでモデル性能を評価 (正解率等の指標で評価)

上記で評価した、モデルの正解率が90%であったとします。
この90%は正確な評価でしょうか?
例えば、「1」のテストデータの選定をやりなおして再評価したとき、1回目と同じ90%になるでしょうか?
ほとんどの場合は毎回90%ぴったりとはならず、90%付近を前後することが予測できます。

正確にモデル性能を測定する方法

正確にモデル性能を測定する方法として、母比率の区間推定を使うことを検討してみます。
母比率の区間推定を行うことで、モデルの性能(正解率など)がどのくらいの範囲に収まるのかを統計的に推定することができます。

もちろん、全データに対して評価するのが一番正確です。
しかし、「正解率90%はどんなデータに対しても90%なのか?」で記載したフロー1のようにデータが3000万あるような場合、現実的ではないです。
(時間とお金をかければ別)

母比率の区間推定を実施するうえで最低限の知識

母比率の区間推定をするうえで、最低限必要な知識を整理しておきます。
単に知識を整理するだけでなく、ニュース記事のカテゴリの自動分類を評価するタスクと照らし合わせて考えてみます。

カテゴリの自動分類がどういものかよくわからないという人はこのあたりを参考にしてください。
https://zenn.dev/yagiyuki/articles/3bb2104de0d0c6d20cd0
https://zenn.dev/yagiyuki/articles/accelerate_ml

なお、ここの知識は統計Webを参考に書いています。

母集団

本来知りたいと思っている集団全体のことです。

標本

母集団の情報を推測するために選ばれた一部の集団のことです。

推測統計学

母集団から抽出された標本を用いて、母集団の性質を推測することです。

母集団の性質の例は以下の通りです。

  • 母平均: 例) 日本人の身長の平均
  • 母比率: 例) 日本人のうち身長が175cm以上の人の比率
  • 母分散: 例) 日本人の身長の分散

なお、機械学習のモデル性能は一般的に比率(正解率など)で評価するため、母比率を推測することになります。

サンプルサイズ

抽出した標本のデータ数のことをサンプルサイズといいます。
類似した言葉でサンプル数というものがありますが、これは標本調査の回数を指します。

信頼区間

区間推定において、母数が含まれると推定された区間のことをいいます。
信頼区間は自由に設定できますが、一般的に使われる指標は以下の3つです。

  • 90%の信頼区間
  • 95%の信頼区間
  • 99%の信頼区間

母比率の区間推定

ざっくりいうと、「母比率はだいたいこの範囲に収まるよ」と推定するのが母比率の区間推定です。
母比率の区間推定は、以下の計算式から求められます。

  • 標本比率:p
  • サンプルサイズ:n
  • 標準正規分布の上側x%点(信頼区間に応じて設定):z

標準正規分布の上側x%点の詳細は省略しますが、下記の通り設定してください。

  • 90%の信頼区間:1.64
  • 95%の信頼区間:1.96
  • 99%の信頼区間:2.58

母比率の区間推定を使ってモデル評価をする

評価データ1000件に対して正解率が90%であったときのモデル評価を区間推定でやってみます。
Pythonを使って計算します。

import numpy as np

#
# 設定
#
alpha, z = (0.95, 1.96) # 信頼区間, 標準正規分布の上側x%点
n = 1000      # 評価したテストデータの数(サンプルサイズ)
p = 0.9     # モデル性能(標本比率)

#
# 計算
#
Z = z * np.sqrt(p*(1-p) / n)
print('母比率の{}%信頼区間: {:.3f} < p < {:.3f}'.format(alpha*100, p - Z, p + Z))

出力結果は、「母比率の95.0%信頼区間: 0.881 < p < 0.919」になりました。
つまり、以下の解釈となります。

  • 信頼区間が95%なので95%の割合で、標本比率が「88.1% 〜 91.9%」に収まる
  • 逆に言うと5%は、標本比率が「88.1% 〜 91.9%」に収まらない結果となる
  • つまり、この機械学習モデルは母集団からサンプリングした任意の評価データ1000件に対して「88.1% 〜 91.9%」の正解率を出す可能性が高い
    (評価を100回やれば95回は、正解率は88.1% 〜 91.9%となることが期待できる)

信頼区間の幅を小さくしたい場合は、評価データの数を増やせば小さくすることができます。
信頼区間の幅を狙った範囲に抑えるように評価データを用意することもできます。
https://zenn.dev/yagiyuki/articles/ml_data_set_statistics

以上です。

Discussion