LightGBMでLambdarankを使うときの「ndcg_eval_at」

LightGBM
この記事は約3分で読めます。
スポンサーリンク

lambdarankのパラメータで一番理解できなかったのが「ndcg_eval_at」パラメータ。
Lambdarankを使う上では結構重要なパラメータっぽいですが、パラメータについての情報が少なすぎたのでちょっと調べてみました。

Lambdarankを実行するときのパラメータ

Lambdarankを実行するときのLightGBMのパラメータはこんな感じになりますよね。

lgbm_params = {
    'task': 'train',
    'objective': 'lambdarank',
    "metric": "ndcg",
    'ndcg_eval_at': [1,2,3]
    'boosting_type': 'gbdt',
}

公式ドキュメントをみても、説明が何もない。
読み取れるのは「ndcg」と一緒に使うというところでしょうか。
まずは「ndcgとは何だ?」というところから追いかけていきます。
eval_at

ndcgは何だ?

まずは王道のwikiで調べてみます。
英語の情報しか見つからなかったので心がおれそうですが、DCGという評価方式があり、何番目までを評価対象とするかという仕組みが「ndcg」らしい。
Discounted cumulative gain

このドキュメントからは「上位何位までを評価対象とするか?」を指定するものと読み取れます。

もうちょっと探してみて日本語の情報を見つけました。
キーワード検索システムにnDCGを導入~現状分析の話

この例では、1画面に10個表示するために10を指定しています。

ndcg_eval_atの謎は深まる

考え方は分かりました。
で、もう一度パラメータを見てみます。
「ndcg_eval_at」はndcgで上位何位までを評価対象にするかという指定を行う模様。
この例だと上位1位、1-2位、1-3位という3つの組み合わせごとに正しい順番かどうかという評価をしているということですね。
個人的には1-3位までで良いんじゃないかと思ったりするんですが、学習を行う上でこっちのほうが良いのかもしれない。

lgbm_params = {
    'task': 'train',
    'objective': 'lambdarank',
    "metric": "ndcg",
    'ndcg_eval_at': [1,2,3]
    'boosting_type': 'gbdt',
}

タイトルとURLをコピーしました