はじめに
下記の点、ご了承ください。
- 本記事はあくまで、「プログラマーが論理思考力を鍛えるため」にフェルミ推定を用いています。
- 企画職やコンサルの人が使えるレベルの精度になっていません。
- 本記事内で用いた統計情報は年度がバラバラです。あくまで例として捉えてください。
- 実例のロジックはガバガバかもしれませんが、これもあくまで思考の例ということで。
対象者
この記事は下記のような人を対象にしています。
- 駆け出しエンジニア
- プログラミング初学者
- 「フェルミ推定って、企画職とかコンサルの人が使うやつでしょ?」と拒絶しているプログラマー
結論
フェルミ推定はプログラマーが論理思考力を鍛えるのに最適!
フェルミ推定とは
フェルミ推定とは「未知の数値を、分かっている数値をもとに見積もること」
実際に調査するにはコスト・時間がかかりすぎたり、物理的に調査不可能なものを推定する手法です。
企画職やコンサルではよく使われる手法ですが、プログラマーでは敬遠される傾向がある気がします。
しかし、元々製造業の企画職を経験したことがある身としては、フェルミ推定はプログラマーにこそ役立つと考えています。
フェルミ推定はプログラマーの役に立つ?
フェルミ推定は「やってみないと分からないよね」ではなく、「分からないなりに事前に考えて、見積もっておこう」というと時に役に立ちます。
具体的には、下記のような場面で役に立つでしょう。
フェルミ推定が役立つ場面
- 設計
- 見積書作成
- スケジュール管理
正直、実装に関しては「ローカル環境でやってみればいいじゃん」って話なので、推定とか要らない場合が多いです。
しかし、上記のような場面だと、多少は未来予測をして見積もらなきゃいけないですよね。
そんな時にコーディングと一緒で「やらなきゃ分からないでしょー」というわけにはいかないので、フェルミ推定をうまく使いましょう!
フェルミ推定の手順
STEP1:課題を把握する
まずは何を算出しなければいけないのかを明確にします。
ぼんやりしている場合は具体的なイメージが掴める状態まで、細分化しましょう。
STEP2:ロジックを組み立てる
まずは目的の数字をロジックツリーを用いて細分化していきましょう。
ロジックツリーについてはこちらをご参照ください。
ロジックツリーを書く際にMECE(ダブりなく、抜け漏れなく)を意識しましょう。
全ての要素が統計で調べられそうなレベルになれば、この作業は終わりです。
STEP3:必要な情報を集める
あとは統計情報を集めるだけ。
人数、比率、台数、などなど...とにかく集めましょう。
STEP4:計算してみる
あとは計算式に代入するだけ!
STEP5:常識的な範囲か、確認する
もちろん、答えのない問いに答えるのがフェルミ推定ですが、あまりにも的外れではないか、は確認した方が良いです。
別の統計情報と比較して、遜色なければ問題ないですが、あまりにも桁が違いすぎる場合はロジックに破綻がないか、確認しましょう。
フェルミ推定を実際に使ってみる
「東京で使用されているMacの台数は?」というお題でフェルミ推定してみましょう。
まずは、ロジックツリーを用いて、MECEなロジックを組み立てましょう。
東京で使用されるMacの数=(プライベート使用台数)+(仕事利用台数)
プライベートor業務使用でMECEになっています。
プライベートと仕事で別々に使用していてもOKですね。
プライベート使用=(世帯数)×(世帯あたりのPC台数)×(Macのシェア)
つまり
700万世帯×1.3台/世帯×8% = 72.8万台
PCを個人で持てる年齢を15才以上と仮定し、統計情報から人口を調べました。
また、PCの普及率を掛ければ、使用PC数がわかります。
使用PC数にMacのシェアをかければ、Macの使用数が算出できます。
仕事利用=(労働者人口)×(ホワイトカラー比率)×(Macシェア)
つまり
800万人×55%×8% = 35.2万台
労働者数を統計情報から人口を調べました。
また、ホワイトカラー(PC使う)とブルーカラー(PC使わない)と仮定しました。(異論はあるでしょうが、あくまで思考の例です)
労働人口にホワイトカラー比率を掛ければ、使用PC数がわかります。
使用PC数にMacのシェアをかければ、Macの使用数が算出できます。
つまり、東京で使用されるMacの数は
72.8万台 + 35.2万台 = 108万台
ちなみに、2020年のMacの出荷台数が93万台なので、なんかそれっぽい数字にはなってる気がしますね。
ただし、ここで大事ないのは「それっぽい数字になったか」よりも「ロジックツリーがMECEに書けたか」と「使用する項目と掛け算のロジックに破綻がないか」ですね。
おわりに
フェルミ推定についてまとめました。
企画職やコンサルのためのフレームワークと思われがちですが、論理的思考力が必要なプログラマーにこそ、必要なものだと思いますので、是非マスターしてみてはいかがでしょうか?