ナレッジ 2026.05.24 最終更新 2026.09.01

受注確度スコアリングをPythonで実装する|ロジスティック回帰分析のコード手順

この記事を書いた人 武田 大 株式会社Sells up 代表取締役

ロジスティック回帰分析の必要性

相関分析では「どの行動が商談化と関係しているか」を1変数ずつ確認できます。ただし実際のリードは、複数の行動を同時に取っています。「料金ページも見ていて、資料もDLしていて、開封回数も多い」というリードの商談化確率を、変数を組み合わせて予測するには、相関分析では不十分です。

ロジスティック回帰分析は、複数の変数を同時に考慮して「このリードが商談化する確率は何%か」を数値で予測できます。その結果をスコアに変換することで、感覚ではなくデータに基づいたスコアリング設計が可能になります。

統計的スコアリングの考え方や成熟度モデルの全体像は、統計的スコアリングとは?で解説しています。本記事は、その中でもロジスティック回帰分析を実際にPythonで実装する手順に絞って、コード付きで解説します。

必要なツールとアドインの準備

ロジスティック回帰分析はExcelの標準機能では実行できません。以下のいずれかを準備してください。

アドイン・ライブラリのインストールが必要です

以下で紹介するExcel用アドインまたはPythonライブラリは、使用前にインストールが必要です。社内のIT管理ポリシーによってはインストールに申請が必要な場合があります。事前に確認してから作業を進めてください。

選択肢① Excel用アドイン「XLSTAT」

ExcelにロジスティックSS回帰分析機能を追加する商用アドインです。Excelの操作感のまま分析を実行できるため、Pythonに不慣れな方に向いています。

項目 内容
提供元 Addinsoft社(フランス)
インストール方法 https://www.xlstat.com からダウンロードしてインストール
料金 有料(年間サブスクリプション)。30日間無料トライアルあり
動作環境 Excel 2010以降・Windows/Mac対応
インストール後の場所 Excelのリボンに「XLSTAT」タブが追加される

選択肢② Python(scikit-learn)

Pythonの機械学習ライブラリ「scikit-learn」を使う方法です。無料で使え、より大規模なデータや高度なモデル評価にも対応できます。コードの記述が必要ですが、この記事のサンプルコードをそのまま使えば実行できます。

項目 内容
必要なインストール Python本体 + pandas + scikit-learn + statsmodels
インストールコマンド pip install pandas scikit-learn statsmodels
推奨環境 Google Colab(Googleアカウントがあれば無料・インストール不要)または Jupyter Notebook
Google Colabの開始方法 https://colab.research.google.com にアクセスして「ノートブックを新規作成」

以降のステップはPythonを前提として解説します。XLSTATを使う場合も分析の考え方は同じですが、操作手順はXLSTATのドキュメントを参照してください。

Step.1:分析に使うデータを準備する

ロジスティック回帰分析には、以下の2種類のデータが必要です。

データの種類 具体的な内容・取得元
目的変数(Yに当たるもの) 商談化したか否か(1/0)または受注したか否か(1/0)。SFA/CRMから取得する。まず「商談化」を目的変数にして始めるのが実務的
説明変数(Xに当たるもの) MAの行動データ(閲覧ページ数・開封回数・DL数など)+属性データ(業種・企業規模・役職など)。相関分析で事前に重要そうな変数を絞り込んでおくと精度が上がる

データはCSVファイルで書き出すと扱いやすいです。以下のような形式で準備します。

lead_id page_views email_opens dl_count is_manager company_size_large converted
L001 12 8 3 1 1 1
L002 3 2 0 0 0 0
L003 18 11 4 1 1 1
L004 5 3 1 0 1 0
L005 15 9 3 1 0 1

カテゴリ変数のダミー変換について

「業種」「役職」などの文字列データは、そのままでは分析に使えません。「マネージャー以上か否か(1/0)」「大企業か否か(1/0)」のように、2値のフラグに変換(ダミー変数化)してから使います。Pythonのpandas.get_dummies()関数で自動変換できます。

必要なサンプル数について

ロジスティック回帰分析では、説明変数1つに対して最低10〜20件の「イベント(商談化)」が必要とされています。説明変数を5つ使う場合、商談化したリードが50〜100件以上必要です。データが少ない場合は変数の数を絞って分析してください。

Step.2:Pythonでモデルを構築する

