メインコンテンツへスキップ
見出し画像

ロジスティック回帰で「買う/買わない」を予測してみた【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判定、確率予測メリットシンプルで高速、確率解釈が可能デメリット線形で分けられない問題には不向き


    まとめ:線形回帰との違いを体感

    ロジスティック回帰は中身は線形、出力は分類という特性を持つモデルです。
    今回の検証を通して、「確率を出力する→しきい値で分類する」という流れが明確になりました。

    今後、分類ミスが増えた場合は「混同行列や確率分布のグラフ」などから原因を探ることで、次のモデル選択(例:決定木やランダムフォレスト)に進む判断材料になります。

     
     
    ライトノベル、音楽制作、動画制作をやってます♪ デジマ、システム業界で15年以上、外資系のSaaS企業や日系の大手IT企業にてソリューションアーキテクトやプロジェクトマネージャーとして、多くの企業のIT導入やデータ基盤構築を支援してます。