二段階確率樹計算機
二段階確率樹は、不確実な事象の連続を完全な結果一覧として表す手法です。まず第一段階の確率を入力し、次に各結果の下にある第二段階の条件付き確率を入力してください。計算機は経路ごとに確率を掛け合わせ、すべての終端確率を求めると同時に、回答前に構造を検証します。第一段階またはいずれかの条件付き分岐集合の合計が1でなければ、誤解を招く分布を表示せず、明確な検証メッセージを返します。
無料で実行
第一段階と条件付き分岐を記述します
最初に、第一段階で起こり得る相互排他的な結果をすべて列挙してください。各結果には重複しないラベルと、ゼロから1までの確率を指定します。これらは処理が始まるすべての可能性を表すため、第一段階の確率合計は1でなければなりません。続いて、第二段階の結果を条件付きの行として追加します。各行では第一段階の親を指定し、第二段階の結果に名前を付け、その親が生じた場合の確率を入力します。親ラベルは第一段階のラベルと完全に一致させてください。第二段階のラベルは同じ親の下でのみ一意であればよいため、「成功」のような名前を複数の親の下で使用できます。すべての親に少なくとも一つの第二段階行が必要です。また、各親の下にある条件付き確率も合計1にしてください。この行形式なら、関係を手書きの入れ子型JSONに隠すことなく、大きな木でも入力、確認、保存しやすく、別のアプリケーションから生成することも容易です。
各終端確率の計算方法を確認します
返される各行は、根から第一段階を通り、第二段階に至る一つの完全な経路を表します。その確率は、第一段階の確率と対応する条件付き確率の積です。たとえば、雨の確率が0.30で、雨の場合に遅刻する確率が0.40なら、雨の後に遅刻する経路の確率は0.12になります。この乗算は、条件付き確率で表された同時事象に適用する標準的な積の法則です。結果には計算済みの経路確率だけでなく、二つの因子も残るため、計算内容が明確で、検算、教育、表計算、後続コードでの利用に適しています。終端経路の件数と全経路確率の合計も返します。完全で有効な木の合計は、浮動小数点表現によるごく小さな影響を除き1です。この計算機は、第二段階が第一段階から独立しているとは仮定しません。親ごとに異なる条件付き分岐集合を指定することで、その依存関係を直接表現できます。
結果を使う前に不完全な木を検出します
確率樹は一見妥当に見えても、結果が一つ抜けていたり、重複する結果を二重に数えていたりすることがあります。そのため、この計算機はすべての分岐点で確率質量を検証します。第一段階の合計が1でない場合は拒否し、各親の下にある条件付き集合も個別に確認します。条件付き集合の欠落、存在しない親ラベル、第一段階ラベルの重複、同じ親の下での子ラベル重複、数値でない値や有限でない値、ゼロから1の範囲外の確率も拒否します。通常の浮動小数点表現を考慮して小さな数値許容差を設けていますが、実質的に不完全な分布は受け入れません。これはシミュレーション結果ではなく終端確率が必要な場合にお使いください。入力された数値に対して正確に計算し、無作為抽出は行いません。同じ決定論的な計算処理を毎回使うため、同一の有効な入力からは同一の出力が得られます。APIによる自動処理は1リクエスト当たり$0.002で利用できます。
活用例
診断結果を経路化する
状態の初期確率と、条件付きの陽性・陰性結果を組み合わせ、すべての完全な経路を一覧化します。
運用シナリオを計画する
配送、需要、人員、天候など、第二段階が第一段階に依存する場合の最終確率を計算します。
確率問題の解答を確認する
枝に沿った乗算を検算し、解答を比較する前に不完全な確率集合を見つけます。
よくある質問
終端経路の確率とは何ですか?
第一段階の一つの枝をたどり、続いてその条件付きの第二段階の枝をたどる同時確率です。
各分岐集合の合計を1にする理由は何ですか?
その分岐点で可能な相互排他的結果をすべて表すためです。異なる合計は、確率の欠落、重複、または誤りを示します。
経路確率はどのように求めますか?
第一段階の確率に、その結果を条件とする第二段階の確率を掛けて計算します。
異なる親の下で同じ子ラベルを使えますか?
はい。同じ親の中では一意である必要がありますが、複数の親で同じ結果名を使うことはできます。
この計算機は無作為試行をシミュレーションしますか?
いいえ。指定された確率から決定論的に正確な積を求めます。標本抽出やシミュレーションによる推定は行いません。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。枝ごとの追加料金はありません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/probability-tree-two-stage \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_stage":[{"label":"Rain","probability":0.3},{"label":"Dry","probability":0.7}],"conditional_second_stage":[{"first_stage":"Rain","label":"Late","probability":0.4},{"first_stage":"Rain","label":"On time","probability":0.6},{"first_stage":"Dry","label":"Late","probability":0.1},{"first_stage":"Dry","label":"On time","probability":0.9}]}'const res = await fetch("https://api.kit.forhosting.com/stat/probability-tree-two-stage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_stage": [
{
"label": "Rain",
"probability": 0.3
},
{
"label": "Dry",
"probability": 0.7
}
],
"conditional_second_stage": [
{
"first_stage": "Rain",
"label": "Late",
"probability": 0.4
},
{
"first_stage": "Rain",
"label": "On time",
"probability": 0.6
},
{
"first_stage": "Dry",
"label": "Late",
"probability": 0.1
},
{
"first_stage": "Dry",
"label": "On time",
"probability": 0.9
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/probability-tree-two-stage",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_stage": [
{
"label": "Rain",
"probability": 0.3
},
{
"label": "Dry",
"probability": 0.7
}
],
"conditional_second_stage": [
{
"first_stage": "Rain",
"label": "Late",
"probability": 0.4
},
{
"first_stage": "Rain",
"label": "On time",
"probability": 0.6
},
{
"first_stage": "Dry",
"label": "Late",
"probability": 0.1
},
{
"first_stage": "Dry",
"label": "On time",
"probability": 0.9
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/probability-tree-two-stage", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_stage":[{"label":"Rain","probability":0.3},{"label":"Dry","probability":0.7}],"conditional_second_stage":[{"first_stage":"Rain","label":"Late","probability":0.4},{"first_stage":"Rain","label":"On time","probability":0.6},{"first_stage":"Dry","label":"Late","probability":0.1},{"first_stage":"Dry","label":"On time","probability":0.9}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_stage":[{"label":"Rain","probability":0.3},{"label":"Dry","probability":0.7}],"conditional_second_stage":[{"first_stage":"Rain","label":"Late","probability":0.4},{"first_stage":"Rain","label":"On time","probability":0.6},{"first_stage":"Dry","label":"Late","probability":0.1},{"first_stage":"Dry","label":"On time","probability":0.9}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/probability-tree-two-stage", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"first_stage": [
{
"label": "Rain",
"probability": 0.3
},
{
"label": "Dry",
"probability": 0.7
}
],
"conditional_second_stage": [
{
"first_stage": "Rain",
"label": "Late",
"probability": 0.4
},
{
"first_stage": "Rain",
"label": "On time",
"probability": 0.6
},
{
"first_stage": "Dry",
"label": "Late",
"probability": 0.1
},
{
"first_stage": "Dry",
"label": "On time",
"probability": 0.9
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.probability_tree_two_stage",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_first_stage_branches | 100 |
max_conditional_branches | 1000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |