
ロジスティック回帰で「買う/買わない」を予測してみた【Databricksで始める機械学習】
学習対象の分析:0 or 1の世界を予測する
今回のテーマは、「商品を購入したかどうか(0 or 1)」を予測する分類モデルの構築です。
前回は線形回帰を使って「売上個数(連続値)」を予測しましたが、今回はYes/No、True/Falseといった二択の判断がターゲットです。
このような「ある出来事が起こるかどうか?」を予測するために使うのが、
**ロジスティック回帰(Logistic Regression)**です。
ユースケース:購買予測や離脱予測に
ロジスティック回帰の代表的なユースケースは以下の通りです:
ユースケース説明購買予測顧客が商品を購入するかどうか(CV率の予測)離脱予測サービスをやめるかどうか(チャーン)スパム判定メールがスパムかどうか疾患予測健康診断から病気の有無を判断
今回はその中でも「広告費や価格などの情報から、商品を購入したか?」を予測する購買モデルを作成します。
実行コードの流れと解説
① データ生成と仮ラベル作成
今回はシミュレーションデータを用いています。
df = pd.DataFrame({
"product_price": np.random.uniform(500, 5000, n),
"advertising_cost": np.random.uniform(10000, 50000, n)
})
# 購入したか?(1 or 0)を確率ベースで作成
df["purchased"] = ((df["advertising_cost"] / 10000) + ノイズ > 2).astype(int)
広告費が高いと購入確率が上がる、という前提で「1 or 0」のラベルを付けています。
② モデル構築と予測
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
ここでは、sklearnのLogisticRegression()を使ってモデル学習を実施。
この関数内部では、特徴量から重みづけで「買いそう度(z)」を計算し、
それをシグモイド関数で確率に変換しています:
P(y=1)=11+e−zP(y=1) = \frac{1}{1 + e^{-z}}P(y=1)=1+e−z1
しきい値(0.5)以上なら「購入した」と分類されます。
③ 結果の可視化と評価
実測 vs 予測の比較を上位30件で折れ線グラフにしました。
この可視化により、モデルが正しく当てられたかが直感的に分かります。
また、混同行列により分類ミスの傾向も確認しました。
Confusion Matrix:
[[36 39] ← 実際に買ってない人の正解/ミス
[5 170]] ← 実際に買った人の正解/ミス
→ 購入した人は正確に予測できている一方で、
「購入してないのに購入と予測」するミスが目立つ結果でした。
ロジスティック回帰の特徴
特徴内容出力確率(0〜1)、または分類(0 or 1)モデル構造線形回帰+シグモイド関数用途Yes/No判定、確率予測メリットシンプルで高速、確率解釈が可能デメリット線形で分けられない問題には不向き
まとめ:線形回帰との違いを体感
ロジスティック回帰は中身は線形、出力は分類という特性を持つモデルです。
今回の検証を通して、「確率を出力する→しきい値で分類する」という流れが明確になりました。
今後、分類ミスが増えた場合は「混同行列や確率分布のグラフ」などから原因を探ることで、次のモデル選択(例:決定木やランダムフォレスト)に進む判断材料になります。