説明できる機械学習の様々な手法と実装例について

人工知能技術 機械学習技術 オントロジー技術 デジタルトランスフォーメーション技術 知識情報処理技術 強化学習技術 確率的生成モデル技術 説明できる機械学習技術 自然言語処理技術 本ブログのナビ
Explainable Machine Learning

説明可能な機械学習(Explainable Machine Learning)は、機械学習モデルの予測や意思決定の結果を理解可能な形で説明する手法やアプローチのことを指す。

実世界の多くのタスクでは、モデルの説明性が重要となることが多い。これは例えば、金融向けのソリューションでは、モデルがどの要素に基づいて信用スコアを判断しているのかを説明する必要があったり、医療診断向けのソリューションでは、患者に対する予測の根拠や理由を説明することが重要であることなどからもわかる。

これに対して、伝統的な機械学習モデルでは、大量のパラメータが複雑に絡みあったブラックボックスとなっており、モデルがどのように結果を導き出したのかを説明することは困難であった。

説明可能な機械学習の手法は、このような課題に対して、モデルの予測や意思決定の理由を明確にするために開発されたもので、以下のような手法がある。

  • 特徴の重要度の解釈: モデルがどの特徴を予測や意思決定に使用しているかを明示的に示す方法となる。
    • ランダムフォレストや勾配ブースティングなどの木ベースのモデルでは、各特徴の重要度を算出して示すことができる。
    • 線形モデルでは、特徴の係数を解釈し、重要な特徴を特定することができる。
  • 局所的な解釈性: 特定のインスタンスに対して、モデルがなぜそのような予測や意思決定を下したのかを説明する方法となる。
    • LIME(Local Interpretable Model-Agnostic Explanations)は、特定のインスタンスの予測を説明するための手法であり、近傍データを使用して、モデルの局所的な振る舞いを解釈可能なモデルで近似するものとなる。
    • SHAP(SHapley Additive exPlanations)は、ゲーム理論のShapley値の概念を機械学習に適用した手法で、特徴の寄与度を評価することができるものとなる。
  • モデルの可視化: モデルの内部構造や意思決定プロセスを可視化する手法となる。
    • 決定木や決定木ベースのアンサンブル学習の概要とアルゴリズム及び実装例について“にも述べているアンサンブルモデル(ランダムフォレストや勾配ブースティング)では、木の構造を可視化することができ、これにより、モデルの意思決定プロセスを理解しやすくすることができる。
    • ニューラルネットワークの場合、中間層の活性化を可視化することにより、モデルが入力データのどの特徴に注目しているかを理解することが可能となる。例えば、Grad-CAM(Gradient-weighted Class Activation Mapping)は、画像認識モデルの注目領域を可視化する手法となる。
  • ルールや説明文の生成: モデルの予測や意思決定をルールや自然言語で説明する手法となる。
    • ルールベースの手法では、モデルが予測や意思決定に使用したルールを生成し、それにより条件や規則に基づく明確な説明が得られるようになる。
    • 自然言語生成モデルを使用して、予測に対する説明文を生成することもある。これにより、人間が理解しやすい形でモデルの予測を説明することができる。

さらに、これらの手法を組み合わせることで、説明可能な機械学習モデルを構築することができる。説明可能性は、ユーザーの信頼性やモデルの公平性を向上させるだけでなく、エラーの診断や改善のための示唆を得るためにも重要なものとなる。

説明可能な機械学習に用いられるアルゴリズムについて

説明可能な機械学習では、以下に示すような様々なアルゴリズムが利用されている。

  • 線形回帰(Linear Regression):

線形回帰モデルは予測値を特徴量の重み付き和として表す。これは、特徴量 x が目的変数 y にどれくらい依存するかをモデリングするものとなる。詳細は”説明できる機械学習(1)解釈可能なモデル(線形回帰モデル)“を参照のこと。

  • ロジスティック回帰(Logistic Regression):

線形回帰モデルは分類するために、直線や超平面を当てはめて距離を最小化するアルゴリズムであるのに対して、ロジスティック回帰モデルでは、ロジスティック関数を用いて、0と1の間に線型方程式の出力を変形する(確率に変換する)モデルとなる。詳細は”説明できる機械学習(2)解釈可能なモデル(ロジスティック回帰モデル)“を参照のこと。

  • 一般化線形モデル (GLMs:Generalized Linear Models)と一般化加法モデル(GAM:Generalized Additive Model):

線形モデルの課題である特徴量と結果の間の真の関係が非線形であったりするような場合に対応するものとしてGLMやGAMがある。これは特徴量がカテゴリであったり、機械が故障するまでの時間等少数のとても大きな数が存在する偏った出力であったりする場合や、普通の線形モデルが値を1増やすと、常に同じ効果を予測結果に与えるのに対して、例えば気温が10度から11度に上がったのと、40度から41度に上がった時で予測結果に与える効果が異なるようにするものとなる。詳細は”説明できる機械学習(3)解釈可能なモデル(GLM、GAM)“を参照のこと。

  • 決定木(Decision Trees):

GLMやGAMと同様に、特徴量と結果の間の真の関係が非線形であったりするような場合に対応するものとして決定木や決定規則、ランダムフォレストやRuleFit等がある。木をベースとしたモデルは、特徴量を、あるカットオフ値に基づいて複数回データを分割していき、この分割を通して、データセットを異なる部分集合にしていく。それぞれのインスタンスはこの部分集合の一つに所属することとなる。ここで、最後の部分集合は終端ノード(terminal node)または葉(leaf node)と呼ばれ、中間の部分集合は内部ノード(internal node)または、分岐ノード(split node)と呼ばれる。決定木は視覚的に理解しやすく、特徴の重要度や意思決定の経路を把握するのに役立つものとなる。詳細は”説明できる機械学習(4)解釈可能なモデル(決定木)“を参照のこと。

  • 決定規則:

決定規則は、条件(前提とも呼ばれる)と予測値からなる単純なIF-THEN文となる。代表的なアルゴリズムとしては、oneR、Sequential covering、Bayesian Rule Lists等がある。詳細は”説明できる機械学習(5)解釈可能なモデル(決定規則)“を参照のこと。

  • ランダムフォレストとCausal Forest:

ランダムフォレストは、複数の決定木を組み合わせたアンサンブル学習手法であり、特徴の重要度を計算し、個々の決定木の結果を統合して説明性を高めることができるものとなる。ランダムフォレストの応用例としてCausal Forestがある。詳細は”Causal Forestの概要と適用事例とRとPythonによる実装例について“を参照のこと。

  • RuleFit:

RuleFitアルゴリズムは、元の特徴量と決定規則である多数の新しい特徴量を用いて、スパース線形モデルを学習することで、特徴間の相互作用を結合したスパース線形モデルの学習に使われる。生成される特徴量は、決定木から分割された決定を結合し、規則とすることで、木を通る各パスを決定規則に変換することで自動的に生成されるものとなる。詳細は”説明できる機械学習(6)解釈可能なモデル(RuleFit)“を参照のこと。

  • サポートベクターマシン(Support Vector Machines):

サポートベクターマシンは、線形分類や非線形分類を行うための強力な手法であり、最適な境界を決定するためのサポートベクターを見つけ、データの特徴との関係性を解釈するものとなる。詳細は”カーネル法の概要とサポートベクトルマシンについて“を参照のこと。

  • 勾配ブースティング(Gradient Boosting)とLightGBM:

勾配ブースティングは、弱学習器(通常は決定木)を順次的に組み合わせて予測モデルを構築する手法であり、重要な特徴を強調することができるため、特徴の重要度を理解するのに役立つものとなる。勾配ブースティングの代表例としてLightGBMがある。詳細は”LightGBMの概要と各種言語での実装“を参照のこと。

  • 部分依存プロット(Partial Dependence Plot):

PDPは、特徴量の一つを選び、他の特徴量の値を固定した状態で、その特徴量の値を変化させながらモデルの予測結果を観察する方法であり、具体的には、選択した特徴量の値を一定の範囲で変化させ、その変化に対応する予測結果の平均値や分布をプロットするものとなる。部分依存プロットによって得られるグラフは、選択した特徴量の値と予測結果の関係を示すため、その特徴量が予測にどれほど重要かを把握するのに役立ち、また、異なる特徴量の組み合わせによる相互作用の影響も視覚化することができる。部分依存プロットは、回帰モデルや分類モデルの両方で使用でき、回帰モデルでは、予測結果の平均値がプロットされ、分類モデルでは、各クラスに属する確率や予測の分布がプロットされる。詳細は”説明できる機械学習(7) モデル非依存の解釈(PDP)“を参照のこと。

  • 個別条件付き期待値プロット(Individual Conditional Expectation (ICE) Plot):

ICE Plotは、PDP Plotの拡張版であり、特徴量の値が個々の観測値に対してどのように影響するかを可視化する手法となる。具体的には、ICE Plotは、各データポイントに対して特徴量の値を一定の範囲で変化させ、その変化に対応する予測結果の値をプロットするものとなる。したがって、ICEプロットは個々のデータポイントに対して複数の曲線を持ち、部分依存プロットよりも詳細な情報を提供するものとなる。部分依存プロットでは、特徴量の値が変化すると予測結果の平均値がどのように変化するかを示すが、ICEプロットでは、個々のデータポイントごとに予測結果の値の変化を示し、これにより、データポイントごとの異なる傾向や特徴を捉えることができるようになる。

ICEプロットでは、個々のデータポイントの特徴量の影響を視覚化するために使用され、特に、異なるデータポイント間で特徴量の影響の違いを比較することができる。また、ICEプロットを通じて、特定のデータポイントの予測結果の変化を理解し、モデルの予測の信頼性や不確実性を評価することも可能となる。詳細は”説明できる機械学習(8) モデル非依存の解釈(ICE Plot)“を参照のこと。

  • 累積局所効果プロット(Accumulated Local Effects (ALE) Plots):

ALE Plotは、PDP PlotやICE Plotと同様に、特徴量の値の変化がモデルの予測結果に与える影響を可視化するために使用されるもので、具体的には(1)特徴量の値を順番に変化させながら、各変化における予測結果の差分(局所効果)を計算し、(2)各変化における局所効果を累積して、(3)累積した局所効果をプロットするというプロセスで作成するものとなる。

ALE Plotによって得られるグラフは、特徴量の値の範囲内での予測結果の累積的な変化を示し、これにより、特徴量が予測結果にどのような影響を与えるのかを把握することができる。また、局所効果を計算するためにデータポイント間の変化を補間するために、PDP PlotやICE Plotと比較して、より滑らかな結果を提供し、相互作用効果や非線形な関係を含む複数の特徴量の影響を評価するのにも適しているものとなる。ALE Plotについての詳細は”説明できる人工知能(9)モデル非依存の解釈(ALE plot)“を参照のこと。

  • 特徴量の相互依存の解釈:

予測モデルにおける特徴量の相互作用の解釈には、(1)PDP PlotやALE Plotを組み合わせた視覚化(例えば、2つの特徴量に対してPDP Plotを作成し、そのプロットを比較することで、特徴量間の相互作用の影響を理解する)、(2)線形モデルや一部のツリーベースのモデルでの各特徴量の係数の組み合わせの相互作用の可視化(係数の符号や相対的な大きさを考慮しながら、特徴量間の相互作用の方向と強度を解釈する)、(3)特徴量の相互作用を理解するために、既存の特徴量から新しい特徴量を生成する(例えば、2つの特徴量の積や差を新しい特徴量として追加して係数や重要度を評価する)、(4)特徴量ごとに貢献度を計算し、予測結果に対してどれだけ寄与しているかを示すSHAP値(後述)を解釈することで、特徴量の相互作用が予測結果にどのように影響するのかを理解することができる。特徴量の相互作用の解釈の詳細は”説明できる人工知能(10)モデル非依存の解釈(特徴量の相互作用)“を参照のこと。

  • 順列特徴量の重要度(Permutation Feature Importance): 

