2016-8-12_19-4-46_No-00

回帰モデルにしても、クラス分類モデルにしても、予測精度の高いモデルが望まれています。新しいサンプルをモデルに入力することで、できるだけ目的変数の誤差が小さく予測したい、というわけです。また一方で、得られたモデルを解釈したい、という声もとても大きいです。説明変数の、目的変数に対する寄与の大きさを知りたいわけです。

しかしながら、モデルの予測精度の高さとモデルの解釈のしやすさとはトレードオフの関係です。つまり、モデルの予測精度を上げようとすればするほど、モデルは複雑になるため解釈はしにくくなり、逆にモデルをシンプルにして解釈しやすくすればするほど、モデルの予測性能は低下してしまいます。一般的には、モデルの精度を上げる人がほとんどです。サポートベクターマシンとかディープラーニングとか使って、精度の高さを競うわけです。しかし、こうして作られ他モデルは全く解釈できないものになってしまいます。

そこでわたしは、予測性能も高く、解釈もしやすいモデルを目指しました。

モデルの解釈をする、ということ

まず、わたしが前提とするのは、「モデルを解釈できる、ということは、各説明変数の、目的変数への寄与の大きさが分かる、ということと同じ意味」ということです。つまり、目的変数と説明変数との関係は線形という仮定をおいています。

もちろん、実際は非線形の方が多いと思います。そこで一般的には非線形モデルを構築して予測精度の向上を目指すわけです。しかし、非線形モデルの解釈は困難を極めます。たとえばモデルを微分することでいろいろと検討できなくはないですが、結果が複雑すぎて「解釈」とはとてもいえないものになってしまいます。

そこで、仮に目的変数と説明変数との間が非線形であったとしても、各説明変数の目的変数への寄与の大きさを求める方針にします。

わたしはこの方針は特に問題ないと思います。なぜなら、回帰分析の分野において、いろいろな非線形の手法が開発されていますが、いまだに主流なのはPLSという線形の手法であるためです。線形を仮定しても十分に予測精度の高いモデルを作ることのできる証拠です。

ただ、線形を仮定しても、なおモデルを解釈するための問題は大きいのです・・・。

問題点の整理

まず問題点を整理します。

説明変数間の関係を表現できない

なぜ、予測精度の高いモデルを作れたとしても、そのモデルの解釈が難しいかというと、一つは説明変数の間に関係がありそれらを考慮できていないためです。説明変数が互いに独立していれば、たとえば回帰分析によって得られた回帰係数の値を、そのまま説明変数から目的変数への寄与の大きさとすることができ、解釈することができます。しかし、実際は説明変数の間に相関があるため、その相関の影響を回帰係数が受けてしまい、回帰係数の値が説明変数から目的変数への寄与の大きさと一致しなくなってしまいます。

もちろん、主成分分析や独立成分分析を行うことで、互いに無相関であったり独立であったりする成分を抽出することができます。ただ、そのような成分の目的変数への寄与の大きさを計算できる一方で、元の説明変数から目的変数へどれくらい寄与しているかはわかりません。

非線形関係があると寄与の大きさを表現できない

変数間が仮に無相関であったとしても、説明変数の間に非線形の関係があると、その関係は表現されません。さらに状況は複雑になってしまいます。

提案する解決法

上の問題を踏まえて、問題を解決して、予測精度が高く解釈の可能なモデルを作る方法を説明します。

方針

方針としては、

  1. 変数間の非線形関係を考慮してクラスタリングする
  2. クラスターごとにカーネル主成分分析を行い、最初の主成分のみ使う
  3. クラスターごとの主成分と目的変数との間で、線形の回帰分析もしくはクラス分類を行う
  4. モデルを解釈する

となります。順に説明します。

1. 変数間の非線形関係を考慮してクラスタリングする

似ている変数は似ている変数同士まとめてしまう、ということです。

このとき、二つの変数x1とx2に、x2=(x1)2+1とかx2=sin(x1)とかの非線形の関係があっても、「x1とx2は似ている」として欲しいです。そこで、2つの変数がどのくらい似ているかの指標、つまり類似度の指標として、Maximum Information Coefficient (MIC) を用います。MICによって、変数間の非線形性を考慮して、変数間の相関関係を検討できます。詳細はこちらをご覧ください。

Maximum Information Coefficient(MIC)~変数間の非線形性を考慮した相関係数~ : 大学教授のブログ

それぞれの変数間の類似度が計算でき、類似度行列が得られます。

次に、得られた類似度行列に基づいてクラスタリングを行います。似ている変数同士は一つのクラスター、つまりかたまりになります。たとえば、100の説明変数を、5つのクラスターに分ける、といったことが行われるわけです。もちろん、それぞれのクラスターの中には似ている変数しかなく、クラスターの間で比べると変数は似ていない、ということになります。

2. クラスターごとにカーネル主成分分析を行い、最初の主成分のみ使う

一つのクラスターの中には似ている変数しかありません。なので、クラスターごとに代表的な「成分」が含まれているはずです。このような代表的な成分を計算する方法として主成分分析(PCA)が有名です。しかし、今回は変数間に非線形関係がある場合も考えられます。そこで、カーネル主成分分析(KPCA)を使用します。それぞれのクラスターごとにKPCAを行い、一つの主成分のみ抽出します。たとえば5つのクラスターがあるときは、KPCAを5回行い、合わせて5つの主成分が得られることになります。これによって、クラスターの中から一つの変数を選択するより、多くの情報を一つの成分に圧縮することができます。もちろん、一つの説明変数でクラスターを形成する場合は、KPCAは行わず、説明変数そのものを主成分として用います。

n個のクラスターがあったら、n個の新たな変数ができます。n個の変数はそれぞれ、n個のクラスターごとに得られていますので、変数間は似ていない、ということになります。つまり変数の間は互いに独立していると仮定できるわけです。

カーネル主成分分析ではカーネル関数を決める必要があります。基本的には、最も一般的なカーネル関数であるガウシアンカーネルでOKです。ただ、ガウシアンカーネルでは一つパラメータを決めなければなりません。どのように決めればよいでしょうか。

そもそも、KPCAの目的は、一つのクラスター内の似ている変数の中から代表的な成分を一つ抽出することでした。つまり、一つのクラスター内の情報をなるべく一つの成分で表現してくれることが嬉しいわけです。そこで、KPCAを行ったときの、最初の主成分の寄与率が最も大きくなるようにパラメータの値を決めます。具体的には、パラメータの候補をいくつか準備しておき、その候補ごとにKPCAを行い、第一主成分の寄与率を保存します。その寄与率の値が最も大きいパラメータの値を、最終的なKPCAに使用するわけです。もちろんこのパラメータの最適化はクラスターごとに行います。

3. クラスターごとの主成分と目的変数との間で、線形の回帰分析もしくはクラス分類を行う

最終的にモデルを解釈しなければならないため、説明変数から目的変数への寄与の大きさが必要になります。そのため最後は線形の回帰分析手法もしくは線形のクラス分類手法を用いることになります。

今、n個のクラスターがあり、n個の新たな変数があります。このn個の変数と目的変数との間で、線形の回帰分析もしくはクラス分類を行います。n個のクラスターはそれぞれ似ていないものと仮定できれば、n個の変数は互いに独立している状態に近いといえます。つまり、n個の回帰係数の値、それぞれの変数から目的変数への寄与の大きさとみなせるわけです

4. モデルを解釈する

まずn個の変数の標準回帰係数の値を確認します。先述したとおり、n個のクラスターはそれぞれ似ていないという仮定があります。そこで、各標準回帰係数の値を、それぞれ各変数への寄与の大きさとすることができます。つまり、n個の変数クラスターそれぞれの寄与の大きさが分かるということです。

これで十分な場合はOKです。ただ、元の説明変数の寄与の大きさまで検討したい場合は、もう一工夫必要です。n個の変数と、元の説明変数との関係を求める必要があります。これらの間は、非線形のKPCAによって関係づけられていますので、単純に関係性を数値で表すことはできません。

そこで、クラスターごとに、横軸をKPCAによって計算された第一主成分、縦軸を一つのクラスターになった各説明変数とするプロットを確認しましょう。第一主成分の値が大きく (小さく) なればなるほどと説明変数の値も大きく (小さく) なるような関係もあれば、複雑な非線形関係であることもあります。複雑な非線形関係があるということは、説明変数と目的変数との間も単純な関係ではなく、複雑である、ということです。

データ解析

今回の手法がうまく機能するか確認するため、簡単なデータ解析を行ってみました。なお解析はすべてRで行い、プログラミングコードはこちらに公開してます。

データ解析: データ

使ったデータはこちらで仮想的に作ったデータです。

下のような10の説明変数を準備しました。

2016-8-9_6-7-8_No-00

ご覧のとおり、X1, X2, X3の間には線形の関係があり(グループA)、X4, X5, X6の間には非線形の関係があり(グループB)、X7, X8, X9の間にも非線形の関係があります(グループC)。X10は他のXと独立しています。それぞれのXにはノイズとして正規分布に従う乱数を加算しています。

目的変数は次のように発生させました。まず、グループAの変数を発生させるために用いた、いわばグループAの元の変数と、グループBの元の変数と、X10を発生させた元の変数(ノイズ無しのX10のこと)の3つだけに、それぞれ同じ正の重みを付けて、足し合わせます。その後、足し合わせたものにノイズとして正規分布に従う乱数を足したものを、目的変数としました。説明変数の中の一部の変数の線形結合で発生させたわけです。つまり、グループCの説明変数と目的変数の間には、関係は何もありません。

全部で300サンプルを発生させ、200サンプルをモデル構築用データセット、100サンプルをモデル検証用データセットとしました。

データ解析: 1. 変数間の非線形関係を考慮してクラスタリングする

300サンプルの説明変数のデータのみを使用して (モデル検証用データセットでも、説明変数のデータであれば使用して問題ありません、半教師あり学習と同じです)、MICで変数間の類似度を計算し、ウォード法によるクラスタリングを行いました。

デンドログラムを下に示します。

2016-8-9_6-7-58_No-00

クラスターの数を4とすると、グループA, B, Cそれぞれにおける説明変数が、同じクラスターに属し、X10だけ1つの説明変数のみで1つのクラスターを形成することが分かります。実際のグループと同じようにクラスタリングできたため、適切にクラスタリングできたといえます。

なおクラスターの数を4とすることについて、デンドログラムにおいてクラスター間の距離を表すHeightを見ても、足が長い (=クラスター間が離れている) ことから、妥当な判断といえます。

データ解析: 2. クラスターごとにカーネル主成分分析を行い、最初の主成分のみ使う

4つのクラスターがありますので、4回KPCAを行い4つの第一主成分を得ます。ただ今回は、X10のクラスターは一つの変数で一つのクラスターであるため、KPCAを行わずにX10を第一主成分の代わりに用います。とにかく、4つの変数が得られました。

データ解析: 3. クラスターごとの主成分と目的変数との間で、線形の回帰分析もしくはクラス分類を行う

今回は目的変数が連続値であるため回帰分析を行います。線形のPLSで回帰モデルを作りました。5-fold クロスバリデーションによる最適成分数は2でした。モデル構築用データにおける目的変数の実測値と計算値とのプロットを下に示します。

2016-8-9_6-9-1_No-00

モデル検証用データにおける目的変数の実測値と推定値とのプロットを下に示します。

2016-8-9_6-9-30_No-00

どちらもサンプルが対角線付近に固まっており、良好な回帰分析を行えたことがわかります。

データ解析: 4. モデルを解釈する

上の回帰モデルの、標準回帰係数の値は以下のとおりです。

  • 変数1 (X1, X2, X3のクラスター、つまりグループAに対応): 0.601
  • 変数2 (X4, X5, X6のクラスター、つまりグループBに対応): 0.552
  • 変数3 (X1, X2, X3のクラスター、つまりグループCに対応): -0.004
  • 変数4 (X10のクラスター、つまりX10に対応): 0.572

