RAG・検索基盤

nDCGとは|同じ1件を当てても、1位なら100%で3位なら50%

nDCGとは何を測る指標なのか適合率や再現率と何が違うのかどう使い分ければよいのか

検索の良し悪しを数字にするとき、何件当てたかだけを見ると足りません。1位で当てるのと3位で当てるのでは、使う人の手間が違います。

実際に計算したところ、同じ1件を当てても1位なら100%、3位なら50%という差が出ました。順位を織り込むのがnDCGです。

この記事の要点

  • nDCGは順位まで織り込んで評価する指標
  • 同じ1件を当てても1位100%、2位63.1%、3位50.0%
  • 実測では適合率@3が46.7%でもnDCG@3は92.3%
  • 件数だけを見る指標とは食い違うことがある

同じ1件を当てても、1位なら100%で3位なら50%

文書12件と問い5件で実際に計算しました。順位を1つ下げるごとにnDCGは100%、63.1%、50.0%と落ちます。

nDCGが何を捉えているのかを、実際に計算して確かめました。用意したのは社内規程を模した文書12件と、問い5件です。

検索も評価も本当に実行しています。問いごとの正解はコードに書いてあり、そこから適合率・再現率・nDCGを計算しました。

javascript
function ndcgAt(ids, rel, k) {
  let dcg = 0;
  // 1位は 1/log2(2)=1、2位は 1/log2(3)≒0.63、3位は 1/log2(4)=0.5
  ids.slice(0, k).forEach((id, r) => { if (rel.includes(id)) dcg += 1 / Math.log2(r + 2); });
  // 考えうる最良の並びで割って、0〜1に収める
  let idcg = 0;
  for (let r = 0; r < Math.min(k, rel.length); r++) idcg += 1 / Math.log2(r + 2);
  return idcg ? dcg / idcg : 0;
}
text
問い                  適合率@3  再現率@3   nDCG@3   上位3件
宿泊費の上限は                  67%      100%   100.0%   1,5,4(正解 1,5)
日帰りの日当                   67%      100%   100.0%   3,9,0(正解 3,9)
前払の申請期限                  33%      100%   100.0%   4,6,0(正解 4)
備品の購入                    33%      100%   100.0%   7,0,1(正解 7)
報告書の提出期限                 33%       50%    61.3%   11,9,10(正解 11,0)

平均  適合率@3 46.7%   再現率@3 90.0%   nDCG@3 92.3%

当てた順位  nDCG@3
       1位   100.0%
       2位    63.1%
       3位    50.0%

下の表が分かりやすいはずです。同じ1件を当てても、1位なら100%、3位なら50.0%。当てた事実は同じでも、評価は半分になります。

3つの指標が食い違う

上の表の平均を見てください。適合率@3は46.7%なのに、nDCG@3は92.3%です。同じ結果を評価して、倍近い開きがあります。

理由は正解の件数です。「前払の申請期限」の正解は1件しかありません。上位3件のうち1件しか当たらないので適合率は33%ですが、その1件が1位なので順位としては最良です。

正規化しているから比べられる

nDCGの「n」は正規化を指します。考えうる最良の並びを1.0として割ります

この正規化があるので、正解が1件の問いと2件の問いを同じ土俵で平均できます。割らなければ、正解の多い問いだけが数字を押し上げます。

低く出た問いを見る

5件のうち1件だけ61.3%でした。「報告書の提出期限」で、正解2件のうち1件しか上位3件に入っていません

平均だけを見ると92.3%で問題なさそうに見えます。問いごとに並べて、低い行を探すのが評価の使い方になります。

当てた事実は同じでも、順位で評価は半分になる。

単位: %1位で当てる100%2位で当てる63.1%3位で当てる50%正解が1件の問いで、その1件を何位で当てたかによる nDCG@3。上位3件までを見た場合。
図1 ── 当てた順位ごとの nDCG@3
出典Elasticsearch Reference「Ranking evaluation」2026-08-18 確認
Discounted cumulative gain (DCG) In contrast to the two metrics above, discounted cumulative gain takes both the rank and the rating of the search results into account.
原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18

nDCGとは何を測る指標なのか

上位に出た正解ほど高く評価します。順位と、正解の度合いの両方を織り込むのが特徴です。

nDCGは、検索結果の順位まで含めて良し悪しを数字にする指標です。上に出た正解ほど大きく数える形になっています。

件数だけを見る指標との違い

他の指標も押さえておきましょう。Elasticsearchの説明では、上位k件のうち正解が占める割合を測る指標と、上位k件に正解がいくつ入ったかを測る指標が並べられています。