Permutation Feature Importanceは、特徴量の重要度を評価するために使用される。具体的な手順は(1)モデルをトレーニングセットで訓練し、テストセットでの予測精度を評価することで初期の予測精度を計算する、(2)評価したい特徴量を選択する、(3)選択した特徴量の値をランダムにパーミュート(並び替え)し、その特徴量の値をランダムにシャッフルする、(4)パーミュートされたデータを使用して予測を行う、(5)パーミュートされたデータによる予測精度を計算する、(6)オリジナルの予測精度とパーミュートされたデータによる予測精度の差を特徴量の重要度とし、予測精度の減少が大きいほど、その特徴量は重要であると見なす。この手法は、特徴量ごとに独立して評価されるため、特徴量間の相互作用も考慮され、また、モデルの予測性能への特徴量の寄与度を定量化することができる。Permutation Feature Importanceの詳細は”説明できる人工知能(11)モデル非依存の解釈(Permutation Feature Importance)“を参照のこと。

  • グローバルサロゲートモデルGlobal Surrogate Model):

グローバルサロゲートモデルは、元の予測モデルの代わりに、より解釈可能な代替モデル(サロゲートモデル)を構築するものとなる。具体的な手順は(1)複雑なモデル(例えば、ディープラーニングモデル)やブラックボックスモデルとされるモデルを使用して元の予測モデルをトレーニングする、(2)元のモデルのトレーニングデータを使用して、予測結果を取得する、(3)サロゲートモデルのトレーニングデータとして、元のモデルの入力データとそれに対応する予測結果を使用する、(4)解釈可能なモデル(例えば、線形モデルや決定木モデル)をトレーニングし、元のモデルの予測を近似するようにする、(5)サロゲートモデルの特徴量の重要度や係数などを解釈することで、元のモデルの予測結果を理解しようとする。

グローバルサロゲートモデルの利点は、元のモデルよりも解釈可能性が高いことであり、解釈可能なモデルを使用するため、特徴量の重要度や影響を直感的に理解しやすくなる。また、サロゲートモデル自体が軽量で高速である場合、元のモデルの予測結果を高速に近似できることも利点となる。グローバルサロゲートモデルの詳細に関しては”説明できる人工知能(12)モデル非依存の解釈(グローバルサロゲート (Global Surrogate))“を参照のこと。

  • LIME(Local Interpretable Model-Agnostic Explanations):

LIMEは、特定のデータポイントに対して、その予測結果を近似する解釈可能なモデルを構築するものとなる。具体的な手順としては(1)解釈したいデータポイントを選択する、(2)データポイントの近傍のデータポイントを、特徴量の値をランダムに変更することで生成する、(3)元のモデルに生成したデータポイントを入力し、予測結果を取得する、(4)生成したデータポイントとその予測結果を使用して、解釈可能なモデル(例えば、線形モデルや決定木モデル)をトレーニングする、(5)解釈可能なモデルの特徴量の重要度や係数などを解釈することで、元のモデルの予測結果を理解する。

LIMEの目的は、ブラックボックスモデルの予測を個々のデータポイントに対して解釈可能にすることであり、近傍データポイントを生成することにより、解釈可能なモデルはデータポイントの周辺領域でのモデルの振る舞いを近似することができ、モデルに依存せず、様々な種類の予測モデルに適用することができるものとなる。

LIMEは、個々のデータポイントに対して解釈可能性を提供するため、特に、モデルの予測結果が意外な場合や異常値に対して解釈を行う際に有用となる。LIMEの詳細に関しては”説明できる人工知能(13)モデル非依存の解釈(Local Surrogate :LIME)“を参照のこと。

  • Scoped RulesまたはAnchors:

Scoped RulesまたはAnchorsは、個々のデータインスタンスに対して簡潔かつ解釈可能なルールを生成することで、予測結果の理解を可能にするものとなる。具体的な手順は(1)解釈したいデータインスタンスを選択する、(2)インスタンスに適用される予測結果に対する説明を提供するためのルールを生成する(ルールは、特定の特徴量の範囲または条件を指定する形式で表される)、(3)ルールは、解釈可能性と予測結果の説明のバランスを取るために最適化される。適切なバランスを見つけるために、Scoped Rulesはルールのスコープ(適用範囲)を制約することがあり、スコープは、説明の正確さと簡潔さの間のトレードオフを制御する、(4)生成されたScoped Rulesを使用して、データインスタンスの予測結果を解釈する。ルールが満たされる場合、そのルールに基づいて予測結果が説明される。

Scoped Rulesの目的は、個々のデータインスタンスに対して予測結果を解釈可能なルールで説明することとなる。これにより、モデルの予測結果がどのように導かれたかを理解しやすくなる。Scoped Rulesは、特に敏感な領域でのモデルの予測結果を説明するために有用であり、例えば、医療診断や信用スコアリングなどの領域で、特定の属性や条件が予測に大きな影響を与える場合に利用されている。Scoped Rulesの詳細に関しては”説明できる人工知能(14)モデル非依存の解釈(Scoped Rules (Anchors))“を参照のこと。

  • シャープレイ値(sharpley value):

シャープレイ値は、”ゲーム理論の概要とAI技術との融合と実装例“で述べたゲーム理論から派生した、特徴量の重要度を評価するための手法であり、特徴量がモデルの予測結果にどれだけ貢献しているかを定量化するために使用されるものとなる。

