Alteryxで重回帰分析の予測精度を高めるための勉強をしてみた

ケチな変数なら捨てちまえ
2019.08.27

どうも。DA事業本部@大阪オフィスの玉井です。

以前、こちらの書籍とAlteryxを使って重回帰分析を勉強しました。

今回は、こちらの書籍を用いて、重回帰分析の予測精度を高める方法について勉強したいと思います。

重回帰分析のおさらい

下記を確認しておきます。

やってみる

P.212の重回帰分析②〜③をやっていきます。

今回の重回帰分析の目的

データの背景

  • あるコーヒーショップで顧客にアンケートをとった
  • 200件

重回帰分析から知りたいこと

  • 何が客単価に効いているかを調査して、新標品開発のヒントとしたい

アンケート設問

サンプルデータ

ワークフロー作成

各処理については、画像中の各ツール毎の補足をごらんください。

ダミー変数にする

重回帰分析を行う前に、文字列データを数値データに変換します(ダミー変数にする)。Alteryxの場合、下記の方法を利用して、ダミー変数にすることができます。

今回は「性別」と「今後増えると嬉しいサイドメニュー」が文字列なので、これをダミー変数に置き換えました。

他の変数から値が予測できる変数をカットする

「今後増えると嬉しいサイドメニュー」の「その他」は、他の3つ(ご飯系、パン類、ケーキ)がわかれば予測できてしまいます。こういう他の変数を使って説明ができてしまう変数は、回帰分析の時は外さないといけません。というわけで「その他」については分析に含めないようにします。

重回帰分析の結果

データ前処理が完了したデータを重回帰分析にかけた結果が下記になります。

精度を高めるために

先程行った重回帰分析ですが、このモデルの精度をもっと向上させるためにはどうすればいいでしょうか。

AICを用いる

AIC(赤池情報量基準)

統計学者の赤池弘次氏が考案した指標です。モデルのAICが小さいほど、そのモデルの精度は良いと評価することができ、説明変数を選択する基準によく用いられます(モデルの当てはまりの悪さを表しているので小さいほうがいい)。この値の絶対的な基準はなく、複数のモデルのAICを比較して、相対的にこの値を見るのがスタンダードな使い方です。

詳細な計算式等は下記をごらんください。

AlteryxのStepwiseツールを使用する

今回もP値が一番大きい変数を1つずつ外しては重回帰…外しては重回帰…ということを繰り返していきます。当書籍内では、その度にExcelでAICの式を打ち込んで計算し、一番AICが小さい時の説明変数のラインナップを調べています。

例えば先程の結果の場合は「コーヒーの品揃え」が最もP値が高いので、これを除いて再度重回帰分析を行います(そしてこれを繰り返す)。

ですが、Alteryxはそのようなことをしなくても、Stepwiseツールを使えば上記のことが自動でできます。

Stepwiseツールは、回帰分析系のツール(Linear RegressionとかLogistic Regression)から出力されたモデルと、分析に使ったデータの2つをインプットとして接続して使います。

詳細は下記ドキュメントをどうぞ。

やってみた

今回だと下記のような感じです。

いくつか設定がありますが、今回はAICで変数を減らしていきたいので、下記のように設定します。

実行すると下記の結果となりました。変数が6つまで減っていますね。AICを用いて自動で変数が選ばれています(そしてこれ以上変数を減らしてもAICが良くならないということでもあります)。

マルチコに対処する

精度を高める上で、もう一つ気にしておく必要があるのがマルチコです。

マルチコ(多重共線性)

ざっくり言うと、説明変数間に相関の高い変数があると、分析が不安定になったり計算できなくなったりするというものです。今回は比較的簡単な方法で、相関が高い変数を調べます。

AlteryxのAssociation Analysisツールを使用する

Alteryxには相関関係を調べるツールがあります。このツールの使い方は既にエントリがありますので、下記をごらんください。

やってみた

今回だと下記のような感じです。

いくつか設定がありますが、今回は説明変数間の相関係数を調べたいので、目的変数以外を全部選択します。

実行すると下記の結果となりました。

一番高い相関があったのは「ご飯系ダミー」と「パン類ダミー」の-0.41でした。

相関係数にも絶対的な基準はありませんが、よく言われているのが「0.7以上で相関あり」「0.9以上で強い相関あり」というものです。ですので、このデータにおいてマルチコを心配する必要はなさそうですね。

こんな感じで、実際に分析を行う前にデータについて調査するのは重要ですね(機械学習でも!)。

おわりに

良い勉強になりました。