最近ではDeep Learningという言葉がかなり世間に透してきていますよね。Deep Learningをはじめとする機械学習アルゴリズムの中には、予測の基準を人間が理解できないものが存在します。そのため機械学習モデルの解釈手法に関して様々な研究が行われています。
本記事では機械学習モデルの予測に際してどの特徴が重要かを把握する手法である、Permutation Importance(パーミュテーションインポータンス)について解説と実装をしていきましょう。
機械学習の解釈とは
機械学習の解釈には以下のようにいくつかの文脈があります。
- モデルの学習にとって重要な特徴量を把握する
- 各特徴量の変化によってモデルの出力がどのように変化するのかを把握する
1つめのモデルの学習に重要な特徴量の把握に関しては、重要な特徴量が何かを理解することで従来人手で行なってきた部分の経験と一致するかを把握することや、重要な特徴量を優先的に特徴量エンジニアリングすることで精度の向上に役立てることができます。
また各特徴量の変化からモデルの出力の変化を把握することで、実際の現象の理解につなげることまたは人間の直感に近いかを確認することができます。
本記事で紹介するPermutation Importanceは、1つめのモデルの学習ニットって重要な特徴量を把握するために用いられる手法です。
Permutation Importance
Permutation Importanceは先ほどの記述の通り特徴量の重要度を計算する解釈手法のひとつで、Importanceは重要度のことを示し、Permutationは並べ替えや交換を意味する単語です。Permutation Importanceではその名の通りある特徴量のシャッフルして予測を行なった場合に、どれだけ性能が悪化するかで特徴量の重要度を計算します。
ある特徴量をシャッフルすることで学習済みの機械学習モデルからは、その特徴量の値をほとんど参考にできなくなるのですが、その特徴量が当てにならなくなった場合のモデルの性能の悪化具合を計算することで、その特徴量がどれだけ重要であったかを知ることができます。
この手法は非常に直感的でかつ、事前に学習済みのモデルがひとつあれば予測と誤差の計算だけで重要度を計算できるため計算コストが低いという利点があることが特徴と言えるでしょう。
PythonによるPermutation Importanceの計算
Permutation ImportanceはScikit-learn(サイキットラーン)で簡単に計算できる上、実装自体はカラムを入れ替えるだけで可能なため、スクラッチでも容易に実装することが可能です。
from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.inspection import permutation_importance from sklearn.model_selection import train_test_split iris = load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y) model = RandomForestClassifier() model.fit(X_train, y_train) result: dict = permutation_importance(model, X_test, y_test) print('Permutation Importance') print(result['importances_mean'])
このコードを実行することで、以下の結果が得られます。(乱数シードを固定していないため、実行のたびに結果は多少変化する点に注意)
Permutation Importance [0. 0. 0.01052632 0.29473684]
今回はirisというアヤメの分類に用いられるデータセットを利用しています。irisのアヤメデータは非常に有名ですよね。irisデータセットには4つの特徴量があり、順に‘sepal length (cm): ガクの長さ’, ‘sepal width (cm): ガクの幅’, ‘petal length (cm): 花弁の長さ’, ‘petal width (cm): 花弁の幅’を示しています。
Permutation Importanceの計算結果と照らし合わせることで、ガクよりの花弁に関連する特徴量の方が予測精度に寄与していることがわかります。
まとめ
Permutation Importanceについて重要な点をまとめましょう。
- 機械学習解釈手法のひとつで特徴量の重要度を知ることができる
- 検証データのある特徴量をシャッフルし、性能の悪化具合から重要度を計算する
- scikit-learnのinspection内に実装されており、簡単に利用できる