線形回帰をしてみる #alteryx #07 | Alteryx Advent Calendar 2016

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

当エントリは『Alteyx Advent Calendar 2016』の07日目のエントリです。

今回はデータモデリングの機能として線形回帰をしてみたいと思います。

線形回帰とは

データから数値を予測するものになります。 有名なところでだと、気温が1℃上がるごとにビールの売り上げが○%上昇するのようなものがあります。これは予測したい値(=ビールの売り上げ)に対して、それに影響する要因(=気温)のようなものをあげていき、それらがどの程度影響しているのかを数値的に見るのに役だつものとなります。 また、この際影響がわかっている要因のうち操作可能なもの(広告の出稿数やクーポン発行の有無など)は特に有益な情報となります。

線形回帰の計算式

線形回帰がどのようになっていて、どのように計算されていくのかを説明します。

求めたい式の形

数学の授業などでよく見たことがあるかと思います、y = ax + bの形式が基本となります。 先ほどのビールの例ですと、xに気温、yに売り上げが入り、あとは適切なaとbが求まれば気温に対するビールの売り上げが予測可能になるというモデルになります。 これに複数の要因を想定した重回帰と呼ばれるモデルは、

latex-image-2

となります。y = ax + bに対応させると、x_iが各要因の観測値、w_iが各要因のaに相当するパラメータとなります。 この式はx_0を常に1とすることで、

latex-image-3

と表現することができます。 aやbに対応する値をwとしているのは、結果となる値に対する各要因の重み(ウエイト)という表現を使うからです。

このように線形回帰では、目的変数(yに当たる、その値を求めたい変数)と説明変数(xに当たる、yを求めるために使う変数)との関係が直線的な関係になるものとしてデータを扱います。

スクリーンショット 2016-11-22 10.59.56

下の図は2次関数に線形回帰を適用した例です。このように、直線で表せないような関係については線形回帰ではうまく表現できません。ただし、これは回帰の仕組みを拡張することで実現可能です。

スクリーンショット 2016-11-22 11.06.38

また、実際にはデータが完全に直線上に乗ることはほぼありません。これは、観測されている説明変数で目的変数を決めるために必要な情報が全て揃っていなかったり、誤差があったりするためです。 実際には下記の図のような、データ自体が直線には乗っていないけど説明変数にたいして最もそれっぽい直線が引かれます。

Rplot02

この図は上の完全に直線上にデータの乘っているものに対して、平均0, 標準偏差1のランダムなノイズを加えたものになります。 線形回帰ではこのようにデータの誤差は正規分布に従って発生する前提となります。

補足:正規分布とは

正規分布とは、様々な場面で見られるデータの分布を表したものです。例えば、人間の身長などもこの正規分布に従っています。 これは平均と分散(標準偏差)によって表され、平均値付近の値が観測されやすく、分散の値に従って平均値から外れた値が観測される確率が決まる分布となります。 下の図のような形になっており、真ん中が平均、横幅の広がり具合が分散の値で決定します。

Rplot

正規分布は平均μ, 標準偏差σに対して、

latex-image-1

で表されます。

今回の線形回帰で、誤差がこの正規分布に従うということは、あるxに対応するyは直線上に乘っている値が平均、そこからどれだけ外れた値が出るか(xに対してのyの上下の振れ幅)の確率がこの正規分布に従って決定するということです。

linear1

最小二乗法

では、このwはどのように計算するのでしょうか?これには最小二乗法という計算を行います。 これは、xやyにデータから与えられた具体的な数値とそれに対する直線上の値との差の2乗和が最も小さくなるwを求めるという手法です。

linear2

これの式を各w_iで微分して0になる値を計算することでwの値を求めます。特徴数がMとした時に、n番目の特徴のウエイトw_nは

latex-image-5

となり、これを連立方程式として解くことになります。 特徴数が1つ(w_1とw_0のみ。w_0はy=ax+bでの切片bに相当)の場合、それぞれは以下のような値になります。

latex-image-6 latex-image-7

となります。特徴数を増やしても同様に連立方程式を解くことで各w_nを求められますが、式が煩雑になるため割愛します。

イテレーションによるウエイトの更新

今回の場合、直接計算できましたが、より複雑な計算になる場合、解析的に求められない(式変形によって厳密にもとめられない)場合もあります。そういった場合に備えてこの問題を計算によって説く別な方法を紹介します。 この方法は、w_nで微分するまでは同じですが、その結果から連立方程式を解くのではなく、勾配を利用してw_nの値を更新します。

latex-image-8

この計算をwが収束する(値が変わらなくなる)まで繰り返していくことで、適切なwの値を見つけることができます。 この時のαを決めることになりますが、この値次第でwが発散したり、なかなか収束しないといったことが起こるので慎重に選ぶ必要があります。 このようなハイパーパラメータ(実施時に人手で決めるパラメータ)にどのような値を選ぶといいかは手法が提案された論文に記載されている場合も多く、それを参照して決めていくことになります。

linear3

Alteryxで利用する

Sample Workflows > Predictive Analytics > 8 Linear Regression を例にAlteryxで線形回帰を行っていきます。

スクリーンショット 2016-11-22 14.42.25

このWorkflowにはLinear Regression Tool以外にも様々なものが含まれています。 Linear Regressionが2つ、Association Analysis、Nested Testと順に解説していきます。

Linear Regression Tool

スクリーンショット 2016-11-22 15.29.04

これが線形回帰を行うものになります。使い方は難しいものではなく、目的変数と説明変数を選択するのみとなります。 「Select the target variable」が目的変数を選択、「Select the predictor variables」が説明変数となります。

スクリーンショット 2016-11-22 15.30.57

学習結果はその横にあるRの方につながったBrowseで確認できます。 PredictiveにあるToolは、Browseに接続すれば左側、Renderにつなげば別ファイルとしてレポーティングしてくれるようです。

結果の出力はBrowseでは2画面に分かれているようです。まず1つ目はこのようなものが出力されます。

スクリーンショット 2016-11-22 15.35.15

ここで注目しておくものは主にCoefficientsにあります。 まず最初のテーブルにある「Estimate」ですが、これが実際に予測されたwの値になります。 上部の方のLinear Regressionでは、R_Gを目的変数、SLGとOPSを説明変数にしています。それぞれの説明変数と(Intercept)として表示されている切片(解説の方ではw_0やbに相当する項目)の数値が出ています。 これはSLGが1上がるごとにP_Gが約3程度下がり、OPSが1上がるごとにP_Gも約16上がることを意味しています。切片は常に足されるので、どちらも0の時この値になります。

次にテーブルの一番右にある「Pr(>|t|)」という項目を見てみます。これは横に何個か「∗」が付いている項目もあります。 これがどういった値かというと、その説明変数が0だった時に比べて有意に差があるかを見ています。 その変数を使わなくてもいい時ほどこの数値が高くなります。横の*が多いほど数値も低くなるのでこれをみて直感的に説明変数として必要そうかいらなさそうかを判断できます。

最後にMultiple R-squared, Adjusted R-Squaredの値を見てみます。 この値は線形回帰の結果がどれだけうまく元のデータに当てはまっているかを表す決定係数という指標になります。 この値は0から1の範囲で、1に近いほどうまく当てはまっていることになります(詳細は割愛しますが相関係数を2乗した値になります)。 2種類の値が出ていますが、説明変数が1つの時はMultiple R-squared、複数ある時はAdjusted R-Squaredを見ておけば問題ありません。

2ページ目に関してはいくつかの図が出ています。 これは残差と呼ばれる個々の値と直線との関係を表した図です。個々の値についての傾向などを確認していく際などに利用しますが、今回は詳細については割愛します。

スクリーンショット 2016-11-22 16.01.00

Association Analysis

スクリーンショット 2016-11-22 16.09.12

こちら、最初に名前を見た時はアソシエーション分析に使うツールかと思ったのですが違います。 その先につながっているBrowseの結果を見ていただければわかるかと思います。

スクリーンショット 2016-11-22 16.12.07

相関係数を出すToolのようです。設定ではピアソンの積率相関係数(一般的に相関係数といってまず最初に思い浮かべるもの)以外にもいくつか選べることがわかります。 Target fieldやFieldsで対象となる項目を選択できます。

スクリーンショット 2016-11-22 16.13.56

また、このSampleのWorkflowでは行っていませんが、Iの方にBrowseやRenderを接続すると相関行列をヒートマップで出力できるようです。 このヒートマップはマウスオーバーでその位置の値をポップアップしてくれます。

スクリーンショット 2016-11-22 16.20.06

詳細について立ち入りませんが、説明変数が複数ある時に互いに相関があったりすると、多重共線性(英語名のmulticollinearityからマルチコと呼ばれることもよくある)という問題もあるため、このように事前に相関を確認しておくのはいいことでしょう。

Nested Test

スクリーンショット 2016-11-22 16.26.14

最後にあるのがこのToolです。

これは2つのモデルのうち、片方がもう一方の説明変数を包含しており、さらに別な説明変数も含まれている時に、説明変数が多い分モデル説明に効果があったのかを確認する手法のようです。 今回の場合、上の方にあるモデルは説明変数としてSLGとOPSを利用しており、下の方にあるものはOPSのみを利用しています。 この時、上の多くの変数を含んだモデルをfull model、それに対してその一部の変数のみを含むモデルをreduced modelと呼ぶようです。

このツール自体の設定は特にありませんが、入力対象となるデータ、full model, reduced modelの3つを入力として利用します。 出力のPr(>F)を見て有意に差があったかを確認できます。

スクリーンショット 2016-11-22 17.11.20

終わりに

AlteryxのLinear RegressionのSampleを動かしてみました。 このSampleはLinear Regression Toolを使っているだけでなく、Association Analysis ToolやNested Test Toolも使っていおり、なかなか面白いものであったように思います。 ただし、それらのToolが何をしているのかだけでなく、なぜそれらを線形回帰とともに使っているのかなどの知識は必要なSampleとも言えます。

今回の内容はMacroの詳細までは追っていませんが、Rを使ったプログラミングをするものなどが含まれており、それらプログラムの知識がなくても利用できる点はやはりAlteryxの利点の一つだと思います。

明日08日目はtruestarさんの『API経由で住所データをジオコーディングしてみる』の予定です。明日もお楽しみに!

参考