Python、機械学習

【多変量解析】多変量解析の意味、PCA(主成分分析)とPLSの違いをわかりやすく説明する

品質管理やデータ分析に関わっていると、「多変量解析」という言葉に遭遇します。

そもそも多変量解析とは何なのでしょうか?そして、多変量解析の具体的な手法であるPCA(主成分分析)やPLSとはどんなものなのでしょうか?

ここでは定性的なイメージをつかめるように説明します。

多変量解析とは?

ざっくりいうと、多変量解析とは変数の多いデータを扱うことを言います。

例えば、毎日製造している製品があって、時々不良が出ていて困っているとします。不良が出る原因を調べるために、各製造ロットのデータを分析することになりました。

製造ロットのデータには、原料の純度や製造日、成形機の種類、設定温度、圧力、トルク、成形機内の各位置の実測温度、成形後の冷却速度、時間、成形室の気温、湿度、成形した日時、担当者名・・・、と実に多くのパラメータ(変数)が含まれています。

変数が多すぎて、1つ1つを見ても良品/不良品を決めている原因はわかりません。

このように、変数が多いデータを分析する際に役に立つのが多変量解析です。

y = f(X) で、製造ロットのデータの各変数を説明変数X、知りたい変数(良品か不良品か)を目的変数yといいます。説明変数の数がいっぱいあるときに、多変量解析を行うことになります。

変数を加工し、分析に使える少数の変数を新たに作る

多変量解析で具体的に行うことは、数多くある変数をうまく加工して新たな変数を作ることです。

例えば、原料の純度:3割、成形機の設定温度:2割、トルク:2割、冷却速度:1割、成形室の気温:1割、担当者名:1割からなる新しい変数を作り、この変数と良品/不良品の関係を調べるというものです。

このようにして、良品/不良品の違いをうまく説明できそうな変数をいくつか作ります。

そうすることで、もともとあった多量の変数を使わずに、加工して新たに作った数個の変数だけを使って不良品が出た原因を探ることができます。

例えば、上述の新しく作った変数が大きいと良品、小さいと不良品だという傾向が見えてきたりします。

このように、変数が大幅に減ると分析がしやすくなります。

例えば、変数が少ないと、グラフが描けるようになります。グラフが描ければ、直感的にデータを眺められるようになります。人への説明も容易になります。

変数が2個だけだと、縦軸と横軸を引いて2次元のグラフが描けます。変数が3個だと、x, y, zの3軸を引いてなんとか3Dのグラフが描けます。

変数が4以上になると、グラフ化がしんどくなります。3次元の世界に住んでいる以上、軸は3つ以上増やせませんので、プロットの色や形を変えて4つ目以降の変数を表現することになりますが、グラフが複雑になりすぎてパッと見てもわかりにくいですよね。

また、変数の数がデータの数よりも多いと、そもそも重回帰分析ができなくなります。

繰り返しになりますが、今ある多数の変数を加工して、分析に使えそうな少数の変数を新たに作ってデータ分析をシンプルにするのが多変量解析です。

少数の変数を新たに作る方法が、PCA(主成分分析)とPLS

少数の変数を新たに作る方法が、PCA(主成分分析)とPLSです。

PCA(主成分分析)

PCA(主成分分析)は、データの違いをはっきり表せる変数を作る出す方法です。

製造ロットのデータ、一見すると違いがあるようには見えないんだけど、もしかしたらいくつかのグループに分類できるようなものかもしれない・・・。

それを可能にするのがPCAです。

上述の例で示したように、説明変数を加工して新たに作った変数があるとします。各データについてこの変数を見ると、0.7〜0.9の大きめの値をとるものと、0.2〜0.4の小さめの値をとる2グループに分類される傾向が現れたとします。

そうすると、この変数は「データの違いをはっきり表せる」変数だと言えます。

データの違いをはっきり表せる変数を「主成分」と言います。

ポイントは、新たに変数を作るときに「良品か不良品か」という目的変数を一切使わないことです。

説明変数の情報だけを使ってデータを似たもの同士グループに分けています。

結果的に、2グループが良品/不良品に対応する場合もありますし、そうでない場合もあります。

色々加工して、最も「データの違いをはっきり表せる」変数を作り出します。これを第一主成分といいます。

次に、第一主成分と相関係数がゼロで、かつ第一主成分の次に「データの違いをはっきり表せる」変数を作り出します。これを第二主成分といいます。

これを繰り返して第n主成分まで作り出します。実際は第一主成分、第二主成分、第三主成分あたりまでを使うことが多いです。

PLS

PLSは、良品/不良品の違いをはっきり表せる変数を作り出す手法です。

PCAでは目的変数の情報を使いませんでしたが、PLSでは目的変数の情報も使います。

説明変数を加工して新たに作った変数があるとします。この変数が大きめの値だと良品、小さめの値だと不良品である、という傾向が現れたとします。

そうすると、この変数は「良品/不良品の違いをはっきり表せる」変数だと言えます。

この変数を作り出す手法がPLSです。

PCAと同じく、PLSにおいても、説明変数たちを色々加工して、最も「良品/不良品の違いをはっきり表せる」変数を作り出します。これを第一主成分といいます。

次に、第一主成分と相関係数がゼロで、かつ第一主成分の次に「良品/不良品の違いをはっきり表せる」変数を作り出します。これを第二主成分といいます。