そのうえで、この2つと違って、順位と正解の度合いの両方を織り込むものとしてDCGが挙げられています。nDCGはそれを正規化したものです。

正解は0か1かでなくてよい

見落とされやすい点があります。正解の度合いは段階を付けられます。同じ文書でも「求めていた答えそのもの」と「関係はある」を分けられます。

Elasticsearchでも、文書の評価は、利用者が決めた尺度でその文書の関連度を表す整数であればよいとされています。0と1だけに縛られません。

正解を決めるのは誰か

同じ文書でも、問いが違えば正解かどうかが変わります。ですから正解は問いごとに用意します

同じ文書では、関連度の判断は、その問いを入力した利用者が何を必要としていたかにもとづくとされています。作る側の都合ではなく、聞いた側の必要で決まります。

余談 問いを5件そろえるところが難所

計算そのものは短いコードで済みます。手間がかかるのは問いと正解の組を用意する作業でした。実際に聞かれている問いを集めて、正解を人が決める。ここを飛ばすと、どの指標を使っても意味のある数字になりません。

出典Elasticsearch Reference「Ranking evaluation」2026-08-18 確認
A document rating can be any integer value that expresses the relevance of the document on a user-defined scale.
原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18

nDCGを使うときに気をつけること

1つの指標だけで判断しないことです。前の節では、同じ結果に対して46.7%と92.3%が同時に出ています。

nDCGは順位を織り込むぶん優れた指標ですが、これ1つで全部が分かるわけではありません

指標を並べて見る

前の節の平均を思い出してください。適合率@3が46.7%、再現率@3が90.0%、nDCG@3が92.3%。同じ検索結果に対する3つの数字です。

どれも間違っていません。測っているものが違うだけです。上位に不要な結果が混じっている状態を見たいなら適合率、取りこぼしを見たいなら再現率になります。

kの決め方で結論が変わる

上位何件までを見るかも効きます。上位3件で測るのと上位10件で測るのでは、同じ検索でも数字が変わります

決め方は用途からです。画面に3件しか出さないなら3件で測ります。AIに渡す文書を選ぶ用途なら、渡す件数に合わせます。

平均で隠れる

平均92.3%という数字の中に、61.3%の問いが1件混ざっていました。平均だけを見ていると、この1件に気づけません

問いごとの一覧を残して、低い行を毎回見てください。試験の設計はシミュレーション評価の記事で扱っています。

3つの数字はどれも正しい。測っているものが違うだけ。

充足 2 / 4指標を複数並べて見ている同じ結果で適合率46.7%・再現率90.0%・nDCG92.3%が同時に出た問いごとの一覧を残している平均92.3%の中に61.3%の問いが1件混ざっていた1つの指標だけで良し悪しを決めている適合率だけを見ると46.7%で低く、nDCGだけを見ると92.3%で高く見える上位何件まで見るかを決めていないkが変われば同じ検索でも数字が変わる。用途から決める文書12件・問い5件での実測にもとづく。上位3件までを見た場合の数字。
図2 ── 評価指標を使うときの点検項目
出典Elasticsearch Reference「Ranking evaluation」2026-08-18 確認
Precision at K (P@k) This metric measures the proportion of relevant results in the top k search results.
原文Elasticsearch Reference「Ranking evaluation」 この内容の有効期限2027-02-18

よくある質問

適合率が低いのにnDCGが高いのはなぜですか
正解が1件しかない問いでは、上位3件のうち1件しか当たりません。適合率は33%になりますが、その1件が1位なら順位としては最良なのでnDCGは100%になります。
nDCGの正規化とは何ですか
考えうる最良の並びを1.0として割ることです。正解の件数が問いごとに違っても、比べられる数字になります。
どの指標を使えばよいですか
上位に出したいなら順位を織り込む指標、取りこぼしを避けたいなら再現率です。1つに絞らず、複数を並べて見るのが実際的です。
正解の付け方はどう決めますか
問いごとに、その利用者が何を求めていたかで決めます。0か1かだけでなく、段階を付けることもできます。

まとめ

  • nDCGは順位を織り込んだ評価の指標
  • 同じ1件でも1位100%、3位50.0%と差がつく
  • 実測では適合率@3が46.7%でnDCG@3は92.3%
  • 指標は1つに絞らず並べて見る

今日から始められること

  1. 評価したい問いを5件ほど選ぶ
  2. 問いごとに、正解となる文書を書き出す
  3. 適合率・再現率・nDCGを同じ問いで並べて計算する
  4. 3つが食い違った問いを調べ、何が起きているか確かめる

実務で組んだnDCGのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る