シャープレイ値の概念は、共同ゲーム(Cooperative Game)での利得分配に基づいている。共同ゲームでは、プレイヤーがチームを形成し、チームの目標に向けて協力し、シャープレイ値は、各プレイヤーが協力によってもたらされる利得に対する貢献度を評価するものとなる。

特徴量のシャープレイ値の計算は、以下の手順で行われる。(1)全ての特徴量の組み合わせに対して、各特徴量の参加度合いを変化させながら予測結果を計算する(つまり、各特徴量の値をランダムにシャッフルしたデータを使用して予測を行う)、(2)各特徴量の組み合わせにおける予測結果の差分を計算する、(3)全ての特徴量の組み合わせに対する予測結果の差分の平均を特徴量のシャープレイ値とする。

シャープレイ値は、特徴量の重要度を評価するために使用され、シャープレイ値が高い特徴量は、モデルの予測においてより大きな影響を持っていると見なされる(特に、複数の特徴量が相互作用している場合や、特徴量の組み合わせが重要な場合に有用となる)。また、シャープレイ値は、モデルに依存せず、モデルの種類に適用できる汎用的な手法であり、また、シャープレイ値は特徴量の順位付けや比較にも使用できる。しかし、特徴量の組み合わせの数が指数的に増えるため、特徴量の数が多い場合には計算が困難になることがあり、近似的な手法や効率的なアルゴリズムが提案されているものとなる。シャープレイ値(sharpley value)の詳細に関しては”説明できる人工知能(15)モデル非依存の解釈(シャープレイ値(sharpley value))“を参照のこと。

  • SHAP(SHapley Additive exPlanations):

SHAPは、シャープレイ値(Shapley Value)をモデル解釈に応用した手法であり、ローカルサロゲートモデル(local surrogate models)から着想を得たカーネルベースのシャープレイ値の代替的な推定手法となる。

SHAPのアプローチは、個々の特徴量のシャープレイ値を計算し、モデルの予測結果に対する特徴量の貢献度を定量化するものとなる。この時のSHAP値は、各特徴量に対して一意に定義され、各特徴量の個別の寄与度を評価し、更に、モデルの予測結果を生成するために必要な情報の量を評価している(特徴量が提供する情報が多ければ多いほど、その特徴量のSHAP値は大きくなる)。また、、全ての特徴量のSHAP値の和が予測結果と一致するように計算されており、全体の予測結果に対する特徴量の寄与度も保持されたものとなっている。

SHAP値は、モデルの解釈性を高めるために幅広く使用され、(1)個々の特徴量の重要度を評価するために使用され(SHAP値が高い特徴量は、モデルの予測においてより大きな影響を持っていると見なされる)、(2)特定の予測結果に対して、各特徴量がどれだけ寄与しているのかを評価し(特定の予測結果を説明するためにどの特徴量が重要であるかを理解できるようになる)、(3)特徴量間の相互作用や依存関係を評価するのにも使用されている(特徴量の組み合わせに対するSHAP値を評価することで、相互作用の影響を解明することができる)。SHAP値に対する詳細は”説明できる人工知能(16)モデル非依存の解釈(SHAP (SHapley Additive exPlanations))“を参照のこと。

  • 反事実的説明を用いた解釈:

反事実的説明は、あるインスタンスの予測結果が異なる結果になった場合、特定の特徴量の値を変更することによってその結果を変える方法を提供している。

反事実的説明の手法としては(1)反事実的説明の一つで、あるインスタンスの予測結果を逆転させるための特定の特徴量の値を変更する方法であるCounterfactual Explanations(対事実的説明)(例えば、モデルが「この画像は犬である」と予測した場合、対事実的説明では「この画像は犬ではない」と予測するための特徴量の変更を示す)、(2)反事実的説明の手法の一つで、あるインスタンスの予測結果を変更するために特定の特徴量の値を摂動させる方法であるCounterfactual Perturbation(対事実的摂動)(摂動は、特徴量の値を微小に変更することで行われ、これにより、予測結果が変わる境界付近のインスタンスを生成し、モデルの予測の信頼性や不確実性を評価することができる)、(3)反事実的説明の一つで、予測結果を変更するために特定の特徴量を変更するだけでなく、他のクラスや別の結果との比較も行うものであるContrastive Explanations(対照的説明)(これにより、なぜ特定のクラスや結果が選ばれたのかを理解することができる)等がある。

反事実的説明は、モデルの予測結果を解釈する際に、その予測がどのように変化する可能性があるかを明示的に示すことで、モデルの信頼性や説明の根拠を提供し、また、反事実的説明はユーザーに対してインタラクティブな解釈の手段を提供することもある。ただし、反事実的説明には説明可能なモデルの構築や計算のコストがかかる場合があり、特徴量の数やデータの複雑さによって解釈の難易度が異なることにも注意が必要となる。反事実的説明の詳細は”説明できる機械学習(17)反事実的説明 (Counterfactual Explanations)“を参照のこと。

  • 敵対的サンプル(Adversarial Samples)による解釈:

敵対的サンプルによる解釈は、モデルの予測結果やその解釈可能性を評価するための手法の一つであり、敵対的サンプルは、入力データにわずかな摂動を加えることで、モデルの予測を変化させることができるサンプルとなる。

敵対的サンプルによる解釈は以下のような目的で使用される。(1)モデルの不安定性の評価(敵対的サンプルは、モデルがわずかな変更に対してどれだけ敏感であるかを評価するために使用され、もしモデルが入力データの微小な変更によって予測結果を大きく変える場合、モデルは不安定であると見なされる)、(2)解釈のロバストネスの評価(敵対的サンプルは、解釈可能なモデルや特徴量の重要度の評価においても使用され、もし敵対的サンプルによって解釈結果が大きく変わる場合、解釈はロバストでないと見なされる)、(3)特徴量の重要度の評価(敵対的サンプルは、特徴量の重要度を評価するための一つの手法としても使用され、敵対的サンプルを生成し、予測結果の変化を特徴量ごとに評価することで、特徴量の重要度を定量化することができる)

