24
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

そのコード、本当に速くなった!? Excelでお手軽t検定

Last updated at Posted at 2014-06-19

パフォーマンス改善を意図したコーディングにおいて、「 実行速度を計測した上でものを言え 」とは耳にタコができるほど言われることです。ではその計測結果、どう評価していますか?

バラツキを抑えるためルーチンを1000回、1万回、100万回と回して計測したとして、どんなにループ回数を増やしたって計測結果は毎回少しずつ違います。それでも誤差が気にならないくらい大差を付けての勝敗が付いたならいいものの、どちらの勝ちか微妙な感じだったら…?

都合の良い測定結果だけ採用するなんて研究不正ですからね。誤差を含んだ測定結果群から結論を導いてこその評価です。

自然科学の世界では 検定 によって測定結果を評価します。われわれエンジニアもこれにならいましょう。

t検定

2群の標本がそれぞれ正規分布に従っていると仮定して、2群の母集団に有意差はあるかを求める手法がt検定です。
t検定の結果は検定統計量という、一種の確率として求まります。
この確率は
二つの母集団が同等だとして、こんなに差が付いてしまう確率
のことだと理解できます。
(前半の「二つの母集団が同等だとして」のことを帰無仮説と呼びます)

二つの母集団が同等だとして、A群がB群にこんなに勝ってしまう確率
を求める場合もあり、これは片側検定と呼びます。最初のは両側検定。

どちらにしろ、一般的にこれらの確率が 5% を下回るようなら
「そんなことは20回に1回もありえない(= 両群間には差があるのだろう )」
つまり有意差があると評価します。
勇み足が特に許されない場合は1%を下回って初めて有意差ありとする場合もあります。

Excel先生お願いします

この検定統計量、計算式はぐぐってみていただくことにして、計算式とその仕組みを知らなくてもExcel先生にかかれば関数ひとつで算出できます。

  1. 勝負するルーチン同士の実行時間をそれぞれ複数回計測します。今回は6回ずつ計測してみましょう。
  2. A群の結果はA列に、B群の結果はB列に入力します。
  3. C列のどこかのセルに=TTEST(A:A, B:B, 2, 3)と入力します。
    ここで、引数の3つめ、"2"は両側検定を意味します。コード同士の勝負ではやってみるまでどちらが速いかなんてわからないので両側でやるべきですね。
    引数の4つめ、"3"は「左右並んだ値同士に特に対応関係はなく、両群のバラツキ具合は違うかもしれない」という意味。
    ttest.png
  4. その値は0.005678(0.5678%)、強い有意差あり!
24
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?