


★この記事で利用するサンプルコードは、こちらで確認できます。
モデル構築ライブラリ「scikit-learn」とは?
ロジスティック回帰の概要を第7話で紹介しました。ロジスティック回帰とは、簡単にいうと、データが与えられたときにAかBのどちらに属するのかを予測する方法です。
今回は、機械学習において最も有名なライブラリの一つである、scikit-learn(サイキット・ラーン)を用いて、ロジスティック回帰でモデルを構築します。
このライブラリはPythonから利用可能で、さまざまな機械学習手法を一貫したインタフェースで利用できます。つまり、一度ロジスティック回帰で予測モデルを構築する方法を学んだら、他の予測モデルも同じようにして作ることができるというメリットがあるのです。
▼ロジスティック回帰(LogisticRegression)以外にも、モデルを作るための他の機械学習手法が大量に用意されている

https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model




たとえばこちらのページでは、ロジスティック回帰を数式レベルから解説しています。このドキュメントの数式通りにライブラリが実装されているので、数式とコードの両面から手法を学べます。

https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression


モデル構築ライブラリ「scikit-learn」を使ってみよう

・scikit-learn をインストールする
pip install scikit-learn
※Pythonの環境構築の手順は割愛します。
・ロジスティック回帰を利用する場合、次のようにしてクラスを読み込む
from sklearn.linear_model import LogisticRegression
・予測モデル構築の準備をする
model = LogisticRegression()

さて、モデルを構築するための学習データは model.fix(X, y)で適用できます。
Xは特徴量と呼ばれるデータです。今回の例では、第6話で紹介したRFM分析の際に計算したデータを使います。
Recency(直近いつ)、Frequency(頻度)、Monetary(購入金額)を列に持ち、行方向にそれぞれの顧客が並んでいるデータです。
1番目の顧客のRFMは、 286, 0.002994, 77183.60
2番目の顧客のRFMは、 0, 0.017964, 4085.18
といったように、データが顧客数の数だけ並んでいるといった具合です。
yは翌月の購入実績の有無です。購入していた場合は True、購入していない場合はFalseとなる配列です。このデータについても、第6話で紹介したとおりです。
ロジスティック回帰で予測するには、次のように実行します。
・ロジスティック回帰で予測する
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
model.predict(X)
最後のmodel.predict(X)を実行すると、予測結果を得られます。
それぞれの顧客に対して、翌月に購入すると予測した場合はTrue、購入しないと予測した場合はFalse が返ってきます。モデルの予測精度を確認する方法の一つとして分割表があります。実績値と予測値の集計で、それぞれの項目に名前がついています。

新型コロナウイルスの PCR 検査に関連して、偽陽性(False Positive、略して FP)という言葉を聞いたことがあるかもしれません。感染していないにもかかわらず、検査結果が陽性と判定されてしまうケースです。機械学習においても偽陽性が発生します。翌月に購入しないにもかかわらず、購入すると予測してしまったケースです。予測通りに顧客が商品を購入した場合真陽性(True Positive、略して TP)、逆に予想通りに購入しなかった場合は真陰性(True Negative、略して TN)と言います。
Pandasで分割表を計算する場合はcrosstabを利用します。
pd.crosstab(
y,
model.predict(X),
rownames=["購入実績"],
colnames=["予測結果"],
)

全件に対して予測が的中した割合を正解率(Accuracy)と呼びます。これは、予測モデルの精度を比較する指標のひとつとして有名です。正解率は、(TN+TP)/(TN+FP+FN+TP) で計算します。今回のケースでは、正解率は(2515+287)/(2515+118+1054+287)≒0.705 となります。

次回は、予測モデルの精度を計算する方法であるクロスバリデーションを紹介します。お楽しみに!
第1話 機械学習の仕事内容って?実はコードを書くだけじゃない!
第2話 人工知能、機械学習、ディープラーニングの違いとは?
第3話 機械学習の活用事例!建設機械や回転寿司屋でも活用されている!?
第4話 機械学習したいのにデータがない!?
第5話 集計と可視化:pandasでデータの加工をしてみよう
第6話 続!集計と可視化:Plotlyでデータをグラフ化して傾向をとらえよう
第7話 ロジスティック回帰ってなあに?紹介編
・Twitterアカウント
・Amazon著者ページ
・Twitterアカウント
わかばちゃんが登場する書籍いろいろ