敵対的サンプルを使用した解釈手法は、モデルの信頼性や解釈の安定性を評価するために役立ち、また、敵対的サンプルを生成する際には、最適化アルゴリズムや特定の制約条件(例:摂動の制約)を使用することが一般的となる。ただし、敵対的サンプルによる解釈は、生成される摂動のサイズや複雑さによって解釈の信頼性が異なることに注意が必要であり、また、解釈の目的やドメインによって最適な敵対的サンプルの手法が異なる場合もある。敵対的サンプル (Adversarial Examples)に関する詳細は”説明できる機械学習(18)敵対的サンプル (Adversarial Examples)“を参照のこと。

  • proto typeとcriticismによる解釈:

Prototypeベースの解釈手法は、データセット内の代表的なデータポイント(プロトタイプ)を選択し、それらの特徴量の重要度を評価するものとなる。通常、プロトタイプは各クラスまたは特定の予測結果に関連付けられ、プロトタイプの特徴量の値と重要度の関係を解析することで、特徴量の寄与や重要度を評価することが可能となる。

Criticismベースの解釈手法では、モデルの予測結果に対して疑問や批判を持つデータポイント(クリティシズム)を特定し、それらの特徴量の重要度を評価するものとなる。クリティシズムは、モデルの予測結果が誤っている可能性があるデータポイントであり、クリティシズムの特徴量の値と重要度の関係を分析することで、特徴量の寄与や重要度を評価することができる。

PrototypeとCriticismは、データポイントレベルでの解釈を提供するため、個別の予測結果や特定のデータポイントに焦点を当てることができ、これにより、モデルの予測結果がどのように導かれるのか、特定のデータポイントが予測にどれだけ影響を与えるのかを理解することが可能となる。PrototypeとCriticismベースの手法は、特に、モデルの誤った予測や異常な予測結果を解釈するために役立つ。PrototypeとCriticismに関する詳細は”説明できる機械学習(19)prototypeとcriticism“を参照のこと。

説明可能な機械学習に用いられるライブラリやプラットフォームについて

説明可能な機械学習には、以下のようなライブラリやプラットフォームが広く使用されている

  • Scikit-learn: Scikit-learnは、Pythonで使われる機械学習のオープンソースライブラリとなる。Scikit-learnは、決定木、ランダムフォレスト、勾配ブースティングなど、説明可能な機械学習手法をサポートしており、また、特徴の重要度の計算や局所的な解釈性手法(例: LIME)なども提供している。
  • XGBoost: XGBoostは、勾配ブースティングアルゴリズムを実装した高速で効果的なライブラリであり、XGBoostは、特徴の重要度の計算やモデルの可視化をサポートしており、モデルの解釈性を向上させるための機能がある。
  • ELI5: ELI5(Explain Like I’m 5)は、機械学習モデルの予測結果を説明するためのライブラリとなる。ELI5は、特徴の重要度の計算やパーティアル依存プロット、モデルの可視化など、さまざまな手法を提供している。
  • PDP を実装した R のパッケージはたくさんある。 iml パッケージや、pdp や DALEX もある。 Python では、partial dependence plots は scikit-learn に標準で実装されているし PDPBox も使える。
  • ICE plots は、iml(これらの例で使用)ICEbox 、および pdp の R パッケージで実装されています。 ICE にとても類似しているもう1つのRパッケージは condvisとなる。
  • R の iml パッケージは現行版をCRAN から、開発版は Github から入手できます。 他にも特定のモデルを対象にした実装がある。 R パッケージの pre は RuleFit とH統計量を実装しています。 R パッケージの gbm は勾配ブースティングモデルと H 統計量を実装している。
  • Permutation Feature Importanceの実装としては、R パッケージの iml が利用できる。 R パッケージ DALEX や vipPythonライブラリ alibi もまた、モデルに依存しない、permutation feature importance の実装がある。
  • サロゲートモデルは実際の実装としては、R パッケージの iml を利用できる。 機械学習モデルを学習できるのであれば、単に、ブラックボックスモデルの予測値を予測する解釈可能なモデルを学習するだけで、自分自身でサロゲートモデルを実装できる。
  • LIME は Python (lime ライブラリ) や R (lime package と iml package) で実装されており、非常に簡単に使用できている。
  • Anchorに関しては、現在、Python パッケージのanchor(Alibiにも統合されている)Java implementationとの2つの実装が利用可能となる。 
  • R では、シャープレイ値は iml と fastshap のパッケージで実装されている。シャープレイ値の代替推定手法である SHAP は次回述べる。他には、breakDown と呼ばれる手法があり、Rのパッケージ breakDownで実装されている。
  • SHAP の論文の著者らは SHAP の Python パッケージのshap を実装している。 この実装は Python のための機械学習ライブラリである scikit-learn の決定木ベースのモデルに対して機能している。SHAP は tree boosting のフレームワークである xgboost  LightGBMに統合されている。 R では、shapper  fastshap のパッケージがある。 SHAP は R のxgboost のパッケージにも含まれている。
  • 反事実的説明のPython実装は Alibi パッケージとなる。
  • PrototypeとCriticismに用いられるMMD-critic の実装は以下にある。

これらのツールは、説明可能な機械学習の手法を実装し、モデルの解釈性を向上させるための便利な機能を提供しており、主要な機械学習フレームワーク(例: TensorFlow、PyTorch)も、説明可能性をサポートする機能や拡張機能を提供している。

説明可能な機械学習の適用事例について