Google ColabまたはJupyter Notebookで以下のコードを実行します。コード中のコメント(#)に各行の説明を記載しています。

ライブラリのインポートとデータ読み込み

# 必要なライブラリをインポート

import pandas as pd

import numpy as np

from sklearn.linear_model import LogisticRegression

from sklearn.model_selection import train_test_split

from sklearn.metrics import classification_report, roc_auc_score

import statsmodels.api as sm

 

# CSVファイルを読み込む(ファイルパスは環境に合わせて変更)

df = pd.read_csv('lead_data.csv')

 

# データの先頭5行を確認

print(df.head())

print(f'サンプル数: {len(df)}')

print(f'商談化数: {df["converted"].sum()}')

説明変数と目的変数を設定する

# 説明変数(X)の列名を指定

feature_cols = ['page_views', 'email_opens', 'dl_count',

                'is_manager', 'company_size_large']

 

X = df[feature_cols]

y = df['converted'] # 目的変数(商談化フラグ)

 

# 学習データとテストデータに分割(8:2)

# テストデータでモデルの精度を検証するために分割する

X_train, X_test, y_train, y_test = train_test_split(

    X, y, test_size=0.2, random_state=42, stratify=y

)

print(f'学習データ: {len(X_train)}件 / テストデータ: {len(X_test)}件')

オッズ比を確認する(statsmodelsを使用)

スコアリングの重み設定に使うオッズ比は、statsmodelsライブラリを使うと確認できます。

# 定数項を追加(statsmodelsの仕様)

X_train_sm = sm.add_constant(X_train)

 

# ロジスティック回帰モデルを構築

model_sm = sm.Logit(y_train, X_train_sm).fit()

 

# 結果サマリを表示

print(model_sm.summary())

 

# オッズ比を計算(係数をeの指数で変換)

odds_ratio = np.exp(model_sm.params)

print('n=== オッズ比 ===')

print(odds_ratio)

オッズ比の読み方

出力例:
page_views=2.31
→ 閲覧ページ数が1増えると商談化確率が2.31倍になる
email_opens=1.85
→ 開封回数が1増えると商談化確率が1.85倍になる
dl_count=3.12
→ 資料DLが1件増えると商談化確率が3.12倍になる
is_manager=4.20
→ マネージャー以上だと商談化確率が4.20倍になる
company_size_large=2.80
→ 大企業だと商談化確率が2.80倍になる

オッズ比が1を超えるほど商談化確率を高める要因、1を下回るほど商談化確率を下げる要因です。p値(P>|z|)が0.05以上の変数は統計的に有意でない可能性があるため、除外を検討します。

Step.3:モデルの予測精度を評価する

構築したモデルが実際に使えるかどうかを、テストデータで評価します。

# scikit-learnでモデルを学習(予測確率の出力に使う)

model = LogisticRegression(random_state=42)

model.fit(X_train, y_train)

 

# テストデータで予測

y_pred = model.predict(X_test)

y_prob = model.predict_proba(X_test)[:, 1] # 商談化確率

 

# 精度評価レポート

print('=== 分類レポート ===')

print(classification_report(y_test, y_pred))

 

# AUC-ROCスコア(モデルの識別能力)

auc = roc_auc_score(y_test, y_prob)

print(f'nAUC-ROC: {auc:.3f}')

主要な評価指標の読み方

指標 意味 目安
Precision(適合率) 「商談化する」と予測したリードのうち、実際に商談化した割合 0.7以上あれば実用的
Recall(再現率) 実際に商談化したリードのうち、「商談化する」と正しく予測できた割合 0.6以上あれば実用的
AUC-ROC モデルが商談化リードと非商談化リードを正しく区別できているかを示す(0.5=ランダム、1.0=完璧) 0.75以上を目安にする

AUCが0.75を下回る場合

サンプル数が不足しているか、説明変数の選択が不適切な可能性があります。相関分析に戻って変数を見直すか、データ量を増やしてから再実行してください。0.6台でも、感覚ベースのスコアリングよりは根拠のある設計ができますが、モデルの限界を明示した上で使うことを推奨します。

Step.4:予測確率をMAのスコアに変換する

ロジスティック回帰モデルが出力するのは「0〜1の商談化確率」です。これをMAのスコア(例:0〜100点)に変換して実装します。

# 全リードの商談化確率を予測

df['conversion_prob'] = model.predict_proba(X)[:, 1]

 

# 確率を0〜100のスコアに変換

df['score'] = (df['conversion_prob'] * 100).round(0).astype(int)

 

# スコア帯ごとのリード数と実際の商談化率を確認

df['score_band'] = pd.cut(df['score'],

    bins=[0, 20, 40, 60, 80, 100],

    labels=['0-20', '21-40', '41-60', '61-80', '81-100'])

 

result = df.groupby('score_band')['converted'].agg(['count', 'mean'])

result.columns = ['リード数', '実際の商談化率']

result['実際の商談化率'] = (result['実際の商談化率'] * 100).round(1)

print(result)

出力イメージはこのようになります。

スコア帯 リード数 実際の商談化率
81〜100点 48件 78.4%
61〜80点 112件 52.1%
41〜60点 203件 28.3%
21〜40点 318件 9.7%
0〜20点 219件 2.3%

このテーブルをMAのスコアとMQL条件の設定に使います。たとえば「スコア61点以上のリードを営業に渡す(MQL)」と設定することで、商談化率52%以上のリードだけを渡せるという根拠が持てます。

オッズ比の結果をそのままMAのスコア設定に反映することも可能です。たとえば「資料DL数のオッズ比が3.12」であれば、資料DL1件あたり10〜15点を付与するなど、比率を維持した形でスコアに変換します。

Step.5:モデルを定期的に更新する

一度構築したモデルは、時間が経つにつれて精度が落ちます。市場環境や顧客の行動パターンが変わるためです。以下のサイクルで更新を継続することが重要です。

タイミング 実施内容
四半期ごと AUC-ROCを再計算し、0.05以上低下していれば再学習のタイミング。スコア帯ごとの実際の商談化率もあわせて確認する
半期〜年次 最新の商談・受注データを加えてモデルを再学習する。新しい行動変数(新しいコンテンツのDLなど)を追加することも検討する
組織変化のタイミング ターゲット業種や企業規模の方針変更があった場合は、その時点でモデルを見直す。古いデータが新しい方針と合わなくなる場合がある

「やっているのに成果が出ない」状態から抜け出すために

施策を続けているのに商談が増えない、リードの質が上がらない。こうした課題の多くは、戦略と施策のつながりが設計されていないことが原因です。Sells upは現状の分析と改善の優先順位整理から支援します。

相談してみる →

まとめ

ロジスティック回帰分析を使うことで、MAに蓄積された行動データと属性データから「商談化確率」を数値で予測し、スコアリングの重み付けに根拠を持たせることができます。

実装にはExcelの分析ツールアドイン(XLSTAT)またはPython(scikit-learn・statsmodels)が必要です。Pythonはこの記事のサンプルコードをそのまま使えば実行できます。初めて試す場合はGoogle Colabを使うと環境構築なしで始められます。

分析手法の位置づけを改めて整理すると、「相関分析で重要変数を探索する→ロジスティック回帰で確率モデルを構築する→カイ二乗検定でA/Bテストの結果を検証する」という3つが組み合わさることで、MAのデータ活用の精度が大きく上がります。

SHARE XfURL
株式会社Sells up 代表取締役
武田 大
株式会社AOKIにて接客業、株式会社リクルートライフスタイル(現:株式会社リクルート)にて法人営業を経験後、株式会社ライトアップでBtoBマーケティングを担当。デジタルマーケティングエージェンシーを経て2023年に株式会社Sells upを設立。戦略設計・KPI設計を起点に、リードジェネレーション、ナーチャリング、MA/SFA活用、営業連携までBtoBマーケティングを一気通貫で支援。KGI逆算のKPI設計やリードスコアリングの統計的設計、営業連携SLAの構築を強みとし、業界・規模を問わず80社以上に提供。Account Engagement SpecialistおよびTableau Desktop SpecialistのSalesforce認定資格を保有。
保有資格Salesforce Certified Marketing Cloud Account Engagement Specialist/Tableau Desktop Specialist
専門領域BtoBマーケティング/リードジェネレーション/リードナーチャリング/マーケティングオートメーション/HubSpot導入活用支援/Account Engagement導入活用支援/Marketo活用支援/インサイドセールス/統計解析によるスコアリング設計/商談化率向上/マーケティングROI改善