まず、変数3の係数の値がほぼ0でした。これは元々グループCと目的変数とは何ら関係がなかったことから妥当な結果といえます。さらに、変数1・2・3については係数の大きさが近い値でした。これも、グループA・グループB・X10のそれぞれ元の変数の、目的変数に対する重みが同じであることから適切な結果といえます。ちなみにこの時点では、説明変数が各第一主成分に対して正に寄与しているか、負に寄与しているかは分かりませんので、寄与の大きさの正負には意味がありません。ただし、X10に対応する変数4についてはKPCAを行っていませんので、寄与の大きさの正負にも意味があります。

続いて、各説明変数の寄与の大きさを検討します。

まず、X1, X2, X3のクラスターにおける第一主成分・X1・X2・X3のプロットを下に示します。

2016-8-9_6-8-11_No-00

第一主成分に対して、X1は正の相関、X2は正の相関、X3は負の相関があります。標準回帰係数の結果より、第一主成分は目的変数に対して正の寄与があります。なので、目的変数に対しては、X1は正の寄与、X2は正の寄与、X3は負の寄与があることになります。最初のデータセットのX間のプロットや、目的変数の計算の仕方を考えても適切な結果といえます。

次に、X4, X5, X6のクラスターにおける第一主成分・X4・X5・X6のプロットを下に示します。

2016-8-9_6-8-22_No-00

ここでも、最初のデータセットのX間のプロットにおけるX4・X5・X6の間の関係を、KPCAの第一主成分において適切に表現できていることが分かります。そして、第一主成分に対して、X4・X6は正の相関があり、標準回帰係数より第一主成分は目的変数に対して正の寄与があるので、目的変数に対してX4・X6ともに正の寄与があることが分かります。この結果はデータセットの発生方法を考えると妥当といえます。しかし、X5については、第一主成分に対して非線形の関係があるため、目的変数への寄与の大きさを単純に数値で表すことはできません。言えることは、「目的変数に対して正の寄与のある第一主成分と、第一主成分 vs. X5プロットのような関係がある」ということです。

X7, X8, X9のクラスターは、変数3が目的変数に対しての寄与はないことから、さらに調べる必要はありません。ただ念のため第一主成分・X7・X8・X9のプロットを下に示します。

2016-8-9_6-8-33_No-00

第一主成分によってX7, X8, X9との関係が適切に表現されていることが分かります。

最後に、X10に対応する変数4についてはKPCAを行っていませんので、X10は目的変数に対して正の寄与があることになります。これは、最初にデータを発生させたときの目的変数の計算の仕方より、妥当な結果です。

本手法の限界と解決法

本手法の限界は2つあります。

1. 説明変数の交差項のように、説明変数間の和・差以外の関係が、目的変数に寄与しているときに、その関係を表現できない

交差項というのは、2つの説明変数x1とx2とがあるときに、x1とx2とを掛けあわせたx1x2のことです。この場合は、x1とx2とが似ている必要はないため同じクラスターにならないこともあり、最後は線形の回帰分析でn個の変数と目的変数との関係を構築しているため、x1x2といった関係は考慮できません。

対策としては、説明変数の中にx1x2という変数をあらかじめ追加しておくことになります。複数の説明変数の和・差以外の関係が、目的変数に効いていると考えられる場合は、x1x2のように、新たに作成した変数を説明変数の中に入れましょう。

2. そもそも目的変数と説明変数との間に関係がないときは太刀打ちできない

まあ、これは他のどんな手法にもいえることですね。どの手法を用いたとしても、そもそも精度の高いモデルすら構築できません。

対策としては、目的変数を説明できる説明変数を追加することです。

まとめ

予測精度が高く、かつ解釈が可能なモデルを構築できる方法を提案しました。データ解析の結果より、良好なモデルを構築可能であり、適切にモデルを解釈できることが分かります。

この手法を実現するためのプログラムはこちらに公開されています。ぜひ検討をお願いします。

ご案内。

オススメ記事セレクション。

twitterでも発信中。

この記事に興味を持っていただけましたら、ぜひフォローをお願いします!


無料メルマガでブログにない情報を配信中。

データ解析・分析に興味がありましたらぜひ登録をお願いします!
無料メルマガの登録はこちら