説明可能な機械学習は、さまざまな実世界の問題に応用されている。以下にそれらの適用事例について述べる。

  • 金融分野:
    • 信用スコアリング: 説明可能な機械学習を使用して、個人や企業の信用スコアを予測することが可能となる。モデルの説明性により、どの要素がスコアに影響を与えたのかを理解し、借り手や投資家に説明することができる。
    • 不正検知: 詐欺や不正行為を検出するために、説明可能な機械学習を使用することがある。モデルが不正と判断した理由や特徴を説明することで、信頼性を高めることが期待される。
  • 医療診断:
    • 画像診断: 説明可能な機械学習を使用して、X線、MRI、CTスキャンなどの医療画像を解釈することができ、モデルがどの特徴に基づいて診断を行ったのかを説明することで、医師の意思決定をサポートすることが可能となる。
    • 疾患予測: 患者のデータや検査結果を入力として、説明可能な機械学習を使用して疾患のリスクや予測を行うことができ、モデルの説明性により、リスク要因や重要な特徴を理解し、患者に対して適切なアドバイスを提供することが可能となる。
  • 自動運転:
    • 自動車の意思決定: 自動運転システムでは、説明可能な機械学習を使用して、道路の状況に基づいて自動車の意思決定を行うことができ、モデルがどのように判断したのかを説明することで、安全性や信頼性を向上させることが可能となる。
    • 衝突予測: 説明可能な機械学習を使用して、他の車両や歩行者との衝突リスクを予測することができ、モデルの説明性により、衝突リスクに関連する要因や特徴を理解し、事故予防に役立てることが可能となる。
  • オンライン広告:
    • レコメンデーション: 説明可能な機械学習を使用して、ユーザーに対してパーソナライズされた広告や推薦を行うことができ、モデルの説明性により、ユーザーの嗜好や特徴に基づいた推薦を説明し、利用者の満足度を高めることが可能となる。

説明可能性は、モデルの信頼性や透明性を高めるだけでなく、エラーの診断や改善のための示唆を得るためにも重要な機能となる。

以下に説明可能性の具体的な実装例について示す。

説明可能な機械学習を用いた金融分野での信用スコアリングのpythonによる実装例

説明可能な機械学習を用いた金融分野での信用スコアリングの実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 信用スコアリングに必要な顧客データ(収入、借入金額、過去の支払い履歴など)を収集し、前処理を行う。データは、信用リスクのクラス(例: 1=信用リスクあり、0=信用リスクなし)を含むことがある。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、カテゴリカル変数のエンコーディング、数値変数の正規化、特定の統計量(平均、標準偏差など)の計算などを行うことがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。ロジスティック回帰や決定木などのモデルは、特徴の寄与度を評価し、信用スコアの解釈性を高めるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、信用スコアの決定要因や特徴の重要度を評価する。例えば、特徴の係数や決定木のルールを確認することで、信用スコアへの寄与度を理解することができる。
  6. 信用スコアリング: 解釈結果を基に、新たな顧客データを入力として信用スコアを予測する。モデルがどの特徴やルールに基づいて信用スコアを計算したのかを説明し、金融機関や信用機関に対して透明性を提供する。

以下は、scikit-learnを使用したロジスティック回帰を使った簡単な実装例となる。

from sklearn.linear_model import LogisticRegression

# データの準備と前処理
X = ...  # 顧客データの特徴ベクトル
y = ...  # 信用リスクのクラスラベル(例: 1=信用リスクあり、0=信用リスクなし)

# モデルの選択と学習
model = LogisticRegression()
model.fit(X, y)

# 特徴の重要度の評価
importances = model.coef_[0]

# 信用スコアリング
customer_data = ...  # 新たな顧客データ
credit_score = model.predict_proba(customer_data)[:, 1]

# 特徴の重要度の表示
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# 信用スコアの表示
print("Credit Score:", credit_score)

この例では、ロジスティック回帰を使用して信用スコアリングを行い、特徴の重要度を表示している。モデルには、データセットに基づいて学習させた後、新たな顧客データを入力として信用スコアを予測する。

説明可能な機械学習を用いた金融分野での不正検知のpythonによる実装例

説明可能な機械学習を用いた金融分野での不正検知の実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 金融取引データ(顧客のトランザクション、金額、時間など)を収集し、前処理を行う。データは、正常な取引と不正な取引のラベル(例: 1=不正、0=正常)を含むことがある。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、金額の正規化、時間特徴のエンコーディング、トランザクションの集計統計量などを抽出することがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。ランダムフォレストや決定木などのモデルは、特徴の重要度を評価し、不正検知の解釈性を向上させるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、不正検知の理由や特徴の重要度を評価する。ランダムフォレストの場合、特徴の重要度を取得して評価することができる。
  6. 不正検知: 解釈結果を基に、新たな取引データを入力として不正検知を行う。モデルがどの特徴やルールに基づいて不正検知を行ったのかを説明し、金融機関や監督機関に対して透明性を提供する。

以下は、scikit-learnを使用したランダムフォレストを使った簡単な実装例となる。

from sklearn.ensemble import RandomForestClassifier

# データの準備と前処理
X = ...  # 取引データの特徴ベクトル
y = ...  # 不正取引のクラスラベル(例: 1=不正、0=正常)

# モデルの選択と学習
model = RandomForestClassifier()
model.fit(X, y)

# 特徴の重要度の評価
importances = model.feature_importances_

# 不正検知
transaction_data = ...  # 新たな取引データ
fraud_detection = model.predict(transaction_data)

# 特徴の重要度の表示
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# 不正検知結果の表示
print("Fraud Detection:", fraud_detection)

この例では、ランダムフォレストを使用して金融取引の不正検知を行い、特徴の重要度を表示している。モデルには、データセットに基づいて学習させた後、新たな取引データを入力として不正検知を行う。

説明可能な機械学習を用いた医療診断での画像診断のpythonによる実装例

