LoginSignup
4
0

More than 1 year has passed since last update.

sample weightを使ってcalibrationを行う

Last updated at Posted at 2022-12-06

概要

広告のCTR予測において、不均衡データはundersamplingして学習するのが一般的です。
ただし、順序ではなく確率値そのものを正しく予測したいケースで、undersamplingをすると正例負例比率が実際と異なり、calibrationがズレてしまいます。

そこで、モデルが出力する予測値(=以降predictCTRと表記)を実際のCTRに近づけるため、
モデル学習を行う際に学習データと一緒にsample_weightを渡すことでcalibrationを行っていきたいと思います。

sample weightの実装

XGBoostの学習・検証データは下記のようにdmatrix変換をしますが、

dtrain = xgb.DMatrix(train_x, label=train_y)
dvalid = xgb.DMatrix(valid_x, label=valid_y)

dmatrix変換時にsample weight配列を渡すことができます。

dtrain = xgb.DMatrix(train_x, label=train_y, weight=train['weight'])
dvalid = xgb.DMatrix(valid_x, label=valid_y, weight=valid['weight'])

実装はこれだけです。

weightの設定値については要望があれば別途説明したいと思います。
基本的には、ラベル0,1の比率に合わせて設定をしていきます。

calibration実施前

  • sample weightを渡さず、モデル学習をした場合

具体的なCTR値は伏せさせていただいています。
calibration curveでは、斜めに伸びる点線(=45度線)に近いほどcalibrationができていることが確認できます。

calbration curveをプロットしてみると、明らかに45度線から外れて下に張り付いています。
calibration curveの横軸はpredictCTR, 縦軸は実際のCTRです。
つまり、この図からわかることは、predictCTRが実際のCTRよりも大きく上振れてしまっているということです。

calibration curve

calibration実施後

  • sample weightを渡して、モデル学習をした場合

先程のcalibrationなしの状態と比べると45度線に沿ってプロットされていることがわかるかと思います。
ヒストグラムも合わせて確認すると、calibrationが改善されていることが確認できました。

calibration curve2

後書き

今回はsample weightを使ったcalibrationを試してみました。

calibrationの結果、CTR予測モデルの精度が実際に上がるのかについては検証中です。

引き続きcalibration周りの研究を進めるため、進展があれば追記していきたいと思います。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0