Shapash:機械学習モデルを理解できるようにする
AIテクノロジーに関する信頼への期待を確立することは、データサイエンティストが提供する最も重要なスキルのXNUMXつになる可能性があります。 この分野では重要な研究投資が進行中であり、データサイエンティストが機械学習モデルをより透明で理解しやすくするのに役立つオープンソースのPythonライブラリであるShapashなどの新しいツールが開発されています。
By ヤン・ゴルヘン、MAIF、リードデータサイエンティスト.
シャプシュ by MAIF は、データサイエンティストが機械学習モデルを理解しやすくするPythonツールキットです。 これにより、モデルの解釈可能性をデータ以外のスペシャリスト(ビジネスアナリスト、マネージャー、エンドユーザー)と共有して話し合うことが容易になります。
具体的には、Shapashは読みやすい視覚化と ウェブアプリ。 Shapashは、適切な表現(前処理逆/後処理)で結果を表示します。 シャプシュ データサイエンティストが探索から本番までの説明可能性を使用できるため、運用コンテキストで役立ちます。本番環境でローカルの説明可能性を簡単に展開して、ローカルの説明可能性の要約を使用して各予測/推奨事項を完成させることができます。
この投稿では、Shapashの主な機能とその動作方法を紹介します。 具体的なユースケースでのライブラリの実装について説明します。
コンテキストの要素
モデルの解釈可能性と説明可能性はホットなトピックです。 それに関する多くの記事、出版物、およびオープンソースの貢献があります。 これらすべての貢献は、同じ問題や課題を扱っているわけではありません。
ほとんどのデータサイエンティストは、多くの理由でこれらの手法を使用しています。モデルをよりよく理解するため、モデルが一貫して偏りがないことを確認するため、およびデバッグのためです。
ただし、それだけではありません。
了解度は教育目的にとって重要です。 わかりやすい機械学習モデルは、データスペシャリストではない人々(ビジネスアナリスト、最終ユーザーなど)と議論することができます。
具体的には、データサイエンスプロジェクトには、専門家以外の人が関与するXNUMXつのステップがあります。
探索ステップとモデルフィッティング
このステップでは、データサイエンティストとビジネスアナリストが何が問題になっているのかを話し合い、プロジェクトに統合する重要なデータを定義します。 それには、主題と私たちがモデル化している問題の主な推進要因をよく理解する必要があります。
これを行うために、データサイエンティストは、グローバルな説明可能性、機能の重要性、およびモデルの主要な機能が果たす役割を研究します。 また、一部の個人、特に外れ値をローカルで確認することもできます。 Webアプリは、視覚化とグラフィックスを確認する必要があるため、このフェーズでは興味深いものです。 これらの結果についてビジネスアナリストと話し合うことは、アプローチに挑戦し、モデルを検証するのに興味深いものです。
モデルを実稼働環境にデプロイする
それでおしまい! モデルは検証され、展開され、エンドユーザーに予測を提供します。 ローカルでの説明可能性は、優れた、有用で、理解しやすい要約を提供する方法がある場合にのみ、多くの価値をもたらすことができます。 それはXNUMXつの理由で彼らにとって価値があります:
- 透明性は信頼をもたらします:彼らがモデルを理解すれば、彼らはモデルを信頼します。
- 人間が制御を維持:100%信頼できるモデルはありません。 アルゴリズムの出力を理解できる場合、ユーザーは、誤ったデータに基づいていると思われる場合、アルゴリズムの提案を覆すことができます。
Shapashは、データサイエンティストがこれらのニーズを満たすのを支援するために開発されました。
Shapashの主な機能
- 誰にとっても読みやすい視覚化。
- Webアプリ:モデルがどのように機能するかを理解するには、複数のグラフ、機能の重要性、およびモデルへの機能のグローバルな貢献度を確認する必要があります。 Webアプリはこのための便利なツールです。
- 適切な表現で結果を表示するいくつかの方法(前処理の逆、後処理)。 データディクショナリを簡単に追加できます。 カテゴリーエンコーダーオブジェクト、またはsklearn カラムトランスフォーマー より明示的な出力の場合。
- 簡単に保存できる機能 ピクルスファイルと結果をテーブルにエクスポートします。
- 説明性の要約:要約は、ニーズに合わせて、ローカルの説明性にとって重要なことに焦点を当てるように構成できます。
- 実稼働環境に簡単にデプロイし、各運用アプリ(バッチまたはAPI)のローカルの説明可能性の概要を使用してすべての予測/推奨を完了する機能
- Shapashisは、いくつかの方法で進めることができます。結果に簡単にアクセスしたり、より適切な表現に取り組むために使用できます。 結果を表示するために必要な引数はごくわずかです。 ただし、データセットのクリーニングと文書化に取り組むほど、エンドユーザーにとってより明確な結果が得られます。
Shapashは、回帰、二項分類、またはマルチクラスの問題に対して機能します。 多くのモデルと互換性があります。 キャットブースト, Xgブースト, ライトGBM, Sklearnアンサンブル, 線形モデル, SVM.
Shapashは、Shap(シャープレイ値)、Lime、または合計可能なローカルコントリビューションの計算を可能にする任意の手法で計算されたローカルコントリビューションに基づいています。
インストール
あなたはpipを通してパッケージをインストールすることができます:
$ pipインストールshapash
シャプシュのデモンストレーション
使ってみよう 具体的なデータセットのシャプシュ。 この記事の残りの部分では、Shapashがモデルを探索する方法を紹介します。
からの有名な「住宅価格」データセットを使用します Kaggle リグレッサーに適合し、住宅価格を予測するために! データセットをロードすることから始めましょう:
パンダをshapash.data.data_loaderからpdとしてインポートしますimportdata_loading house_df、house_dict = data_loading( 'house_prices')y_df = house_df ['SalePrice']。to_frame()X_df = house_df [house_df.columns.difference(['SalePrice']) ] house_df.head(3)
カテゴリ機能をエンコードします。
from category_encoders import OrdinalEncoder categorical_features = [col for col in X_df.columns if X_df [col] .dtype == 'object']エンコーダー= OrdinalEncoder(cols = category_features).fit(X_df)X_df = encode.transform(X_df)
トレーニング、テスト分割、モデルフィッティング:
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor Xtrain、Xtest、ytrain、ytest = train_test_split(X_df、y_df、train_size = 0.75)reg = RandomForestRegressor(n_estimators = 200、min_samples_leaf = 2)
そして、テストデータを予測します。
y_pred = pd.DataFrame(reg.predict(Xtest)、columns = ['pred']、index = Xtest.index)
ShapashSmartExplainerを見つけて使用しましょう。
ステップ1—インポート
shapash.explainer.smart_explainerからインポートSmartExplainer
ステップ2—SmartExplainerオブジェクトを初期化します
xpl = SmartExplainer(features_dict = house_dict)#オプションのパラメーター
- features_dict:xpd.DataFrameの各列名の意味を指定するdict。
ステップ3—コンパイル
xpl.compile(x = Xtest、model = regressor、preprocessing =エンコーダー、#オプション:inverse_transformメソッドを使用y_pred = y_pred#オプション)
compileメソッドでは、別のオプションのパラメーターを使用できます。 後処理。 これにより、新しい関数を適用して、より適切な表現(正規表現、マッピングdictなど)を指定することができます。
これで、結果を表示して、回帰モデルがどのように機能するかを理解できます。
ステップ4—Webアプリを起動する
app = xpl.run_app()
WebアプリのリンクがJupyter出力に表示されます(デモにアクセスします) こちらをご覧ください。).
このWebアプリにはXNUMXつの部分があります。
それぞれが相互作用して、モデルを簡単に探索できるようにします。
機能の重要性: 各機能をクリックして、以下の寄与プロットを更新できます。
貢献プロット: 機能は予測にどのように影響しますか? フィーチャーの各ローカル寄与のバイオリンまたは散布図を表示します。
ローカルプロット:
- ローカル説明:どの機能が予測値に最も貢献するか。
- いくつかのボタン/スライダー/リストを使用して、このローカルな説明性の要約を構成できます。 以下に説明します filter サマリーを操作できるさまざまなパラメーターをメソッドします。
- このWebアプリは、ビジネスアナリストと、運用上のニーズを満たすための説明性を要約するための最良の方法について話し合うための便利なツールです。
選択表: これにより、Webアプリユーザーは以下を選択できます。
- このサブセットに探索を集中させるためのサブセット
- 関連するローカルの説明を表示する単一の行
データテーブルをどのように使用してサブセットを選択しますか? 表の上部で、フィルタリングに使用する列の名前のすぐ下で、次のように指定します。
- =値、>値、
- 特定の単語を含むすべての行を選択する場合は、「=」なしでその単語を入力するだけです。
このWebアプリで利用できるオプションがいくつかあります(右上のボタン)。 最も重要なものは、おそらくサンプルのサイズです(デフォルト:1000)。 待ち時間を回避するために、Webアプリはサンプルに依存して結果を表示します。 このサンプルサイズを変更するには、このオプションを使用します。
アプリを強制終了するには:
app.kill()
ステップ5—プロット
すべてのプロットはjupyterノートブックで利用できます。以下の段落では、各プロットの要点について説明します。
機能の重要性
このパラメーターを使用すると、サブセットの機能の重要性を比較できます。 サブセット内の特定の動作を検出すると便利です。
サブセット= [168、54、995、799、310、322、1374、1106、232、645、1170、1229、703、66、886、160、191、1183、1037、991、482、725、410、59 、28、719、337、36] xpl.plot.features_importance(selection = subset)
貢献プロット
寄与プロットは、次のような質問に答えるために使用されます。
機能は私の予測にどのように影響しますか? それは積極的に貢献していますか? この機能はますます貢献していますか? 減少しますか? しきい値の影響はありますか? カテゴリ変数の場合、各モダリティはどのように貢献しますか? このプロットは、モデルに対する機能の影響をよりよく理解するための、解釈可能性、モデルのグローバルな了解度に対する機能の重要性を完成させます。
このプロットにはいくつかのパラメーターがあります。 表示されるプロットは、カテゴリ変数または連続変数(ViolinまたはScatter)のどちらに関心があるか、および対処するユースケースのタイプ(回帰、分類)に応じて適応することに注意してください。
xpl.plot.contribution_plot( "OverallQual")
連続特徴に適用される寄与プロット。
分類ケース:Titanic Classifier —カテゴリ機能に適用される寄与プロット。
ローカルプロット
モデルの局所的な説明可能性のために局所プロットを使用できます。
フィルタ() & local_plot() メソッドを使用すると、モデルが取得した信号を要約するための最良の方法をテストして選択できます。 探索段階で使用できます。 次に、この要約を実稼働環境にデプロイして、エンドユーザーが各推奨事項の最も影響力のある基準を数秒で理解できるようにします。
ローカルの説明可能性を本番環境に展開する方法を説明するXNUMX番目の記事を公開します。
filterメソッドとlocal_plotメソッドを組み合わせる
filter ローカルの説明可能性を要約する方法を指定する方法。 要約を構成するには、次のXNUMXつのパラメーターがあります。
- max_contrib:表示する基準の最大数
- しきい値:基準を表示するために必要な寄与の最小値(絶対値)
- ポジティブ:ポジティブな貢献のみを表示しますか? 負? (デフォルトはなし)
- features_to_hide:表示したくない機能のリスト
これらのパラメータを定義した後、次のように結果を表示できます。 local_plot() メソッド、またはでそれらをエクスポートします to_pandas()。
xpl.filter(max_contrib = 8、threshold = 100)xpl.plot.local_plot(index = 560)
pandas DataFrameへのエクスポート:
xpl.filter(max_contrib = 3、threshold = 1000)summary_df = xpl.to_pandas()summary_df.head()
プロットを比較する
compare_plot() メソッドでは、SmartExplainerオブジェクトを使用すると、XNUMX人以上の個人が同じ予測値を持たない理由を理解できます。 最も決定的な基準は、プロットの上部に表示されます。
xpl.plot.compare_plot(row_num = [0、1、2、3、4]、max_features = 8)
ShapashがAIへの信頼を築くのに役立つことを願っています。 フィードバックやアイデアを提供してくれるすべての人に事前に感謝します…Shapashはオープンソースです! この投稿にコメントするか、直接投稿してください。 GitHubのディスカッション.
元の。 許可を得て転載。
関連する
過去30日間の人気記事
|
|
コインスマート。 BesteBitcoin-ヨーロッパのBörse
出典:https://www.kdnuggets.com/2021/04/shapash-machine-learning-models-understandable.html