1 ポイント 投稿者 GN⁺ 2025-04-16 | 1件のコメント | WhatsAppで共有
  • 転職、事業性、投資のように入力値が揺らぐ計算では、数字ひとつよりも あり得る結果の範囲 のほうが判断に役立つ
  • Unsure Calculator4~6 のような範囲を入力して不確実な値で計算でき、10~15 は実際の値がその範囲内にあると 95%の確信 を持っていることを意味する
  • 結果は単一の数字ではなく、範囲、確率分布、パーセンタイルとして表示され、海外転職の例では月間残高が -$60~+$220 の間になり得ることを示す
  • 入力をシンプルに保つため、分布の種類、信頼水準、共分散のような表記は除外しており、内部計算は Monte Carlo方式 なので遅く、エラーメッセージも不親切
  • 統計の専門家向けツールではなく、事業アイデア、時間節約、パンデミックリスク、マーケティングROIのような ナプキンの裏計算 に向いており、複雑な分析には専門ツールが必要

不確実な数字を計算に入れる

  • Unsure Calculator は、確実ではない数字を扱うための 不確実性計算機 の初期バージョン
  • 統計を「数字が確実でなくても、その数字で推論したい」という問題へと単純化している
  • 日常的な計算にも不確実な入力値は多いため、統計の専門家でなくても不確実性を含む計算が必要になることがある

範囲表記の方式

  • 通常の数字 43.1443942 だけでなく、4~63.1~3.240000~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 を使える
    • より複雑な作業には無料・有料の統計ツール、完全なプログラミング環境、統計の専門家が必要

プロジェクトと更新

  • ツール改善への参加やコマンドライン版の入手には github.com/filiph/unsure を使える
  • 2025年更新時点で、この表記法とツールは5年間使われており、新しいプロジェクトを始めるときのワークフローに欠かせない要素になっている
  • より新しいノートブック版アプリは こちら で見られる
    • 初心者向けの使いやすさは低いが、パワーユーザーにはより役立つ
  • プロジェクトに興味があれば Filip Hracek をフォローするか、メーリングリスト を購読できる

