この記事は (1人で)基礎から学ぶ推薦システム Advent Calendar 2022の20日目の記事です。
機械学習の解釈性・説明性が注目され始めてから久しく現在では、回帰や分類タスクに関するXAIへの取り組み方は調べれば文献が得られるようになってきたなと思っています。 (XAIって単語も浸透しつつある気もしますしね)
推薦システムにおいても解釈性・説明性は大事な要素であり、精度改善のためだけではなくサービスそのものの指針にあった推薦の振る舞いになっているかを評価・確認する上で使用されたりするかもしれません。
今回は推薦システムのモデルに関する解釈性・説明性を考えるために、推薦の業界でよく使用されるLearning to Rankで考えていきます。 Learning to Rankで機械学習の解釈性や説明性に関して取り扱った文献は、あまり見かけない気がします。 「これだけ手法や他分野の文献が揃ってれば頑張ればなんとかできるやろ?」という気持ちになるので、今回はランク学習で解釈性・説明性についてやってみようと思います。
モデルの説明性・解釈性
今、機械学習のモデルに対して何らかの改善を行うことになったとしましょう。 「改善」と言うからには、その変更によって期待する挙動の変化があるはずです。
さて、仮にこの変更を行ったとしてこの改善が正しく作用していることをどのように確認したら良いでしょうか?
一つには、モデルの精度を確認することが挙げられます。 多くの場合モデルの精度を上げるために改善を行うので、一番やりたい「精度を上げること」が達成できているかは確認すると思います。
一方、これが意図した挙動による変化なのか、想定外の挙動による変化なのかを把握したくなるかもしれません。 この解釈によって、次のアクションにつながっていったりします。 実際、
- 意図せず性能が悪くなったが、そのメカニズムがわかったら良いのにな...
- モデルがどんな気持ちで推論したかがわかれば、更に改善につなげられるのにな...
というようなことを考えたことがある方は、少なくないかと思います。
実務では(業界によって重要度は様々ではありますが)性能改善のためだけでなく「モデルがなぜその結果を出力したのか」を解釈できる必要があったりします。 モデルの推論結果が人間に悪影響を与えてしまうことが考えられるため、推論時にモデルが期待通りの振る舞いを行っていることを確認したいニーズが出てきたりするためです。
このような理由から、機械学習におけるモデルの説明性・解釈性に注目が集まっていたりします。
解釈性・説明性の考え方
説明性・解釈性といっても、人によってイメージしているものが異なるかもしれません。 機械学習モデルの説明性・解釈性は、大まかにいくつかの段階に分けて考えることができます。
それぞれ、下記のようなことを把握することができます。
- Permutation Feature Importance (PFI)
- モデルにとってどの特徴量が重要か
- Partial Dependence (PD)
- 特徴量とモデルの予測値の平均的な関係
- Individual Conditional Expectation (ICE)
- インスタンス(特徴量の行のこと)ごとに特徴量と予測値の関係
- SHapley Additive exPlanations (SHAP)
- モデルがなぜその推論をしたのかという理由
個別の解釈手法の細かい理論に関しては、下記の文献が非常にわかりやすいので、ぜひそちらを参照下さい。
注意点
モデルの解釈ではあくまで特徴量と予測値との関係について見ており、特徴量と目的変数の因果関係ではない点にはくれぐれもご注意ください。
モデルの振る舞いを読み解くものであり、特徴量と目的変数の間の真の因果関係はここからはわからないので、適切な因果推論の手法を使用してください。 ここでは、あくまで「期待した通りにモデルが振る舞っているか」を確認している点にはご注意ください。
Permutation Feature Importance
Permutation Feature Importanceは、モデルがどの特徴量を重要視しているかを確認することができます。
Permutation feature importance は、特徴量の値を並び替えることで、特徴量と真の結果との関係性を壊し、これによる予測誤差の増加を測定します。 5.5 Permutation Feature Importance | Interpretable Machine Learning
これにより、(出力にどう影響しているかはわからないですが)どの特徴量が重要かを判別することができ、「〇〇の特徴量を重要視しているモデル」ということを解釈することができます。
Permutation Feature Importance
と Feature Importance
決定木系のモデルを扱うときに、(Gini) Feature Importanceが使用されたりするのを見かけることがありますが、こちらとPermutation Feature Importanceは別物です。
Permutation Importanceとは、機械学習モデルの特徴の有用性を測る手法の1つです。よく使われる手法にはFeature Importance(LightGBMならこれ)があり、学習時の決定木のノードにおける分割が特徴量ごとにどのくらいうまくいっているかを定量化して表していました。本記事で紹介するPermutation Importanceは学習時ではなく、学習済みモデルを用いて各特徴量の効果を計測できる方法です。学習済みモデルを用いるため、検証データ(Validation data)にも適用でき、汎化性能の観点からも各特徴量の良さを計測でき、また木系のモデル以外でも利用できるという利点があります。 Permutation Importanceを使って検証データにおける特徴量の有用性を測る - Qiita
ざっくり書くとこんな感じです。
- Gini Feature Importance : 特徴量ごとにノードをどれくらいうまく分割できるか(ある特徴量で分割することでどれくらいジニ不純度を下げられるか)
- Permutation Feature Importance : 予測誤差に対する特徴量の影響度合(ある特徴量がどれだけモデルの予測精度向上に寄与しているのか)
似た用語でパッと見出力される数値も似たような形式ですが、数値が表す内容は別物ですので注意が必要です。
Partial Dependence
Partial Dependenceは、特徴量が"平均的に"推論に対してどのような影響を与えるかを確認することができます。
Partial dependence plot (PDP, PD plot) は1つ、または2つの特徴量が機械学習モデルの予測結果に与える周辺効果 (marginal effect) を示します(J. H. Friedman 200127)。 Partial dependence plot は入力と出力の関係が線形か、単調か、より複雑かどうかを表現できます。 5.1 Partial Dependence Plot (PDP) | Interpretable Machine Learning
PFIでは重要度はわかっても、その特徴量が増加したとき推論結果の値が上がるのか下がるのか、線形なのか非線形に変化するのかはわかりませんでした。 PDを使用することで、モデル全体の平均で見るとどれくらい推論結果の値が変化するのかを知ることができます。
Individual Conditional Expectation
PDでわかるのはあくまで特徴量の変化に対する平均的な変化でしかなく、その中には性質の異なるサンプルがある可能性があります。 Individual Conditional Expectationでは、特徴量の変化が"インスタンスごとに" どのように影響しているかを把握することができます。
Individual Conditional Expectation (ICE) plots は、ある特徴量が変化したときにそのインスタンスの予測がどのように変化するかを1本の線で可視化する手法です。 特徴量の平均的な効果に関する partial dependence plot は、特定のインスタンスではなく、全体的な平均に注目しているため、大域的な方法と言えます。 個々のインスタンスに対する PDP と等価な手法は、individual conditional expectation (ICE) plot (Goldstein et al. 201729) と呼ばれています。 ICE plot はインスタンスごとの、ある特徴量が予測に与える影響を別々に可視化します。 partial dependence plotでは、全体に対して1本の線で表現していましたが、ICE plot では、1つのインスタンスにつき1本の線で表現されます。 PDP は ICE plot の線を平均したものと一致します。 5.2 Individual Conditional Expectation (ICE) | Interpretable Machine Learning
ICEでは、PDよりミクロな視点で特徴量の変化に対するモデルの振る舞いの違いを観測することができます。
SHapley Additive exPlanations
機械学習モデルの振る舞いを総合的に確認するときに使用される指標です。
直感的な理解としては下記の記載がわかりやすいです。
シャープレイ値は次のように直感的に理解できます。 特徴量がランダムな順序で部屋に入ります。 部屋にいる全ての特徴量はゲームに参加します(= 予測に寄与します)。 ある特徴量のシャープレイ値とは、既に部屋にいた特徴量が受ける予測と、その特徴量が加わった時の予測の変化の平均です。 5.9 シャープレイ値 (Shapley Values) | Interpretable Machine Learning
ランク学習による推薦
Learning to Rank
Learning to Rankはランク学習・ランキング学習とも呼ばれます。
- ランキング学習とは、定義した重要度に基づいて情報を並べるための機械学習の手法である。
- 短な応用例としては、Google検索などの検索エンジンがある。あるキーワードを検索にかけた時、表示されるページの並び順はランキング学習によって決められている。さらに発展させると、Siriなどの自動応答システムでも使用されており、重要性が増している。
- このランキング学習を活用することで、重要な情報を素早く認識させることができる。
ランキング学習1 入門編 - Qiita
アイテムの並び順について最適化するための機械学習の手法ですね。 分類と異なることは明確だと思いますが、回帰と性質が異なるポイントとして、回帰では下記のような問題が発生することがあります。
- サイト上で行動が活発なユーザーに対してはどのようなアイテムであっても予測確率が高く出やすい
- 各ユーザーに対してのアイテムの並び順を最適化しているわけではないので、loglossが改善していても、AUCやprecision@kなどの並び順に関する指標が改善しないことがある
Recruit Data Blog | ランキング学習の目的変数とLightGBMのパラメータについて
このような問題に対応する点が、ランク学習と回帰で異なる点と言えそうです。
一方、ランク学習であっても値を予測することは回帰と同じで、値の大小の順番が重要視されているだけと考えることができます。 そのため、今回はランク学習であるということを念頭におきつつも、回帰問題と同じように解釈していけば良さそうです。
何はともあれやってみる
まずは説明性とか抜きにしてLightGBMでランク学習をやってみます。
どういうコードかはさておき、LightGBMでのランク学習ができました。
説明性を見てみる
今度はここで作ったモデルに関して解釈してみたいと思います。
ランク学習といえど、出力はクエリに対する関連度ですので、大きいほうが関連が強く、小さいほど関連が低いと推定されていると考えて読み進めていけば良さそうです。
bar plot
permutation importanceのように特徴量の重要度を把握するときはbar plotで判断することができます。
こちらの図のように、どの特徴量がモデルにとってどれくらい重要になっているかを判断することができます。 これによって、開発者はどの特徴量が重要になっているかを把握することができました。
scatter plot
PDのように各特徴量が増加したときに出力がどう変化するかについてはscatter plotで確認することができます。
こちらのケースのように、特徴量が増加したときにshap値の増減を把握することができます。 また、自動的に最も交互作用がありそうな特徴を選択して色づけてくれています。 これによって、交互作用も把握しつつモデルがどのように結果を出力しているかを把握することができました。
waterfall plot
最後に、特定のインスタンスにおける推論の理由はwaterfall plotを見ることである程度確認することができます。
こちらのケースのように、どの特徴量によって出力が増減したのかを把握することができます。 個別のケースに対して、どの特徴量の影響で結果がどうなっていなのかはこのようにして把握することができました。
参考文献
この辺の、機械学習の解釈性・説明性に関しては下記の文献が非常に参考になるので、こちら一読されることをおすすめします。
その他、この記事を書くにあたって下記の文献を参考にさせていただきました。
- ランク学習
- 説明性・解釈性全般
- Permutation Importance
- SHAP
感想
推薦に限らない話ですが、実務で機械学習を扱うと説明性・解釈性が問題になる場面に時々出くわします。 そのようなときに説明性のテクニックを知っておくことは非常に便利だと感じます。
実際の開発時においても期待した通りの振る舞いができているかを確認する道具の一つとしては非常に重要な技術だと思うので、こういうのを適切に使っていきたいなと思いました。