説明可能な機械学習を用いた医療診断での画像診断の実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 医療画像データ(X線、MRI、CTスキャンなど)を収集し、前処理を行う。データは、画像ファイルとそれに関連する正解ラベル(疾患の有無など)を含むことがある。
  2. 特徴エンジニアリング: 画像データから有用な特徴を抽出するための前処理を行う。例えば、画像のサイズ変更、グレースケール化、画像の境界検出、特定の領域の抽出などを行うことがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。CNNの概要とアルゴリズム及び実装例について“で述べている畳み込みニューラルネットワーク(CNN)などのモデルは、画像データの特徴を学習し、解釈性を高めるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、データ拡張やパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、診断結果の理由や特徴の重要度を評価する。例えば、Grad-CAM(Gradient-weighted Class Activation Mapping)などの手法を使用して、モデルが注目している領域を可視化することができる。
  6. 画像診断: 解釈結果を基に、新たな画像データを入力として診断結果を生成する。モデルがどの特徴や領域に基づいて診断結果を出したのかを説明し、医療従事者や患者に対して透明性を提供する。

以下は、TensorFlowとKerasを使用したCNNを使った簡単な実装例となる。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# データの準備と前処理
X = ...  # 画像データ
y = ...  # 疾患のクラスラベル(例: 1=疾患あり、0=疾患なし)

# モデルの構築
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(image_height, image_width, channels)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation="relu"))
model.add(Dense(num_classes, activation="sigmoid"))

# モデルの学習
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X, y, batch_size=batch_size, epochs=num_epochs, validation_split=validation_split)

# モデルの解釈
# Grad-CAMなどの手法を使用して、モデルが注目している領域を可視化する

# 画像診断
image_data = ...  # 新たな画像データ
diagnosis = model.predict(image_data)

# 診断結果の表示
print("Diagnosis:", diagnosis)

この例では、CNNを使用して画像診断を行い、診断結果を表示している。モデルには、データセットに基づいて学習させた後、新たな画像データを入力として診断結果を生成する。

説明可能な機械学習を用いた医療診断での疾患予測のpythonによる実装例

説明可能な機械学習を用いた医療診断での疾患予測の実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 医療データ(患者の特徴、検査結果、症状など)を収集し、前処理を行う。データは、疾患の有無やその他の関連情報を含むことがある。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、カテゴリカル変数をOne-Hotエンコーディングしたり、数値変数を正規化したりすることがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。ロジスティック回帰や決定木などのモデルは、特徴の寄与度を評価し、疾患予測の解釈性を高めるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、疾患予測の理由や特徴の重要度を評価する。例えば、特徴の係数や決定木のルールを確認することで、特定の特徴が予測にどれだけ寄与しているかを理解することができる。
  6. 疾患予測: 解釈結果を基に、新たな患者データを入力として疾患予測を行う。モデルがどの特徴やルールに基づいて予測を行ったのかを説明し、医療従事者や患者に対して透明性を提供する。

以下は、scikit-learnを使用したロジスティック回帰を使った簡単な実装例となる。

from sklearn.linear_model import LogisticRegression

# データの準備と前処理
X = ...  # 患者の特徴ベクトル
y = ...  # 疾患のクラスラベル(例: 1=患者あり、0=患者なし)

# モデルの選択と学習
model = LogisticRegression()
model.fit(X, y)

# 特徴の重要度の評価
importances = model.coef_[0]

# 疾患予測
patient_data = ...  # 新たな患者データ
disease_prediction = model.predict(patient_data)

# 特徴の重要度の表示
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# 疾患予測結果の表示
print("Disease Prediction:", disease_prediction)

この例では、ロジスティック回帰を使用して疾患予測を行い、特徴の重要度を表示している。モデルには、データセットに基づいて学習させた後、新たな患者データを入力として疾患予測を行う。

自動車の自動運転での意思決定のpythonによる実装例

説明可能な機械学習を用いた自動車の自動運転の意思決定の実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 自動車のセンサーデータ(カメラ、レーダー、LiDARなど)や制御入力(ステアリング角度、アクセル、ブレーキなど)を収集し、前処理を行う。データは、運転状態、障害物の位置、速度、自動車の制御パラメータなどを含むことがある。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、センサーデータを処理して障害物の距離や速度などを抽出したり、制御入力を正規化したりすることがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。決定木やランダムフォレストなどのモデルは、意思決定プロセスを可視化し、説明性を向上させるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、意思決定の理由や特徴の重要度を評価する。決定木の場合、ツリーの構造を可視化したり、特徴の重要度を取得したりすることができる。
  6. 自動運転の意思決定: 解釈結果を基に、自動運転の意思決定を行う。モデルがどの特徴やルールに基づいて判断したのかを説明し、安全性や透明性を確保する。

以下は、scikit-learnを使用した決定木を使った簡単な実装例となる。

from sklearn.tree import DecisionTreeClassifier

# データの準備と前処理
X = ...  # センサーデータや制御入力の特徴ベクトル
y = ...  # 意思決定のクラスラベル(例: 直進、右折、左折)

# モデルの選択と学習
model = DecisionTreeClassifier()
model.fit(X, y)

# 意思決定の解釈
# ツリーの可視化
from sklearn.tree import export_graphviz
export_graphviz(model, out_file="decision_tree.dot", feature_names=["feature1", "feature2", ...])

# 特徴の重要度の表示
importances = model.feature_importances_
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# 自動運転の意思決定
sensor_data = ...  # センサーデータや制御入力のデータ
decision = model.predict(sensor_data)

# 意思決定結果の表示
print("Decision:", decision)

この例では、決定木を使用して自動運転の意思決定を行い、ツリーの可視化と特徴の重要度の表示を行っている。モデルには、データセットに基づいて学習させた後、センサーデータや制御入力のデータを入力として意思決定を行う。

自動車の自動運転での衝突予測のpythonによる実装例