1件のコメント

 
GN⁺ 2025-04-16
Hacker News の意見
  • このツールは気に入った。ただ、HN の伝統に従って本文中の単語ひとつに引っかかり、ほぼ――というか実質的には完全に――脇道の話をすると、こうした計算には少なくとも3つの自分の足を撃ち抜くポイントがある

    1. 95% は、普通の人が思っているよりはるかに広い。人は 95% を「だいたいこれで合っているだろう」と受け取りがちだが、実際には「これでなかったらかなり驚く」に近い。たいてい頭の中の誤差バーを狭く見積もりすぎる
    2. 確率が本当に独立であることはまれだ。これは「Mortgage Derivatives の格言」と呼べる。家族の例では、家賃は食費と相関している可能性が高く、家賃が高ければ食費も高い可能性が高い。すると分布が歪み、重みなしの一様分布としてモデル化すると、実際の結果がどれほど「まれな出来事」に見えるかに驚くことになる
    3. 一般に正規分布は、人々が思っているよりまれだ。値に何らかの制約要因があって強制される傾向がある。自然界では負のフィードバックループが至るところにあるためよく見られるが、比較的整った大自然の庭を離れて人間社会の混沌に入ると、正規分布はかなり異常なものになる
      ツールと実装は良いが、統計を初めて手にした人たちが指を一本失うのを何度も見てきた
    • これには強く同意する。特に1番に同意。人に 90% 確信できる答えの範囲を推定してもらうと、平均的にはおおよそ30% 信頼区間に相当する範囲を出してくる
      90% を超える人は 70% 信頼区間にも届かない。自分で試せる: https://blog.codinghorror.com/how-good-an-estimator-are-you/
    • 非技術系のステークホルダーと、大きな Gantt チャートの予想完了日をモデル化するプロジェクトをしたことがある。一部の作業は新しく、固定時間として定量化するのが現実的ではなかったため、ビジネス側のステークホルダーは確率的な作業完了時間を望んでいた
      ステークホルダーは、作業時間を t_i ~ PERT(min, mode, max) と指定する方法を本当に気に入っていた。考え方に近く、現実でよくある非対称分布も扱えるからだ
      ちなみに PERT は、ユーザーフレンドリーで直感的に再パラメータ化したベータ分布にすぎない: https://rpubs.com/Kraj86186/985700
    • 記事を見て受けた全体的な印象と重なる。範囲について推論する複雑さと難しさが増すにつれ、例の計算結果への確信はむしろ下がった
      $50 という結果は良かったし、そこにプラスマイナスの範囲を付ければ、おおむね損益分岐点付近だと感じられる。一方で「実際の残高が -$60 から +$220 の範囲に入る確率が 95%」という表現は、各ステップで不確実性の合成を足しただけなのに、より具体的な情報を得たかのような錯覚を生む
      各項目が本当に 95% なのか、本当の最小値・最大値が何なのか分からないなら、外れる可能性のある推測をさらに追加しているだけだ。だから Drake equation もあまり好きではない。各ステップが粗い推測の積み重ねなのに、果たして有用な数字を生み出しているのか疑問だ
    • 「家賃が食費と非常に相関している可能性が高く、家賃が高ければ食費も高い可能性が高い」という点にはあまり同意できない。平均家賃が平均食費と相関するモデルは合理的だが、その2つのパラメータが与えられれば、平均の周辺の変動は無相関としてモデル化できる
      いずれにせよ、こういうことを考慮したくなる段階なら、ちゃんとしたベイズ統計をやるべきだ
      「正規分布は値を強制する何らかの制約要因を必要とする」という話も、どこから出てきたのか分からない。必要なのは相関していない誤差であって、それは「制約」でも「負のフィードバック」でもない
    • 統計を電動工具や銃器のように考えたことはなかったが、「統計を初めて手にした人たちが指を一本失う」という比喩は本当にしっくりくる
  • 似たようなツールを作ったことがある
    コマンドライン用 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> もある

    • 特に Fermi は次の構文を持つ
      5M 12M # number of people living in Chicago  
      
      beta 1 200 # fraction of people that have a piano  
      
      30 180 # minutes it takes to tune a piano, including travel time  
      
      / 48 52 # weeks a year that piano tuners work for  
      
      / 5 6 # days a week in which piano tuners work  
      
      / 6 8 # hours a day in which piano tuners work  
      
      / 60 # minutes to an hour  
      
      乗算はデフォルトの演算として暗黙に扱われ、カスタム分布は対数正規分布だ
    • 同じ系統の別ツールに <https://carlo.app/> がある。Google Sheets でこの種の計算ができるようにしてくれる
    • Squiggle が a~b 構文をサポートしたら、気の利いたディテールになりそう :^)
    • unsure calc と Android アプリを使ってみたが、互いに異なる結果を出しているようだ
  • すばらしい。この記事が気に入ったなら、“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]にAwkで書かれたなかなか良い実装がある。少し粗いが、簡単に拡張できそうに見える
      [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を開くより、このツールのほうが便利だ
    • アプリが必要なら、https://f-droid.org/en/packages/com.nunosempere.distribution... を検討する価値がある
    • 主言語にDartを使っているので、ここからFlutterアプリを作るのは簡単そうだ
  • 機能要望:確率分布を指定できるようにしてほしい。例えば ~ は正規分布、_ は一様分布、という具合だ

    • こういうものは関数にすべきだと思う。例えば µ=50、σ=1 のガウス分布は G(50, 1)、λ=3 の負の指数分布は N(3)、0から1までの一様分布は U(0, 1)、1から6までの一様整数分布は UI(1, 6) のような形だ
      ずっと柔軟で、覚えやすくも見える
    • この機能がないこと自体が機能だ。記事でもそう述べている