これを繰り返して第n主成分まで作り出します。

PCA、PLSを使ってできること1:可視化

PCAやPLSで新たに作り出した変数、つまり主成分を使うことで、データの分布を可視化することができます。

例えば、横軸を第一主成分、縦軸を第二主成分にして全データをプロットして、データがどんな感じにプロットしているかがわかります。

PCA、PLSを使ってできること2:どの変数が効いているか考察できる

PCAやPLSで第一主成分や第二主成分を作り出したとします。

冒頭で書いた通り、もし第一主成分が原料の純度3割、成形機の設定温度:2割、トルク:2割、冷却速度:1割、成形室の気温:1割、担当者名:1割からなる、つまり

第一主成分=0.3純度 x 0.2成形機の設定温度 x 0.2トルク x 0.1冷却速度 x 0.1気温 x 0.1担当者名

という比率で構成されていることがわかったら、いろいろ考察ができます。

PCAだと、「おお、原料の純度と成形機の設定温度を指標にすると、データが2グループに分類されるんやなー」と考察できます。

PLSだと、「おお、原料の純度と成形機の設定温度が良品/不良品に大きく影響してそうやなー」と考察できます。

このように、主成分の構成に各変数がどのくらい盛り込まれているかを表すのがローディング(因子負荷量)です。

上の例だと、第一主成分については原料の純度のローディングが大きいと言うことができます。

注意:ローディングの意味

ローディングの定義は学術分野、ローディングを計算する分析ソフトウェアによってまちまちのようですが、一般的には変数と主成分の相関係数(R)のことを指すようです。

また、ローディングを2乗したものを全て足し合わせると、1になります。

PCA、PLSを使ってできること3:分類

データの分布を可視化して、いくつかのグループに分類されそうだというのが見えてきたら、グループの境界を引くことができます。

そして、新たな製造ロットのデータが得られたときに、そのデータがどのグループに分類されるかを判定することができるようになります。

何を基準に分類するかがわかっている場合、つまり上の例で言うと「良品/不良品」で分類したい場合は、PCAよりもPLSの方がより分類の精度がいいです。

PLSでは「良品/不良品の違いをはっきり表せる」変数を使っているので当然と言えば当然です。

PLSという言葉はPLS回帰のことを指すことが多いため、分類問題でPLSを使う場合はPLS-DAと表現します。DAは判別分析(Discriminant Analysis)の略です。

PCA、PLSを使ってできること4:回帰

主成分を使って重回帰分析をすることができます。

これまでの話は、目的変数が「良品か不良品か」という離散値であるケースでした。

ここでは、目的変数を「製品の長さ」としたいと思います。連続値ですね。

第n主成分をtn、そのおもみ(回帰係数)をwn、切片をb、目的変数をyとすると、次のような重回帰分析をすることになります。

y = w1x1 + w2x2 + w3x3 + ・・・ + wnxn + b

第何主成分までを使うかは、重回帰モデルの汎化性能が最大になるところに決めます。

主成分が少なすぎると汎化性能が低いですし、主成分が多すぎても過学習を起こして汎化性能が下がります。いい感じのところにします。実際には、クロスバリデーションをして最適なnを決めます。

バイアスとバリアンスの違い、正則化の意味【機械学習, Python, スパースモデリング】機械学習をやっていると、バイアスとバリアンスのバランスが重要だという話がよく出てきます。 バイアスとバリアンスとは何なのか?バラン...

なお、重回帰分析では、使う主成分の数はデータの数より少なくする必要があります。主成分がデータの数より多いと、各重みwを求めることができなくなります。そこだけ要注意です。

ちなみに、PCAの主成分を使った回帰をPCR、PLSの主成分を使った回帰を単にPLSと呼びます。

メリット①:データの数が少なく、変数がたくさんある系でも使える

重回帰分析では、変数の数がデータの数より多いものには対応できません。PCRやPLSでだと、使う主成分の数を調整できます(=減らせます)。つまり、データの数が少なくても、回帰に使う主成分の数を減らすことで回帰問題が解けるようになります。

メリット②:安定した回帰モデルが作れる

重回帰分析では、変数間の相関係数が大きいとモデルが安定しづらくなります。つまり、モデル作成に使うデータが変わるとおもみも大きくバラついてしまいます。これを多重共線性といいます。

PCAやPLSだと、それぞれの主成分は相関係数がゼロになるように作られるため、この問題が起こりません。

PLS回帰の方が精度がよくなる

PLSとは、説明変数たちを色々加工して、最も「目的変数の違いをはっきり表せる」変数を作り出す方法でした。

よって、PLSで作った主成分を使って回帰分析をするとPCRの場合よりもモデルの精度が上がります。

まとめ

・変数がめっちゃ多くてデータ解析しにくい…、じゃあ各変数のエキスをいい感じに濃縮した少数の変数を新たに作り出して、これでデータ分析をしようというのが多変量解析。

・説明変数の情報だけ使って行うのがPCA(主成分分析)

・目的変数の情報も使って行うのがPLS

・PCAやPLSで作り出した変数を主成分という。これを使ってデータの可視化、分類、回帰ができる。さらに、主成分にどんなエキスがどんくらい含まれているか(ローディング)を調べることもできる。どの変数が重要なのかを考察することができる。