2nd Place Solution

参加者の皆様お疲れ様でした。
また、運営の方々、本コンペを開催してくださりありがとうございました。

Private LB 2位の解法を共有します。
https://github.com/mtmaru/bnb_price/blob/main/README.md

Icon6
T.Kaz

詳細な分析過程やコード共有、感謝致します。
とても勉強になります。ありがとうございます。

「1_train-opt.ipynb」のモデルの解釈の項目について、2件質問させて頂きたいです。
①SHAP値とlightgbmの特徴量重要度は、それぞれどのように解釈して、分析に活かされていますか?違いについても知りたいです。
②説明変数×SHAP値の散布図について、視覚化されていて非常にわかりやすいのですが、例えば、neighborhoodやguestsの場合はどのように解釈して分析に活かされていますか?縦軸の正負の値も解釈についても知りたいです。

お手数をおかけしますが、よろしくお願いいたします。

Aws4 request&x amz signedheaders=host&x amz signature=6ceef6502784ec9bb0815f343031d3b4c6d4051647815021c225ff195818e5e5
maruyama

返信が遅くなり申し訳ありません、見落としていました。。

まず、SHAP値の一般的な話は以下の記事をご覧ください。
https://www.datarobot.com/jp/blog/explain-machine-learning-models-using-shap/
SHAPを用いて機械学習モデルを説明する - DataRobot

以下、本コンペで私がどうSHAPを活用したかに絞って回答します。
SHAPを使った目的は仮説を得るためで、分析序盤のデータ観察として使いました。
(最終的なノートブックなのにSHAPのコードが付いているのは、序盤に作成したノートブックをベースにソリューションを仕上げていった都合でデータ観察のコードが残ってしまっていただけです……)。


今回の私の使い方に限って言うと、両者の違いは気にしておらず、特に使い分けていません。
私は注力すべき説明変数をざっくり絞り込むために特徴量重要度を計算しましたが、その用途であればどちらを使っても構わないと思います。
それぞれの違いですが、
・SHAPは個々の予測に対する寄与度を説明するための手法 (②のような使い方をするための手法) であり、特徴量重要度を評価することを目的には作られていないため、そもそも特徴選択には向かないと思います。特徴量重要度を評価する手法としてSAGEという別の手法をSHAPの著者らが提案しています。
・LightGBMのfeature importanceは特徴量重要度を表しますがバイアスが生じやすいことが知られているため、より正確に重要度を求めたいのであればpermutation importanceなどバイアスのかかりにくい手法で別途計算したほうが良いです。
https://aotamasaki.hatenablog.com/entry/bias_in_feature_importances
特徴量重要度にバイアスが生じる状況ご存知ですか? - 学習する天然ニューラルネット


普通のデータ観察 (目的変数と説明変数の散布図を書いて相関がありそうか見る、など) と同じです。
例えばguestsであれば、
[1] まず「最大宿泊可能人数が増えれば価格も上がるのでは?」という仮説を立て、
[2] その仮説を確かめるために最大宿泊可能人数guestsを説明変数に追加してSHAP値を計算し、
[3] その結果「guestsが増えるほどSHAP値が高くなる」という傾向にあることから仮説は正しいと判断する。
[4] さらに、最大宿泊可能人数と似た特徴量も効くのではないかと考え「部屋が広ければ価格の上がるのでは?」という新しい仮説を得る。
という感じで分析に活かしました。

Icon6
T.Kaz

ご返信いただき、とてもありがたいです。お時間を割いて頂き、本当にありがとうございます。
ご紹介のSHAPの記事、非常にわかりやすかったです。
SHAPをデータ観察でしようするのが良い点は、とても納得しました。
また、permutation importanceなどバイアスの件も初耳でしたので、自身でも試してみます。
非常に詳細にまでレクチャー頂き、ありがとうございました!!

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。