確率分布のカルバック・ライブラー情報量計算ツール
この計算ツールは、離散確率分布が基準分布とどの程度異なるかをカルバック・ライブラー情報量で測定します。合計がそれぞれ 1 になる同じ長さの配列を 2 つ入力すると、方向性のある結果を nats で返します。計算は決定論的で、自然対数を使用し、第 1 分布のゼロを正しく扱います。長さの不一致、不正な合計、負の値、基準分布のゼロも検出するため、無限または未定義の値を誤解を招く形で返すことはありません。
無料で実行
KL ダイバージェンスが表すもの
カルバック・ライブラー情報量は、分布 P と基準分布 Q の対応する確率の対数比を使って両者を比較します。実際には P に従う結果を Q で表現したとき、どれだけ情報が失われるかを示す方向性のある尺度です。結果が 0 なら全位置で一致し、正の値が大きいほど差が大きいことを表します。P と Q を入れ替えると通常は値が変わるため、方向は重要です。このツールは D(P || Q) を計算し、第 1 配列を評価対象、第 2 配列を基準として扱います。自然対数を使うため単位は bits ではなく nats です。KL ダイバージェンスは非対称で三角不等式を満たさないため、通常の距離ではありません。これらの性質により、情報理論、統計的推論、モデル適合、明確な基準を持つ比較に適しています。
有効な確率配列の準備方法
両方の配列に同数の確率を入力し、事象の順序をそろえてください。P の第 1 要素が雨を表すなら、Q の第 1 要素も雨でなければなりません。すべて有限かつ非負の数にし、各配列の合計を 1 にしてください。浮動小数点表現のためのごく小さな許容差は設けていますが、任意の重みを自動で正規化しません。件数やスコアは送信前に正規化してください。P のゼロは、不可能な事象の寄与がゼロになるため有効です。一方、基準分布のゼロはすべて拒否します。対応する P が正の場合に対数比が定義できず、無限大の値になり得るためです。この厳密な検証により、カテゴリ順のずれ、切れた配列、整数の百分率、互換性のないラベル集合も早期に見つけられます。
結果を適切に解釈して利用する方法
返却値にはダイバージェンスと単位 nats が含まれます。0 に近いほど Q が P をよく表しますが、良いモデルと悪いモデルを分ける普遍的なしきい値はありません。重要度はカテゴリ数、用途、標本抽出、誤りのコストによって変わります。同じカテゴリ定義と方向で得た値を比較してください。モデルの版ごとの推移、最新データと承認済み基準の比較、ほかの指標や不確実性と組み合わせた研究報告などに利用できます。確率、百分率、相関、対称距離として解釈しないでください。同じ過程からの標本でも、標本雑音によって差が生じる場合があります。個別確認はブラウザーで行え、API リクエストは $0.002 で反復可能な自動化に利用できます。決定論的なため、同じ有効入力からは同じ丸め済み JSON が得られます。
活用例
分布ドリフトの監視
現在のカテゴリ分布を正の基準分布と比較し、時間による方向性のある変化を定量化します。
確率モデルの評価
モデルの基準分布と観測分布または目標分布の差を、標準的な情報量で測定します。
圧縮仮定の確認
情報源とは異なる確率で結果を表現した場合の情報上の損失を見積もります。
よくある質問
どちら向きに計算しますか?
第 1 分布から第 2 の基準分布への D(P || Q) を計算します。配列を入れ替えると値が変わる場合があります。
結果が nats で表されるのはなぜですか?
数式で自然対数を使うためです。底を 2 とする対数なら結果は bits になります。
第 1 分布にゼロを含められますか?
はい。標準的な極限の取り決めにより、P の確率ゼロはダイバージェンスにゼロだけ寄与します。
基準確率のゼロを拒否するのはなぜですか?
Q がゼロで対応する P が正の場合、対数比が未定義となり、無限大の結果になり得るためです。
確率の合計は厳密に 1 である必要がありますか?
小さな数値許容差の範囲で 1 にしてください。値は検証しますが、重みを自動で正規化しません。
API での計算料金はいくらですか?
API リクエスト 1 回につき $0.002 です。ブラウザーでは無料で計算できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/kl-divergence \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}'const res = await fetch("https://api.kit.forhosting.com/stat/kl-divergence", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/kl-divergence",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/kl-divergence", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"distribution":[0.5,0.3,0.2],"reference":[0.4,0.4,0.2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/kl-divergence", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"distribution": [
0.5,
0.3,
0.2
],
"reference": [
0.4,
0.4,
0.2
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.kl_divergence",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |