Pythonによるロジスティック回帰分析

例えば、スマホアプリを作ってリリースはしたものの、一体、どんなユーザが登録してくれるのか。
性別、年齢・・・など、一体どんな傾向を持った人がユーザ登録してくれる傾向にあるのか。
それが分かれば様々なマーケティングの手が打てます。

そんな課題を解決してくれるデータ分析手法が「ロジスティック回帰分析」です。
本記事ではロジスティック回帰分析の理論を簡単に紹介した後、Pythonで実際にロジスティック回帰分析を実行する所までやってみます。

簡単に理論紹介

ロジスティック回帰分析は(重)回帰分析を応用した手法のひとつです。

エクセルによる重回帰分析

回帰分析や重回帰分析で分かるのは基本的に「直線の関係」だけでした。
つまり、\(y=a_1 x_1+a_2 x_2+a_3 x_3+…+a_n x_n+b\)・・・という1次関数の関係です。
xを動かせば、yはどんな値も取ることができます。

しかし、今知りたいのは、「ユーザ登録する可能性は何%なのか」です。よって、xは幾つでもyは0〜1に収まっていて欲しいですね。

そこで、ロジスティック回帰分析では、上記の1次関数の式を下記のように少しいじります。
\[y=\frac{1}{1+e^{-(a_1 x_1+a_2 x_2+a_3 x_3+…+a_n x_n+b)}}\]

これがロジスティック回帰分析で用いる関数です。この式はxにどんな値が入ってもyは0〜1の値を取ります。
ロジスティック回帰分析は単に「この式を使って回帰分析する」というだけで、ほぼ通常の回帰分析と一緒です。

Pythonでロジスティック回帰分析を行う

では、今回は以下のようなデータ(user_data.csv)を用いてロジスティック回帰分析を行ってみます。

このように要因データには、「性別」のようなカテゴリー情報だけでなく、「滞在時間」のような数値情報も含めることができます。

このデータを用いて早速ロジスティック回帰分析を行っていくのですが、statmodelsパッケージを使えば通常の回帰分析とほぼ同様の書き方で実行できるので、一気に行きます。

上記を実行すると・・・

※表の見方等については重回帰分析のページにて。

ちなみに、直線関係の回帰分析以外には一般的にR2値は計算されません。
ロジスティック回帰分析の場合は、その代用である「Pseudo R-squ.」を見るか、p値から精度を判断していくことになります。

ここでp値を見てみると、ユーザ登録してくれるかどうかには、「学生かどうか」と「滞在時間の長さ」が重要なようです。
逆に、性別は殆ど関係なさそうです。ということで、性別は抜いてもう一回実行してみます。

X_name = ["性別", "学生","滞在時間(秒)"]
を、
X_name = ["学生","滞在時間(秒)"]
にするだけでOKです。
すると・・・。

すべてのp値が低くなり、良い推定になっていそうですね。
これより、を「ユーザ登録する可能性」を\(y\)、「学生かどうか」を\(x_1\)、「滞在時間(秒)」を\(x_2\)とすると、

\[y=\frac{1}{1+e^{-(1.8831 x_1+0.0403 x_2-4.1094)}}\]
と予測できることが分かりました。

未知データの推測

どのユーザ登録してくれる人の傾向は分かりましたが、お次は未知データの予測もやってみます。
つまり、「学生かどうか」「滞在時間」の2つの情報から、その人がユーザ登録してくれる確率を求めることになります。

予測に使うデータ(user_data_future.csv)は以下。

こちらも、ほぼ通常の重回帰分析と同様のやり方となりますが、先に述べたとおり回帰分析に使う式が違うのでちょっとだけ計算式も変わります。

最後にeの計算が入るので、mathパッケージを呼び出しています。
上記を実行すると・・。

予測したい10個のデータについて、上から順番に「ユーザ登録する確率」が計算されています。
するorしないをはっきりさせたい場合は、「0.5以上ならユーザ登録する、0.5未満ならしない」と考えて良いでしょう。

この結果をExcelに書き出したい場合は通常の回帰分析と同様なのでそちらをご覧ください。

まとめ

以上がPythonを利用したロジスティック回帰分析の方法でした。
といっても、ほぼ回帰分析と一緒で、ただ推測に用いる数式が異なるというだけの話です。
「求めたい結果が数量ならば回帰分析、確率ならばロジスティック回帰分析」と両者を使い分けてください。