- 転職、事業性、投資のように入力値が揺らぐ計算では、数字ひとつよりも あり得る結果の範囲 のほうが判断に役立つ
- Unsure Calculator は
4~6 のような範囲を入力して不確実な値で計算でき、10~15 は実際の値がその範囲内にあると 95%の確信 を持っていることを意味する
- 結果は単一の数字ではなく、範囲、確率分布、パーセンタイルとして表示され、海外転職の例では月間残高が
-$60~+$220 の間になり得ることを示す
- 入力をシンプルに保つため、分布の種類、信頼水準、共分散のような表記は除外しており、内部計算は Monte Carlo方式 なので遅く、エラーメッセージも不親切
- 統計の専門家向けツールではなく、事業アイデア、時間節約、パンデミックリスク、マーケティングROIのような ナプキンの裏計算 に向いており、複雑な分析には専門ツールが必要
不確実な数字を計算に入れる
- Unsure Calculator は、確実ではない数字を扱うための 不確実性計算機 の初期バージョン
- 統計を「数字が確実でなくても、その数字で推論したい」という問題へと単純化している
- 日常的な計算にも不確実な入力値は多いため、統計の専門家でなくても不確実性を含む計算が必要になることがある
範囲表記の方式
- 通常の数字
4、3.14、43942 だけでなく、4~6、3.1~3.2、40000~45000 のような 範囲入力 をサポートする
~ は2つの極値の間に入るチルダ記号で、計算機のキーパッドにも含まれている
- 範囲表記は「正確な値はわからないが、実際の値はこの範囲内にあると 95%の確信 を持っている」という意味
10~15 は「10から15」と読めばよい
- 他の確率分布、別の信頼水準、打ち切り、共分散のような表記も可能ではあるが、理解しづらくなるため除外している
- そうした概念に慣れたユーザーは、より精巧なツールを使うほうが適しているという前提
- 目標は、幅広いユーザー層が統計的計算の力を簡単に使えるようにすること
数字ひとつで計算するときの落とし穴
- 不確実な値に出会うと、「どちらも確実ではないのだから重要ではない」と流してしまいがち
- もっともらしい数字をひとつ選んで計算すると、単一回答の単純さ に引かれるが、実際にあり得る結果はひとつではないかもしれない
- Unsure Calculator は複数のあり得る結果を計算に反映し、リスクと余地をあわせて示す
海外転職の財務計算の例
- 2015年に海外就職の機会を前に、家族の財政への影響を計算した状況が出発点
- 給与は採用プロセスをほぼ終えてからでないと分からなかった
- 現地の生活費は、友人から聞いた話とインターネット上の情報で大きく違っていた
- 税率も単純なパーセンテージひとつでは決めにくかった
- 最初は保守的に見える単一値で計算した
1500 * 0.6 - 650 - 150 - 30 - 20 = 50
- この計算は毎月
+$50 が残るという1つの結果しか示さない
- 範囲を入れて計算し直すと結果は変わる
1400~1700 * 0.55~0.65 - 600~700 - 100~200 - 30 - 20 = -60~220
- 各項目の実際の値がその範囲内にあると95%の確信を持てるなら、実際の月間残高も
-$60 から +$220 の範囲にあると見なせる
- 単一値
+$50 より有用なのは、お金を失う可能性まで明らかにするから
- パーセンタイルは意思決定により具体的な情報を与える
- 10パーセンタイルが
-$8 なら、月間残高が -$8 以下になる確率は10%
- 逆に、結果の90%は
-$8 より高い
- 月
-$33 以上の損失を出す5%のリスクもあわせて考えられる
- リスクを受け入れるかどうかは家族や状況によって異なる
- 子どもや住宅ローンがないときと、あるときではリスク許容度が違い得る
- バックアッププランがないなら、10%の損失可能性をより慎重に見るかもしれない
ドレイク方程式の例
- 実用的な計算を目指しているが、地球外文明の数を推定する ドレイク方程式(Drake equation) も例として扱っている
- この方程式は、銀河で通信可能かもしれない文明の数を推定する天体物理学の公式
- 1961年の Frank Drake の元の値は、次の要素を掛け合わせる方式だった
- 銀河では毎年恒星が1つ形成される
- そのうち1/5が約3つの惑星を持つ
- その惑星の100%が生命を発達させる
- その生命の100%が知性を持つようになる
- そのうち10%が通信可能になる
- 通信可能な状態が100万年続く
- これらの値を掛けると
60,000 となり、どの時点でも銀河には通信を試みる文明が6万あるはずだという結果になる
- 1961年以降、各パラメータの推定値は天体物理学者の間で大きく異なってきた
- 最新の推定値を範囲として入れた例は次のとおり
1.5~3 x 0.9~1.0 x 0.1~0.4 x 0.1~1.0 x 0.1~1.0 x 0.1~0.2 x 304~10000
- Unsure Calculator の結果は、期待できる文明数が
0 から 450 の間になり得ることを示す
- 確率は低い側に傾いており、ヒストグラムも下側により広く現れる
- ヒストグラムに
-5 のような負の値が出ることがある
- これは単純さを優先したツールの限界
- 計算機は追加の知識なしには、文明数が負になり得ないという制約を理解できない
想定される使用例
- 事業アイデア の可能性を計算できる
- 市場規模、市場シェア、1人あたり月次売上、運営費がすべて不確実な場合
50000~80000 x 0.10~0.20 x 5~10 - 20000~50000
1000~1500 x 10~12 x (30~50 / 100)
- 食器洗い機のような技術が節約する時間を計算できる
- 週あたりの使用回数、1回あたりの節約時間、寿命、設置コストが不確実な場合
(3~5 * 5~10 * 51 * 7~15) / 60 - 10~15
5000 x (-2~5 / 100) x 5~10
(10~30 / 100) * (0.1~1.0 / 100) * 100
- 高層ビルの高さを見積もれる
- 建物の足元までの距離と頂上を見る角度が不確実な場合
100 x tan(70 ~ 80)
- マーケティングキャンペーンのROIを見積もれる
- 表示回数、クリック率、コンバージョン率、支出が不確実な場合
1000000 x (2~3 / 100) x (3~5 / 100) x (10~15)
対応関数
- キーパッドには
+、-、x、/ しかないが、初期段階でもさらに多くの計算をサポートしている
- 例の関数と演算は次のとおり
2~3 ^ 4: 2から3の間の値を4乗
sqrt(10~12): 10から12の間の値の平方根
sin(90~95): 90度から95度の間の値のサイン
制限と共有方法
- 1人プロジェクトなので 壊れる ことは想定しておく必要がある
- 数式パーサーは脆弱で、エラーメッセージも役に立たない
- 計算はかなり遅い
- 柔軟性を保つため Monte Carlo法 を使っている
- 入力した計算ごとに約25万回のASTベース計算を実行する
- UIは非常にシンプルで見栄えもよくない
- 数式を共有する唯一の方法はURLを直接作ること
range は常に 正規分布
- 低い数字は平均より2標準偏差下
- 高い数字は平均より2標準偏差上
- 入力確率分布の観点でより複雑な方式はサポートしていない
- 統計の専門家向けツールではない
- ナプキンの裏計算には Unsure Calculator を使える
- より複雑な作業には無料・有料の統計ツール、完全なプログラミング環境、統計の専門家が必要
プロジェクトと更新
1件のコメント
Hacker News の意見
このツールは気に入った。ただ、HN の伝統に従って本文中の単語ひとつに引っかかり、ほぼ――というか実質的には完全に――脇道の話をすると、こうした計算には少なくとも3つの自分の足を撃ち抜くポイントがある
ツールと実装は良いが、統計を初めて手にした人たちが指を一本失うのを何度も見てきた
90% を超える人は 70% 信頼区間にも届かない。自分で試せる: https://blog.codinghorror.com/how-good-an-estimator-are-you/
ステークホルダーは、作業時間を t_i ~ PERT(min, mode, max) と指定する方法を本当に気に入っていた。考え方に近く、現実でよくある非対称分布も扱えるからだ
ちなみに PERT は、ユーザーフレンドリーで直感的に再パラメータ化したベータ分布にすぎない: https://rpubs.com/Kraj86186/985700
$50 という結果は良かったし、そこにプラスマイナスの範囲を付ければ、おおむね損益分岐点付近だと感じられる。一方で「実際の残高が -$60 から +$220 の範囲に入る確率が 95%」という表現は、各ステップで不確実性の合成を足しただけなのに、より具体的な情報を得たかのような錯覚を生む
各項目が本当に 95% なのか、本当の最小値・最大値が何なのか分からないなら、外れる可能性のある推測をさらに追加しているだけだ。だから Drake equation もあまり好きではない。各ステップが粗い推測の積み重ねなのに、果たして有用な数字を生み出しているのか疑問だ
いずれにせよ、こういうことを考慮したくなる段階なら、ちゃんとしたベイズ統計をやるべきだ
「正規分布は値を強制する何らかの制約要因を必要とする」という話も、どこから出てきたのか分からない。必要なのは相関していない誤差であって、それは「制約」でも「負のフィードバック」でもない
似たようなツールを作ったことがある
コマンドライン用 fermi: https://git.nunosempere.com/NunoSempere/fermi
Android 用の分布計算機: https://f-droid.org/en/packages/com.nunosempere.distribution...
もっと複雑なバージョンである https://www.squiggle-language.com/ にも興味があるかもしれない。あるいは、より高速だがはるかに冗長な C 版の <https://git.nunosempere.com/personal/squiggle.c> もある
a~b構文をサポートしたら、気の利いたディテールになりそう :^)すばらしい。この記事が気に入ったなら、“Dissolving the Fermi Paradox” という論文も興味深いかもしれない。よくある点推定値ではなく、実際に確率密度関数を掛け合わせる方向をより深く扱っている
やや驚くことに、私たちは単に孤独なのかもしれない、という結果が出ている
https://arxiv.org/abs/1806.02404
似たようなツールを作った。コマンドライン用[1]で、動機も似ているが、もう少し野心的
こういう考え方をする人が増えているのは本当に良いことだと思う。変動の源泉について推論する能力は、誰もが訓練されたり身につけたりしているわけではないが、ますます重要になっている[3]
[1]: https://git.sr.ht/~kqr/precel
[2]: https://entropicthoughts.com/precel-like-excel-for-uncertain...
[3]: https://entropicthoughts.com/statistical-literacy
ASCIIアートのヒストグラム、正確にはANSIアートのヒストグラムが格好いい。素早く何かを実現する良いハックだ
自分なら複数のチャートライブラリを試して、5倍は時間を使った末に諦めていたと思う
[1] https://github.com/stefanhengl/histogram
https://www.getguesstimate.com/ は、これをスプレッドシートとして作ったもの
スカラー倍ではない乗算をする方法はあるのだろうか? 例えば「サイコロを3回振った合計」と言いたい場合、正規分布ではない点は脇に置くとして、
1~6 * 3 = 1~6 + 1~6 + 1~6 = 6~15になってほしいところが実際には
1~6 * 3 = 3~18になる。「それぞれ10〜100かかる作業1000個を完了するのにどれくらいかかるか?」のような計算が本当に難しくなる出力を再び区間やガウス分布に変換できるとよさそう
参考:ヒストグラムに負の値(-5)がある理由が気になるなら、それはUnsure Calculatorの単純さに由来する避けがたい欠点だ。追加の知識がなければ、計算機には負の値が不可能だと分からない
Drake equationや確率を掛け合わせる方程式は、ログ空間でも見ることができる。各確率のスケールに不確実性があり、最終的な確率はログ確率の指数値を掛け合わせた結果になる。そうすれば、このような負の値の問題は起きない
100 / 4~6は、出力として17~25を返す最初はおもちゃのように聞こえるが、意外に有用そうだ。普段使う電卓の隣で使えるアプリとして出たら、間違いなくインストールすると思う
具体的にいつ必要だったかはすぐには思い出せないが、キーボードのショートカットに割り当てておけば、使い道を見つけ始める可能性はかなりありそうだ
三角関数もあるので、簡単な測定値から複雑な部品をリバースエンジニアリングするのにも良さそうだ。例えば形状の体積、エッジの角度、断面積のようなものだ
多峰分布をサポートしてくれると良いが、必須ではない。逆三角関数も興味深いが複雑で、必須ではない
いずれにせよ、答えの範囲を推定するたびにPythonを開くより、このツールのほうが便利だ
機能要望:確率分布を指定できるようにしてほしい。例えば
~は正規分布、_は一様分布、という具合だG(50, 1)、λ=3 の負の指数分布はN(3)、0から1までの一様分布はU(0, 1)、1から6までの一様整数分布はUI(1, 6)のような形だずっと柔軟で、覚えやすくも見える