説明可能な機械学習を用いた自動車の自動運転での衝突予測の実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: 自動車のセンサーデータ(カメラ、レーダー、LiDARなど)や周囲の車両の情報、自動車の制御入力など、衝突に関連するデータを収集し、前処理を行う。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、センサーデータから障害物の距離や速度を抽出したり、周囲の車両の位置関係や速度などを特徴として使用したりすることがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。ランダムフォレストや決定木などのモデルは、特徴の重要度を評価し、衝突予測の解釈性を向上させるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、トレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、衝突予測の理由や特徴の重要度を評価する。ランダムフォレストの場合、特徴の重要度を取得して評価することができる。
  6. 衝突予測: 解釈結果を基に、自動車の衝突予測を行う。モデルがどの特徴やルールに基づいて衝突予測を行ったのかを説明し、安全性や透明性を確保する。

以下は、scikit-learnを使用したランダムフォレストを使った簡単な実装例となる。

from sklearn.ensemble import RandomForestClassifier

# データの準備と前処理
X = ...  # センサーデータや周囲の車両の情報、制御入力の特徴ベクトル
y = ...  # 衝突クラス(例: 衝突する、衝突しない)

# モデルの選択と学習
model = RandomForestClassifier()
model.fit(X, y)

# 特徴の重要度の評価
importances = model.feature_importances_

# 衝突予測
sensor_data = ...  # センサーデータや周囲の車両の情報、制御入力のデータ
collision_prediction = model.predict(sensor_data)

# 特徴の重要度の表示
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# 衝突予測結果の表示
print("Collision Prediction:", collision_prediction)

この例では、ランダムフォレストを使用して自動車の衝突予測を行い、特徴の重要度を表示している。モデルには、データセットに基づいて学習させた後、センサーデータや周囲の車両の情報、制御入力のデータを入力として衝突予測を行う。

オンライン広告のレコメンデーションのpythonによる実装例

説明可能な機械学習を用いたオンライン広告のレコメンデーションの実装例として、以下にPythonでの一般的な手順を示す。

  1. データの準備: オンライン広告に関するデータを収集し、前処理を行う。データは、広告の特徴(クリック数、表示回数、広告の属性など)とユーザーの特徴(年齢、性別、地域など)を含むことがある。
  2. 特徴エンジニアリング: データから有用な特徴を抽出し、適切な形式に変換する。例えば、カテゴリカル特徴をOne-Hotエンコーディングしたり、数値特徴を正規化したりすることがある。
  3. モデルの選択: 説明可能な機械学習モデルを選択する。ランダムフォレストや勾配ブースティングなどのモデルは、特徴の重要度を評価する機能を持っているため、レコメンデーションの説明性を向上させるのに適している。
  4. モデルの学習: データセットを使用して選択したモデルを学習させる。学習には、データセットをトレーニングセットとテストセットに分割し、クロスバリデーションやパラメータの調整を行うことがある。
  5. モデルの解釈: 学習済みモデルを解釈し、特徴の重要度を評価する。ランダムフォレストの場合、feature_importances_属性を使用して各特徴の重要度を取得することができる。
  6. レコメンデーションの生成: 解釈結果を基に、ユーザーに対する広告のレコメンデーションを生成する。モデルが予測に使用した特徴やその重要度を説明する情報を付加することで、ユーザーに対して透明性を提供する。

以下は、scikit-learnを使用したランダムフォレストを使った簡単な実装例となる。

from sklearn.ensemble import RandomForestClassifier

# データの準備と前処理
X = ...  # 特徴ベクトル
y = ...  # クリック/非クリックの目的変数

# モデルの選択と学習
model = RandomForestClassifier()
model.fit(X, y)

# 特徴の重要度の評価
importances = model.feature_importances_

# レコメンデーションの生成
user_data = ...  # ユーザーの特徴データ
recommendation = model.predict(user_data)

# 特徴の重要度の表示
for i, importance in enumerate(importances):
    print(f"Feature {i+1}: Importance={importance}")

# レコメンデーションの表示
print("Recommendation:", recommendation)

この例では、ランダムフォレストを使用して広告のレコメンデーションを行い、特徴の重要度を表示している。モデルには、データセットに基づいて学習させた後、ユーザーの特徴データを入力としてレコメンデーションを生成する。

参考情報と参考図書

説明できる機械学習技術の詳細に関しては”説明できる機械学習“を参照のこと。

参考図書としては”機械学習を解釈する技術〜予測力と説明力を両立する実践テクニック”

実践XAI[説明可能なAI] 機械学習の予測を説明するためのPythonコーディング”

XAI(説明可能なAI)”

Hands-On Explainable AI (XAI) with Python”等がある。

コメント

  1. […] 説明できる機械学習の様々な手法と実装例について […]

  2. […] 説明できる機械学習の様々な手法と実装例について […]

  3. […] 説明できる機械学習の様々な手法と実装例について […]

  4. […] データ解析とパターン認識: AIは膨大なデータを高速かつ正確に分析できるため、特定の分野において未知のパターンや傾向を発見するのに役立つ。これによって、研究者や専門家は新たな洞察を得ることができ、例えば、”画像認識システムの概要と実装“や”説明できる機械学習の様々な手法と実装例について“あるいは”統計的因果推論と因果探索“で述べている様な医療データを分析して特定の疾患のリスク要因や治療法の有効性を発見することが考えられる。 […]

  5. […] 説明できる機械学習の様々な手法と実装例について […]

  6. […] 高める。 局所的な解釈性手法の適用: SHAP値やLIMEなどの手法を使用して、個々の予測結果を解釈する。詳細は”説明できる機械学習の様々な手法と実装例について“も参照のこと。 […]

  7. […] 情報を抽出する手法を導入する。 透明性の向上のための研究:”説明できる機械学習の様々な手法と実装例について“等で述べているAIの透明性と説明性に関する技術を導入する。 […]

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