「これから作るシステムはどれくらいのユーザにニーズがある?」
「非機能要件を定義しているけど、構築するシステムのトランザクション件数ってどれくらいになる?」
など、システムエンジニアである限り、『何かを見積もる』という仕事は避けては通れません。
今回は、そんな『何かを見積もる』ときに役立つフェルミ推定を紹介します。
フェルミ推定とは
フェルミ推定について、Wikipediaでは以下のように説明されています。
実際に調査するのが難しいようなとらえどころのない量を、いくつかの手掛かりを元に論理的に推論し、短時間で概算することを指す。
フェルミ推定で検索すると、「都内にあるマンホールの数はいくつ?」や「日本にいる猫の数は?」など、突拍子も無い数字を求めさせる例が多く出てきます。
これらは就活生向けに、論理的思考を問うために出題される問題ですが、実際のシステムエンジニアの現場でもフェルミ推定が役に立つことが多くあります。
たとえば、本記事の冒頭で書いたような『システムの利用数』は、実際に事前に調査することが難しく、いくつかの手がかりを元に推測していくしかありません。
現時点で取得できるデータから、論理的に予測値を求めるために、フェルミ推定が役に立ちます。
フェルミ推定のやり方
フェルミ推定は以下の手順で進めていきます。
- 仮説をたてる
- 問題をいくつかの要素に分解する
- 既知のデータを活用する
- 推定量を決定(算出)する
- 総合し、計算して推定していく
今回求めてみる数字
では、数字を見積もっていきましょう。
今回は、話題のメガバンクのシステムリプレースにおいて、個人情報の変更手続きのシステムのスケールを推定してみたいと思います。
「だいたいどれくらいだと思いますか?」と聞いても、パッと推察はなかなか出来ないと思います。
1. 仮説をたてる
まずは、仮説をたてて、それを前提として検討をすすめていきます。
今回は、以下を仮説として見積もりをすすめていきます。
- 届出の内容は、住所変更と名前変更を対象とする。
- 住所・名前が変わった人は必ず届出を出す。
- 名前変更は結婚・離婚時のみ考慮する。(結婚・離婚時は必ず名前が変更されると定義する。)
2. 問題をいくつかの要素に分解する
問題を、いくつかの要素に分解します。
「1. 仮説をたてる」の結果から、今回は以下の要素に分解しました。
- Ⅰ. 銀行の個人口座数
- Ⅱ. 年間の結婚する人の割合
- Ⅲ. 年間の離婚する人の割合
- Ⅳ. 年間の引っ越しする人の割合
3. 既知のデータを活用する
「2. 問題をいくつかの要素に分解する」で定義した項目のうち、具体的な数値を得られるものを調べます。
今回は、たまたま全ての項目について情報を得ることができました。1
4. 推定量を決定(算出)する
今回は、推察する要素はありませんが、要素一つ一つに対しての考察であれば、ある程度の推察が可能ではないかと思います。
例えば、前提を「届出は出す人と出さない人がいる」と変えてみると、「実際に届出を出す人と出さない人の割合」など、推察する必要がある項目が出てきます。
また、「実際にシステムが使われる時間帯」を考慮してもいいかもしれません。
5. 総合
最後は、実際に収集した値を使って計算していきましょう。
トランザクション数を求める計算は以下の通りです。
個人顧客数 × (結婚による名前変更の人の割合 + 離婚による名前変更の人の割合 + 引っ越しによる住所変更の人の割合 ) / 一年の分数 = 届出の件数(件/分)
2,400万 × (0.50% + 0.17% + 5.8%) / (60 * 24 * 365) = 約2.95(件/分)
いかがだったでしょう。
上記の数字は、業務時間や営業日を考慮していない、完全にフラットな値になっています。
この辺りのばらつきなどは、「4. 推定量を決定(算出)する」で推察してみてもいいかもしれません。
最後に
あくまでも、フェルミ推定の目的は、正確な値を出すものではありません。
フェルミ推定によって、自分が得られるデータを使って、論理的に「だいたいの値」を求めることが出来ます。
システムを開発・運用していくうえで、その、フェルミ推定で推察した数値と、実際の数値を比較して検討することが大切です。
引用になりますが、
「実験には2つの結果がある。もし結果が仮説を確認したなら、君は何かを計測したことになる。もし結果が仮説に反していたら、君は何かを発見したことになる。」
という言葉をフェルミが残しています。
最近はデータ解析の方法やツールも様々なものがあると思うので、是非推察と検証を繰り返してみてください。
そこに、新しい発見や気づきがあるかもしれません。
👨「なんでコレってこうなってるの?」
👩「えっ、、、いやぁ…、ざっくりとこれくらいかなと…」
👦「(^ω^)」
とならないように、フェルミ推定を身につけましょう!
Input