パフォーマンス改善を意図したコーディングにおいて、「 実行速度を計測した上でものを言え 」とは耳にタコができるほど言われることです。ではその計測結果、どう評価していますか?
バラツキを抑えるためルーチンを1000回、1万回、100万回と回して計測したとして、どんなにループ回数を増やしたって計測結果は毎回少しずつ違います。それでも誤差が気にならないくらい大差を付けての勝敗が付いたならいいものの、どちらの勝ちか微妙な感じだったら…?
都合の良い測定結果だけ採用するなんて研究不正ですからね。誤差を含んだ測定結果群から結論を導いてこその評価です。
自然科学の世界では 検定 によって測定結果を評価します。われわれエンジニアもこれにならいましょう。
t検定
2群の標本がそれぞれ正規分布に従っていると仮定して、2群の母集団に有意差はあるかを求める手法がt検定です。
t検定の結果は検定統計量という、一種の確率として求まります。
この確率は
「 二つの母集団が同等だとして、こんなに差が付いてしまう確率 」
のことだと理解できます。
(前半の「二つの母集団が同等だとして」のことを帰無仮説と呼びます)
「 二つの母集団が同等だとして、A群がB群にこんなに勝ってしまう確率 」
を求める場合もあり、これは片側検定と呼びます。最初のは両側検定。
どちらにしろ、一般的にこれらの確率が 5% を下回るようなら
「そんなことは20回に1回もありえない(= 両群間には差があるのだろう )」
つまり有意差があると評価します。
勇み足が特に許されない場合は1%を下回って初めて有意差ありとする場合もあります。
Excel先生お願いします
この検定統計量、計算式はぐぐってみていただくことにして、計算式とその仕組みを知らなくてもExcel先生にかかれば関数ひとつで算出できます。