オッズ 確率 変換:予測市場の価格を確率にする方法

2026年10月24日の例では、価格0.88はインプライド確率88.0%を意味しました。質問のすべての結果の生の価格の合計が1を超える場合は、各価格をその合計で割ります。

APIを使う方法

2026年10月24日の例では、プラットフォームの価格は、結果を1ドルの支払いに対するドル建てで0から1までの値として示す慣例に従っています。そのため、価格がその結果の生のインプライド確率になります。正規化では価格をまとめて使います。合計は1つの質問のすべての結果に属するためです。

Narwhalは結果ごとに、プラットフォーム間で統合済みの probability を返します。各プラットフォームには固有の quotes もあります。計算の前に、必要なフィールドを決めてください。返ってくる確率はそのまま読め、生の結果価格にはPythonの例にある換算を使います。RESTとMCPは同じAPIキーを共有するので、Narwhalアカウントのキーを使ってください。

  1. APIキーを取得 無料キーを取得し、環境変数 NARWHAL_API_KEY に保存してください。リクエストを送るときは、そのキーを Authorization: Bearer YOUR_KEY ヘッダーに入れます。
  2. 質問を読み取る 2026年10月28日のFRBの決定については、https://api.narwhalapi.com の GET /v1/predictions/scalar/usa-fed-2026-10 を使います。統合結果は各結果の probability、プラットフォームごとの価格は venue の quotes から読み取ります。
  3. オッズには日付を添えて読む 各スナップショットにはas_ofが付きます。2026年10月24日付のスナップショットではas_ofが2026-10-24T00:00:00Zです。そこから取った数値には、この日付を併記してください。
  4. 必要に応じて生の価格を正規化する 2026年10月24日付の例示用の生の価格について、同じ質問のすべての結果の価格を足し合わせ、各価格をその合計で割ります。生の価格から始める場合にこの計算を使ってください。Narwhalが返す probability の値は、すでに合計が1になっています。
    Python:生の価格から確率へ
    # A venue quotes each outcome as a price between 0 and 1 (cents on the dollar).
    # Narwhal returns the probabilities already
    # normalised, but if you start from raw prices you remove the overround yourself.
    yes_prices = {"cut": 0.05, "hold": 0.88, "hike": 0.10}  # example raw prices, sum 1.03
    total = sum(yes_prices.values())
    for outcome, price in yes_prices.items():
        print(
            f"{outcome:5} price {price:.2f}  implied {price:.1%}  "
            f"normalised {price / total:.1%}"
        )
    print("overround", round(total - 1, 2))

スプレッドシートまたはコードを使わずに計算する

同じ質問のすべての結果の生の価格をスプレッドシートに入力します。2026年10月24日付の例では、価格を B2:B4 に置き、最初の価格の横に =B2/SUM($B$2:$B$4) と入力します。数式を残りの価格の横にコピーし、結果をパーセント表示にします。

ドル記号があるため、数式をコピーしても合計は同じ範囲に固定されます。各行では、その行の価格を分子に、すべての結果の価格を分母にします。正規化には質問全体の合計を使うので、範囲にはすべての結果を含めてください。

計算なしで質問を読みたい場合は、Narwhalの予測ページを開いてください。確率がそのまま表示されます。生の価格の集まりから始めて、元のクォートの横に各除算の結果を見たいときは、シートを使います。

状況に応じた方法の選び方

状況適した方法理由
アプリで1つの質問を見るAPIが返す確率を読むすでに正規化されています
ほかのソースの生の価格各価格を合計で割るこれでオーバーラウンドが取り除かれます
小数、分数、アメリカンオッズ公式で換算してから正規化する換算の結果は生のインプライド確率です

小数、分数、アメリカンオッズ

まず、オッズの表記方法に合った公式を使います。小数オッズ d のインプライド確率は 1/d です。分数オッズ a/b では b/(a+b) を使います。正のアメリカンオッズ +X では 100/(X+100)、負のアメリカンオッズ -X では X/(X+100) です。X は示された数字の大きさ(絶対値)です。

2026年10月24日付のこれらの例では、小数オッズ2.50、分数オッズ3/2、アメリカンオッズ+150は、いずれもインプライド確率40.0%を意味します。アメリカンオッズ-200は66.7%です。オッズの表記に合う関数を選び、返ってきた値をパーセントで表してください。

アメリカン用の関数は符号つきのオッズを受け取るので、プラスやマイナスの符号を付けたままにしてください。負のオッズでは、関数は除算に絶対値を使います。分数用の関数は分子と分母を別々に受け取るので、分数オッズの表記と同じ順序で入力してください。

Python:オッズ形式から確率へ
def from_decimal(d):          # decimal odds, e.g. 2.50
    return 1 / d

def from_fractional(a, b):    # fractional odds a/b, e.g. 3/2
    return b / (a + b)

def from_american(x):         # American odds, e.g. +150 or -200
    return 100 / (x + 100) if x > 0 else -x / (-x + 100)

print(f"decimal 2.50   -> {from_decimal(2.50):.1%}")
print(f"fractional 3/2 -> {from_fractional(3, 2):.1%}")
print(f"American +150  -> {from_american(150):.1%}")
print(f"American -200  -> {from_american(-200):.1%}")

これらの公式は、クォートを1つずつ換算します。同じ市場のすべての結果のオッズがある場合は、生のインプライド確率を足し合わせ、それぞれをその合計で割ります。クォートの表記を変えてもオーバーラウンドは取り除かれないため、換算と正規化は別々の計算です。

価格の合計が100.0%を超えるのはなぜですか?

スプレッドや手数料のため、すべての結果を買うときの最良価格の合計が、満額の支払いをわずかに上回ることがあります。その超過分がオーバーラウンドです。各生の価格をすべての結果の合計で割ると超過分が取り除かれ、結果を正規化された確率の組として表せます。

価格は予測ですか?

取引参加者が支払う金額であり、保証ではなく、市場が示すインプライド確率です。

Narwhalの数値をもう一度正規化する必要はありますか?

いいえ。返される probability の値は、すでに合計が1です。質問の統合確率が必要なときは、その値をそのまま読んでください。生のクォートには生の価格の計算を当てはめてください。返ってきた確率を、まだオーバーラウンドが残る価格として扱ってはいけません。

計算例:生の結果価格を換算する

この例示用の数値は2026年10月24日のものです。

たとえば、生の価格が利下げ0.05、据え置き0.88、利上げ0.10だとします。足すと1.03です。この合計から満額の支払い1を引くと、オーバーラウンドは0.03、つまり3ポイントです。

各価格を1.03で割り、合計に占める割合を求めます。生のインプライド確率の割合は価格からそのまま得られ、正規化後の割合はこの共通の分母を使います。すべての価格を計算に含めるため、全結果で同じ分母を使ってください。

結果生の価格生のインプライド確率計算正規化後の確率
利下げ0.055.0%0.05 / 1.034.9%
据え置き0.8888.0%0.88 / 1.0385.4%
利上げ0.1010.0%0.10 / 1.039.7%

公開。

次のステップ