hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

工数見積りの海を彷徨う・征服

過去、何度かIPAの資料に基づき工数見積りを計算するためのエントリを書いた。今回のエントリは、その暫定解決編という位置づけとなる。

hidekatsu-izuno.hatenablog.com

hidekatsu-izuno.hatenablog.com

hidekatsu-izuno.hatenablog.com

前回までは、ロバスト回帰を使って分析していたのだが、実際に使ってみると単一基準ではリスクがどれくらいあるのかわかりにくく、やや使いづらいところがあった。

先日、いつものようにネットサーフィンをしていたところ「分位点回帰」という手法があるのを見つけた。分位点と言えば、1/4(第一四分位数)、1/2(=中央値)、3/4(第三四分位数)など、サンプルを相対的な位置関係を元に判断する手法であり、ロバスト回帰同様、偏りのあるデータに対しても頑健に動作することが期待できる。

さらに、ロバスト回帰に比べ、実際のプロジェクトがどれくらい収まっているのか範囲が明確になるため、リスクの範囲も想像しやすいというメリットがある。

なお、今回は R ではなく Python を使っている(前回記事参照)。ロバスト回帰のペナルティ関数が異なるため、データは同じでも多少数値に差が出ていることをお断りしておく(イマイチどの手法が良いのかはよくわかっていない)。

結果は次のグラフを見ていただくのがわかりやすい。

f:id:hidekatsu-izuno:20170723175138p:plain

X軸が機能数(1.5✕画面数+1.0✕帳票数+0.7✕バッチ数)、Y軸が人時工数となる。散布図が原データ、各直線は OLS が単回帰、RMG がロバスト回帰、QR が各パーセンタイルでの分位点回帰の結果を表している。

一見してわかるように、ロバスト回帰と50パーセンタイルでの分位点回帰の結果はほぼ同じ結果を導き出している。そういう意味で、前回までの方法論もさほどおかしくな数字ではないという確信が得られたのはありがたい。

ロバスト回帰と分位点回帰(50%)での工数算出式は次の通り。

ロバスト回帰:工数[開発5工程/人時]=142.05×画面数+94.70×帳票数+66.29×バッチ数

分位点回帰(50%):工数[開発5工程/人時]=136.36×画面数+90.91×帳票数+63.64×バッチ数